私は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コンテナが爆発しています
いくつかの問題を発見しました(1、2、サム[) ネットワーク接続が断続的に切断されるコンテナに関して GitHub から提起された。
したがって、次の休憩時間があなたに適用されることを確認してください。
Debian で壊れたもの
ドメイン名システム
/etc/init.d/dnsmasq
スクリプトは常にdnsmasqコマンドラインに独自のオプションを挿入し、設定を中断します。systemdはIPTables統合を無効にします(バグ#787480)
これは、ポート転送オプションの下にあるこのクールなオプションは機能
IPMasquerade=yes
しないため、NATの有効化やポート転送の実行などの以前のiptablesルールを使用する必要があることを意味します。systemd-networkd
ort=tcp:80:80
iptables -t nat -A POSTROUTING -s 172.23.0.0/24 -j MASQUERADE
iptables -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
する必要があります。
iptablesがフラッシュされていないことを確認してください。このユーザーが使用する戦略apf
は、iptablesを消去して新しいiptablesを作成することです。を使用しているが、ufw
まだ知っておく価値がある可能性です。ネットワークが壊れた場合、コンテナにiptablesルールがなくなりましたか?
これは再びドッカーに関連していますが、systemd-nspawn
おそらく同じ制限があるかもしれません。マンページを確認してくださいポート転送の開始方法に問題がないか確認してください。しばらくすると、接続が切断されるのは、ファイアウォールルールやポート転送などに何らかの速度制限や接続制限があるためです。
#3ホスティングする場所はノートパソコンですか、それともVPSですか?
~によるとこのスタックオーバーフロー投稿ユーザーMaduraiveeranは、何らかの理由でiptablesの混乱を引き起こす自動化されたプロセスを実行するVPSを使用しています。ホスティングがVPSにある場合でも、同じ問題が発生する可能性があります。
ラップトップを使用している場合は、別のdhcp
ネットワークデバイスが設定されている方法に応じて、Wi-Fiとイーサネットを切り替えるとき、またはあるワイヤレスアクセスポイントから別のワイヤレスアクセスポイントに切り替えると、接続が切断されたり、デバイスの名前が変わったりする可能性があります。ネットワークに問題を引き起こす一種の省エネ計画があるかもしれません。
その他の注意事項
私は含んでいる最初のブログリンクnspawn
最初からコンテナを作成する方法を示すために、コンテナに関する情報が見つかりました。
しかし、ホストポート転送用のiptablesスクリプトも見つかりました。同じウェブサイトから。 #1が役に立たない場合はそうです。
結論として
結局私はコンテナの専門家ではありませんが、正しい方向を教えてくれたことを願っています。コンテナがネットワーク構成を取得する方法に関するトラブルシューティングから始めてください。次に、ufw
この設定(ポート転送、コンテナ仮想インターフェイスなど)をサポートしていることを確認してください。次に、コンテナが正しく構築されていることを確認します(ポート転送なしでネットワークを設定できますか?たとえば、他のサービスも機能しますかssh
?)。必要な機能セットと機能がすでに含まれている事前に構築されたWebサーバーソリューションを使用する方が良いかもしれません。LXC
または またはdocker
をrancher
試すためにドアを叩かないでくださいsandstorm
。systemd-nspawn
今日までは、コンテナについてあまり聞いたことがありませんでした。サポートを受けるには、より多くのサポートまたは少なくとも採用されたソリューションを使用する必要があります。
私は以下を含みます詳細については、nspawnのマンページリンクを参照してください。
この回答について質問や質問がある場合は、コメントを残してください。コマンドを試す前に、私が提供する各リンクを注意深く読んでください。誤解を解決し、投稿を改善するためにフィードバックを送信していただきありがとうございます。必要に応じて回答を更新できます。
頑張ってください!