Предыстория! Убил я на это 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