Назад | Перейти на главную страницу

Виртуальные интерфейсы с разными MAC-адресами

Я пытаюсь выяснить, как настроить два логических сетевых интерфейса (на одном физическом интерфейсе) с отдельными 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.