LinuxОССети

VPN сервер L2TP на Ubuntu

Про технологию VPN сейчас не знает наверно только самый ленивый. VPN позволяет объединять несколько частных сетей в одну используя Internet. В этой статье расскажу как настроить VPN сервер L2TP на Ubuntu.

Технология VPN (Virtual Private Network) – в переводе виртуальная частная сеть. VPN можно реализовать с использованием разных протоколов и способов шифрования. В этой статье рассмотрим протокол L2TP по причине его массовости. Клиент подключения L2TP есть в большинстве операционных систем от настольных до мобильных.

Протокол L2TP является вторым по популярности и простоте подключения. Первый был PPTP, но после того как его взломали, использовать PPTP не безопасно. Перед настройкой определим порты которые необходимо будет открыть в брандмауэре.

Используемые порты
  • L2TP 1701/UDP
  • IPSEC 500/UDP
  • IPSEC NAT-T4500/UDP

Открывать порты в брандмауэре мы будем ближе к концу статьи. Однако нужно учесть тот факт что в случае если у вас VPN сервер стоит за NAT порты придется прокидывать. Как прокидывать порты это уже зависит от вашего роутера смотрящего в интернет.

Настройка системы

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

sudo su
Включение IP Forwarding

Для маршрутизации пакетов через наш VPN сервер необходимо включить IP Forwarding, по умолчанию он выключен. Откроем на редактирование файл

nano /etc/sysctl.conf

Необходимо найти строку net.ipv4.ip_forward=1 и убрать вначале строки знак #. Значение 1 означает что пересылка пакетов включена.

Применим настройки перечитав конфигурационный файл

sysctl -p

Настройка брандмауэра

Если вы знакомы с IPtables и работали с ним просто добавьте следующее правило

iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o eth0 -j MASQUERADE

Этим правилом мы разрешаем маскарад (подмену) ip адреса клиента на внешний адрес сервера для сети 10.10.0.0/24. В качестве сетевого адаптера у меня выступает eth0, если у вас другой подставьте его имя. Список сетевых интерфейсов можно увидеть командой ip a

В случае когда вы не знакомы с брандмауэром, настроим правила iptables и добавим скрип в автозагрузку.

Создание файла с правилами iptables

nano /etc/iptables.rules

Добавим правила разрешающие доступ к серверу по SSH, маскарад и еще некоторые правила необходимые для нормальной работы VPN сервера. Все остальные порты закрываем.

#!/bin/sh
iptables -F
iptables -X
iptables -A INPUT -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -m conntrack --ctstate INVALID -j DROP
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o eth0 -j MASQUERADE
iptables -A INPUT -i eth0 -p udp --dport 500 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -i eth0 -p 50 -j ACCEPT
iptables -A INPUT -i eth0 -p 51 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT
iptables -A INPUT -i eth0 -j DROP

Сохраним файл и сделаем его исполняемым

chmod +x /etc/iptables.rules

Запуская данный скрипт будут активированы правила iptables. Нам необходимо чтобы правила применялись автоматически после включения сервера.

Создадим systemd юнит

nano /etc/systemd/system/ipt.service

Добавим в файл следующий текст

[Unit]
Description=Iptables service
After=network.target
 
[Service]
Type=notify
ExecStart=/etc/iptables.rules
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
 
 
[Install]
WantedBy=multi-user.target

Включим в автозагрузку созданный сервис ipt

systemctl enable ipt

Теперь после загрузки сервера будут срабатывать наши правила. Будьте осторожны с закрытием портов, ошибка в написании правил закроет доступ к серверу.

Установка ipsec

Для настройки ipsec будем использовать Strongswan.

Установка пакета strongswan

apt install strongswan

Основные настройки strongswan хранит в файле /etc/ipsec.conf , откроем его в редакторе nano и внесем изменения.

nano /etc/ipsec.conf

Файл состоит из базовой конфигурации для всех соединений config setup и описания каждого соединения. Форма описания настроек конкретного VPN соединеyия имеет вид: conn имя-соединения.

