Назад | Перейти на главную страницу

Почему iptables не выполняет DNAT для той же подсети?

У меня следующая настройка NAT:

+--------------+       +-----------------------+     +-------------------+
|              |       |                       |     |                   |
|              |       |                       |     |                   |
|    PC 1      |       |    PC 2 (NAT)         |     |     PC 3          |
|  10.0.0.3    +-------+                       +-----+  10.0.0.4         |
|              |       |                       |     |  (NAT 172.24.4.2) |
|              |       |                       |     |                   |
+--------------+       +-----------------------+     +-------------------+

В то время как PC2 будет выполнять NAT так, что 10.0.0.4 будет преобразован в 172.24.4.2 во время предварительной маршрутизации:

-A PREROUTING -d 172.24.4.2/32 -j DNAT --to-destination 10.0.0.4

Когда я пытаюсь выполнить эхо-запрос с ПК1 на ПК3 с IP-адресом назначения 172.24.4.2. Каким-то образом пакет не выполняет для меня DNAT.

Вот что я запечатлел на ПК3:

10:15:41.017632 IP 10.0.0.3 > 172.24.4.2: ICMP echo request, id 8705, seq 0, length 64

Он отлично работает, если я изменю IP-адрес ПК3 на другую подсеть.

Кто-нибудь знает почему?

10.0.0.4 будет переведен на 172.24.4.2 во время предварительной маршрутизации

Указанное вами правило действует с точностью до наоборот. Он должен переводить адрес назначения 172.24.4.2 в пакете 10.0.0.4.

Это снимок, который вы должны увидеть на интерфейсе ПК1 на ПК2, потому что tcpdump показывает пакеты в проводе до любой обработки стеком TCP.

Вы должны проверить захват на интерфейсе, обращенном к PC3. Вам также необходимо проверить маршрутизацию на ПК2, чтобы 172.24.4.2 адрес маршрутизируется правильно.