Удобство L2TP заключается в возможности использовать встроенные средства Windows, Android, Mac OS для подключения к VPN-серверу. В данной инструкции рассмотрим процесс его установки и настройки на CentOS 8. Для реализации сервиса мы будем использовать strongswan + xl2tpd. В итоге мы получим:
Мы выполним следующие настройки:
1. Для установки ПО потребуется репозиторий EPEL:
dnf install epel-release
2. Настраиваем брандмауэр:
firewall-cmd –permanent –add-port=1701/{tcp,udp}
firewall-cmd –permanent –add-service=ipsec
firewall-cmd –reload
3. Отключаем SELinux:
setenforce 0
sed -i ‘s/^SELINUX=.*/SELINUX=disabled/g’ /etc/selinux/config
Для настройки нашего сервера мы настроим следующие компоненты: IPSEC (strongswan), L2TP (xl2tpd), PPP.
Для управления IPSec используется пакет strongswan — установим его командой:
dnf install strongswan
Открываем конфигурационный файл для настройки ipsec:
vi /etc/strongswan/ipsec.conf
Для config setup добавим:
config setup nat_traversal=yes virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12 oe=off protostack=netkey
* где:
… а также вставляем ниже:
conn L2TP-PSK-NAT rightsubnet=vhost:%priv also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT authby=secret pfs=no auto=add keyingtries=3 rekey=no ikelifetime=8h keylife=1h type=transport left=%any leftprotoport=udp/1701 right=%any rightprotoport=udp/%any ike=aes128-sha1-modp1536,aes128-sha1-modp1024,aes128-md5-modp1536,aes128-md5-modp1024,3des-sha1-modp1536,3des-sha1-modp1024,3des-md5-modp1536,3des-md5-modp1024 esp=aes128-sha1-modp1536,aes128-sha1-modp1024,aes128-md5-modp1536,aes128-md5-modp1024,3des-sha1-modp1536,3des-sha1-modp1024,3des-md5-modp1536,3des-md5-modp1024
Создаем секретный ключ — для этого открываем на редактирование файл:
vi /etc/strongswan/ipsec.secrets
… и добавляем:
%any %any : PSK “my_key_password”
* в данном примере мы устанавливаем общий пароль my_key_password для соединений с любого IP.
Разрешаем автозапуск strongswan и перезапускаем службу:
systemctl enable strongswan
systemctl restart strongswan
Устанавливаем сервер L2TP:
dnf install xl2tpd
Открываем файл настройки сервера:
vi /etc/xl2tpd/xl2tpd.conf
Для раздела [global] добавляем:
[global]port = 1701access control = noipsec saref = yesforce userspace = yesauth file = /etc/ppp/chap-secrets
где:
Раздел [lns default] можно полностью удалить или закомментировать (символом «;») и заменить на:
[lns default]ip range = 176.16.10.10-176.16.10.200local ip = 176.16.10.1require authentication = yesname = l2tppass peer = yesppp debug = nopppoptfile = /etc/ppp/options.xl2tpdlength bit = yesrefuse pap = yes
Разрешаем автозапуск vpn-сервера и перезапускаем его:
systemctl enable xl2tpd
systemctl restart xl2tpd
Открываем на редактирование конфигурационный файл:
vi /etc/ppp/options.xl2tpd
Можно закомментировать все, что там есть и вставить:
ipcp-accept-localipcp-accept-remoteauthidle 1800mtu 1200mru 1200nodefaultroutelockproxyarpconnect-delay 5000name l2tpdloginms-dns 77.88.8.8ms-dns 8.8.8.8require-mschap-v2
Создаем пользователя. Для этого открываем файл:
vi /etc/ppp/chap-secrets
И добавляем:
user1 * password1 172.16.10.10user2 * password2 *user3 l2tpserver password2 *
* формат записи — <логин> <имя сервиса> <пароль> <IP клиента (не обязательно)>. Первая учетная запись может подключаться к любому VPN и только с IP 172.16.10.10, вторая — к любому VPN с любого IP, третья — к серверу l2tpserver, но с любого IP.
Перезапускаем xl2tpd:
Рассмотрим процесс настройки клиента на базе Windows. Для андроида и устройств Apple параметры заполняются аналогично.
В параметрах сети и Интернет в разделе VPN создаем новое соединение:
Задаем настройки:
Соединение VPN в Windows можно создать с помощью Powershell:
Add-VpnConnection -Name “VPN CentOS 8” -ServerAddress “192.168.1.15” -TunnelType “L2tp” -EncryptionLevel “Required” -AuthenticationMethod MsChapv2 -SplitTunneling -DnsSuffix “admins24.local” -L2tpPsk “my_key_password” -Force -RememberCredential -PassThru
При подключении к нашему серверу VPN у клиента не будет возможности выходить в Интернет и подключаться к ресурсам сети, что делает соединение бессмысленным. Поэтому первым этапом после настройки сервера должна быть настройка маршрутизации сети. Для этого необходимо включить возможность работы в качестве шлюза и настроить правила в брандмауэре.
Нам нужно разрешить опцию net.ipv4.ip_forward в настройках ядра — для этого откроем файл:
vi /etc/sysctl.d/99-sysctl.conf
И добавляем в него следующую строку:
net.ipv4.ip_forward=1
После применяем настройку:
sysctl -p /etc/sysctl.d/99-sysctl.conf
В случае с единым сетевым интерфейсом больше ничего делать не потребуется — CentOS начнет работать как Интернет-шлюз.
В случае с несколькими сетевыми адаптерами, настраиваем сетевой экран.
Настройка выполняется для двух сетевых интерфейсов на примере ens32 (внутренний) и ens34 (внешний):
firewall-cmd –permanent –zone=public –add-masquerade
firewall-cmd –direct –permanent –add-rule ipv4 filter FORWARD 0 -i ens32 -o ens34 -j ACCEPT
Проверка подлинности через активный каталог от Microsoft в xl2tp выполняется с помощью winbind и samba.
Для корректной работы сервера с Active Directory необходимо задать ему имя (hostname), которое будет доступно в DNS. Также на сервере должно быть задано точное время.
1. Необходимо убедиться, что сервер доступен по своему доменному имени. Если серверу так и не было задано вменяемого имени, вводим команду:
hostnamectl set-hostname vpn.admins24.local
* где vpn — имя сервера; admins24.local — домен.
После добавляем в DNS наш сервер VPN. Ждем минут 15 (если у нас используется доменная инфраструктура с несколькими сайтами, иначе ждать не нужно).
2. Задаем временную зону:
\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
* в данном примере мы задаем зону по московскому времени.
Устанавливаем утилиту для синхронизации времени, разрешаем запуск демона и стартуем его.
yum install chrony
systemctl enable chronyd
systemctl restart chronyd
Устанавливаем необходимые компоненты:
dnf install samba-client samba-winbind samba-winbind-clients krb5-workstation
Открываем конфигурационный файл samba:
vi /etc/samba/smb.conf
В разделе [global] редактируем следующие опции:
workgroup = DMOSKsecurity = ads
* где DMOSK — NETBIOS имя домена; ads — указывает, что для samba будет использоваться модель безопасности LDAP Active Directory.
Также в [global] добавим следующие строки:
kerberos method = secrets and keytabrealm = DMOSK.LOCALwinbind enum groups = Yeswinbind enum users = Yesidmap config * : rangesize = 1000000idmap config * : range = 1000000-19999999idmap config * : backend = autorid
Вводим сервер в домен:
net ads join -U [email protected]
* где Administrator — учетная запись пользователя AD с правами на ввод компьютеров в домен; admins24.local — наш домен.
Мы должны увидеть, примерно, следующее:
Using short domain name — DMOSKJoined ‘SAMBA’ to dns domain ‘admins24.local’
Разрешаем автозапуск winbind и стартуем его:
systemctl enable winbind –now
Выбираем профиль для аутентификации:
authselect select winbind –force
Проверяем, что наш сервер может получить список пользователей Active Directory:
… и групп:
Если мы увидели список пользователей и групп, то присоединение сервера к домену завершено.
После проверяем, что аутентификация в AD через модуль ntlm_auth работает корректно:
ntlm_auth –request-nt-key –domain=DMOSK.LOCAL –username=Administrator
* где DMOSK.LOCAL — наш домен; Administrator — пользователь, под которым будем логиниться для проверки работы модуля.
Открываем конфигурационный файл options.xl2tpd:
Добавляем в самый низ:
…plugin winbind.sontlm_auth-helper ‘/usr/bin/ntlm_auth –helper-protocol=ntlm-server-1 –require-membership-of=”DMOSK\\VPN Users”‘
* где VPN Users — группа в AD, пользователи который будут иметь возможность использовать VPN.
В Active Directory добавляем группу VPN Users (если еще нет). Группа должна быть локальная в домене. В группу добавим пользователей, которым хотим дать доступ для VPN-подключения.
В настройках подключения к серверу меняем пользователя и пароль на доменные.
Описанная выше настройка не предполагает наличие лога. Для этого открываем конфигурационный файл для ppp:
Добавим:
…logfile /var/log/xl2tpd/xl2tpd.logdebug
Создадим каталог для лога:
mkdir /var/log/xl2tpd
Перезапускаем сервис xl2tpd:
Пробуем подключиться к серверу — в случае наличия проблем, наблюдаем за логом:
tail -f /var/log/xl2tpd/xl2tpd.log
Другие инструкции про VPN, которые могут быть полезны:
1. Настройка VPN-сервера xl2tp + racoon на CentOS 7
2. Установка и настройка L2TP VPN-сервера на Ubuntu Server
3. Как настроить сервер OpenVPN на Windows
4. Настройка сервера OpenVPN на CentOS 8
5. Настройка OpenVPN сервера на Mikrotik
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies