LINUX.ORG.RU
ФорумAdmin

Как разбираться почему не контачит VPN?

 ,


0

1

Пытаюсь строить VPN. Каждый узел стоит за NAT в том числе сервер. Я выбрал StrongWan, настроил все по инструкции. Вот конфиги: Сервер:

conn vpn-server
  auto=add
  compress=no
  type=tunnel  # defines the type of connection, tunnel.
  keyexchange=ikev2
  fragmentation=yes
  forceencaps=yes
  dpdaction=clear
  dpddelay=300s
  rekey=no
  left=%any
  leftauth=pubkey
  leftid=@vpn.id    #If using IP, define it without the @ sign
  leftsourceip=18.18.18.18 #
  leftcert=vpn_server_cert.pem  #Reads the VPN server cert in /etc/ipsec.d/certs
  leftsendcert=always
  leftsubnet=0.0.0.0/0
  right=%any
  rightid=%any
  rightauth=eap-mschapv2
  rightsourceip=10.0.1.0/24  #IP address Pool to be assigned to the clients
#	rightdns=8.8.8.8  
  rightsendcert=never
  eap_identity=%identity  #Defines the identity the client uses to reply to an EAP Identity request.
Клиент:
conn vpn-client
  auto=start
  right=vpn.id
  rightid=vpn.id
  rightsourceip=18.18.18.18
  rightsubnet=0.0.0.0/0
  rightauth=pubkey
  leftsourceip=%config
  leftid=client1
  leftauth=eap-mschapv2
  eap_identity=%identity

И не работает, честно я уже столько VPN серверов перебрал, VPS тоже поменял. Я не знаю что делать дальше, как искать где проблема? У меня нет навыков как сетевого админа, iptables нужно что-то прописывать что-бы это чудо заработало? Я весь Iptables обнулил. В логах пусто, только charon (1033) started after 20 ms. Что на сервере что на клиенте.

команда nmap 18.18.18.18 -p 4500 -Pn - выдает все ок filtered команда nc -uv 18.18.18.18 4500 зависает на open Вот скрин того что порты открыты: https://ibb.co/jwYbh1C Вот скрин все схемы: https://ibb.co/pLGbr8D

Что бы подключиться к серверу, если он за нат, нужно делать проброс портов.

anonymous ()

Я вам на тостере, вроде, достаточно конкретно ответил. Проблемы у вас не с VPN, а с сетевой доступностью, до VPN-демона пакеты не доходят. Смотрите настройки межсетевого экрана, читайте документацию к дистрибутиву, тестируйте корректность настройки межсетевого экрана netcat’ом или чем-то подобным.

Начните с OpenVPN, заставьте работать его. С IPsec могут быть проблемы с фрагментированными пакетами, которые иногда решаются нетривиально.

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

Пробуй подключаться клиентом и с помощью tcpdump смотри приходят ли запросы от клиента на нужные порты.

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

С IPsec могут быть проблемы с фрагментированными пакетами, которые иногда решаются нетривиально.

Можно пример, без «двойного дна» вопрос если что, действительно интересно опыт решения таких вопросов.

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

Не все ОС и клиенты поддерживают фрагментацию на уровне протокола IKEv2, поэтому используют фрагментацию на уровне IP. Некоторые и домашние провайдеры (сходу могу назвать мобильный МТС в некоторых регионах), и хостинг-площадки (Scaleway) либо имеют проблемы с фрагментированными пакетами, либо намеренно их блокируют.

Бороться можно использованием 1024-битных ключей, чтобы они влезали в один пакет, как вариант. Правильный вариант — писать провайдеру, у которого проблемы с фрагментацией. МТС для моих серверов сделал исключение, прописав их куда-то в конфиг доверенных адресов по всей России.

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

