Я уже довольно давно пытаюсь понять странное поведение нашей настройки маршрутизации/брандмауэра, но так и не понимаю, что происходит.
У нас имеется межсетевой экран/маршрутизатор с двумя внешними интерфейсами и несколькими внутренними VLAN.
Специфическое поведение наблюдается, когда клиент ( f4:f5:d8:d2:f2:4c
в данном примере MAC, IP 10.99.154.254) в нашей гостевой сети WiFi VLAN 99 отправляет эхо-запрос ping на некоторый интернет-хост 8.8.8.8, что мы запрещаем.
Маршрутизатор отправляет обратно пакет ICMP о недоступности хоста со своего vlan99
интерфейса (MAC 00:08:a2:0d:00:70
, IP 10.99.0.2) клиенту, и в то же самое время мы видиммарсианский пакетна внешнем интерфейсе eth-ext1
:
tcpdump
показывает это:
$ tcpdump -i vlan99 -vvvvn 'icmp and host 10.99.154.254'
11:59:21.555564 f4:f5:d8:d2:f2:4c > 00:08:a2:0d:00:70, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
10.99.154.254 > 8.8.8.8: ICMP echo request, id 2303, seq 1, length 64
11:59:21.555651 00:08:a2:0d:00:70 > f4:f5:d8:d2:f2:4c, ethertype IPv4 (0x0800), length 126: (tos 0xc0, ttl 64, id 8585, offset 0, flags [none], proto ICMP (1), length 112)
10.99.0.2 > 10.99.154.254: ICMP host 8.8.8.8 unreachable, length 92
(tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
10.99.154.254 > 8.8.8.8: ICMP echo request, id 2303, seq 1, length 64
Ничего удивительного, это исходный пинг от клиента и результирующий пакет ICMP, возвращающийся гостевому клиенту, информирующий его о том, что хост недоступен.
В это же время в журнале ядра появляется запись:
Feb 21 11:59:21 ganymede kernel: IPv4: martian source 10.99.154.254 from 8.8.8.8, on dev eth-ext1
Feb 21 11:59:21 ganymede kernel: ll header: 00000000: 00 08 a2 0d 00 70 f4 f5 d8 d2 f2 4c 08 00 .....p.....L..
Информация на канальном уровне показывает, что этот кадр Ethernet пришелотклиентское устройствокмаршрутизатораvlan99
интерфейс, который заставляет меня задуматься, почему он выглядит как марсианский пакет наeth-ext1
с исходным адресом 8.8.8.8.
Мне пока не удалось получить трассировку пакета с марсианским источником, что заставляет меня задуматься, происходит ли также регистрация марсианского источника на выходном интерфейсе, прежде чем tcpdump
появляется возможность его увидеть?
Я с радостью предоставлю дополнительную информацию по запросу (таблицы маршрутизации и т.п.) и буду признателен за любые указания относительно того, что здесь происходит.
решение1
Ядро исправляет запрос ping на 8.8.8.8 сообщением icmp о недоступности и любезно сообщает вам, что источником является марсианин.
Это пакет, который он помечает...
11:59:21.555651 00:08:a2:0d:00:70 > f4:f5:d8:d2:f2:4c, ethertype IPv4 (0x0800), length 126: (tos 0xc0, ttl 64, id 8585, offset 0, flags [none], proto ICMP (1), length 112)
10.99.0.2 > 10.99.154.254: ICMP host 8.8.8.8 unreachable, length 92
Как вы можете видеть на уровне связи MAC 00 08 a2 0d 00 70 to f4 f5 d8 d2 f2 4c 08 00
...
Feb 21 11:59:21 ganymede kernel: ll header: 00000000: 00 08 a2 0d 00 70 f4 f5 d8 d2 f2 4c 08 00
Марсианский источник - я предполагаю, что он путает тот факт, что он отвечает как прокси-сервер 8.8.8.8 - отсюда туда не попасть.