두 개의 인터페이스, centos 7을 사용하는 가상 브리지의 패킷 흐름

두 개의 인터페이스, centos 7을 사용하는 가상 브리지의 패킷 흐름

centos7에서 두 개의 인터페이스가 있는 브리지를 통해 흐르는 패킷을 찾거나 캡처할 수 없기 때문에 iptables를 사용하여 브리지 방화벽을 만드는 데 어려움을 겪고 있습니다. 인터페이스나 브리지에 IP 주소가 구성되어 있지 않습니다. 이 흐름을 찾을 수 없는 것 같습니다. PREROUTING INPUT FORWARD OUTPUT POSTROUTING 체인을 확인했습니다. ifconfig 카운터는 트래픽이 브리지 인터페이스를 통해 흐르고 있음을 보여주지만 브리지(br0) 자체는 아닙니다.

내 브리지 구성

# cat ifcfg-br0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=none
IPADDR=0.0.0.0
PREFIX=24
IPV6_AUTOCONF=no
IPV6INIT=no
ONBOOT=yes
DELAY=0`

아웃바운드 인터페이스

# cat ifcfg-p1p
DEVICE=p1p1
TYPE=Ethernet
HWADDR=XX:XX:XX:XX:XX:XX
ONBOOT=yes
BRIDGE=br0
BOOTPROTO=none
IPV6INIT=no
IPV6_AUTOCONF=no
IPADDR=0.0.0.0
PREFIX=24`

인바운드 인터페이스

# cat ifcfg-p1p2
DEVICE=p1p2
TYPE=Ethernet
HWADDR=XX:XX:XX:XX:XX:XX
BOOTPROTO=none
ONBOOT=yes
BRIDGE=br0
IPV6INIT=no
IPV6_AUTOCONF=no
IPADDR=0.0.0.0
PREFIX=24`

전달이 비활성화되고(NAT 없음), 방화벽이 비활성화되고, sysctl.conf에서 ipv6 autoconf가 비활성화됩니다. 트래픽은 p1p2 내부 머신에서 p1p1을 통해 외부로 완벽하게 흐릅니다.

막혔는데 도움을 주시면 감사하겠습니다.

추신: 이 설정은 debian 5(2.6 커널)에서 완벽하게 작동하지만, debian 6, 7, 8로 업그레이드한 후 인터페이스 드라이버가 무작위로 커널 패닉을 발생시킵니다. Intel 카드와 Broadcom 카드를 사용해 보았지만 결과는 동일했습니다. 아마도 brctl의 버그일까요? 하지만 어쨌든 centos7은 적어도 이틀 동안 안정적으로 실행되었습니다.

답변1

네트워크 계층을 혼동하고 있습니다. 그런데 iptables는 브리지에 의해 수행되는 전달 유형인 링크 계층에서 전달되는 이더넷 프레임이 아닌 네트워크 계층에서 전달되는 IP 패킷에 대해 작동합니다.

브리지는 어떤 MAC 주소가 어떤 포트에 표시되는지 목록을 유지하여 작동합니다. 따라서 IP 라우팅을 수행하지 않고도 트래픽이 p1p에서 p1p2로 흐를 수 있습니다.

br0 인터페이스는 브리지의 가짜 인터페이스입니다. 다른 인터페이스처럼 처리됩니다. 따라서 MAC에서 p1을 거쳐 MAC에서 p1p2까지의 비브로드캐스트 트래픽은 인터페이스 br0을 통과하지 않습니다(분명히 브리지 br0에 있고 Linux는 의사 인터페이스와 브리지에 동일한 이름을 사용하지만 이는 유감스러운 일입니다). ) ).

이 Shorewall 사이트의 시작 부분에 당신이 하려는 일에 대한 좋은 요약이 있습니다.페이지. 기본적으로 브리지를 구성하고 작동하게 만듭니다. 그런 다음 IP 전달 sysctl을 설정하십시오(그렇지 않으면 iptables가 전혀 작동하지 않습니다). iptables 규칙에서는 규칙을 표현하기 위해 physdev iptables 모듈을 사용해야 합니다(물론 이 뒤에 다른 모듈을 나열할 수 있습니다).

답변2

이제 이해가된다. 전달을 켜도 일부 필수 커널 변수가 활성화되지 않으므로 수동으로 활성화해야 합니다. 이것들은 모두,

net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-arptables=0

필요하지 않기 때문에 arptable을 껐습니다.

관련 정보