И это всё МОЁ

Всем добра!

Делаю туннель между двумя компьютерами (A, B) между ними роутер R

A ---- R ---- C.

  • IP комп. A (192.168.1.1/24)
  • IP комп. B (192.168.2.1/24)

на компьютере А создаю туннель следующей командой

ip tunnel add IPT mode ipip local 192.168.1.1 remote 192.168.2.1
ip link set dev IPT up
ip addr add 192.168.3.1/24 dev IPT

на компьютере C:
ip tunnel add IPT mode ipip local 192.168.2.1 remote 192.168.1.1
ip link set dev IPT up
ip addr add 192.168.3.254/24 dev IPT


Всё работает,всё движется.

Но вопрос не про это :).

Вот чисто гипотетически. Не привязываясь к конкретной конфигурации и сфере применения.

вот если я делаю так на компьютере A:

iptables -t NAT -A OUTPUT -o eth0 -j DNAT --to 192.168.254.1

и на том же компьютере A:
ping -I IPT 192.168.3.254 

я получаю отсутствие соответствующих пакетов на интерфейсе eth0 (комп. А). А ядро мне говорит, что у меня loop
Dead loop on virtual device IPT ...

А так работает

ping 192.168.3.254 

Если я не ошибаюсь цепочка движения пакета с компьютера А (в том и другом случае) будет:

local process (ping) — routing decision — ... — netfilter output (-o IPT) — netfilter postrouting — вход на псевдо устройство tun (IPT) — ( ipip инкапсуляция ) — выход tun (IPT) — routing decision — ... — netfilter output (-o eth0) — netfilter postrouting — arp (link layer) — ...

Адреса такие же.

Что заставляет пакеты исходящие из eth0 вернуться в IPT (в бесконечном loop)?

Помогите, пожалуйста! Посоветуйте, что почитать. Интересно разобраться.

Спасибо.