브리지 모드에서 두 형제 macvlan 사이에 핑을 보낼 수 없는 이유는 무엇입니까?

브리지 모드에서 두 형제 macvlan 사이에 핑을 보낼 수 없는 이유는 무엇입니까?

내 홈 LAN에 연결된 Ubuntu 20.04 시스템에서 이더넷 장치 아래에 macvlan을 만들었습니다.

$ sudo ip link add macvlan1 link enp37s0 type macvlan mode bridge
$ sudo dhclient macvlan1
$ sudo ip link add macvlan2 link enp37s0 type macvlan mode bridge
$ sudo dhclient macvlan2

우연히 그들은 DHCP로부터 다음 주소를 얻었습니다.

  • macvlan1:192.168.0.40
  • macvlan2:192.168.0.41

각 라우터에서 라우터를 ping할 수 있습니다.

$ ping 192.168.0.1 -I macvlan1
PING 192.168.0.1 (192.168.0.1) from 192.168.0.40 macvlan1: 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.713 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=1.25 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=1.20 ms
^C
--- 192.168.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2034ms
rtt min/avg/max/mdev = 0.713/1.052/1.245/0.240 ms

$ ping 192.168.0.1 -I macvlan2
PING 192.168.0.1 (192.168.0.1) from 192.168.0.41 macvlan2: 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=1.15 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=1.13 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=1.07 ms
64 bytes from 192.168.0.1: icmp_seq=4 ttl=64 time=0.548 ms
64 bytes from 192.168.0.1: icmp_seq=5 ttl=64 time=0.619 ms
^C
--- 192.168.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4030ms
rtt min/avg/max/mdev = 0.548/0.903/1.148/0.263 ms

브릿지 모드로 생성되기 때문에 가상 기기들은 서로 연결되어 있어야 합니다. 하지만 다른 쪽에는 핑을 보낼 수 없습니다.

$ ping 192.168.0.40 -I macvlan2
PING 192.168.0.40 (192.168.0.40) from 192.168.0.41 macvlan2: 56(84) bytes of data.
^C
--- 192.168.0.40 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 4128ms

$ ping 192.168.0.41 -I macvlan1
PING 192.168.0.41 (192.168.0.41) from 192.168.0.40 macvlan1: 56(84) bytes of data.
^C
--- 192.168.0.41 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2039ms

왜 다른 쪽에는 핑을 보낼 수 없나요? 이 문제를 어떻게 해결하나요?

답변1

Linux 커널은 로컬 소스 주소로 들어오는 패킷을 감지하고 이를 라우팅 오류로 처리하며(특정 시스템의 패킷은 반환되지 않음) 네트워크 플러딩을 방지하기 위해 해당 패킷을 삭제합니다.

각 macvlan을 다른 네트워크 네임스페이스에 배치해 보십시오(결국 macvlan은 네트워크 네임스페이스에서 사용되도록 설계되었습니다). 그러면 작동할 것입니다.

관련 정보