Рейтинг:0

ICMP TTL превысил ответы с IP-адресом назначения от маршрутизатора NAT

флаг gh

Я играю с nftables и наблюдаю странное поведение, которое не могу объяснить.

У меня есть три ВМ, источник, маршрутизатор и пункт назначения. Все работают под управлением последней версии Oracle EL 8.5 и настраиваются через nft.

  • источник имеет единый сетевой интерфейс enp0s8 с IP 10.111.111.1 в подсети /24.
  • маршрутизатор имеет два сетевых интерфейса: enp0s8 с IP 10.111.111.2 в подсети /24 и enp0s9 с IP 10.100.100.2 в подсети /24.
  • пункт назначения имеет единый сетевой интерфейс enp0s8 с IP 10.100.100.1 в подсети /24.

Моя цель - иметь пункт назначения спрятано от источник за NAT, с IP 10.200.200.1. Что я сделал:

  1. Включена IP-маршрутизация маршрутизатор.
  2. Заблокирован прямой доступ с 10.111.111.0/24 на 10.100.100.0/24 в маршрутизатор.
  3. Добавлен статический маршрут 10.200.200.0/24 через 10.111.111.2 (маршрутизатор) на источник.
  4. Настроил NAT на маршрутизатор следующее:
        предварительная маршрутизация цепи {
                type nat hook prerouting priority dstnat; политика принять;
                iifname "enp0s8" IP-адрес 10.200.200.1 dnat до 10.100.100.1
        }

        посттрассировка цепи {
                введите nat hook приоритет постмаршрутизации srcnat; политика принять;
                ip saddr 10.100.100.1 oifname "enp0s8" snat to 10.200.200.1
        }

Все работает как положено, пункт назначения доступен из источник только как 10.200.200.1, а не как 10.100.100.1 (конечно, я знаю, что под рутом работать плохо, это просто экспериментальные ВМ):

[root@source ~]# пинг 10.100.100.1
PING 10.100.100.1 (10.100.100.1) 56 (84) байт данных.
^ С
--- Статистика пинга 10.100.100.1 ---
15 пакетов передано, 0 получено, 100% потери пакетов, время 14320 мс

[root@source ~]# пинг 10.200.200.1
PING 10.200.200.1 (10.200.200.1) 56 (84) байт данных.
64 байта из 10.200.200.1: icmp_seq=1 ttl=63 время=0,554 мс
64 байта из 10.200.200.1: icmp_seq=2 ttl=63 время=1,80 мс
64 байта из 10.200.200.1: icmp_seq=3 ttl=63 время=1,84 мс
^ С
--- Статистика пинга 10.200.200.1 ---
3 пакета передано, 3 получено, 0% потери пакетов, время 2043 мс
rtt min/avg/max/mdev = 0,554/1,397/1,836/0,598 мс

Но когда я делаю traceroute или отправляю ping с TTL=1, ответ имеет IP 10.200.200.1 вместо маршрутизаторIP-адрес 10.111.111.2:

[root@source ~]# трассировка 10.200.200.1
traceroute до 10.200.200.1 (10.200.200.1), макс. 30 переходов, пакеты по 60 байт
 1 10.200.200.1 (10.200.200.1) 0,752 мс 0,679 мс 0,984 мс
 2 10.200.200.1 (10.200.200.1) 1,181 мс 1,130 мс 1,070 мс
[root@source ~]# ping 10.200.200.1 -c 1 -t 1
PING 10.200.200.1 (10.200.200.1) 56 (84) байт данных.
Из 10.200.200.1 icmp_seq=1 Превышено время жизни

--- Статистика пинга 10.200.200.1 ---
1 пакет передан, 0 получен, +1 ошибка, 100% потеря пакетов, время 0 мс

Если я сделаю то же самое для любого другого адреса в подсети 10.200.200.0/24, ответы будут иметь правильные IP-адреса:

[root@source ~]# ping 10.200.200.2 -c 1 -t 1
PING 10.200.200.2 (10.200.200.2) 56(84) байт данных.
Из 10.111.111.2 icmp_seq=1 Превышено время жизни

--- Статистика пинга 10.200.200.2 ---
1 пакет передан, 0 получен, +1 ошибка, 100% потеря пакетов, время 0 мс

Кто-нибудь может пояснить, почему в первом случае превышение TTL ICMP имеет IP-адрес конечного пункта назначения, а во втором случае - IP-адрес маршрутизатора?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.