現在の問題

現在の問題

私はsystemd-nspawnコンテナ(Debian 9、ホストもDebian 9)を実行していますが、VirtualEthernet=yesいくつかのポート(Port=tcp:443:443たとえば、Webサーバーはコンテナで実行されていて外部からアクセスできる必要があります)。

ファイアウォールを有効にすると、ufw最初はうまく動作するように見えますが、数時間後に外部の世界がコンテナ(それぞれWebサーバー)に接続できない可能性があります。これにより、ufw disable数秒後にすべてが正常に戻ります。つまり、すべてが正常ですが、ファイアウォールはありません。

ベストアンサー1

現在の問題

systemd-nspawnポート転送機能を備えたWebサーバーを実行するコンテナがあります。しばらくしてから無効になるまで、ネットワーク接続はできなくなりますufw。いくつかの調査を行い、そのうちの1つが問題解決に役立つことを願っています。

考えられる解決策

コメントに残していただいたフィードバックをもとに、さらに調査を行いました。ブリッジインターフェイスは標準ではないようですが、systemd-nspawnコンテナの構築について私が読んだすべてのガイドにはブリッジ仮想インターフェイス設定が含まれています。

#1 Systemdのネットワークが正しいことを確認する

フォローするこのガイド、私は彼らがネットワークに特別な注意を払っていると述べたことを発見しました。systemd-nspawnコンテナはそれに依存するため、systemdホストとコンテナが正しいネットワークを使用していることを確認する必要があります。

ホストからルートとして次のコマンドを実行します。

systemctl disable network
systemctl disable networking
systemctl disable NetworkManager
systemctl enable systemd-networkd

systemd-networkd次に、サーバーがネットワーキングに使用されていることを確認します。

networkctl status lo

● 1: lo
   Link File: /lib/systemd/network/99-default.link
Network File: n/a
        Type: loopback
       State: carrier (unmanaged)
     Address: 127.0.0.1
              ::1

/lib/systemd/network/99-default.linkを使用していることを確認するには、ネットワークがネットワークに接続されている必要がありますsystemd-networkd

ここからネットワークインターフェイスを作成します。デバイス名を正しく使用してください。

cat > /etc/systemd/network/[nameOfNetworkDevice].network <<EOF
[Match]
Name=[nameOfNetworkDevice]

[Network]
Bridge=br0
IPForward=1
EOF

以前に使用したインターフェイスと一致するようにブリッジインターフェイスを作成します。br0

cat > /etc/systemd/network/br0.netdev <<EOF
[NetDev]
Name=br0
Kind=bridge
EOF

これで、ブリッジインターフェイス用のネットワークを作成します。

cat > /etc/systemd/network/br0.network <<EOF
[Match]
Name=br0

[Network]
DHCP=ipv4
EOF

これでネットワークを再起動し、sysV init 設定を移動して競合を避けます。

systemctl restart systemd-networkd
mv /etc/network/interfaces /etc/network/interfaces.bak

systemd-resolvedサービスを開始します。

systemctl enable systemd-resolved
systemctl start systemd-resolved
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

次に、ネットワーク接続および確認サービスをテストします。最も簡単な方法はを使用することですping stackexchange.com。今、すべてが正常に戻ります。

最後に、起動時にコンテナが起動することを確認したいと思います。

systemctl enable machines.target

今後観光ガイドコンテナの作成方法の説明は引き続き取り上げません。

これを行う必要はありませんが、ホストシステムでネットワーク構成が設定されている方法間の競合によって問題が発生する可能性があることに注意してください。これらの手順により、ホストはネットワークに接続し、競合なしでコンテナにブリッジすることができます。

#2コンテナが爆発しています

いくつかの問題を発見しました(12サム[) ネットワーク接続が断続的に切断されるコンテナに関して GitHub から提起された。

したがって、次の休憩時間があなたに適用されることを確認してください。

1

Debian で壊れたもの

ドメイン名システム

/etc/init.d/dnsmasqスクリプトは常にdnsmasqコマンドラインに独自のオプションを挿入し、設定を中断します。

systemdはIPTables統合を無効にします(バグ#787480)

これは、ポート転送オプションの下にあるこのクールなオプションは機能IPMasquerade=yesしないため、NATの有効化やポート転送の実行などの以前のiptablesルールを使用する必要があることを意味します。systemd-networkdort=tcp:80:80iptables -t nat -A POSTROUTING -s 172.23.0.0/24 -j MASQUERADEiptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -m addrtype --dst-type LOCAL -j DNAT --to-destination 172.23.0.2:80

最新バージョンの Debian を完全に最新の状態に保っている場合は、このような状況を避け、ソリューションがオーバーライドされていることを確認dnsする必要があります。

2

iptablesがフラッシュされていないことを確認してください。このユーザーが使用する戦略apfは、iptablesを消去して新しいiptablesを作成することです。を使用しているが、ufwまだ知っておく価値がある可能性です。ネットワークが壊れた場合、コンテナにiptablesルールがなくなりましたか?

サム

これは再びドッカーに関連していますが、systemd-nspawnおそらく同じ制限があるかもしれません。マンページを確認してくださいポート転送の開始方法に問題がないか確認してください。しばらくすると、接続が切断されるのは、ファイアウォールルールやポート転送などに何らかの速度制限や接続制限があるためです。

#3ホスティングする場所はノートパソコンですか、それともVPSですか?

~によるとこのスタックオーバーフロー投稿ユーザーMaduraiveeranは、何らかの理由でiptablesの混乱を引き起こす自動化されたプロセスを実行するVPSを使用しています。ホスティングがVPSにある場合でも、同じ問題が発生する可能性があります。

ラップトップを使用している場合は、別のdhcpネットワークデバイスが設定されている方法に応じて、Wi-Fiとイーサネットを切り替えるとき、またはあるワイヤレスアクセスポイントから別のワイヤレスアクセスポイントに切り替えると、接続が切断されたり、デバイスの名前が変わったりする可能性があります。ネットワークに問題を引き起こす一種の省エネ計画があるかもしれません。

その他の注意事項

私は含んでいる最初のブログリンクnspawn最初からコンテナを作成する方法を示すために、コンテナに関する情報が見つかりました。

しかし、ホストポート転送用のiptablesスクリプトも見つかりました。同じウェブサイトから。 #1が役に立たない場合はそうです。

結論として

結局私はコンテナの専門家ではありませんが、正しい方向を教えてくれたことを願っています。コンテナがネットワーク構成を取得する方法に関するトラブルシューティングから始めてください。次に、ufwこの設定(ポート転送、コンテナ仮想インターフェイスなど)をサポートしていることを確認してください。次に、コンテナが正しく構築されていることを確認します(ポート転送なしでネットワークを設定できますか?たとえば、他のサービスも機能しますかssh?)。必要な機能セットと機能がすでに含まれている事前に構築されたWebサーバーソリューションを使用する方が良いかもしれません。LXCまたは またはdockerrancher試すためにドアを叩かないでくださいsandstormsystemd-nspawn今日までは、コンテナについてあまり聞いたことがありませんでした。サポートを受けるには、より多くのサポートまたは少なくとも採用されたソリューションを使用する必要があります。

私は以下を含みます詳細については、nspawnのマンページリンクを参照してください。

この回答について質問や質問がある場合は、コメントを残してください。コマンドを試す前に、私が提供する各リンクを注意深く読んでください。誤解を解決し、投稿を改善するためにフィードバックを送信していただきありがとうございます。必要に応じて回答を更新できます。

頑張ってください!

おすすめ記事