Вы здесь

Поднимаем L2TP/IPSEC за 10 минут


Борьба с блокировками РКН своими силами – поднимаем свой VPN сервер – L2TP/IPSEC за 10 минут

Сегодня я покажу, как можно настроить l2tp/ipsec сервер, он не требует дополнительного клиента практически ни на каких устройствах, работает, так сказать, из коробки везде, в том числе и на яблочной технике.

Сперва необходимо найти себе хостера, чтобы купить у него VPS находящийся за рубежом. Раньше всё было предельно просто – бери любого, и пользуйся, сейчас же из-за санкций, с этим большущие проблемы – т.к. не понятно, как оплачивать сервис.

В общем погуглите, если гуглить лень, то скажу, что на данный момент удалось найти очень дешевые vps с расположением в США у хостера ]]>justhost.ru]]>. Конечно, сейчас ситуация такая себе, и сегодня у компании этот сервис есть, а завтра может уже не быть… Но тем не менее… И да – это не реклама, если что.

В общем заказываем сервер, указываем, что хотим зарубежный, самый дешевый с Ubuntu 20.04, и курим, пока он подготовится и пришлют данные для доступа. После чего подключаемся к нему и первым делом обновляем систему:

apt update
apt upgrade

После обновления желательно сменить рутовый пароль, желательно что бы этот пароль был подлиннее, а еще желательнее – создать непривилегированную учёту, и ограничить вход под рутом, но это как-нибудь потом, пока просто сменим пароль:

passwd

Когда запросит пароль вводим его.

Далее ставим strongswan для настройки ipsec:

apt install strongswan

и производим его настройку:

nano /etc/ipsec.conf

Пример содержимого:

config setup
conn rw-base
    fragmentation=yes
    dpdaction=clear
    dpdtimeout=90s
    dpddelay=30s
conn l2tp-vpn
    also=rw-base
    ike=aes128-aes192-aes256-sha1-sha256-modp1024-modp3072
    esp=aes128-aes192-aes256-sha1-sha256-modp1024-modp3072
    leftsubnet=%dynamic[/1701]
    rightsubnet=%dynamic
    mark=%unique
    leftauth=psk
    rightauth=psk
    type=transport
    auto=add

Я не буду особо останавливаться на параметрах, кому это интересно читайте документацию, но всё же отмечу, что здесь особо часто могут вызывать затыки параметры шифрования ike и esp, если у вас клиент вдруг будет подключаться по l2tp, но не будет инициироваться ipsec, то смотрите syslog, и добавляйте необходимые алгоритмы в конфиг, в логе будет указано, что не так.

Далее добавим секретный ключ для ipsec:

nano /etc/ipsec.secrets

Содержимое:

# This file holds shared secrets or RSA private keys for authentication.
# RSA private key for this host, authenticating it to any other host
# which knows the public part.
%any %any : PSK "verysecretipseckey"

Включаем и запускаем службу:

systemctl enable strongswan-starter
systemctl start strongswan-starter

Далее нужно устновить l2tp сервер:

apt install xl2tpd

Правим конфиги:

nano /etc/xl2tpd/xl2tpd.conf

Содержимое:

[global]
port = 1701
auth file = /etc/ppp/chap-secrets
access control = no
ipsec saref = yes
force userspace = yes

[lns default]
exclusive = no
ip range = 10.32.100.100-10.32.100.199
hidden bit = no
local ip = 10.32.100.1
length bit = yes
require authentication = yes
name = l2tp-vpn
pppoptfile = /etc/ppp/options.xl2tpd
flow bit = yes

Соответственно тут ip range и local ip – это адреса которые будут выдаваться клиентам, и адрес сервера. Желательно, чтобы они не пересекались с вашими локальными адресами.

Правим опции:

nano /etc/ppp/options.xl2tpd

