Установка и настройка VPN сервера на CentOS 7
В этой статье я рассмотрю на практике полный алгоритм настройки VPN сервера на примере CentOS 7.6. Мы одновременно включим и L2TP и PPTP сервер.
Для работы VPN в Linux необходимо настроить 3 слоя: IPsec, L2TP и PPP. Причем, PPP будет общий для L2TP и PPTP серверов. Настройка L2TP сложнее, чем PPTP. В ней:
- IPsec обеспечивает конфиденциальность сетевого соединения и авторизации клиента (системы)
- С L2TP туннель настроен так, что VPN трафик прозрачно проходит через IPsec
- PPP (протокол точка-точка) контролирует авторизацию пользователей
Настройка VPN PPTP
Перед началом установки непосредственно сервера я рекомендую обновить пакеты и установить Midnight Commander (mc) и VestaCP для удобства. Вместе с VestaCP поставится большая часть пакетов, поэтому часть команд ниже будут излишними, не пугайтесь. В mc удобнее редактировать конфиг файлы.
yum install -y epel-release yum install -y mc yum install -y net-tools
yum install -y epel-release yum install -y mc yum install -y net-tools
Далее необходимо отключить Selinux.
Система принудительного контроля Selinux отключается правкой конфигурационного файла /etc/sysconfig/selinux.
mcedit /etc/sysconfig/selinux
или заменяем значение командой sed:
sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/sysconfig/selinux sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/selinux/config
sed -i ‘s/\(^SELINUX=\).*/\SELINUX=disabled/’ /etc/sysconfig/selinux sed -i ‘s/\(^SELINUX=\).*/\SELINUX=disabled/’ /etc/selinux/config
После перезагрузки проверьте статус SELinux командой « sestatus », Вы должны увидеть следующий вывод:
Переходим к установке PPTP VPN сервера и добавлении его в автозагрузку:
yum install -y ppp pptp pptpd pptp-setup chkconfig pptpd on
yum install -y ppp pptp pptpd pptp-setup chkconfig pptpd on
Далее настройка конфигов из консоли (копируем, вставляем и жмём «Enter»). Перед началом редактирования бэкапим каждый файл.
Файл /etc/pptpd.conf
cp /etc/pptpd.conf /etc/pptpd.conf.bak
cp /etc/pptpd.conf /etc/pptpd.conf.bak
cat >/etc/pptpd.conf <
logwtmp
localip 172.16.0.1
remoteip 172.16.0.10-254
EOF
- localip — ip адрес из выбранной вами подсети, который будет являться локальным шлюзом для клиентов VPN.
- remoteip — пул ip адресов для раздачи клиентам VPN.
Если на вашей машине несколько внешних IP адресов, то вы можете указать конкретный IP, по которому будет доступно подключение к VPN серверу. В конце файла добавьте:
Файл /etc/ppp/options.pptpd
Редактирование данного файла преследует собою цель — указание DNS серверов.
В примере ниже гугловские, можно заменить на свои.
Также добавляем метод mschap2: require-mschap-v2
cp /etc/ppp/options.pptpd /etc/ppp/options.pptpd.bak
cp /etc/ppp/options.pptpd /etc/ppp/options.pptpd.bak
cat >/etc/ppp/options.pptpd <
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd
ms-dns 8.8.8.8
ms-dns 8.8.4.4
EOF
Редактирование данного файла преследует собою цель — указание логина и пароля для подключения к PPTP VPN серверу.
В примере ниже «user» и «pass» можно заменить на свои.
cp /etc/ppp/chap-secrets /etc/ppp/chap-secrets.bak
cp /etc/ppp/chap-secrets /etc/ppp/chap-secrets.bak
chmod 600 /etc/ppp/chap-secrets
chmod 600 /etc/ppp/chap-secrets
Редактирование данного файла преследует собою цель — изменение значения «0» на «1» net.ipv4.ip_forward = 1.
cp /etc/sysctl.conf /etc/sysctl.conf.bak
cp /etc/sysctl.conf /etc/sysctl.conf.bak
cat >/etc/sysctl.conf <
net.core.rmem_max = 12582912
net.ipv4.tcp_rmem = 10240 87380 12582912
net.ipv4.tcp_wmem = 10240 87380 12582912
net.core.wmem_max = 12582912
net.core.rmem_max = 12582912
net.ipv4.tcp_rmem = 10240 87380 12582912
net.ipv4.tcp_wmem = 10240 87380 12582912
net.core.wmem_max = 12582912
net.core.rmem_max = 12582912
net.ipv4.tcp_rmem = 10240 87380 12582912
net.ipv4.tcp_wmem = 10240 87380 12582912
net.ipv4.ip_forward = 1
EOF
На этом установка и настройка VPN PPTP сервера закончена.
Осталось только «разобраться» с файерволом.
Удаляем firewalld (если не удален или не отключен):
systemctl stop firewalld systemctl disable firewalld
systemctl stop firewalld systemctl disable firewalld
и вместо него ставим IPTABLES:
yum install iptables-services iptables
yum install iptables-services iptables
Включим автозапуск iptables:
systemctl enable iptables chmod +x /etc/rc.d/rc.local
systemctl enable iptables chmod +x /etc/rc.d/rc.local
Теперь процесс настройки IPTABLES подошёл к ответственному моменту — настройке конфигурации таблиц, включению маршрутизации и открытию TCP портов 1723 и 22. Необходимо добавить следующие строки в файл iptables:
mcedit /etc/sysconfig/iptables
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
*nat :PREROUTING ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A POSTROUTING -o eth0 -j MASQUERADE COMMIT *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [853:222169] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #-A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -i eth0 -p tcp -m tcp --dport 1723 -j ACCEPT -A INPUT -i eth0 -p gre -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A INPUT -p gre -j ACCEPT -A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT -A FORWARD -i ppp+ -o eth0 -j ACCEPT -A FORWARD -i eth0 -o ppp+ -j ACCEPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
*nat :PREROUTING ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A POSTROUTING -o eth0 -j MASQUERADE COMMIT *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [853:222169] -A INPUT -m state —state RELATED,ESTABLISHED -j ACCEPT #-A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state —state NEW -m tcp —dport 22 -j ACCEPT -A INPUT -i eth0 -p tcp -m tcp —dport 1723 -j ACCEPT -A INPUT -i eth0 -p gre -j ACCEPT -A INPUT -j REJECT —reject-with icmp-host-prohibited -A INPUT -p gre -j ACCEPT -A INPUT -p tcp -m tcp —dport 1723 -j ACCEPT -A FORWARD -i ppp+ -o eth0 -j ACCEPT -A FORWARD -i eth0 -o ppp+ -j ACCEPT -A FORWARD -j REJECT —reject-with icmp-host-prohibited COMMIT
Cохраняем и перезапускаем всё: файерволл и сервер PPTP VPN.
service iptables save service iptables restart systemctl start pptpd
service iptables save service iptables restart systemctl start pptpd
Обратите внимание, если при редактировании конфигурационного файла 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
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
Как видно, мы включаем маскарадинг для ppp0 и разрешаем обращаться к VPN интерфейсу клиентам из VPN сети. Обратите внимание, что 172.16.0.0/24 — локальная подсеть, которую вы себе выбрали, а ppp0 — имя pptp интерфейса.
Если вы решили не отключать firewalld и не использовать iptables, то вам потребуются следующие команды для настройки файрвола:
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
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
Настройка IPSEC L2TP VPN-сервера на CentOS 7
Обновлено: 14.03.2020 Опубликовано: 09.04.2018
Один из лучших способов поднять сервер VPN — настроить OpenVPN. Однако, данный сервер не лишен недостатков — на клиенты потребуется устанавливать специальное программное обеспечение. Если мы хотим использовать стандартные средства операционных систем для подключения к серверу, настроим VPN IPSEC L2TP.
Подготовка сервера
Для установки ПО потребуется репозиторий EPEL:
firewall-cmd —permanent —add-port=1701/tcp
firewall-cmd —permanent —add-service=ipsec
IPSEC
Открываем конфигурационный файл racoon:
remote anonymous
exchange_mode main,aggressive,base;
doi ipsec_doi;
passive on;
proposal_check obey;
support_proxy on;
nat_traversal on;
ike_frag on;
dpd_delay 20;
proposal
encryption_algorithm aes;
hash_algorithm sha1;
authentication_method pre_shared_key;
dh_group modp1024;
>
proposal
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key;
dh_group modp1024;
>
>
Теперь открываем следующий файл:
Для клиентов Windows добавляем:
ip-addres1 key-password1
ip-addres2 key-password2
* где ip-addres — ip-адрес клиента, с которого будет идти подключение; key-password — пароль для подключения.
Для клиентов Android добавляем:
identifier1 key-password1
identifier2 key-password2
* где identifier — идентификатор клиента, который будет использоваться при подключении; key-password — пароль для подключения.
Создаем скрипт с настройкой ipsec политик:
spdadd 0.0.0.0/0[l2tp] 0.0.0.0/0 any -P out ipsec esp/transport//require;
spdadd 0.0.0.0/0 0.0.0.0/0[l2tp] any -P in ipsec esp/transport//require;
chmod 755 /etc/rc.d/init.d/racoon.init
Добавляем скрипт на автозапуск:
Разрешаем запуск сервиса racoon и стартуем его:
L2TP
Устанавливаем пакет xl2tpd:
Открываем конфигурационный файл:
[global]
ipsec saref = yes
force userspace = yes
В секции [lns default] изменяем диапазон IP-адресов:
[lns default]
ip range = 176.16.10.10-176.16.10.200
local ip = 176.16.10.1
Разрешаем автозапуск сервиса и стартуем его:
PPP
Вносим небольшие изменения в DNS:
Открываем файл с пользователями:
* где dmosk — логин; первая звездочка — любой сервер; password — пароль, который должен вводить пользователь dmosk; вторая звездочка — подключение с любого IP-адреса.
Настройка клиента
Пример настройки клиента Windows:
На устройстве с Андроидом настраиваем выбираем в качестве VPN-сервера IPSEC-L2TP PSK и вводим данные из файла psk.txt (например, identifier1 и key-password1). Пример подключения на Android:
VPN-сервер как шлюз
Для этого настраиваем только CentOS.