解決策:

解決策:

私のサーバーには、VM間ファイアウォールとルーティングのための単純なL2 Linuxブリッジを介してOPNsense VMに接続された複数のVMがあります。

仮想マシンはOPNsenseサーバーの単一のインターフェイスを介して接続されます。仮想マシンは、この単純なL2ブリッジを介して仮想マシンに接続されます。macvtapenp3s0
vm01OPNsense

vm01仮想マシンのブリッジ構成hypervisor:

auto br_vm01
iface br_vm01 inet manual
    bridge_ports none

vm01ブリッジに接続されたインターフェイスbr_vm01vnet2
ブリッジに接続されたインターフェイス:OPNsensebr_vm01vnet6

hypervisorIPホスティングvm0仮想マシンOPNsense10.1.0.8

私は次を試してみます。たとえば、単純なnetcatを実行してvm01仮想マシンから接続を試みますhypervisor

root@vm01:~# nc -vzw 2 10.1.0.8 8080
10.1.0.8: inverse host lookup failed: Unknown host
(UNKNOWN) [10.1.0.8] 8080 (http-alt) : Connection timed out

vm01OPNsenseハイパーバイザーと通信するには、仮想マシンに必要なファイアウォールルールが必要です。また、他のすべてのタイプの接続も正常に機能します。

この問題をより詳細に診断するために、vnet2インターフェイスvnet6でいくつかのtcpdumpを実行しました。
IPパケットは通常そのインターフェイスに入ってきますが、再びそのインターフェイスvnet2には送信されませんvnet6。したがって、Linuxブリッジは何らかの方法でこのパケットをフィルタリングします。また、仮想マシンでパケットキャプチャを実行しましたが、OPNsenseパケットがそこに到達できませんでした。

これはハイパーバイザーに接続しようとした場合にのみ発生し、他の項目に接続しても発生しません。

私の質問:Linuxにブリッジを愚かなレイヤ2スイッチとして扱うように指示することは可能ですか?OPNsense仮想マシンが提供するフィルタリングなので、いかなる種類のフィルタリングも必要ありません。

私はそれを試してみました:
/sys/class/net/br_vm01/bridge/nf_call_iptables0に設定しました。
sysctl net.bridge.bridge-nf-call-iptablesまた、ゼロを表示します。
echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables
ブリッジでVLAN認識を有効にしても役に立ちません。
ebtables ルールはありません。

そしてhypervisorカーネルでvm01実行Debian 115.10.0-11

ベストアンサー1

解決策:

答えを見つけました。問題はパラメータをテストする方法です/proc/sys/net/bridge/bridge-nf-call-iptables

テストをしてみると、変更しただけでなく/proc/sys/net/bridge/bridge-nf-call-iptables他の変数もたくさん変更しました。残念ながら、これは機能しません。結局、0このように設定すると問題が解決できることがわかりました。

理由

しかし、これがなぜ問題を引き起こすのか、まだ説明していません。
問題は、ブリッジと混同されているように見えるdockerのiptablesルールが原因で発生します。この問題は、ドッカーが開いたハイパーバイザーのオープンポートに接続しようとした場合にのみ発生します。したがって、これは開かれていないものでは発生しません。nc -l -p 8081

おすすめ記事