В раздел config setup добавим следующие строки

config setup
        charondebug="ike 2, knl 3, cfg 0"
		uniqueids=no

В строке charondebug описываются разрешенные протоколы. Ранее в некоторых моделях iPhone соединение VPN работало только по протоколу ike v1. Если у вас будут наблюдаться проблемы с подключением, добавьте в charondebug еще одно значение ike 1

Спустимся в самый конец файла и добавим своё VPN соединение

conn l2tp-vpn
        type=transport
        authby=secret
        pfs=no
        rekey=no
        keyingtries=2
        left=%any
        leftid=@srvl2tp
        right=%any
        auto=add

После внесения изменения в файл сохраним его, клавиша F2. Давайте пробежимся по настройкам:

НазваниеВозможное значениеОписание
typetunnel, transport, transport_proxy, passthroughТип используемого соединения. Возможные значения: tunnel – соединение межу узлами: точка-точка, точка-подсеть, подсеть-подсеть; transport – транспортный режим между узлами; transport_proxy – специальный режим мобильного транспортного прокси-сервера IPv6; passthrough – в данном режиме обработка IPSec не выполняется
authbysecret (или psk), pubkey, rsasig (или ecdsasig)Способ аутентификации между двумя шлюзами. Перечислим их: secret – кодовое слово, pubkey – публичный ключ, используется по умолчанию. rsasig – для цифровой подписи RSA, ecdsasig – используется подпись формата Elliptic Curve DSA.
pfsyes, noВключить полную секретность ключей при передачи по каналу обмена ключами
rekeyyes, noПересматривать ли условия подключения когда время соединения заканчивается
keyingtriesЦелое число или % для бесконечностиКоличество попыток для согласования соединения
left, rightip адрес, fqdn имя, %any, range, subnetleft – адрес сервера, возможные значения: ip адрес, fqdn – полное имя, %any – любой адрес, range – диапазон адресов, subnet – подсеть
right – адрес клиента. Может принимать все те же значения что и сервер (left)
leftidid сервераleftid – имя vpn сервера

Необходимо создать секретный ключ PSK (pre-shared key). Откроем файл /etc/ipsec.secrets и добавим ключ

nano /etc/ipsec.secrets

В конец файла добавим строку следующего содержания:

%any : PSK "super-mega-pass"

где %any – IP адрес для которого мы устанавливаем PSK ключ, в нашем случае любой адрес; PSK – тип ключа, и в кавычках сам ключ.

Перезапустим демон strongswan для того чтобы перечитать конфиги

systemctl restart strongswan-starter

После перезапуска сервиса проверим что он запущен и работает

systemctl status strongswan-starter
strongswan status

Добавим strongswan в автозагрузку

systemctl enable strongswan-starter
Установка L2TP

Устанавливаем сервер L2TP

apt install xl2tpd

Откроем конфигурационный файл xl2tpd.conf

nano /etc/xl2tpd/xl2tpd.conf

В файл необходимо внести изменения. Содержимое файла это список всех настроек с комментариями. На начальном этапе для наглядности можете оставить все как есть и просто раскомментировать необходимую настройку с внесением изменений. В дальнейшем конечно удобнее удалить все лишнее и оставить только необходимое. Внесем следующие изменения:

[global]
port = 1701
auth file = /etc/ppp/chap-secrets
access control = no

[lns default]
exclusive = no
ip range = 10.10.0.10-10.10.0.20
hidden bit = no
local ip = 192.168.20.104
length bit = yes
require chap = yes
refuse pap = yes
require authentication = yes
name = srvl2tp
pppoptfile = /etc/ppp/options.xl2tpd
flow bit = yes

Секция [global]

  • port – используемый порт. Протокол UDP. Указанный порт используется по умолчанию.
  • auth file – путь к файлу где хранятся учетные данные пользователей
  • access control – в случае значения yes будет принимать соединения только от клиентов с указанными IP адресами. По умолчанию стоит no

