В этой статье я рассмотрю на практике полный алгоритм настройки VPN сервера на примере CentOS 7.6. Мы одновременно включим и L2TP и PPTP сервер.
Для работы VPN в Linux необходимо настроить 3 слоя: IPsec, L2TP и PPP. Причем, PPP будет общий для L2TP и PPTP серверов. Настройка L2TP сложнее, чем PPTP. В ней:
Перед началом установки непосредственно сервера я рекомендую обновить пакеты и установить Midnight Commander (mc) и VestaCP для удобства. Вместе с VestaCP поставится большая часть пакетов, поэтому часть команд ниже будут излишними, не пугайтесь. В mc удобнее редактировать конфиг файлы.
yum install -y epel-release
yum install -y mc
yum install -y net-tools Далее необходимо отключить Selinux.
Система принудительного контроля Selinux отключается правкой конфигурационного файла /etc/sysconfig/selinux.
mcedit /etc/sysconfig/selinux меняем значение
SELINUX=disabled
или заменяем значение командой sed:
sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/sysconfig/selinux
sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/selinux/config После перезагрузки проверьте статус SELinux командой «sestatus», Вы должны увидеть следующий вывод:
SELinux status: disabled
Переходим к установке PPTP VPN сервера и добавлении его в автозагрузку:
yum install -y ppp pptp pptpd pptp-setup
chkconfig pptpd on Далее настройка конфигов из консоли (копируем, вставляем и жмём «Enter»). Перед началом редактирования бэкапим каждый файл.
Файл /etc/pptpd.conf
cp /etc/pptpd.conf /etc/pptpd.conf.bak cat >/etc/pptpd.conf<<EOF
option /etc/ppp/options.pptpd
logwtmp
localip 172.16.0.1
remoteip 172.16.0.10-254
EOF
Если на вашей машине несколько внешних IP адресов, то вы можете указать конкретный IP, по которому будет доступно подключение к VPN серверу. В конце файла добавьте:
listen внешний_ip ms-dns 8.8.8.8
ms-dns 8.8.4.4 Также добавляем метод mschap2: require-mschap-v2
В примере ниже «user» и «pass» можно заменить на свои.
cp /etc/ppp/chap-secrets /etc/ppp/chap-secrets.bak chmod 600 /etc/ppp/chap-secrets Редактирование данного файла преследует собою цель — изменение значения «0» на «1» net.ipv4.ip_forward = 1.
Перечитываем конфигурацию.
На этом установка и настройка VPN PPTP сервера закончена.
Осталось только «разобраться» с файерволом.
Удаляем firewalld (если не удален или не отключен):
и вместо него ставим IPTABLES:
Включим автозапуск iptables:
Теперь процесс настройки IPTABLES подошёл к ответственному моменту — настройке конфигурации таблиц, включению маршрутизации и открытию TCP портов 1723 и 22. Необходимо добавить следующие строки в файл iptables:
mcedit /etc/sysconfig/iptables Cохраняем и перезапускаем всё: файерволл и сервер PPTP VPN.
Обратите внимание, если при редактировании конфигурационного файла iptables не сохраняются настройки, а после перезагрузки файл принимает своё первоначальное значение, то для того, чтобы после редактирования файла изменения вступили в силу, необходимо перед редактированием отключить файервол iptables:
Затем отредактировать файл /etc/sysconfig/iptables, сохранить изменения
И, наконец, запустить сервиc
Обратите внимание, что eth0 — имя вашего сетевого интерфейса. Вы можете узнать его с помощью команды ifconfig. Если вам необходимо, чтобы была локальная сеть между клиентами, подключенными к VPN, добавьте следующие правила в iptables путем выполнения следующих команд из консоли или непосредственно редактируя iptables файл (кому как нравится):
iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables -I INPUT -s 172.16.0.0/24 -i ppp0 -j ACCEPT
iptables --append FORWARD --in-interface eth0 -j ACCEPT firewall-cmd --permanent --add-service=pptpd
firewall-cmd --permanent --add-port=1723/tcp
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --permanent --add-service=ipsec
firewall-cmd --permanent --add-service=l2tpd
firewall-cmd --permanent --add-port=1701/udp
firewall-cmd --permanent --add-port=4500/udp
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload Проверяем, слушается ли наш порт:
Дополнительная команда для проверки статуса pptpd:
Второй уровень, протокол туннелирования второго уровня (L2TP), настраивается намного проще, чем IPsec, поэтому начнем с него. L2TP абсолютно небезопасен и не должен быть доступен вне соединения IPsec. При использовании iptables, примените следующие правила, чтобы заблокировать все соединения L2TP вне ipsec:
iptables -t filter -A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport l2tp -j ACCEPT
iptables -t filter -A INPUT -p udp -m udp --dport l2tp -j REJECT --reject-with icmp-port-unreachable
iptables -t filter -A OUTPUT -p udp -m policy --dir out --pol ipsec -m udp --sport l2tp -j ACCEPT
iptables -t filter -A OUTPUT -p udp -m udp --sport l2tp -j REJECT --reject-with icmp-port-unreachable yum install -y xl2tpd libreswan lsof Бэкапим дефолтный конфиг:
cp /etc/xl2tpd/xl2tpd.conf /etc/xl2tpd/xl2tpd.conf.orig Правим /etc/xl2tpd/xl2tpd.conf, указывая свои IP. В отличие от других серверов L2TP, xl2tpd может поддерживать пул IP-адресов без серверов DHCP или RADIUS.
В секцию [global] добавим (это обязательно для CentOS 6, не в 7.6 мне не потребовалось):
[global]
ipsec saref = yes
force userspace = yes
[lns default]
ip range = 172.21.118.2-172.21.118.254
local ip = 172.21.118.1
require authentication = yes
name = LinuxVPN
pppoptfile = /etc/ppp/options.xl2tpd Для использования сервера RADIUS или DHCP, оставьте отключенными опции ip range и local ip. Если соединение нестабильно, попробуйте добавить length bit = yes в раздел lns default. Чтобы не использовать PPP аутентификацию, замените require authentication = yes на refuse authentication = yes.
Создаем новый файл options.xl2tpd опций с таким содержимым:
mcedit /etc/ppp/options.xl2tpdipcp-accept-local
ipcp-accept-remote
ms-dns 8.8.8.8
ms-dns 8.8.4.4
auth
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
proxyarp
connect-delay 5000
name xl2tpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
persist
logfile /var/log/xl2tpd.log  Есть несколько вариантов и пакетов для настройки IPsec: ipsec-tools, LibreSwan (OpenSwan) и strongSwan. ipsec-tools (racoon) наименее функционален, но для тех, кто пришёл из *BSD, он может быть более близок. Однако, в отличие от *BSD, Linux не использует отдельный интерфейс для IPsec. strongSwan – это ответвление от FreeS/WAN. LibreSwan – ответвление от Openswan (который сам является ответвлением от FreeS/WAN) с сохранением его оригинальных разработчиков. Мы будем использовать именно LibreSwan, который мы уже ранее установили. Обход NAT установлен по умолчанию в файле конфигурации LibreSwan, таким образом никаких особых этапов настройки не требуется.
Желательно иметь каждую настройку VPN в своём собственном файле, что может быть сделано раскомментированием последней строки в /etc/ipsec.conf:
#include /etc/ipsec.d/*.conf Основные конфигурационные файлы для LibreSwan это:
Файл /etc/ipsec.conf разбит на разделы:
Например: conn SomeTunnel – раздел с параметрами соединения SomeTunnel
Файл /etc/ipsec.secrets содержит неограниченное количество типов ключей (паролей).
Основные параметры команды ipsec, которая управляет подключениями LibreSwan:
Логи хранятся в /var/log/auth.log и /var/log/daemon.log.
Создаем файл настроек с таким содержимым:
mcedit /etc/ipsec.d/l2tp-ipsec.conf conn L2TP-PSK-NAT
    rightsubnet=0.0.0.0/0
    dpddelay=10
    dpdtimeout=20
    dpdaction=clear
    forceencaps=yes
    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=1.1.1.1
    leftprotoport=17/1701
    right=%any
    rightprotoport=17/%any где 1.1.1.1 заменяем на ваш внешний IP.
