![브리지는 레이어 2(이더넷) 대신 레이어 3(iP)에서 데이터를 전달합니다.](https://linux55.com/image/180178/%EB%B8%8C%EB%A6%AC%EC%A7%80%EB%8A%94%20%EB%A0%88%EC%9D%B4%EC%96%B4%202(%EC%9D%B4%EB%8D%94%EB%84%B7)%20%EB%8C%80%EC%8B%A0%20%EB%A0%88%EC%9D%B4%EC%96%B4%203(iP)%EC%97%90%EC%84%9C%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC%20%EC%A0%84%EB%8B%AC%ED%95%A9%EB%8B%88%EB%8B%A4..png)
브리지 및 IP netns와 함께 작동하는 일부 스크립트가 있습니다. 이전에는 패킷이 계층 2에서 전달되었지만 커널을 업그레이드한 후 커널이 계층 3에서 패킷을 전달하는 것 같습니다. 최신 커널에서는 iptables 테이블 필터와 체인 FORWARD를 트리거합니다. 전달 체인에 규칙을 추가하면 패킷이 일치하고, sysctl을 통해 ip_forward를 비활성화하면 IP 패킷이 전달되지 않습니다. 하지만 arp 패킷이 전달되는 것 같습니다.
그런 다음 가상 머신에 centos7을 구축하고 스크립트를 단순화했습니다. 커널 5.2.14의 레이어 2에서는 IP 패킷을 전달하지만 커널 5.3.13의 레이어 3에서는 IP 패킷을 전달하지 않는 것으로 나타났습니다. 커널 rpm은 다음에서 얻었습니다.193.49.22.109. 커널 5.2에서 몇 가지 변경 사항을 발견했습니다.커널의 새로운 기능, 그러나 전달 동작은 언급되지 않았습니다. 무슨 일이 일어났는지 알고 싶어요. 아니면 버그를 보고해야 할까요?
예시 스크립트:
#!/bin/bash
DEVICE=enp0s8
date
uname -a
ip net del ns &> /dev/null
ip net add ns
ip l a v1 type veth peer name v2
ip l s v2 netns ns
ip l s ${DEVICE} netns ns
ip a a 192.168.56.22/24 dev v1
ip l s v1 up
ip net exec ns ip l a name br type bridge
ip net exec ns ip l s dev ${DEVICE} master br
ip net exec ns ip l s dev v2 master br
ip net exec ns ip l s dev br up
ip net exec ns ip l s dev ${DEVICE} up
ip net exec ns ip l s dev v2 up
ip net exec ns ip a a 192.168.56.23/24 dev br
ip net exec ns iptables -A FORWARD -j DROP
echo 1 | ip net exec ns tee /proc/sys/net/ipv4/ip_forward > /dev/null
ip nei flush dev v1
ping 192.168.56.1 -c1 &> /dev/null
ping 192.168.56.1 -i1 -c5
ip net exec ns iptables -L FORWARD -nv