Секция [lns default]

  • exclusive – разрешить множественные подключения клиента. Если поставить yes будет разрешено только одно подключение для одной учетной записи.
  • ip range – диапазон ip адресов выдаваемых клиентам при подключении
  • hidden bit – скрыть AVP или нет.
  • local ip – локальный ip адрес VPN сервера
  • length bit – включение бита длины для указания полезной нагрузки пакета L2TP
  • require chap – использовать CHAP авторизацию клиентов
  • refuse pap – отключить PAP авторизацию
  • require authentication – включить авторизацию клиентов
  • name – имя сервера
  • pppoptfile – файл с настройками PPP
  • flow bit – включение порядковых номеров в пакетах

После внесённых изменений сохраним файл. Перезапустим демон для принятия изменений

systemctl restart xl2tpd

После перезапуска проверим статус сервиса

systemctl status xl2tpd
xl2tpd status

Если сервис запущен и нет ошибок добавим его в автозагрузку

systemctl enable xl2tpd
Настройка Point-to-Point Protocol (PPP)

Создадим файл конфигурации с настройками подключения PPP

nano /etc/ppp/options.xl2tpd

Добавим в него текст следующего содержания:

noccp
auth
mtu 1410
mru 1410
nodefaultroute
noproxyarp
silent
asyncmap 0
hide-password
require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
logfile /var/log/xl2tpd/xl2tpd.log
debug

Сохраним изменения. Журналирование подключений будет происходить в файле /var/log/xl2tpd/xl2tpd.log, в случае проблем подключения нужно читать лог. Заключительным этапом настроим учетные данные пользователей VPN сервера. Для этого внесем изменения в файл /etc/ppp/chap-secrets

nano /etc/ppp/chap-secrets

Добавим в конец файла учетные данные пользователей:

"vasya" srvl2tp "x2BnoPdfj" *
"igor" srvl2tp "mS3KlfiB2Z" *

Пользователей может быть сколько угодно, для теста я добавил двух, разберем параметры файла:

  • vasya – логин пользователя
  • srvl2tp – название VPN сервера
  • x2BnoPdfj – пароль пользователя vasya
  • * – любой IP адрес который будет присвоен пользователю из диапазона указанного ранее. Вместо * можно указать постоянный IP адрес пользователю.

В данной статье мы рассмотрели как настроить VPN сервер L2TP на Ubuntu.

Поделиться:
Подписаться
Уведомить о
guest
7 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Дмитрий
Дмитрий
8 месяцев назад

Приветствую!

Готов купить ваш сайт newadmin.ru, в том числе по цене выше рыночной.

Меня зовут Дмитрий Купрацевич. В теме сайтов более 5 лет. Занимался улучшением более 50 проектов. Ищу качественные проекты, как ваш, чтобы продолжить их развитие.

Связь через Телеграм kupratsevich, почту kuprdimasites@gmail.com, whatsapp (+79959176538).

Павел
Павел
2 месяцев назад

Доброго дня, на пункте где необходимо добавить сервис в автозапуск командой systemctl enable xl2tpd происходит следующая неприятность – xl2tpd.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable xl2tpd

komcumir
komcumir
1 месяц назад
Ответить на  Павел

Написано же что делать )

/lib/systemd/systemd-sysv-install enable xl2tpd

Константин
Константин
1 месяц назад

Здравствуйте.
После настройки vpn канал к сожалению не поднимается.
Порты 1701, 500, 4500 доступны, пакетики на них летают.

Похоже проблема со strongswan

Mar 01 01:44:05 ioann-kz charon[4926]: 13[IKE] IKE_SA (unnamed)[7] state change: CREATED => CONNECTING
Mar 01 01:44:05 ioann-kz charon[4926]: 13[IKE] no proposal found

Не подскажете что предпринять?

Lala
Lala
1 месяц назад

Порты забыл открыть, “ближе к концу статьи”

вhhhhh
вhhhhh
6 дней назад

не работает скорее всего эта инструкция как то все путанно и куча недосказанностей

Последний раз редактировалось 6 дней назад вhhhhh ем