Я смотрел все настройки все по открывал что можно, С IPsec могут быть проблемы с фрагментированными пакетами, которые иногда решаются нетривиально. - вот вообще ничего не понял что ты написал. Я начинал с openVPN, не завелся. Ставил и tinc и wireguard. Неткатом порты проверял, зависает на open. Через nmap c портами все ок filtered. Иди читай - это не совсем такой ответ. Он правильный конечно, но ожидалось другое. Я не знаю что делать дальше.

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

strongwan может IKEv1, этот протокол прокатит для провайдеров-фрагментации?

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

Правильный вариант — писать провайдеру, у которого проблемы с фрагментацией

Понятно, просто в данный момент читаю про механизм PMTUD и как понимаю это только на маршрутизаторе клиента поможет и не факт что решит проблему, или не правильно пока понимаю,

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

Я начинал с openVPN, не завелся.

В такими подробностями вам никто не поможет, можете просто не искать помощи. Если у вас netcat зависает, то либо вы его неправильно используете (не отправляете пакет для проверки?), либо у вас проблемы с сетевой доступностью. Рекомендую еще раз прочитать документацию, посмотреть какие-то примеры и уроки по использованию упомянутых инструментов.

Через nmap c портами все ок filtered.

nmap выдаёт на любой UDP-порт filtered, т.к. в ответ ничего не приходит. Это ожидаемое поведение для UDP, но никакого вывода из этого сделать нельзя. Это не OK.

Я вам написал сообщением выше всё то, что писал вам до этого. Если вам непонятно что-то конкретно — задавайте конкретные вопросы.
Вам не отвечают не потому, что не знают, а потому, что не понимают ваш вопрос.

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

Это фрагментация другого плана. PMTUD используется для того, чтобы подстроить размер одного пакета (TCP или UDP) под заданное значение MTU, а IPsec же, в случае, когда фрагментация на уровне протокола не поддерживается клиентом или сервером, отправляет один большой UDP-пакет (больше 1500 байт), а не несколько мелких, что приводит к фрагментации на IP-уровне. А фрагментированные на IP-уровне пакеты просто не любят, это чаще всего не техническая проблема, а намеренная блокировка по тем или иным причинам.

https://tools.ietf.org/html/rfc8900

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

ладно, я не знаю как конкретизировать, потому что не знаю что не работает. Знал может и не задавал вообще вопросы. Может подскажете:

nc -z -v -u 18.18.18.18 500 выдает 500 (isakmp) open nc -z -v -u 18.18.18.18 4500 выдает 4500 (ipsec-nat-t) open

Это открыты?

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

Проверьте работоспособность TCP-соединений на каком-либо порту. Запустите на стороне сервера (там, где у вас выделенный IP-адрес) nc -v -l -p 12345, на клиенте — echo hello | nc -v 18.18.18.18 12345. Если увидите hello на сервере, то все в порядке — можете настраивать OpenVPN TCP на порту 12345, по меньшей мере.

Если вы НЕ видите hello на сервере, то проверяйте настройки межсетевого экрана.

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

Что и требовалось доказать: у вас нет сетевой связности. Что имеется в виду под «сервер за NAT»? За NAT без 1-to-1 отображения, без проброса портов? Как вы тогда к нему подключаетесь?

У вас бомж-VPS без выделенного IP-адреса, а-ля $3 в год? На них выделяют пул портов, использовать можно только их.

ValdikSS ★★★★★ ()

Проще строить на готовом. Роутере например. Никаких проблем. Как у меня: старая циска 850 серии. Прекрасный проброс в локаль...

Bootmen ☆☆☆ ()
Ответ на: комментарий от Legioner

Без него тоже не работает, это уже мои попытки открыть все порты

ettaluni ()

Я когда-то давно игрался с VPN (тоже strongswan), на виртуалках локально, qemu kvm. Локально – потому что точно всё под твоим контролем.

Тоже юзаю Амазон. В POSTROUTING написал SNAT – ставить айпишник сервера вместо клиентского (чтоб пакеты уходили оттуда), а в PREROUTING – DNAT (чтобы ответы отправлялись клиенту).

