Я пытаюсь выяснить, как настроить два логических сетевых интерфейса (на одном физическом интерфейсе) с отдельными MAC-адресами на машине Linux.
Моя первая попытка состояла в том, чтобы использовать macvlan, который сначала, казалось, работал:
[root@localhost ~]# ip link add link enp0s3 name veth0 type macvlan
[root@localhost ~]# ip link set veth0 up
[root@localhost ~]# dhclient veth0
[root@localhost ~]# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.6 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::a00:27ff:fe3b:d08b prefixlen 64 scopeid 0x20<link>
ether 08:00:27:3b:d0:8b txqueuelen 1000 (Ethernet)
RX packets 356 bytes 58787 (57.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 210 bytes 24203 (23.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
veth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.11 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::2462:42ff:fecb:5090 prefixlen 64 scopeid 0x20<link>
ether 26:62:42:cb:50:90 txqueuelen 0 (Ethernet)
RX packets 83 bytes 9099 (8.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 34 bytes 3871 (3.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Однако при сканировании локальной сети с другого компьютера оба интерфейса (192.168.1.6 и 192.168.1.11) имеют одинаковый MAC-адрес 08: 00: 27: 3b: d0: 8b.
Есть идеи, возможно ли это? Какая польза от macvlan, если я не могу использовать его для этой цели?
Спасибо.
РЕДАКТИРОВАТЬ:
Как подсказал Отеус, я попробовал то же самое, что и раньше, с настройками
sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_announce=2
Очевидно, это заставляет интерфейсы отвечать только на те запросы arp, явно адресованные им.
В моей настройке это приводило к сбою запросов DHCP на присвоение IP-адреса veth0. Со статическим IP-адресом на veth0 я не мог получить доступ к этому адресу с других хостов в сети (я пробовал arp / nmap / ping).
Мой (предварительный) вывод заключается в том, что невозможно иметь виртуальный интерфейс с другим MAC-адресом в одной подсети. Однако мне все еще интересно, какова точная цель macvlan, и почему я вижу виртуальный интерфейс с собственным MAC-адресом на локальном компьютере (где я настраиваю виртуальный интерфейс), но не с других машин.
Тот факт, что dhclient смог назначить IP-адрес veth0, указывает на то, что отдельный MAC-адрес работает должным образом. Как вы "сканировали сеть"? Лучшим тестом было бы следующее: со второго хоста обнюхивайте пакеты (я олдскульный и использую "tcpdump -e icmp". Затем с этого вышеупомянутого хоста пингуйте через каждый интерфейс (ping -I позволяет вам это делать) , и посмотрите на MAC-адреса перехваченных пакетов.
Между тем, есть некоторые переменные sysctl для работы с ARP-пакетами на виртуальных IP-интерфейсах. Связанный пост Вот указывает на эта страница в котором подробно обсуждается тема. Решение может быть затруднено сетевым коммутатором и тем, как он решает работать с одним портом, имеющим несколько напрямую подключенных MAC.