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

Перенаправление IP-трафика на tun0 с помощью iptables

Я хочу пересылать все пакеты, приходящие из Интернета, на tun0. Быстрая схема:

интернет <-> eth0 (10.68.195.23) <-> tun0 (10.68.195.78) <-> локальная программа.

В настоящее время я использую цель ROUTE для достижения этой цели.>

iptables -A PREROUTING -t mangle -p tcp -s 10.68.195.78 -j ROUTE --oif eth0

iptables -A PREROUTING -t mangle -p tcp -d 10.68.195.78 -j ROUTE --oif tun0

затем я узнал, что поддержка цели ROUTE удалена из ядра 2.6.32 (iptables 1.4.8)

После быстрого поиска выяснилось, что это тоже возможно с меткой, но не знаю, как это сделать.

iptables -t mangle -A PREROUTING -i eth0 xxx -j MARK --set-mark 1

правило ip добавить таблицу fwmark 1 (nb?)

Кстати, я запускаю Debian Squeeze с обновлениями безопасности.

Джонни Алан

Использование одного и того же сетевого адреса на двух интерфейсах вызывает проблемы. Я бы перенумеровал сеть tun0, а затем настроил NAT, чтобы справиться с последствиями. Если tun0 настроен между 192.168.0.1 (локальный) и 192.168.0.2 (удаленный):

iptables -t nat -I PREROUTING -d 10.68.195.78 -j DNAT --to-dest 192.168.0.2

Это по-прежнему требует, чтобы пакеты для 10.68.195.78 приходили на этот хост, поэтому все хосты (или, по крайней мере, те, которым необходимо связаться с ящиком на другой стороне) в этой сети, нуждаются в

ip r a 10.68.195.78 via 10.68.195.23

В качестве альтернативы вы можете использовать прокси-ARP, но это обычно беспорядочно.

Вдобавок, ящик на другой стороне должен иметь точку маршрута по умолчанию в туннель, чтобы возвращаемые пакеты шли таким же образом; вы также можете добавить правило SNAT в POSTROUTING, чтобы все подключения отображались в другом поле, как от другой конечной точки туннеля:

iptables -t nat -I POSTROUTING -d 10.68.195.78 -j SNAT --to-source 192.168.0.1