Ещё (из нетривиального) для доступа по ssh на сервер исключил vpn для айпи сервера (ip xfrm policy add src \$1 dst \$2 dir out priority 1000, и аналогично in)

К сожалению боюсь не помогу. Надо долго в этом ковыряться, пробовать. На сайте strongswan много всяких примеров. Да и картинку вашу не понял. У меня один клиент (очень редко нужно).

PS. Ну собственно ответ на вопрос в сабже – как разбираться? – локально запустите виртуалки, соедините их виртуальными свитчами как в самом близком вам примере на сайте стронгсвана, добейтесь работоспособности (у них же работает! :) ). Потом постепенно переходите к своему случаю с Амазоном. У меня кстати были проблемы с сертификатами, я не разобрался в чём дело, использую пароль.

the1 ★★ ()
Последнее исправление: the1 (всего исправлений: 1)

Zerotier использовать пробовал?

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

На консоль AWS EC2 получается заходить на данном тарифном плане, всё-таки?

Если да, то просто перепроверьте там фаерволл (security groups). Это стандартная история.

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

Да практическое применение в данном случае простое: SG представляет собой политику, набор правил фаерволла (входящих+исходящих).

Одной VM можно присвоить несколько SG, и они просуммируются.

Одну SG можно использовать на многих VM.

Вот и вся суть. Может и не в этом дело, но что-то очень похоже, это очень расхожая ситуация.

https://assets.website-files.com/58fe8f93dc9e750ca84ebb16/5ac64b5e9912212018f...

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

Как ты настроил проброс портов?

Повспоминал… специально пробрасывать порты на Амазоне не нужно, они сами это делают (@Legioner похоже неудачно выразился). Ты (например) пингуешь выданный ими внешний IP, а пинг-риквесты прилетают тебе на внутренний IP сервера. Выглядит как будто они реализовали это DNAT-ом.

https://ibb.co/pw99Kvr

Это firewall, там надо разрешить обращения со своего внешнего клиентского IP (и желательно только с него). Можно по всем протоколам и портам. Насколько я помню, security groups (о которых говорит NDfan) – это именно они, настройки амазоновского (DNAT-ящего) firewall.

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

придется сначала на виртуальных машинах делать

Я приготовил образ системы, который из /etc/rc.local выполняет скрипт(ы) из подключённого винча (виртуального само собой). В том скрипте разные конфиги для разных мак-адресов (=разных машин в моём виртуальном микро-интернете). Заскриптовал короче, для надёжной повторябельности (и бэкапа).

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

…фрагментация…

Это лечится -j TCPMSS с либо --set-mss, либо --clamp-mss-to-pmtu? (известная хрень, но я её не понимаю). Или это что-то более экзотичное?

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

TCPMSS только для TCP, он модифицирует значение MSS в TCP-пакетах. Его используют для того, чтобы соединение с самого первого пакета знало, если на пути есть MTU ниже стандартного 1500. Он не обязателен (для согласования MTU есть PMTUD), но помогает в тех случаях, когда PMTUD по какой-то причине не работает.

Здесь же UDP-пакеты, и фрагментация одного пакета на IP-уровне, чей размер значительно больше (стандартного) MTU. Обычно программы работают с потоками данных, либо полагаясь на TCP, либо реализуя потоковый протокол поверх UDP, который отправляет данные в небольших пакетах. IPsec’у (без поддержки фрагментации на уровне протокола) для корректной работы нужно отправить один большой UDP-пакет (и принимается он тоже как один большой, а не как несколько маленьких), поэтому необходима фрагментация на уровне IP.

Это оффтоп, давайте закончим.

ValdikSS ★★★★★ ()
Последнее исправление: ValdikSS (всего исправлений: 2)
Ограничение на отправку комментариев: только для зарегистрированных пользователей