LINUX.ORG.RU

Подключение VDS в локальную сеть через MikroTik посредством VPN L2TP+IPSec

 , , , ,


2

1

Предыстория! Убил я на это 4 дня и 4 ночи :D но мне удалось решить и организовать задуманную мною задачу и хочу поделиться, возможно кому то это понадобиться так как в интернете я путнего так ни чего и не нашел пока сам методом тыка и поиска все не решил сам! Сразу скажу что в Linux`ах и написание статей я не спец, самоучка, поэтому не судите строго! :)

Что мы имеем. В данном примере будет приведена наша сеть. У нас домашняя локальная сеть из 4-х сегментов вся на MikroTik`ах ниже я приведу все подсети для понимания

10.0.0.0/27 - подсеть выделанная для VPN 1 сети
10.0.0.32/27 - подсеть выделанная для VPN 2 сети
10.0.0.64/27 - подсеть выделанная для VPN 3 сети
10.0.0.96/27 - подсеть выделанная для VPN 4 сети
10.0.1.0/24 - подсеть выделенная для локалки 1 сети
10.0.2.0/24 - подсеть выделенная для локалки 2 сети
10.0.3.0/24 - подсеть выделенная для локалки 3 сети
10.0.4.0/24 - подсеть выделенная для локалки 4 сети

так как у нас VPN клиентов не много было принято решение не раскидывать их по подсетям и не мудрить и мы сделали ограничение в /27, самый мощный и стабильный MikroTik у нас стоит в 1 сети следовательно мы сделали подключение по схеме звезда через VPN L2TP+IPSec, 1 сеть VPN сервер, 2,3,4 сеть через VPN клиент подключены к 1 сети VPN серверу, естественно на всех MikroTik`ах настроены route во все подсети то есть все друг друга видят, пингуют, шары и так далее.

Задача была подключить VDS (наш VDS на Ubuntu 20.04) в локальную сеть к VPN серверу 1 сети через L2TP+IPSec со всеми route как положено, и тут у нас начались головники, поэтому прикладываю ниже инструкцию как мы это организовали.

Устанавливаем необходимые пакеты

sudo apt-get install strongswan xl2tpd net-tools

далее заходим в файл ipsec.conf

sudo nano /etc/ipsec.conf

и вносим следующие данные

conn НАЗВАНИЕ_ВАШЕГО_ПОДКЛЮЧЕНИЯ
  auto=add
  dpdaction=restart
  closeaction=restart
  keyexchange=ikev1
  authby=secret
  type=transport
  left=%defaultroute
  leftprotoport=17/1701
  rightprotoport=17/1701
  right=АДРЕС_VPN_СЕРВЕРА
  ike=aes128-sha1-modp2048
  esp=aes128-sha1

заходим в файл ipsec.secrets

sudo nano /etc/ipsec.secrets

и вносим строку с паролем от IPSec

: PSK "ПАРОЛЬ_IPSEC"

в начале знак двоеточие : обязательно

меняем права на ipsec.secrets

sudo chmod 600 /etc/ipsec.secrets

заходим в файл xl2tpd.conf

sudo nano /etc/xl2tpd/xl2tpd.conf

вносим конфиг

[lac НАЗВАНИЕ_ВАШЕГО_ПОДКЛЮЧЕНИЯ]
lns = АДРЕС_VPN_СЕРВЕРА
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd.client
length bit = yes
redial = yes
redial timeout = 15

заходим в файл options.l2tpd.client

sudo nano /etc/ppp/options.l2tpd.client

вносим конфиг

ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-chap
noccp
noauth
mtu 1280
mru 1280
noipdefault
defaultroute
usepeerdns
connect-delay 5000
name "ЛОГИН_VPN_ЮЗЕРА"
password "ПАРОЛЬ_VPN_ЮЗЕРА"

меняем права

sudo chmod 600 /etc/ppp/options.l2tpd.client

так же выполняем следующие команды

sudo mkdir -p /var/run/xl2tpd
sudo touch /var/run/xl2tpd/l2tp-control

заходим в конфиг rc.local

sudo nano /etc/rc.local

прописываем авто запуск в rc.local с задержкой в 15 и 30 секунд, далее расскажу зачем

#!/bin/sh -e
sleep 15; ipsec up НАЗВАНИЕ_ВАШЕГО_ПОДКЛЮЧЕНИЯ
sleep 30; echo "c НАЗВАНИЕ_ВАШЕГО_ПОДКЛЮЧЕНИЯ" > /var/run/xl2tpd/l2tp-control
exit 0

разрешаем выполнение

sudo chmod +x /etc/rc.local

теперь нам нужно подкоректировать ip-up для выполнения нужных команд при запуске нашего VPN клиента, заходим

sudo nano /etc/ppp/ip-up

вносим следующее, 1 команда по добавлению DNS сервера нашего VPN сервера к интерфейсу, так как насколько я знаю с Ubuntu 18 уже пошли systemd-resolved отвечающие за DNS resolve, у нас возникли проблемы и при подключении что бы мы не делали DNS не присваивался нашему VPN клиенту и DNS имена не в какую не работали, все инструкции которые мы перечитали в интернете все указывали на костыльный метод добавления DNS сервера в глобальные настройка но это костыль, мы нашли единственный рабочий метод который добавляется не в глобальные настройки а при подключении VPN присваивается интерфейсу, все остальные команды для добавления маршрутов во все подсети локальной сети

#!/bin/sh
resolvectl dns $1 10.0.0.1
route add -net 10.0.0.0/27 gw 10.0.0.1
route add -net 10.0.0.32/27 gw 10.0.0.1
route add -net 10.0.0.64/27 gw 10.0.0.1
route add -net 10.0.0.96/27 gw 10.0.0.1
route add -net 10.0.1.0/24 gw 10.0.0.1
route add -net 10.0.2.0/24 gw 10.0.0.1
route add -net 10.0.3.0/24 gw 10.0.0.1
route add -net 10.0.4.0/24 gw 10.0.0.1
exit 0

в файле ip-down

sudo nano /etc/ppp/ip-down

мы прописываем команды для удаления маршрутов при отключении VPN соединения, DNS сюда добавлять не нужно так как при отключении оно удалиться само с интерфейсом

#!/bin/sh
route delete -net 10.0.0.0/27 gw 10.0.0.1
route delete -net 10.0.0.32/27 gw 10.0.0.1
route delete -net 10.0.0.64/27 gw 10.0.0.1
route delete -net 10.0.0.96/27 gw 10.0.0.1
route delete -net 10.0.1.0/24 gw 10.0.0.1
route delete -net 10.0.2.0/24 gw 10.0.0.1
route delete -net 10.0.3.0/24 gw 10.0.0.1
route delete -net 10.0.4.0/24 gw 10.0.0.1
exit 0

далее перезагружаем сервер командой

sudo shutdown -r now

или

sudo reboot

далее командой проверяем появился ли у нас интерфейс ppp0

ifconfig

проверяем работоспособность IPSec

sudo ipsec status

проверяем все ли у нас хорошо в rc.local

sudo systemctl status rc-local.service

должно быть все хорошо)))

так же дополнительные команды запуск

sudo ipsec up НАЗВАНИЕ_ВАШЕГО_ПОДКЛЮЧЕНИЯ
echo "c НАЗВАНИЕ_ВАШЕГО_ПОДКЛЮЧЕНИЯ" | sudo tee /var/run/xl2tpd/l2tp-control

выключение

echo "d НАЗВАНИЕ_ВАШЕГО_ПОДКЛЮЧЕНИЯ" | sudo tee /var/run/xl2tpd/l2tp-control
sudo ipsec down НАЗВАНИЕ_ВАШЕГО_ПОДКЛЮЧЕНИЯ

А теперь немного пояснений по поводу rc.local зачем мы прописали авто запуск туда? Теоретически можно прописать авто запуск в ipsec.conf и xl2tpd.conf но при запуске самого VDS сперва стартует L2TP а уже потом только IPSec следовательно так как у нас включено на MikroTik`е без шифрования отказывать в соединение L2TP начинает спамить так как MikroTik его дропает без IPSec, поэтому мы сделали так при включении VDS спустя 15 секунд устанавливается сначала соединение IPSec а уже после этого через 30 секунд устанавливается VPN туннель все везде без спама и поднимается в нужном порядке.

