Всем добра!
Делаю туннель между двумя компьютерами (A, B) между ними роутер R
A (eth0) -----------(enp0s1) R (enp0s2) --------- C (eth0)
A (eth0 secondary) ---- B (env1)
- IP комп. A (eth0) — 192.168.1.1/24
- IP комп. A (eth0 secondary) — 192.168.254.2/24
- IP роутера R (enp0s1) — 192.168.1.254/24
- IP роутера R (enp0s2) — 192.168.2.254/24
- IP комп. C (eth0) — 192.168.2.1/24
- IP комп. B (env1) — 192.168.254.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
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:
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.1
192.168.3.0/24 dev IPT proto kernel scope link src 192.168.3.1
192.168.254.0/24 dev eth0 proto kernel scope link src 192.168.254.2
Всё работает,всё движется.
Но вопрос не про это :).
Вот чисто гипотетически. Не привязываясь к конкретной конфигурации и сфере применения.
вот если я делаю так на компьютере A:
iptables -t nat -A OUTPUT -o eth0 -j DNAT --to 192.168.254.1
и на том же компьютере A:
ping -I IPT 192.168.3.254
Dead loop on virtual device IPT ...
Если я не ошибаюсь цепочка движения пакета с компьютера А будет:
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) — ...
Адреса такие же.
Должно происходить сначала routing decision, а уже потом DNAT. Что заставляет пакеты исходящие из eth0 вернуться в IPT (в бесконечном loop)?
Помогите, пожалуйста! Посоветуйте, что почитать. Интересно разобраться.
Спасибо.