![Linux 인터페이스 모드 MACVLAN 및 개인 모드가 광고된 대로 작동하지 않는 것 같습니다(Ubuntu)](https://linux55.com/image/171170/Linux%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%20%EB%AA%A8%EB%93%9C%20MACVLAN%20%EB%B0%8F%20%EA%B0%9C%EC%9D%B8%20%EB%AA%A8%EB%93%9C%EA%B0%80%20%EA%B4%91%EA%B3%A0%EB%90%9C%20%EB%8C%80%EB%A1%9C%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EA%B2%83%20%EA%B0%99%EC%8A%B5%EB%8B%88%EB%8B%A4(Ubuntu).png)
인터페이스 간의 모든 통신이 호스트에서 영구 기본 게이트웨이로 전송되도록 가상 인터페이스(MACVLAN 유형)를 생성하려고 합니다. "비공개" 모드를 설명하는 기사가 많이 있습니다.여기
개인: 인터페이스에 바인딩된 MAC VLAN이 서로 통신할 수 없도록 들어오는 모든 패킷을 필터링합니다(소스 MAC 주소가 MAC VLAN 인터페이스 중 하나와 일치하는 인터페이스를 통해 들어오는 모든 패킷을 삭제함).
몇 가지 인터페이스를 구성했는데 "개인" 모드가 광고된 대로 작동하지 않는 것 같습니다. 내가 뭐 잘못 했어요? 호스트는 Ubuntu 18.04 Bionic 버전입니다.
"모드별" 명령을 무시하고 호스트 내에서 패킷이 교환됩니다. 단 4개의 명령으로 쉽게 재현할 수 있습니다. 어떤 도움이라도 대단히 감사하겠습니다.
root@ubnt-bkp:/home/super# uname -a
Linux ubnt-bkp 4.15.0-96-generic #97-Ubuntu SMP Wed Apr 1 03:25:46 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
root@ubnt-bkp:/home/super# ip link add link ens160 address 38:94:ed:99:99:1A ens160.3 type macvlan mode private
root@ubnt-bkp:/home/super# ip link set ens160.3 up
root@ubnt-bkp:/home/super# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 08:4f:a9:99:99:02 brd ff:ff:ff:ff:ff:ff
...
...
18: ens160.3@ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP **mode** **DEFAULT** group default qlen 1000
link/ether 38:94:ed:99:99:1a brd ff:ff:ff:ff:ff:ff
문제를 재현하라는 명령
root@ubnt-bkp:/home/super# ip link add link ens160 address 38:94:ed:99:99:1B ens160.5 type macvlan mode private
root@ubnt-bkp:/home/super# ip link set ens160.5 up
root@ubnt-bkp:/home/super# dhclient ens160.5
root@ubnt-bkp:/home/super# ip link add link ens160 address 38:94:ed:99:99:1C ens160.6 type macvlan mode private
root@ubnt-bkp:/home/super# ip link set ens160.6 up
root@ubnt-bkp:/home/super# dhclient ens160.6
그런 다음 옵션을 ping
사용하십시오 -I
.
root@ubnt-bkp:/home/super#ping -I <IP address of ens160.5> <IP address of ens160.6>
( ens160
재현하려고 할 때 이더넷 인터페이스 이름(예: eth0)으로 바꾸십시오.)
답변1
MACVLAN 인터페이스를 생성하는 데 사용한 명령이 정확합니다.
그러나 을 사용해도 ping -I
이를 확인하는 데 도움이 되지 않습니다. 이는 소스 및 대상 인터페이스가 동일한 호스트(및 귀하의 경우와 같이 동일한 네임스페이스)에 있는 경우 ping
항상 성공합니다 .
그러면 이것을 어떻게 테스트합니까? MACVLAN 인터페이스를 기본이 아닌 다른 네임스페이스에 배치합니다. 그런 다음 ping
네임스페이스에서 실행합니다.
ens160
IP 주소가 있는 물리적 인터페이스()로 시작한다고 가정합니다 192.0.2.2/24
. 또한 귀하의 라우터 게이트웨이 주소가 이라고 가정합니다 192.0.2.1
.
지금:
# Create namespace named "ns5"
ip netns add ns5
# Create the macvlan interface as usual
ip link add link ens160 address 38:94:ed:99:99:1B ens160.5 type macvlan mode private
# Move the just-created macvlan interface into the "ns5" namespace
ip link set ens160.5 netns ns5
# Set the link up. Observe the "ip netns exec ns5" prefix.
ip netns exec ns5 ip link set ens160.5 up
# Set the IP address for the macvaln interface. Observe the "ip netns exec ns5" prefix.
ip netns exec ns5 ip address add dev ens160.5 192.0.2.205/24
# Repeat above for another macvlan interface, this one in another namespace
# called "ns6"
ip netns add ns6
ip link add link ens160 address 38:94:ed:99:99:1C ens160.6 type macvlan mode private
ip link set ens160.6 netns ns6
ip netns exec ns6 ip link set ens160.6 up
ip netns exec ns6 ip address add dev ens160.6 192.0.2.206/24
이 시점부터 두 macvtap 인터페이스 모두 성공적으로 게이트웨이를 ping할 수 있습니다.
ip netns exec ns5 ping 192.0.2.1
ip netns exec ns6 ping 192.0.2.1
게이트웨이 장치에 액세스할 수 있는 경우 192.0.2.205 및 192.0.2.6에 대한 ARP 항목에 macvlan 인터페이스의 MAC 주소가 표시되는지 확인할 수 있어야 합니다.
그러나 macvlan 인터페이스가 private
모드에 있으므로 다음 명령은 모두 실패합니다.
# Try to reach ens160.6 from ens160.5
ip netns exec ns5 ping 192.0.2.206
# Try to reach ens160.5 from ens160.6
ip netns exec ns6 ping 192.0.2.205
bridge
대신 실험을 반복하면 private
마지막 두 개의 ping 명령이 성공하는 것을 볼 수 있습니다.