У меня есть Linux-система с одним реальным (в отличие от виртуального, также известного как псевдоним) Ethernet-интерфейсом, который я могу использовать (eth0 используется для других целей - я не могу его использовать, и я не могу добавить больше сетевых карт). Скажи, что это eth1
Мне нужно управлять некоторыми объектами / объектами через SNMP, поэтому я настроил виртуальный интерфейс Ethernet для каждого объекта с его соответствующим MAC-адресом. Я делаю это (пример для vif1):
ip -family inet link add link eth1 name vif1 address <the MAC addr> type macvlan
ip link set vif1 up multicast on
ip route del default dev vif1 table main /* enable the pings/TFTP going out! */
ip route add default via 192.168.1.1 table main proto static metric /* restore orig */
eth1, vif1, vif2, ... все получают IP-адреса от одного (удаленного) DHCP-сервера. Все эти IP-адреса, конечно, находятся в одной IP-подсети, скажем, 10.11.1.0/24.
Проблема: ping с Linux-сервера на DHCP-сервер (скажем, 10.11.1.1) работает. ping с машины DHCP-сервера на IP-адрес eth1 или любой IP-адрес vif # X работает, НО (то проблема, я полагаю ...) только eth1 отвечает на пакеты ICMP (проверяется счетчиками ifconfig и сниффингом wirehark). Эта проблема вызывает невозможность подключения к агентам SNMP, связанным с IP-адресами интерфейсов vif.
Я предполагаю, что мне нужно настроить внутреннюю маршрутизацию, чтобы IP-пакеты доходили до места назначения vif # X. Я пробовал добавить правило ip с новой таблицей IP-маршрутизации, но, вероятно, не установил его (новую таблицу) правильно ... Кто-нибудь может сказать мне, как (а также, желательно, почему) это сделать?
Коробка Linux работает под управлением Ubuntu9.04, а DHCP-сервер работает под управлением Windows XP SP3.
Наконец, решил: это проблема, связанная с ARP.
НО
Когда сервер отправляет IP-пакеты (в моем случае - сообщения SNMP), он использует MAC-адрес виртуального интерфейса. Когда он доходит до Linux, ядро просто отбрасывает эти кадры, поскольку не знает, как их пересылать; Запуск Wireshark отображает эти сообщения, поскольку обычно интерфейс переводится в беспорядочный режим.
Чтобы сообщения SNMP достигли SNMP-агента, который привязан к виртуальному интерфейсу, IP-пакет должен иметь MAC-адрес реального интерфейса (Я думаю, что только тогда ядро выполняет маршрутизацию VLAN на основе IP-адреса ...)
Способ добиться этого - отправить бесплатный ARP запрос реального интерфейса компьютера Linux к серверу, в котором говорится, что вновь назначенный IP-адрес (для одного из виртуальных интерфейсов ...) «принадлежит» MAC-адресу реального интерфейса. Это правильно обновляет таблицу ARP сервера.
Кстати, это также объясняет, почему некоторое время ожидания перед запуском трафика SNMP работает: запись в таблице ARP сервера устарела, поэтому сервер отправляет ARP-запрос, на который отвечает правильно посредством реальный интерфейс
Почему бы вам не установить мост-устройство? brctl addbr bridge
Добавьте IP и MAC физического устройства к этому мосту, переместите устройство без IP-адреса на мост, а затем подключите свои VIF к мосту.