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

NAT через VPN

 , ,


1

1

Помогите, пожалуйста, решить задачку.

Имеется:

роутер1 (белый WAN, openVPN-клиент) |

роутер2 (белый WAN, openVPN-сервер) | сеть 10.8.0.0/24

роутер3 (серый WAN, openVPN-клиент) |

у каждого роутера, соответственно, своя LAN-сеть: 192.168.1(2,3).0/24

В сети за роутрером3 имеется web-сервер, который нужно вытащить наружу, через белый WAN роутера1 (LAN-сеть 192.168.1.0/24). Иными словами:

- при запросе на порт 80 к WAN роурера1 ответить должен порт 80 машины 192.168.3.12/24 - LAN сеть роутера3

Маршруты настроены и DNAT перенаправляющий порт 80 на 192.168.3.12/24 имеется на роутере1. Но проблема в том, что работает это только из локальной (LAN) сети роутера1. т.е. из 192.168.1.0/24 все работает, а если попробовать с любого внешнего адреса зайти, то - нет.

Наверное схема убогая, но нужно сделать именно так, желательно только средствами маршрутов и iptables роутера1.

Спасибо!

Я так понимаю, роутер 1 и роутер 3 связаны между собой через VPN на роутере 2? Если да, то на первом роутере все соединения на 80 порту DNATить на IP VPN первого роутера, а на третьем роутере перенаправлять трафик 80 порта с 192.168.3.12 на IP VPN третьего роутера. Ну и связать маршрутом VPN адреса первого и третьего роутера.

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

Я так понимаю, роутер 1 и роутер 3 связаны между собой через VPN на роутере 2?

Да, все верно, связаны. 1 и 3 - openvpn-клиенты, 2 - сервер. Но роутер1 и роутер3 могут общаться между собой и напрямую, минуя сервер (роутер2). Во всяком случае, есть соответствующая запись в конфиге openvpn-сервера и она работает.

Все локальные сети роутеров видят друг друга хорошо. Нельзя ли DNATить с внешнего интерфейса роутера1 сразу на 192.168.3.12?

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

Ну если маршрут до 192.168.3.12 у первого роутера есть, то можно сразу и DNAT прокинуть.

iptables -A PREROUTING -p tcp --dport 80 -s 192.168.3.12/24 -j MASQERADE
FluffyPillow
()
Ответ на: комментарий от FluffyPillow

Маршрут до 192.168.3.12 есть!