left=%defaultrouteleftprotoport=udp/l2tpleftid=@vpn.example.comright=%anyrightprotoport=udp/%anyНу и так как мы задали тип авторизации с помощью PSK, то давайте запишем секретное слово в файл ipsec.secrets.
vim /etc/ipsec.d/default.secrets : PSK "SecretKey"
Ключ может быть задан строкой в кавычках или шестнадцатеричным числом. В следующем примере PUT_VPN_SERVER_IP должен быть заменён на IP-адрес сервера. Можно использовать доменное имя, но оно не рекомендовано разработчиками LibreSwan. Опция %any позволяет любым клиентам использовать этот PSK. Также можно IP не указывать как в нашей конфигурации выше.
Примеры:
PUT_VPN_SERVER_IP %any : PSK 0x87839cfdab5f74bc211de156d2902d128bec3243
# Или используйте простой текстовый ключ вместо шестнадцатеричного:
# PUT_VPN_SERVER_IP %any : PSK "password_pass"
Прописываем в /etc/ppp/chap-secrets свои логины и пароли
vim /etc/ppp/chap-secrets "user1" "xl2tpd" "pass1" *
"user2" "xl2tpd" "pass2" * Настроим logrotate для /var/log/xl2tpd.log
vim /etc/logrotate.d/xl2tpd /var/log/xl2tpd.log {
missingok
compress
notifempty
weekly
rotate 2
create 0600 root root
} Запускаем и тестируем.
systemctl enable ipsec
systemctl enable xl2tpd
systemctl start ipsec
systemctl start xl2tpd Можно все это проделать вручную, либо воспользоваться этим скриптом. Также можно воспользоваться другим универсальным скриптом для CentOS, Ubuntu и Debian — https://github.com/hwdsl2/setup-ipsec-vpn.
Geekbench - пакетов тестов для измерения производительности хостов. Он доступен в разных версиях - 4,…
Традиционно, утилиты для работы с железом можно разделить на информационные, диагностические, а также тестирующие производительность…
Введение архитектуры Zen 5 — это лишь часть истории. Настоящая революция от AMD заключена в мобильных процессорах…
Компания ESET в 2023 году перестала поддерживать Windows 7 и прочие устаревшие операционные системы в…
Zen 5 - новейшая и самая прогрессивная архитектура процессоров от AMD, представленная в 2024 году.…
Последние годы все чаще обнаруживаются проблемы с различными новыми семействами процессоров, как Intel, так и…