ms-dns 8.8.8.8
ms-dns 192.168.1.1
asyncmap 0
auth
crtscts
lock
hide-password
modem
mtu 1460
lcp-echo-interval 30
lcp-echo-failure 4
noipx
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
multilink
mppe-stateful

И добавляем пользователей:

nano /etc/ppp/chap-secrets

Пример содержимого:

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
sanglyb l2tp-vpn        verysecretpass      *
user1    l2tp-vpn    veryverysecretpass    *

Соответственно – столбцы подписаны, думаю понятно, что есть что.
Включаем и запускаем службу:

systemctl enable xl2tpd
systemctl start xl2tpd

Теперь подключение к вашему серверу должно проходить, но вероятно работать ничего не будет, нужно добавить скрипт, который будет разрешать редиректы и добавить соответсвующее правило маскарадинга:

nano /root/ipsec

Содерижмое скрипта:

iptables --table nat --append POSTROUTING --jump MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
/etc/init.d/ipsec restart

Делаем скрипт исполняемым и выполняем его:

chmod +x /root/ipsec
sh /root/ipsec

Теперь вроде как сеть должна заработать как надо, но если ничего не предпринять, то после перезагрузки сервера – работоспособность будет нарушена. Нужно этот скрипт поместить в автозагрузку, для этого можно воспользоваться rc.d

Правим файл:

nano /etc/systemd/system/rc-local.service

Приводим его к виду:

[Unit]
 Description=/etc/rc.local Compatibility
 ConditionPathExists=/etc/rc.local
[Service]
 Type=forking
 ExecStart=/etc/rc.local start
 TimeoutSec=0
 StandardOutput=tty
 RemainAfterExit=yes
 SysVStartPriority=99
[Install]
 WantedBy=multi-user.target

Правим следующий файл:

nano /etc/rc.local

#!/bin/sh
sh /root/ipsec
exit 0

Делаем его исполняемым, включаем и запускаем службу:

chmod +x /etc/rc.local
systemctl enable rc-local
systemctl start rc-local

Теперь скрипт должен будет выполняться автоматически при старте системы.

Но останется еще одна проблема – после добавления правила в фаерволл, у вас наверняка перестанет работать разрешение имён непосредственно на сервере. Это связано с тем, что в соверемнных ubuntu используется systemd-resolved, для различных оптимизаций, кэширования и который правит resolve.conf – подставляя в него адрес локалхоста, который после проделанных манипуляций становится толи не доступным, толи не корректно работающим.

Тут можно заморочится, и добавить дополнительные правила в NAT, но мне кажется проще просто вырубить systemd-resolved и не париться.

systemctl stop systemd-resolved
systemctl mask systemd-resolved
nano /etc/resolv.conf

В файл нужно добавить строчки с нужными DNS (к примеру - гугловыми - 8.8.8.8 и 8.8.4.4), например одержимое моего файла:

# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients to the
# internal DNS stub resolver of systemd-resolved. This file lists all
# configured search domains.
#
# Run "resolvectl status" to see details about the uplink DNS servers
# currently in use.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.

nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 127.0.0.53

После этого, всё должно быть нормально.
Да настройка эта не идеальна, как и сам l2tp/ipsec но тем не менее, по крайней мере у меня – работает без каких-либо проблем. Тут много что можно оптимизировать, повысить безопасность, но это как мне кажется, во-первых, крайне сложно написать в рамках одной заметки, во-вторых – подавляющему большинству это будет не нужная лишняя информация.

Борьба с блокировками РКН своими силами – поднимаем свой VPN сервер – L2TP/IPSEC за 10 минут - настройка подключения в Windows

Как уже говорил, в следующих заметках постараюсь показать процесс настройки openvpn, а также как можно, заворачивать в vpn только нужный, читай заблокированный трафик, возможно посмотрим в сторону прокси и что с ним можно придумать.

21 46

Поделитесь статьей с друзьями в соц. сетях, возможно, она будет им полезна.


Если вам помогла статья, вы можете >>отблагодарить автора<<