Однажды потребовалось написать инструкцию как настроить сервис VPN на внешнем сервере и после с этим всем подружить ноутбук на MacOS. Пример собирался на ОС Debian 9.9.0 x64 netinst.
Настройка VPN сервер посредством l2tp + ipsec.
Внутри контейнера в качестве ipsec демона будем использовать openswan, а в качестве l2tp сервера стандартный xl2tpd из репозиториев:
apt-get install xl2tpd
В репозиториях нет openswan, ставим из исходников.
Для начала придется установить дополнительные библиотеки, необходимые для сборки:
apt-get install libgmp3-dev gawk flex bison make
Далее, качаем с офф-сайта openswan:
wget https://download.openswan.org/openswan/openswan-latest.tar.gz
tar -xvzf openswan-latest.tar.gz
Собираем и устанавливаем:
cd openswan-2.6.50
make programs
make install
Приступим к настройке ipsec демона.
Приведем конфиг /etc/ipsec.conf к виду(требуется заменить SERVER.IP на свой внешний ip адрес):
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=SERVER.IP
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
Наиболее важные моменты конфига прокомментированы. Также следует не забыть составить конфиг именно таким образом, как указано выше, то есть с сохранением пробелов в начале строки у тех команд, у которых они указаны, так как отступ команды демоном привязывается к блоку, определяемому без отступным «conn».
Теперь зададим авторизацию для работы с ipsec. Существует два метода авторизации — по сертификату и по ключу ( PSK ). В данном примере мы настроим авторизацию по ключу в файле /etc/ipsec.secrets:
11.11.11.11 %any: PSK "mykey"
11.11.11.11 — это внешний IP адрес нашего сервера (SERVER.IP)
%any — это встроенная переменная обозначающая любой IP адрес PSK — метод авторизации (может быть RSA )
«mykey» — секретный ключ для авторизации, который потребуется передать клиенту.
Скрипт для настройки сети
В /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
ВКЛЮЧАЕМ RC.LOCAL В DEBIAN 9
Создаем файл /etc/rc.local
touch /etc/rc.local
nano /etc/rc.local
Содержимое
#!/bin/sh –e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0
Создаем файл с содержимым:
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
Создаем файл /etc/rc.local и делаем его исполняемым выполнив команды:
chmod +x /etc/rc.local
Включаем сервис rc-local выполнив команду:
systemctl enable rc-local
Запускаем сервис rc-local выполнив команду:
systemctl start rc-local.service
Проверяем статус сервиса, запущен или нет выполняем команду:
systemctl status rc-local.service
Ответ системы:
rc-local.service - /etc/rc.local Compatibility
Loaded: loaded (/etc/systemd/system/rc-local.service; enabled; vendor preset:
Drop-In: /lib/systemd/system/rc-local.service.d
└─debian.conf
Active: active (exited) since Tue 2017-07-25 11:10:09 EEST; 7s ago
Process: 1148 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
Добавляем в rc.local и запускаем
sh /root/ipsec
Теперь пришло время настроить l2tp сервер. Он будет работать через протокол ppp. Приводим конфиг /etc/xl2tpd/xl2tpd.conf к виду:
[global] port = 1701
ipsec saref = yes
saref refinfo = 30
[lns default]
ip range = 10.1.2.2-10.1.2.255
local ip = 10.1.2.1
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
name = VPN
Далее настраиваем конфиг ppp, который запрашивается нашим l2tp демоном (/etc/ppp/options.xl2tpd ):
require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
lock
hide-password
modem
name VPN
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
В случае возникновения проблем со связью или с подключением для дебага работы l2tp просто раскомментируем «#debug» и смотрим в системный лог /var/log/syslog на наличие ошибок.
Настраиваем авторизацию в ppp ( /etc/ppp/chap-secrets ):
test VPN password *
Рестартуем все сервисы
/etc/init.d/ipsec restart
/etc/init.d/xl2tpd restart
Проверяем работу
ipsec verify
Настройка подключения на MAC.
Создадим новое подключение: Интерфейс –VPN
Тип VPN – L2TP через IPSec
Настроим наше новое подключение указав наш адрес сервера и имя учетной записи
Перейдем в «Настройки аунтификации…»
Сохраним пароль пользователя(при желании) и укажем наш ключ.
Перейдем в «Настройки аунтификации…» Отметим «Отправлять весь трафик через VPN».
Сохраним все настройки, можем подключаться.