Всем добра!
Делаю туннель между двумя компьютерами (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)?
Помогите, пожалуйста! Посоветуйте, что почитать. Интересно разобраться.
Спасибо.