Обучение →
Настраиваем VPN L2TP-сервер на Ubuntu
Цензура-цензура-цензура. Кровавый режим закрывает один ресурс за другим под предлогом детской порнографии, авторских прав или что там сейчас в тренде. Ну а мы с вами настроим на подходящем сервере с Ubuntu VPN-сервер over L2TP и будем сидеть в Сети через него. С AES-шифрованием и няшками. Вы можете спросить «почему не PPTP?». Потому что никакого шифрования.
Настраиваем IPSEC-тунели
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
# Apple iOS doesn't send delete notify so we need dead peer detection
# to detect vanishing clients
dpddelay=30
dpdtimeout=120
dpdaction=clear
# Set ikelifetime and keylife to same defaults windows has
ikelifetime=8h
keylife=1h
type=transport
# Replace IP address with your local IP (private, behind NAT IP is okay as well)
left=88.0.0.1
# For updated Windows 2000/XP clients,
# to support old clients as well, use leftprotoport=17/%any
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
#force all to be nat'ed. because of iOS
forceencaps=yes
Само собой, IP-адрес 88.0.0.1 нужно поменять на внешний IP вашего сервера. Также можно раскомментировать строку plutostderrlog, чтобы OpenSwan не гадил в /var/log/syslog. Теперь ставим shared-пароль на ipsec-туннель, для этого правим файл /etc/ipsec.secrets
YOUR.VPS.IP.ADDRESS %any: PSK "YourSharedSecret"
Значения отбиваем табами, а не пробелами как в примере. Shared ключ так и идёт — в кавычках. YourSharedSecret это тот ключ, который в Windows называется дополнительным, в Андроидах — shared.
Настраиваем XL2TPD, сервис для L2TP
Меняем /etc/xl2tpd/xl2tpd.conf
[global]
ipsec saref = no
[lns default]
ip range = 192.168.95.32-192.168.95.254 ; подсеть для наших клиентов, эти адреса будут раздаваться внутри сети
local ip = 192.168.95.1 ; IP-адрес этого сервера в этих условиях
require authentication = yes
ppp debug = yes ; пишем в syslog много ужасного и ненужного дампа
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
refuse chap = yes ; выключаем chap
refuse pap = yes ; выключаем допотопный pap
Внимание, комментарии в примере даны только для примера, пожалуйста, удалите их в конечном файле, если не хотите, что xl2tpd не включился, а вы не получили ошибку подключения 809. Правим файл /etc/ppp/options.xl2tpd, отвечающий за подключение IPSec, полностью заменив его содержимое на
# Выключаем пародию на протоколы аутентификации
refuse-pap
refuse-chap
refuse-mschap
# Выставляем dns
ms-dns 8.8.8.8
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
idle 1800
mtu 1200
mru 1200
lock
hide-password
local
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
# Дебажим xl2tpd
debug
logfile /var/log/xl2tpd.log
Теперь редактируем файл с паролями пользователей /etc/ppp/chap-secrets и добавляем записи вида
username * password *
Например
swarog * q1w2e3 *
Опять же, отбиваем табами. Помните, что на одного пользователя позволяется не более одного одновременного подключения. Другими словами, если вы хотите подключаться более чем с одного устройста, сделайте несколько логинов.
Настраиваем даэмон для запуска всего этого безобразия /etc/init.d/ipsec.vpn
#!/bin/bash
case "$1" in
start)
echo "Starting my Ipsec VPN"
# Включаем маскардинг
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.95.0/24 -j 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 start
/etc/init.d/xl2tpd start
;;
stop)
echo "Stopping my Ipsec VPN"
iptables --table nat --flush
echo 0 > /proc/sys/net/ipv4/ip_forward
/etc/init.d/xl2tpd stop
/etc/init.d/ipsec stop
;;
restart)
/etc/init.d/ipsec.vpn stop
/etc/init.d/ipsec.vpn start
;;
*)
echo "Usage: /etc/init.d/ipsec.vpn {start|stop|restart}"
exit 1
;;
esac
Выключаем старые автозагрузки и включаем новую
update-rc.d -f ipsec remove
update-rc.d -f xl2tpd remove
update-rc.d ipsec.vpn defaults
Теперь перезагружаем сервисы
/etc/init.d/ipsec.vpn restart
Запускаем ipsec verify и смотрим на вывод. Могут быть ворнинги из-за /bin/sh и Opportunistic Encryption Support, также может не быть поддержки SAref в ядре. Это нормально. Больше ворнингов быть не должно.
Теперь создаём VPN-подключение в Windows. Интернет адрес — IP вашего сервера, название любое. Логин/пароль из файла chap-secrets, например, swaroq и q1w2e3, домен оставляете пустым. Потом правите свойства этого подключения (нажам на иконку компьютера в трее, можно открыть список подключений, включая наше новое). Вкладка Безопасность, тип VPN "L2TP IPSec VPN", разрешить следующие протоколы: только MS-CHAP v2, остальные выключайте; Шифрование данных: "самое стойкое, отключиться, если нет шифрования" (насколько я заметил, если не ставить самое стойкое, у нас будет шифрование AES128, а так — AES256); дополнительные параметры: для проверки использовать ключ YourSharedSecret, который мы берём из /etc/ipsec.secrets. Клацаем ok. Пробуем подключиться. Если подключились, проверяйте свой IP, пингуйте 192.168.95.1 и радуйтесь жизни.
Исправляем ошибки подключения
- Если у вас на Windows ошибка подключения 809 — не удаётся установить VPN-соединение — скорее всего ваш родной компьютер находится за NAT'ом и не имеет белого IP-адреса, в этом случае делаем так как описано в официальном мануале от Microsoft, обязательно перезагружаем компьютер и пробуем подключиться ещё раз. Если вы не находились за NAT'ом или проблема не исчерпана, проверьте работает ли xl2tpd, он поднимает udp-порт 1701. Возможно, он не загрузился по какой-то причине. Вообще, ошибка 809 свидетельствует о том, IPsec-удался (в ipsec.log будет запись «IPsec SA established transport mode»), а l2tp-подключение не поднимается.
- Если 4500 и 500 udp-порты вообще закрыты (то есть не включился даже Openswan), у вас будет ошибка подключения 789 "попытка l2tp-подключения не удалась", в этом случае копайте в сторону ipsec-даэмона или неправильного shared-пароля. Если вы ошиблись shared-паролем, в ipsec.log будет «sending notification PAYLOAD_MALFORMED».
- Если вы правильно ввели shared-пароль, но ошиблись логином/паролем пользователя, вы получите ошибку подключения 734 или просьбу ввести логин и пароль ещё раз. Заметьте, сначала проверяется ipsec, уже потом l2tp.
- Ошибка 812 свидетельствует о проблеме с протоколами аутентификации. У вас и на сервере выставлены протоколы, которые не пересекаются между собой
- Скорее всего, вы не сможете подключиться через Android 4.0.* — баг #23124, который приводит к «malformed payload in packet», правьте бинарники на свой страх и риск с лишением гарантии на телефон.
В составлении этого мануала хочу выразить отдельную благодарность help.ubuntu.com за общие принципы настройки и Curu Wong за пояснение про NAT.