Ubuntu Linux - два интерфейса, одна подсеть, разные vlan - проблемы с MAC/ARP
Я пытаюсь настроить сервер, который должен иметь интерфейсы в той же IP-подсети, но в разных VLAN:
eth1.102 Link encap:Ethernet HWaddr 00:50:56:b1:00:0f
inet addr:10.1.1.6 Bcast:10.1.1.255 Mask:255.255.255.0
eth1.103 Link encap:Ethernet HWaddr 00:50:56:b1:00:0f
inet addr:10.1.1.12 Bcast:10.1.1.255 Mask:255.255.255.0
Проблема, которую я вижу, заключается в том, что когда ARP-запрос поступает с устройства в одной из подсетей, сервер отвечает на ARP только на одном интерфейсе и, по-видимому, игнорирует ARP на другом интерфейсе:
1-й интерфейс:
# ping -I eth1.102 10.1.1.1
PING 10.1.1.1 (10.1.1.1) from 10.1.1.6 eth1.102: 56(84) bytes of data.
^C
--- 10.1.1.1 ping statistics ---
8 packets transmitted, 0 received, 100% packet loss, time 7008ms
2-й интерфейс:
# ping -I eth1.103 10.1.1.1
PING 10.1.1.1 (10.1.1.1) from 10.1.1.12 eth1.103: 56(84) bytes of data.
64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=0.400 ms
64 bytes from 10.1.1.1: icmp_seq=2 ttl=64 time=0.332 ms
^C
(для записи, 10.1.1.1 существует в обеих подсетях в обеих VLAN)
# arp -an
? (10.1.1.1) at 02:00:1a:f2:00:02 [ether] on eth1.103
? (10.1.1.1) at 02:00:72:a3:00:08 [ether] on eth1.102
Даже если я отправляю ping с клиентского устройства на определенный IP-адрес интерфейса сервера, он все равно игнорируется на одном и отвечает на другом.
Ubuntu по умолчанию имеет несколько фильтров arp / spoofing, поэтому я отключил то, что могу найти, т.е.
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
Я видел довольно много вопросов со схожими проблемами, но обычно это происходит с потоком ARP, потому что это тот же сегмент (не разделенный VLAN), и на запрос ARP отвечают оба, что здесь не так. Если я tcpdump на обоих интерфейсах, ARP, который не получает ответа, нигде не виден ни на одном другом интерфейсе (думая в том же духе, что он отвечает на другом интерфейсе) - он просто игнорирует запрос.
Кто-нибудь сталкивался с этим раньше?
РЕДАКТИРОВАТЬ:
Хорошо, чувствую себя немного идиотом, но может помочь другим...
Я был в правильном месте, отключив rp_filter, но, вероятно, потому что он включен по умолчанию с Ubuntu, он применил его ко всем интерфейсам, поэтому, хотя я установил rp_filter=0 для двух перечисленных выше записей, настройки для интерфейса были еще 1, таким образом..
# sysctl -w net.ipv4.conf.eth1/102.rp_filter=0
# sysctl -w net.ipv4.conf.eth1/103.rp_filter=0
... сделал свое дело.
1 ответ
Вам необходимо отключить фильтр обратного пути (rp_filter) для каждого отдельного интерфейса
# sysctl -w net.ipv4.conf.eth1/102.rp_filter=0
# sysctl -w net.ipv4.conf.eth1/103.rp_filter=0