LINUX.ORG.RU
решено ФорумAdmin

Перенаправление всех пакетов на адрес, исключая подсеть

 ,


0

1

Добрый день. Нужно перенаправить все входящие пакеты на определенный адрес (в впн тоннель). Технически, это правило

iptables -t nat -A PREROUTING -p tcp -j DNAT --to-destination 10.8.0.2

как раз и перенаправляет всё, но есть проблема: даже то, что приходит из самого тоннеля оно заворачивает обратно. Таким образом не получается даже подключиться по ssh изнутри.
И вторая, но почти идентичная проблема - так же надо перенаправить весь UDP траффик, и если использовать

iptables -t nat -A PREROUTING -p udp -j DNAT --to-destination 10.8.0.2

то не выходит подключиться самим впн-клиентом. По идее, можно создавать по отдельному правилу на каждый порт, они они динамически меняются, а прописывать по 2 правила на каждый порт вплоть до 64000 - не очень хочется...

*nat
:PREROUTING ACCEPT [18:1075]
:INPUT ACCEPT [18:1075]
:OUTPUT ACCEPT [2:504]
:POSTROUTING ACCEPT [2:504]
:ALLOW - [0:0]
-A PREROUTING -p tcp -m tcp --dport 22 -j ALLOW
-A PREROUTING -p tcp -j DNAT --to-destination 10.8.0.2 
-A ALLOW -j ACCEPT
COMMIT

Создай свою цепочку и перенаправляй в неё запросы к нужным портам в обход правила с DNAT.

kostik87 ★★★★★
()
Ответ на: комментарий от Deleted

Это если у ТС там вообще не хитрая какая-то идея, а так, да, скорее всего -s хватит.

Ну либо он сам не понимает чего он хочет.

kostik87 ★★★★★
()
Ответ на: комментарий от Deleted

Почитал про -s. Это ведь source, так? То есть откуда приходят пакеты. А приходить они могут откуда угодно. Главное, чтобы те, кто приходят с 10.8.0.2 не отправлялись обратно.

Nightfall
() автор топика
Ответ на: комментарий от kostik87

Ага, немного поменял правила но разобрался. Спасибо. Почему-то нигде не мог найти про !, хотя это по идее логично. В итоге прописал это:

iptables -t nat -A PREROUTING ! -s 10.8.0.2 -p tcp -j DNAT --to-destination 10.8.0.2
iptables -t nat -A PREROUTING ! -s $external_vpn_client_ip -p udp -j DNAT --to-destination 10.8.0.2

Nightfall
() автор топика
Ответ на: комментарий от kostik87

«10.8.0.0\24»

Никогда Штирлиц не был так близко к провалу

vel ★★★★★
()
Ответ на: комментарий от Nightfall

Зачем отдельное правило на udp?

Если убрать -p tcp и -p udp, то можно оставить одно правило и оно будет работать и для tcp и для udp пакетов.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Отдельное правило, потому что чтобы создать тоннель от клиента до сервера клиент подключается по udp к внешнему ip. То есть с точки зрения сервера некий 94.177.100.100 посылает ему пакеты. Если не прописать

iptables -t nat -A PREROUTING ! -s 94.177.100.100 -p udp -j DNAT --to-destination 10.8.0.2

то он просто будет пересылать эти пакеты в тоннель которого еще не существует.

Nightfall
() автор топика
Ответ на: комментарий от Nightfall

IMHO проще делать исключения через -j ACCEPT

iptables -t nat -A PREROUTING -s 10.8.0.2 -j ACCEPT
iptables -t nat -A PREROUTING -s $external_vpn_client_ip -j ACCEPT
iptables -t nat -A PREROUTING -j DNAT --to-destination 10.8.0.2

Для исключения своих адресов можно воспользоваться "-m addrtype --src-type LOCAL"

iptables -t nat -A PREROUTING -m addrtype --src-type LOCAL -j ACCEPT
iptables -t nat -A PREROUTING -j DNAT --to-destination 10.8.0.2
vel ★★★★★
()

Указывай параметр -i. Это интерфейс на который пришел пакет.

rumgot ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.