カーネル: 5.5.8-arch1-1
物理インターフェイスに接続されているブリッジを使用して仮想ネットワークを操作しようとしています。これは一般的な設定であり、何も試していません。奇妙な。
- 足:
br0
- 物理インターフェイス:
enp6s0f0
問題は、Linuxが物理インターフェイスの外部にIPトラフィックを転送しないことです。転送ARPトラフィックARP検証は機能しますが、IPトラフィックがないため双方向です。enp6s0f0から発行されました。
私が試したこと:
enp6s0f1
ブリッジに追加してenp7s0f0
仮想マシンに提供し、ケーブルを使用して接続しますenp7s0f0
。enp6s0f1
- 同じ結果(転送されたIPトラフィックではなく転送されたARPトラフィック)
- Dockerを停止し、すべてのテーブルを更新します。
- お金を維持してください
- rp_filterを無効にする
- お金を維持してください
- オンボードNICの使用
- 変更はありません(実際は初期設定なので、オンボードネットワークカードが問題を引き起こしていることを確認するためにこのクワッドポートカードを挿入しました)
- 別のマシンで仮想マシンをping
- エコリクエストが来るのがわかります存在する表示できますが、
br0
VMポート(vnetポートまたはenp6s0f1
)には転送されません。
- エコリクエストが来るのがわかります存在する表示できますが、
- ブリッジでSTPを有効にする(最初は無効)
- お金を維持してください
○ → ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp6s0f0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP group default qlen 1000
link/ether 00:10:18:85:1c:c0 brd ff:ff:ff:ff:ff:ff
inet6 fe80::210:18ff:fe85:1cc0/64 scope link
valid_lft forever preferred_lft forever
3: enp6s0f1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:10:18:85:1c:c2 brd ff:ff:ff:ff:ff:ff
4: enp7s0f0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:10:18:85:1c:c4 brd ff:ff:ff:ff:ff:ff
5: enp7s0f1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:10:18:85:1c:c6 brd ff:ff:ff:ff:ff:ff
6: enp9s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether b4:2e:99:a6:22:f9 brd ff:ff:ff:ff:ff:ff
7: wlp8s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 08:71:90:4e:e9:77 brd ff:ff:ff:ff:ff:ff
8: br-183e1a17d7f6: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:ba:03:e1:9d brd ff:ff:ff:ff:ff:ff
inet 172.18.0.1/16 brd 172.18.255.255 scope global br-183e1a17d7f6
valid_lft forever preferred_lft forever
9: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:02:61:00:66 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
10: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:10:18:85:1c:c0 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.205/24 brd 192.168.1.255 scope global dynamic noprefixroute br0
valid_lft 9730sec preferred_lft 7930sec
inet6 fe80::210:18ff:fe85:1cc0/64 scope link
valid_lft forever preferred_lft forever
11: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UNKNOWN group default qlen 1000
link/ether fe:54:00:be:eb:3e brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:febe:eb3e/64 scope link
valid_lft forever preferred_lft forever
○ → brctl showstp br0
br0
bridge id 8000.001018851cc0
designated root 1000.44e4d9d88a00
root port 1 path cost 4
max age 19.99 bridge max age 19.99
hello time 1.99 bridge hello time 1.99
forward delay 14.99 bridge forward delay 14.99
ageing time 299.99
hello timer 0.00 tcn timer 0.00
topology change timer 0.00 gc timer 25.78
flags
enp6s0f0 (1)
port id 8001 state forwarding
designated root 1000.44e4d9d88a00 path cost 4
designated bridge 1000.44e4d9d88a00 message age timer 19.21
designated port 800d forward delay timer 0.00
designated cost 0 hold timer 0.00
flags
vnet0 (2)
port id 8002 state forwarding
designated root 1000.44e4d9d88a00 path cost 100
designated bridge 8000.001018851cc0 message age timer 0.00
designated port 8002 forward delay timer 0.00
designated cost 4 hold timer 0.22
flags
○ → bridge -d link show
2: enp6s0f0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 4
hairpin off guard off root_block off fastleave off learning on flood on mcast_flood on mcast_to_unicast off neigh_suppress off vlan_tunnel off isolated off enp6s0f0
8: br-183e1a17d7f6: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 master br-183e1a17d7f6 br-183e1a17d7f6
9: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 master docker0 docker0
10: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 br0
11: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 100
hairpin off guard off root_block off fastleave off learning on flood on mcast_flood on mcast_to_unicast off neigh_suppress off vlan_tunnel off isolated off vnet0
○ → sysctl net.bridge.bridge-nf-call-iptables
net.bridge.bridge-nf-call-iptables = 1
○ → sysctl net.ipv4.conf.br0.forwarding
net.ipv4.conf.br0.forwarding = 1
答え1
ルーストアバウトジムこれbr_netfilter
モジュール(入手するためにシステム制御プロパティnet.bridge.bridge-nf-call-iptables=1
)iptablesを使用するとき。これは作るブリッジフレーム(イーサネット、レイヤ2)を許可iptablesフィルタリング(IP、レイヤ3):
ブリッジネットワークフィルタとは何ですか?
Linuxカーネル3.18-rc1以降、br_netfilterをmodprobeしてbridge-netfilterを有効にする必要があります。
bridge-netfilter コードは次の機能を有効にします。
{Ip,Ip6,Arp} テーブルは、ブリッジされた IPv4/IPv6/ARP パケットをフィルタリングできます。、802.1Q VLANまたはPPPoEヘッダーにカプセル化されている場合も同様です。これにより、ステートフルな透明ファイアウォール機能が可能になります。したがって、これら3つのツールのすべてのフィルタリング、ロギング、およびNAT機能はブリッジされたフレームで利用可能です。したがって、ebtablesと組み合わせたbridge-nfコードは、Linuxを非常に強力な透明なファイアウォールにします。これにより、透明な仮面舞踏会を作成できます(つまり、すべてのローカルホストは自分がインターネットに直接接続していると思います)。 {ip、ip6、arp}テーブルにブリッジされたトラフィックを表示させることは、適切な手順エントリを使用して無効または有効にできます。、嘘
/proc/sys/net/bridge/
:
bridge-nf-call-arptables
bridge-nf-call-iptables
bridge-nf-call-ip6tables
このモジュールによって引き起こされる副作用を説明する文書があります。これらの副作用は故意に透明なファイアウォールを接続するために使用するとき。さらに、iptables physdev
(br_netfilter
それ自体がロードされたときにロードされます。)これがないと、マッチングは正しく機能しません(もはやマッチングされません)。また、特に次のような場合にその影響を防ぐ方法についても説明します。第7章:
br-nfコードにより、フレーム/パケットは3つの指定されたiptablesチェーンを介して双方向に渡されることがあります。最初の方法はフレームがブリッジされる場合であるため、ブリッジングコードによってiptablesチェーンが呼び出されます。。第2の方法は、パケットがルーティングされる場合である。
通話を無効にする代わりにiptablesby のコードはbr_netfilter
次のとおりです。
sysctl -w net.bridge.bridge-nf-call-iptables=0
適応しなければならないiptables第7章で説明されているように(ネットワークネームスペースを含む)、どこにでもルールを適用して副作用を防ぎます。たとえば、ルーティング用ではなくブリッジング用のFORWARDチェーンに許可ルールを追加します。単に問題を解決するためにこれを無効にすると、Dockerの内部コンテナの分離から始まり、それに依存するアプリケーションがクラッシュします。
最近まで存在する カーネル 5.3このモジュールはネームスペースを認識せず、ロードするとすべてのネットワークネームスペースで突然アクティブになり、予期しない状況であらゆる種類の問題が発生します。その時点から、ip link set dev BRIDGE type bridge nf_call_iptables 1
ネームスペースの代わりにブリッジ()ごとにアクティブにすることが可能です。
ツール(Docker...)とカーネル(> = 5.3)が適している場合は、選択したネットワーク名前空間とブリッジで有効にするだけで十分ですが、現在は不十分です。また参考にしてくださいカーネル 5.3ネイティブブリッジステートフルファイアウォールも継承して使用できます。nftablesこれは、このモジュールの使用を廃止するステップです(ブリッジングでVLANおよびPPPoEの直接カプセル化/カプセル化解除サポートが有効になったら)。
Webフィルタ
ブリッジの基本的な接続追跡サポートを追加します。このパッチセットの前に、人々がステータスベースのフィルタリングを実行する唯一の機会は、br_netfilterエミュレーションレイヤを使用することでした。これは廃止予定のステップです。