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

Перенаправить трафик SSH через туннель GRE

Я пытаюсь перенаправить все локальные соединения с портом 22 назначения, соответствующим указанному туннелю, с помощью iptables MARK, но что-то идет не так.

1.1.1.1 my public address
2.2.2.2 tunnel public address
1.2.3.4 my local tunnel address

Вот конфиги:

# ip rule show 
1:      from all fwmark 0x14 lookup 20 

# ip route show table 20 
default via 1.2.3.4 dev tun0

И я создал следующие правила для iptables:

iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 20 
iptables -t mangle -A OUTPUT -s 1.2.3.4 -j MARK --set-mark 20

И когда я пытаюсь установить ssh на какой-то сервер (в данном случае dreamhost), я получаю:

tcp      6 299 ESTABLISHED src=1.1.1.1 dst=69.163.202.189 sport=37152 dport=22 packets=4 bytes=221 src=69.163.202.189 dst=1.1.1.1 sport=22 dport=37152 packets=2 bytes=133 [ASSURED] mark=0 secmark=0 use=2

Пакет не маркируется и отправляется по маршруту по умолчанию, который равен 1.1.1.1.

Не знаю, что делаю не так ..

У кого-нибудь есть идеи ??

калечить ПЕРЕДАЧА для изменения входящие пакеты перед маршрутизацией и ВЫВОД для изменения локально сгенерированные пакеты перед маршрутизацией. Следовательно ПЕРЕДАЧА бесполезен (для локальных подключений). Но OUTPUT хотя должен был работать. Обычно вам не нужно указывать исходный адрес в правилах брандмауэра, поскольку в любом случае это будут «локально сгенерированные пакеты».

И еще что нужно помнить никто не изменит исходный IP-адрес только из-за того, что вы пометили пакет, и он будет маршрутизирован с другой таблицей маршрутов - для этого вам нужно будет явно использовать NAT. Что касается iptables Linux, это должно быть SNAT. И «Эта цель действительна только в таблице nat, в цепочке POSTROUTING», как говорит этот человек. Хотя лично я предпочитаю его подвиды MASQUERADE что более удобно для этого, потому что вам не нужно беспокоиться о жестком кодировании IP-адресов.