브리지는 레이어 2(이더넷) 대신 레이어 3(iP)에서 데이터를 전달합니다.

브리지는 레이어 2(이더넷) 대신 레이어 3(iP)에서 데이터를 전달합니다.

브리지 및 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

관련 정보