Я хочу пересылать все пакеты, приходящие из Интернета, на 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