Я думаю моя статья будет кому то полезна! :)

Всем спасибо кто пытался нам помочь в данной проблеме в теме Проблемы с DNS на VPN а так же всем респект от сети WN (WhiteNet) :D



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

ipsec.conf

А в новом формате можно?

mord0d ★★★★★
()
  1. Дистрибутивные /etc/ppp/ip-up и /etc/ppp/ip-down трогать не надо, для пользовательских скриптов есть каталоги /etc/ppp/ip-up.d и /etc/ppp/ip-down.d

  2. route add/route delete лучше заменить на ip route

  3. начинать файлы в ip-up.d/ip-down.d лучше с


[ $6 = "НАЗВАНИЕ_ВАШЕГО_ПОДКЛЮЧЕНИЯ" ] || exit 0
Dimez ★★★★★
()

Зачем такая сложная конфигурация, почему было просто не использовать Wireguard или на худой конец OpenVPN?

nebularia ★★★
()

Нет смысла гемороиться с микротиком. Когда можно приобрести микрокомпьютер и сделать его шлюзом с wireguard

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

То есть по вашему проще перелопатить локальную сеть из 4-х сегментов всю сеть перенастроить на другие сервисы чем настроить 1 Ubuntu? Перелопатить всю сеть и потом еще биться несколько дней с Ubuntu? Сеть настроена и работает не первый год стабильно, проблема была в 1 сервере Ubuntu с ним и решали проблемы чем трогать всю сеть.

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

Это все не логично, зачем трогать и переделывать целую сеть для того чтобы присоединить 1 сервер, логика отсутствует!

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

(Задача была подключить VDS (наш VDS на Ubuntu 20.04) в локальную сеть к VPN)
Пакупаешь kvm vds, на нём разворачиваешь wireguard с named.
Вот тебе и шлюз с dns сервером одновременно.
Можно на роутере настроить WG клиент и все будут по нему ходить.
Можно отдельный производительный шлюз сделать и ходить через него.
Вообще ни каких проблем.
Даже не обязательно всем WG клиент давать.
Они в обычных сетях видят виртуальный адресс.
Впринцепи он для них и будет являться IP dns сервером.
Клиенты можно ставить машинам которые несут сервисы например. Чтобы был виртуальный адресс.
Вот и всё.
Туннели и openvpn это прошлый век.
Всё легко и просто.

tehew10569
()

Блин, а чо не под катом? Текста на всю страницу в «Статьях». @hobbit, может подредактируешь?

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

Поправил. Забыл совсем про это.

Dimez ★★★★★
()

непонятно только зачем все эти сложности. можно поднять просто ипсек без л2тп.

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

А теперь масштабируем это для 5000+ roadworriors и 50+ офисов со своими подсетями, и обеспечиваем отказоустойчивость всего этого... как вы сказали, прошлый век?

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

RouterOS уже довольно давно поддерживает Wireguard, пользуюсь с тех пор когда оно ещё в бета-версии было, чтобы ходить в домашнюю сеть вне дома, работает стабильно.

YellowMold
()
Последнее исправление: YellowMold (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.