커널: 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 헤더에 캡슐화된 경우에도 마찬가지입니다. 이를 통해 상태 저장형 투명 방화벽 기능이 가능해집니다. 따라서 이 세 가지 도구의 모든 필터링, 로깅 및 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 체인이 호출됩니다.. 두 번째 방법은 패킷이 라우팅되는 경우입니다.
통화를 비활성화하는 대신iptablesby 의 코드는 br_netfilter
다음과 같습니다.
sysctl -w net.bridge.bridge-nf-call-iptables=0
적응해야 해iptables7장에 설명된 대로(네트워크 네임스페이스 포함) 어디에든 규칙을 적용하여 부작용을 방지합니다. 예를 들어 라우팅용이 아닌 브리징용 FORWARD 체인에 허용 규칙을 추가합니다. 단순히 문제를 해결하기 위해 이를 비활성화하면 Docker의 내부 컨테이너 격리부터 시작하여 이에 의존하는 애플리케이션이 중단됩니다.
최근까지존재하다 커널 5.3이 모듈은 네임스페이스를 인식하지 않으며 로드하면 모든 네트워크 네임스페이스에서 갑자기 활성화되어 예상치 못한 상황에서 모든 종류의 문제가 발생합니다. 그 시점부터 ip link set dev BRIDGE type bridge nf_call_iptables 1
네임스페이스 대신 브리지( )별로 활성화하는 것이 가능합니다.
도구(Docker...)와 커널(>=5.3)이 적합하면 선택한 네트워크 네임스페이스와 브리지에서 활성화하는 것만으로도 충분하지만 현재는 충분하지 않을 수 있습니다. 또한 참고하시기 바랍니다커널 5.3네이티브 브리지 상태 저장 방화벽도 상속되어 사용할 수 있습니다.nftables, 이는 이 모듈의 사용을 더 이상 사용하지 않는 단계입니다(브리징에서 VLAN 및 PPPoE에 대한 직접 캡슐화/캡슐화 해제 지원이 사용 가능해지면).
웹 필터
브리지에 대한 기본 연결 추적 지원을 추가합니다. 이 패치 세트 이전에는 사람들이 상태 기반 필터링을 수행할 수 있는 유일한 기회는 br_netfilter 에뮬레이션 레이어를 사용하는 것뿐이었습니다. 이는 더 이상 사용되지 않는 단계입니다.