#language ru ||~-[[DebianWiki/EditorGuide#translation|Translation(s)]]: [[ru/xl2tpd/Server|Русский]]-~|| (!) [[/Discussion|Обсуждения]]|| ---- <> == Введение == ---- Это руководство описывает весь процесс установки 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" 1. ip range = диапазон IP-адресов для выдачи клиентам при их подключении 2. local ip = IP-адрес сервера VPN. Значение должно находиться за пределами указанного диапазона параметра "ip range". 3. refuse pap = отвергать аутентификацию методом PAP 4. 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" 1. client = username (имя пользователя, логин) для VPN-клиента 2. server = имя сервера, которое мы указали в файле "ppp.options" для xl2tpd; это привязка, предназначено для указания различных параметров настройки PPP (PPP options) на каждый уникальный username (логин) VPN-клиента 3. secret = password (пароль к логину) для VPN-клиента 4. 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 }}} == Ссылки == ---- * [[http://www.debian.org/CD/netinst/|netinstall]] — Сетевая установка с минимальным компакт-диском * [[http://www.debian.org/doc/manuals/apt-howto/ch-basico.ru.html#s-cdrom|Руководство APT]] — Добавление CD-ROM в файл sources.list * [[http://pptpclient.sourceforge.net/|Клиент PPTP]] — Официальный сайт "Клиент PPTP", клиент Linux, FreeBSD, NetBSD и OpenBSD для протокола от Microsoft — Point-to-Point Tunneling Protocol, PPTP * [[http://pptpclient.sourceforge.net/howto-debian.phtml|Клиент PPTP]] — Руководство по использованию в Debian