А вот на такое правило iptables ругается, говорит «iptables: Invalid argument. Run `dmesg' for more information.»

в dmesg последнее написано «ip_tables: MASQUERADE target: bad hook_mask 1»

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

да, вот именно так я и DNATил. но эффект уже описывал: из сети первого роутера 192.168.1.0/24 все работает, и больше ниоткуда. (правило пишу на первом роутере)

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

да, точно! у меня к нему домен привязан. и когда web-сервер был с сети первого роутера (192.168.1.0/24)то работало все нормально. Но вот понадобилось перенести на другую площадку ...

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

может что-то из этого мешает на роутере3

[admin@192.168.3.1 root]$ iptables -t nat -L -nv
Chain PREROUTING (policy ACCEPT 2019K packets, 301M bytes)
 pkts bytes target     prot opt in     out     source               destination
  564 48032 VSERVER    all  --  *      *       0.0.0.0/0            192.168.0.141
    0     0 NETMAP     udp  --  *      *       0.0.0.0/0            192.168.0.141       udp spt:6112 192.168.3.0/24

Chain POSTROUTING (policy ACCEPT 280K packets, 25M bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 NETMAP     udp  --  *      *       192.168.3.0/24       0.0.0.0/0           udp dpt:6112 192.168.0.141/32
73234 4006K MASQUERADE  all  --  *      vlan1  !192.168.0.141        0.0.0.0/0
 4812  560K MASQUERADE  all  --  *      br0     192.168.3.0/24       192.168.3.0/24

это что-то из правил в прошивке роутера

Norfolk
() автор топика

Покажи выхлоп iptables-save на первом роутере. Вангую что у тебя в таблице filter DROP-аются твои обращения из внешки.

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

на данный момент вот все что есть.


[admin@router root]$ iptables-save
# Generated by iptables-save v1.4.3.2 on Tue Aug 15 15:48:32 2017
*nat
:PREROUTING ACCEPT [75351:13329407]
:POSTROUTING ACCEPT [28593:1609525]
:OUTPUT ACCEPT [5760:391214]
-A PREROUTING -d xx.xxx.xx.xxx/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.3.12:80
-A POSTROUTING -o vlan1 -j MASQUERADE
COMMIT
# Completed on Tue Aug 15 15:48:32 2017
# Generated by iptables-save v1.4.3.2 on Tue Aug 15 15:48:32 2017
*mangle
:PREROUTING ACCEPT [229751:31363853]
:INPUT ACCEPT [145779:17841474]
:FORWARD ACCEPT [62520:8661184]
:OUTPUT ACCEPT [110500:10506439]
:POSTROUTING ACCEPT [173308:19254563]
COMMIT
# Completed on Tue Aug 15 15:48:32 2017
# Generated by iptables-save v1.4.3.2 on Tue Aug 15 15:48:32 2017
*filter
:INPUT ACCEPT [90509:9701359]
:FORWARD ACCEPT [19758:3442801]
:OUTPUT ACCEPT [110480:10503986]
COMMIT
# Completed on Tue Aug 15 15:48:32 2017

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

vlan1 - это что за интерфейс?

похоже что не хватает snat/masquerade на wan интерфейсе

iptables -t nat -A POSTROUTING -o wan_interface -j MASQUERADE

Нельзя ли DNATить с внешнего интерфейса роутера1 сразу на 192.168.3.12?

так и нужно делать

samson ★★
()
Последнее исправление: samson (всего исправлений: 2)
Ответ на: комментарий от samson

vlan1 - это и есть внешний интерфейс роутера1 (его адрес скрыт под xx.xxx.xx.xxx), обращаясь к которому извне, по 80му порту, хотелось бы попадать на 80ый 192.168.3.12

а строка из цепочки nat

-A POSTROUTING -o vlan1 -j MASQUERADE
я так полагаю о том же самом говорит?

Но на сколько я понял, это лишь дает локальной сети роутера1 выходить в Интернет...

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

Нельзя ли DNATить с внешнего интерфейса роутера1 сразу на 192.168.3.12?

так и нужно делать

Так вот так и хочу делать! да вот не работает! и не пойму почему.

Сам сижу за роутером1 из локалки все работает. а захожу с телефона через 3G, например, и не пашет((

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

[qoute] это всего лишь делает подмену src адреса на xx.xxx.xx.xxx пакетам, которые уходят через интерфейс vlan1 :)

Ну да, так вроде бы NAT и работает! но что это дает в этом конкретном случае?

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

Проблема скорее всего в том, что роутер 3, согласно своей таблице маршрутизации посылает ответ не через впн, а через основное соединение с интернетом (default gateway).

Если на третьем роутере ничего трогать нельзя, то надо такие запросы SNAT-ить на первом роутере.
Что-то типа того:

iptables -t nat -A POSTROUTING -d 192.168.3.12 -p tcp --dport 80 -m conntrack --ctorigdst xx.xxx.xx.xxx -j SNAT --to-source 192.168.1.?

где
192.168.1.? - айпи роутера 1 или какой-нибудь другой незанятый из сети 1
xx.xxx.xx.xxx - белый внешний айпи роутера 1

Ну или вместо --ctorigdst можно впринципе использовать --ctstate DNAT

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

Проблема скорее всего в том, что роутер 3, согласно своей таблице маршрутизации посылает ответ не через впн

стопудово!

samson ★★
()
Последнее исправление: samson (всего исправлений: 1)
Ответ на: комментарий от samson

запускал. получил.

[admin@router root]$ tcpdump -i any port 80 -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
16:57:52.261215 IP 31.173.240.172.29391 > xx.xxx.xx.xxx.80: Flags [S], seq 939063913, win 42340, options [mss 1360,sackOK,TS val 25197085 ecr 0,nop,wscale 5], length 0
16:57:52.261429 IP 31.173.240.172.29391 > 192.168.3.12.80: Flags [S], seq 939063913, win 42340, options [mss 1360,sackOK,TS val 25197085 ecr 0,nop,wscale 5], length 0
16:57:52.261486 IP 31.173.240.172.29391 > xx.xxx.xx.xxx.80: Flags [S], seq 939063913, win 42340, options [mss 1360,sackOK,TS val 25197185 ecr 0,nop,wscale 5], length 0
16:57:52.261588 IP 31.173.240.172.29391 > 192.168.3.12.80: Flags [S], seq 939063913, win 42340, options [mss 1360,sackOK,TS val 25197185 ecr 0,nop,wscale 5], length 0
16:57:53.752980 IP 31.173.240.172.29391 > xx.xxx.xx.xxx.80: Flags [S], seq 939063913, win 42340, options [mss 1360,sackOK,TS val 25197385 ecr 0,nop,wscale 5], length 0
16:57:53.753121 IP 31.173.240.172.29391 > 192.168.3.12.80: Flags [S], seq 939063913, win 42340, options [mss 1360,sackOK,TS val 25197385 ecr 0,nop,wscale 5], length 0
16:57:53.990320 IP 31.173.240.172.14530 > xx.xxx.xx.xxx.80: Flags [S], seq 1141796901, win 42340, options [mss 1360,sackOK,TS val 25197409 ecr 0,nop,wscale 5], length 0
16:57:53.990456 IP 31.173.240.172.14530 > 192.168.3.12.80: Flags [S], seq 1141796901, win 42340, options [mss 1360,sackOK,TS val 25197409 ecr 0,nop,wscale 5], length 0
^C16:57:57.785068 IP 31.173.240.172.29391 > xx.xxx.xx.xxx.80: Flags [S], seq 939063913, win 42340, options [mss 1360,sackOK,TS val 25197786 ecr 0,nop,wscale 5], length 0

на 192.168.3.12 tcpdump ничего не упоминает о 80ом порте.

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

как убедиться в том, что до роутера 3 вообще что-то доходит? может быть он не отвечает, потому как ничего не слышит?

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

запусти там или на веб-сервере tcpdump

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

Если на третьем роутере ничего трогать нельзя

если можно, то надо на нем разруливать. Трафик пришедший через vpn и уйти туда же должен

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

Трафик пришедший через vpn и уйти туда же должен

Вообще так можно сделать, но это уже не дефолтная настройка.

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

А вот это сработало!!!! Спасибо, Nao!))

Т.е. из этого правила получается, что у всех пакетов, которые приходят на белый внешний айпи по 80му порту роутера1 заменяется источник на адрес из локальной сети роутера1 и только так ему может ответить веб-сервер, потому как в маршрутах роутера3 другого не указано??

Это хороший способ или лучше с маршрутам vpn на роутере3 разобраться?

Еще раз спасибо)

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

тут минус в том, что когда делаете SNAT, то адрес источника теряется и в логах веб сервера у вас все будет с IP роутера 1.

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

да, это я уже заметил. в данном конкретном случае это не проблема, но для промышленных масштабов это будет плохо.

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

у вас на каждом роутере как бы 2 провайдера (wan и vpn).

Смотрите что происходит.

Пакет из интернета с адресом SRC:YY.YY.YY.YY попадпает (после DNAT) на веб сервер. В таблице маршрутизации нет соотверствующего правила. И ответ уходит через маршрут по умолчанию - роутер 3. На роутере 3 тоже нет соответствующего правила и он отправляет пакет в маршрут по умолчанию, те wan...

Вот и надо по хорошему их настроить как полагается. Т.е. что бы роутер 3 отправлял ответы в vpn, если они пришли через vpn.

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

samson, спасибо за пояснение! Кажется я понял.

Наверное на этом этапе это то, чего я хотел добиться, дальше буду разбираться с маршрутами на роутер 3

Еще раз, Спасибо всем кто участвовал!!

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

Гугли linux split access routing или типо того.

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

Спасибо!

Спасибо большое, ребят! За решение вопроса, за ссылки, за объяснения темы!)

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