LINUX.ORG.RU
ФорумAdmin

Проброс порта через doublevpn

 ,


1

3

Доброго дня. Только начал осваивать iptables, и правила маршрутизации. Подскажите в чем проблема и в какую сторону смотреть. Есть настроенный DoubleVPN, по нему спрашивал тут.

Схема DoubleVPN: Клиент (Windows)<-->VPN1(1.1.1.1)<-->VPN2(2.2.2.2)<-->Internet

VPN соединены между собой по tcp протоколу на 443 порту.

Есть софт, который Стоит на Windows и слушает порт 58899 (к примеру). С другой машины (Windows) не подключенной к VPN, идет запрос на соединение через VPN2.

Порт 58899 открыт на VPN2. Форвардинг включен в sysctl.conf

Запустил tcpdump на интерфейсе venet0 (VPN2), IP 3.3.3.3 - это адрес второй машины Windows:

root@host:~# tcpdump -i venet0 port 58899
09:15:30.225310 IP 3.3.3.3.49893 > 2.2.2.2.58899: Flags [S], seq 3492029942, win 8192, options [mss 1350,nop,nop,sackOK], length 0
09:15:30.357970 IP 2.2.2.2.58899 > 3.3.3.3.49893: Flags [R.], seq 0, ack 1, win 0, length 0

Почему-то при получении запроса на соединение отправляет флаг RST. И сбрасывает его.

Вот вывод iptables (VPN2):

# Generated by iptables-save v1.4.21 on Tue Nov  8 03:40:51 2016
*nat
:PREROUTING ACCEPT [9:488]
:POSTROUTING ACCEPT [1:72]
:OUTPUT ACCEPT [1:72]
-A PREROUTING -i venet0 -p tcp -m tcp --dport 58899 -j DNAT --to-destination 10.9.0.1
-A POSTROUTING -s 10.9.0.0/24 -o venet0 -j SNAT --to-source 2.2.2.2
COMMIT
# Completed on Tue Nov  8 03:40:51 2016
# Generated by iptables-save v1.4.21 on Tue Nov  8 03:40:51 2016
*filter
:INPUT ACCEPT [119452:27808387]
:FORWARD ACCEPT [151352:87841754]
:OUTPUT ACCEPT [147482:87553998]
-A INPUT -p tcp -m tcp --dport 58899 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 58899 -j ACCEPT
COMMIT
# Completed on Tue Nov  8 03:40:51 2016
# Generated by iptables-save v1.4.21 on Tue Nov  8 03:40:51 2016
*mangle
:PREROUTING ACCEPT [273495:115848622]
:INPUT ACCEPT [122143:28006868]
:FORWARD ACCEPT [151352:87841754]
:OUTPUT ACCEPT [148819:87730069]
:POSTROUTING ACCEPT [300171:175571823]
COMMIT
# Completed on Tue Nov  8 03:40:51 2016


Последнее исправление: d0br0t4 (всего исправлений: 4)

Какая то путаница с 58899 и 58888, непонятно где у вас опечатка.

Счётчик у DNAT-правила увеличивается на 1 пакет при получении запроса на соединение?

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

Обсуждаемые пакеты не проходят через INPUT и OUTPUT, а через FORWARD. Ну и PRE- POST-

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

Посмотрел, счетчик пакетов в DNAT меняется, но на tun0 (10.9.0.1) они не улетают.

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

SNAT правило у вас странное. Изменение src-адреса пакетов, идущих от windows в ответ на проброшенные, произойдёт автоматически.

В DNAT-правиле нужно указывать не адрес tun-интерфейса VPN2, а адрес windows-клиент. Не важно какого интерфейса windows-клиенат будет адреса, главное чтобы у VPN2 был до него маршрут черер tun0.

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

SNAT правило у вас странное.

А в чём странность? Это правило нужно для того, чтобы VPN2 выходил в интернет. Тут либо SNAT либо masquerade. Советуют при статичном ip использовать SNAT, так нагрузка меньше.

В DNAT-правиле нужно указывать не адрес tun-интерфейса VPN2, а адрес windows-клиент.

Т.Е. если Windows-клиент получает ip 10.8.0.6, то нужно указывать его?

главное чтобы у VPN2 был до него маршрут черер tun0

Как это примерно должно выглядеть?

Благодарю за советы)

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

У вас сейчас получается, что от VPN2 пакеты должны проходить через VPN1 на windows-клиента. Можно, конечно, продолжать то, что вы начали в предыдущей теме — к SNAT правилу на VPN1 добавить DNAT правило на 10.8.0.6, а на VPN2 делать DNAT на VPN1 (10.9.0.6).

Или делать, чтобы VPN1 только маршрутизировал трафик, без NAT'а. И для работы windows-клиента на VPN2 должен быть маршрут:

ip route add 10.8.0.0/24 dev tun0

И, возможно, iroute в настройках openvpn.

DNAT и SNAT правила на VPN2, тогда, записываются для адреса 10.8.0.6 (для Windows-клиента)

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

Можно, конечно, продолжать то, что вы начали в предыдущей теме — к SNAT правилу на VPN1 добавить DNAT правило на 10.8.0.6, а на VPN2 делать DNAT на VPN1 (10.9.0.6).

Сделал вот так, и всё заработало. Благодарю за советы!

А какой из этих способов предпочтительнее? Со скриптами как я сделал (Заворачивать весь трафик) или через iroute?

Что будет производительнее?

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

А какой из этих способов предпочтительнее?

С минимальным количеством NAT'ов.

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

iroute это опция openvpn для того, чтобы он тоже знал, что за тунелем есть ещё ip-адреса. То есть маршрутом в ядре (ip route) мы посылаем пакет в заданный интерфейс. Но это не означает, что openvpn завернёт этот пакет в tcp/udp и пошлёт дальше, на другую сторону тунеля.

iroute используют не вместо скриптов, прописывающих маршруты, а вместе.

Если нужно больше производительности, то нужно делать один openvpn-сервер на VPN1, чтобы и window и VPN2 были его клиентами и включать опцию client-to-client на VPN1, чтобы был один интерфейс tun0, а между тунелями маршрутизировал openvpn без участия ядра. Но тут уже точно нужно iroute указывать.

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