Мне нужно, чтобы ПК1 мог общаться с ПК2 через два влана (настроенных на два виртуальных интерфейса). Каждый из них имеет шлюз, настроенный для связи с другой подсетью.
Вот схема:
~ ~ ~ ~<vlan10>~ ~ ~ ~
192.168.1.1 192.168.1.254
ПК1 ---------------------------- Прошивка ------------------- ---------- ПК2
192.168.2.1 192.168.2.254 11.20.1.254 11.20.1.1
~ ~ ~ ~<vlan20>~ ~ ~ ~
ПК1:
- eth0.10 = 192.168.1.1/24
- eth0.20 = 192.168.2.1/24
Брандмауэр:
- позволять все
Я добавил две таблицы маршрутизации, по одной на каждый виртуальный интерфейс:
# таблица списка IP-маршрутов vlan10
по умолчанию через 192.168.1.254 dev eth0.10 proto static
# таблица списка маршрутов ip vlan20
по умолчанию через 192.168.2.254 dev eth0.20 proto static
# ip маршрут
192.168.1.0/24 dev eth0.10 ссылка на область ядра proto src 192.168.1.1
192.168.2.0/24 dev eth0.20 прото-ссылка на область ядра src 192.168.2.1
Вот как применяется таблица маршрутизации:
# IP-правило
0: из всех локальных поисковых систем
32762: со всех на 192.168.2.1 поиск vlan20
32763: из 192.168.2.1 поиск vlan20
32764: со всех на 192.168.1.1 поиск vlan10
32765: из 192.168.1.1 поиск vlan10
32766: из всех основных поисковых запросов
32767: из всех поисковых запросов по умолчанию
Я могу пропинговать интерфейс брандмауэра в той же подсети (шлюз):
# пинг 192.168.1.254
PING 192.168.1.254 (192.168.1.254) 56 (84) байт данных.
64 байта от 192.168.1.254: icmp_seq=1 ttl=64 время=1,09 мс
64 байта от 192.168.1.254: icmp_seq=2 ttl=64 время=0,740 мс
64 байта от 192.168.1.254: icmp_seq=3 ttl=64 время=0,319 мс
# пинг 192.168.2.254
PING 192.168.2.254 (192.168.2.254) 56 (84) байт данных.
64 байта от 192.168.2.254: icmp_seq=1 ttl=64 время=0,937 мс
64 байта от 192.168.2.254: icmp_seq=2 ttl=64 время=0,269 мс
64 байта от 192.168.2.254: icmp_seq=3 ttl=64 время=0,444 мс
Я не могу пропинговать интерфейс брандмауэра в другой подсети:
# пинг 11.20.1.1
connect: целевой хост недоступен
# пинг 11.20.1.1 -I eth0.10
PING 11.20.1.1 (11.20.1.254) от 192.168.1.1 eth0.10: 56 (84) байт данных.
^ С
--- 11.20.1.1 статистика пинга ---
4 пакета передано, 0 получено, 100% потери пакетов, время 75 мс
Когда я использую wireshark, я вижу запрос ARP, предназначенный для 11.20.1.1, даже если он находится в другой подсети и должен использовать шлюз по умолчанию из таблицы маршрутизации.
Когда я настраиваю шлюз по умолчанию в основной таблице маршрутизации, запрос ARP направляется на шлюз, и пинг работает:
# ip route добавить по умолчанию через 192.168.1.254
# пинг 11.20.1.1 -I eth0.10
PING 11.20.1.1 (11.20.1.1) от 192.168.1.1 eth0.10: 56 (84) байт данных.
64 байта из 11.20.1.1: icmp_seq=1 ttl=64 время=0,660 мс
64 байта из 11.20.1.1: icmp_seq=2 ttl=64 время=0,504 мс
^ С
--- 11.20.1.1 статистика пинга ---
2 пакета передано, 2 получено, 0% потери пакетов, время 9 мс
rtt min/avg/max/mdev = 0,504/0,582/0,660/0,078 мс
Вы знаете, откуда взялась проблема? rp_filter
уже установлен на 0
на физическом и виртуальном интерфейсах.