Как форварднуть трафик из eth0 в tun-интерфейс и обратно?

Имеется такая схема:
Application --- some adaptation layer --- tun-interface(15.0.0.1) --- eth0(192.168.0.1) <-------> WWW(111.222.5.6)
(IP-адреса написал от балды, просто для удобства и для правильного описания сути проблемы)
Дело в том, что Application не подозревает, что он за tun-интерфейсом. Он думает, что он 192.168.0.1 и шлет IP-пакеты с source address=192.168.0.1, destination=111.222.5.6. Adaptation layer пишет этот пакет в tun.
Задача: как-то форварднуть этот пакет из tun-интерфейса на eth0 средствами iptables.
И обратная задача: из сети приходит пакет source=111.222.5.6, dest=192.168.0.1, нужно чтобы пакет ушел в tun-интерфейс, а из tun-а через adaptation дошел до нашего Application с теми же source=111.222.5.6, dest=192.168.0.1 в IP-хедере.
Под tun-интерфейсом понимается виртуальный интерфейс ядра, под eth0 - реальный ethernet-интерфейс на реальной физической сетевой карточке.
  • Вопрос задан
  • 1395 просмотров
Пригласить эксперта
Ответы на вопрос 3
Softer
@Softer
Может сделать bridge (tun+eth) и назначить ему 192.168.0.1? Тогда у App реально будет 192.168.0.1...
Вот только получится ли сделать бридж tun и eth... :)

Или городить SNAT+DNAT...
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Дело в том, что Application не подозревает, что он за tun-интерфейсом. Он думает, что он 192.168.0.1 и шлет IP-пакеты с source address=192.168.0.1, destination=111.222.5.6.

Ну так надо application научить тому, что адрес его -- 15.0.0.1. Либо в some application layer выполнить трансляцию из 192.168.0.1 в 15.0.0.0 и обратно.

После этого включить на хосте маршрутизацию (echo 1 > /proc/sys/net/ipv4/ip_forward), а в iptables -- SNAT или маскарадинг в eth0 (iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE), и проверить, что форвардинг не запрещён на уровне iptables.

Хотя, мне кажется (а из описания не ясно), что 15.0.0.1 -- это адрес хостовой стороны tun-интерфейса, а адрес приложения с той стороны tun-интерфейса -- какой-то другой, вероятно из подсети 15.0.0.0. Расскажите подробнее о том, как ваше приложение использует tun.
Ответ написан
@azazelpw
Linux SA
Если я правильно вашу схему понимаю, то примерно так.
iptables -t nat -A POSTROUTING -s 15.0.0.0/24 -d 111.222.5.6 -o eth0 --jump SNAT --to-source 192.168.0.1
Трафик пришедший с туннеля 15.0.0.0/24 и идущий по адресу 111.222.5.6 мы передаем через gw 192.168.0.1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы