Contents
Введение
Это руководство описывает весь процесс установки VPN-сервера типа L2TP на Ваш сервер. Устанавливаем xl2tpd, для шифрования трафика по VPN-каналам по типу IPSec будем использовать актуальный на текущий момент инструмент openswan, и зависимость ppp, так как основным инструментом является Point-to-Point Protocol (PPP) для инкапсуляции PPP-кадров, которые будут передаваться внутри созданных L2TP-туннелей.
aptitude install xl2tpd openswan ppp
Настройка IPSec при помощи Openswan
В файл "/etc/ipsec.conf" скопируйте следующее:
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,%v4:!10.152.2.0/24 # значение должно содержать список всех приватных сетей, которые # допускаются в качестве подсетей для удалённых VPN-клиентов. # Другими словами, это диапазон IP-адресов, который находиться # за маршрутизатором и NAT, которым является наш VPN-сервер, через который подключаются VPN-клиенты. 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 # Apple iOS doesn't send delete notify so we need dead peer detection # to detect vanishing clients dpddelay=30 dpdtimeout=120 dpdaction=clear # Устанавливаем значения параметров ikelifetime и keylife # в соответсвующие значения по-умолчанию для Windows ikelifetime=8h keylife=1h type=transport # Replace IP address with your local IP (private, behind NAT IP is okay as well) left=x.x.x.x # Для новых VPN-клиентов под операционными системами Windows 2000/XP, # то есть для поддержки VPN-клиентов под устаревшими операционными системами # используйте leftprotoport=17/%any leftprotoport=17/1701 right=%any rightprotoport=17/%any #force all to be nat'ed. because of iOS forceencaps=yes
Проверьте ещё раз, что вы следуете инструкциям-комментариям в файле ipsec.conf, также удостоверьтесь, что названия секций "config setup" и "conn l2tp-psk" располагаются вплотную к левой стороне (с новой строки) без пробелов, в то время как весь остальной текст должен иметь ровно 8 пробелов (односимвольных отступов) вправо.
В файл "/etc/ipsec.secrets" скопируйте следующее:
A.B.C.D %any: PSK "хороший_пароль"
Поменяйте A.B.C.D на IP-адрес вашего сервера, на котором запущены ipsec / openswan
Запустите службу IPSec при помощи следующей команды
/etc/init.d/ipsec start
Затем настоятельно рекомендуется проверить состояние службы IPSec командой
ipsec verify
у вас не должны отображаться ошибки на данном этапе настройки!
Checking your system to see if IPsec got installed and started correctly: Version check and ipsec on-path [OK] Linux Openswan U2.6.28/K2.6.32-32-generic-pae (netkey) Checking for IPsec support in kernel [OK] NETKEY detected, testing for disabled ICMP send_redirects [OK] NETKEY detected, testing for disabled ICMP accept_redirects [OK] Checking that pluto is running [OK] Pluto listening for IKE on udp 500 [OK] Pluto listening for NAT-T on udp 4500 [OK] Checking for 'ip' command [OK] Checking for 'iptables' command [OK] Opportunistic Encryption Support [DISABLED]
Создаём файл с именем "ipsec.vpn" в каталоге "/etc/init.d/"
case "$1" in start) echo "Starting my Ipsec VPN" iptables -t nat -A POSTROUTING -o eth0 -s 10.152.2.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/ipsec stop /etc/init.d/xl2tpd stop ;; restart) echo "Restarting my Ipsec VPN" iptables -t nat -A POSTROUTING -o eth0 -s 10.152.2.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 restart /etc/init.d/xl2tpd restart ;; *) echo "Usage: /etc/init.d/ipsec.vpn {start|stop|restart}" exit 1 ;; esac
Вышеприведённое содержимое файла "ipsec.vpn" настроит фаервол на вашем сервере на передачу IP-пакетов (IP Forwading), что позволит использовать в дальнейшем ваш сервер в качестве шлюза для IPv4-пакетов.
- Внимание! Если вы используете пул (диапазон) локальных IPv4-адресов не "10.152.2", то замените этот IP-адрес на актуальный для вашей инфраструктуры.
Затем устанавливаем права на выполнение:
chmod 755 ipsec.vpn
Отключаем init-скрипт по-умолчанию, который был установлен при установке пакета openswan
update-rc.d -f ipsec remove
И включаем наш чуть ранее созданный скрипт как init-скрипт по-умолчанию
update-rc.d ipsec.vpn defaults
Настройка L2TP
В файл "/etc/xl2tpd/xl2tpd.conf" скопируйте следующее
[global] ipsec saref = no [lns default] ip range = 10.152.2.2-10.152.2.254 local ip = 10.152.2.1 require chap = yes refuse pap = yes require authentication = yes ppp debug = yes pppoptfile = /etc/ppp/options.xl2tpd length bit = yes
Некоторые замечания по поводу вышеупомянутого содержимого файла "xl2tpd.conf"
- ip range = диапазон IP-адресов для выдачи клиентам при их подключении
- local ip = IP-адрес сервера VPN. Значение должно находиться за пределами указанного диапазона параметра "ip range".
- refuse pap = отвергать аутентификацию методом PAP
- ppp debug = "yes" для тестировки и "no" для production
Выбираем устойчивую к подбору паролей строку для аутентификации по схеме "Вызов-Ответ". Длина строки представляющей из себя пароль, в идеале, должна превышать 16 символов, что, вероятно, потребует достаточно много времени на подбор пароля (символов данной строки), и обеспечит достаточную безопасность. Обратите внимание, что требований к минимальной длине строки не существует. Файл "/etc/xl2tpd/l2tp-secrets" отредактируйте следующим образом:
* * пароль_для_аутентификации_VPN-клиента_при_подключении
В файл "/etc/ppp/options.xl2tpd" скопируйте следующее:
refuse-mschap-v2 refuse-mschap 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 #debug name l2tpd proxyarp lcp-echo-interval 30 lcp-echo-failure 4
Некоторые замечания по поводу вышеупомянутого содержимого файла "options.xl2tpd"
- ms-dns option
Здесь вы можете перечислить DNS-сервера, которые используются внутри существующей вашей локальной сети, этот список серверов DNS принудительно будет отправлен VPN-клиенту при подключении. Если вам требуется добавить несколько DNS-серверов, то просто добавьте несколько соответствующих строчек.
Примечание: Если вам потребуется принудительно отправить VPN-клиенту список WINS-серверов, то для этого существует определённый отдельный параметр.
- mtu / mru
На openswan.org сообщается, что значение данного параметра важно для того, чтобы уменьшить размер MRU / MTU. Так как L2TP/IPSec инкапсулируется несколько раз в различные протоколы, то этот факт создаёт небольшой overhead (накладные расходы), а уменьшая размер MRU / MTU мы позволяем передавать все пакеты по инкапсулированным каналам просто передавая их с уменьшенным размером MTU.
- proxyarp
Добавляет запись с IPv4-адресом peer'a (VPN-клиента) и Ethernet-адресом сетевого адаптера вашего сервера в ARP-таблицу (Address Resolution Protocol) операционной системы которая установлена на вашем сервере. Мы получим в результате эффект: запись о peer'e (VPN-клиенте) появится в других системах (на других компьютерах) и peer будет доступен в вашей локальной сети Ethernet.
- name l2tpd
Значение данного параметра используется в файле аутентификации PPP (см. ниже).
Добавление пользователей
В файл "/etc/ppp/chap-secrets" скопируйте:
user1 l2tpd пароль_для_аутентификации_VPN-клиента_user1_при_подключении * user2 * пароль_для_аутентификации_VPN-клиента_user2_при_подключении *
Некоторые замечания по поводу вышеупомянутого содержимого файла "options.xl2tpd"
- client = username (имя пользователя, логин) для VPN-клиента
- server = имя сервера, которое мы указали в файле "ppp.options" для xl2tpd; это привязка, предназначено для указания различных параметров настройки PPP (PPP options) на каждый уникальный username (логин) VPN-клиента
- secret = password (пароль к логину) для VPN-клиента
- IP Address = оставьте значение * для любого IPv4-адреса у источника инициирующего подключение (VPN-клиента) к VPN-серверу или укажите IPv4-адреса с которых будет доступна (срабатывать) аутентификация когда пользователь попытается подключиться как VPN-клиент; в случае если VPN-клиент попытается выполнить аутентификацию с определённым IP-адресом вне заданного диапазона IPv4, то в аутентификации ему под данным username (логином) будет отказано.
Примечание: Вы можете добавлять столько пользователей сколько захотите. Вместо пробелов рекомендуется использовать для наглядности символы табуляции - клавиша "Tab"
Передача IPv4-пакетов
в файл "/etc/sysctl.conf"
net.ipv4.ip_forward=1
Инициализировать новые отредактированные значения параметров из файла "/etc/sysctl.conf"
sysctl -p
Запуск VPN
Сервер VPN запускается при помощи совместной работы двух служб - шифрование и демон слушающий подключения от клиентов
/etc/init.d/ipsec.vpn restart /etc/init.d/xl2tpd restart
Ссылки
netinstall — Сетевая установка с минимальным компакт-диском
Руководство APT — Добавление CD-ROM в файл sources.list
Клиент PPTP — Официальный сайт "Клиент PPTP", клиент Linux, FreeBSD, NetBSD и OpenBSD для протокола от Microsoft — Point-to-Point Tunneling Protocol, PPTP
Клиент PPTP — Руководство по использованию в Debian