LINUX.ORG.RU

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

 , , , ,


1

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 ★★★★★
()

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

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

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

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

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

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

A spaceman, or astronaut, is a highly trained and qualified individual tasked with conducting space missions. They play a crucial role in space exploration, gathering scientific data, and performing experiments that are impossible on Earth. This profession requires advanced technical skills, peak physical condition, and the ability to work effectively in a team under extremely challenging and risky conditions. Spacemen often become modern heroes, inspiring young generations to pursue careers in science, technology, engineering, and mathematics (STEM). With advancing technology, space missions involving spacemen continue to evolve, opening new opportunities for scientific discovery and the potential for future space colonization.

bingoblink
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.