Различия
Показаны различия между двумя версиями страницы.
— | wiki:articles:l2tp [17/05/2017 19:16] (текущий) – создано - внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | Дата написания: | ||
+ | Автор: //Graf//\\ | ||
+ | \\ | ||
+ | ^ | ||
+ | \\ | ||
+ | |||
+ | ---- | ||
+ | ====== Сервер ====== | ||
+ | |||
+ | В качестве сервера используется //Slackware Linux 14.2 64-bit// с ядром //4.4.38//, без //DE// и всем, что с ними связанно.\\ | ||
+ | Eth1 - смотрит в Интернет - **77.77.77.77** (// | ||
+ | Eth0 - смотрит в локальную сеть - **192.168.3.250**\\ | ||
+ | Клиентам VPN будут выдан диапазон IP адресов из этой же локальной сети - **192.168.3.0/ | ||
+ | |||
+ | Берем [[http:// | ||
+ | < | ||
+ | # wget https:// | ||
+ | </ | ||
+ | правим // | ||
+ | < | ||
+ | # upgradepkg --install-new / | ||
+ | Package openswan-2.6.49.1-x86_64-1_SBo.tgz installed. | ||
+ | </ | ||
+ | Берем [[http:// | ||
+ | < | ||
+ | # wget -O xl2tpd-1.3.8.tar.gz https:// | ||
+ | </ | ||
+ | Правим // | ||
+ | < | ||
+ | # upgradepkg --install-new / | ||
+ | Package xl2tpd-1.3.8-x86_64-1_SBo.tgz installed. | ||
+ | </ | ||
+ | |||
+ | ===== IPSec ===== | ||
+ | Настраиваем IPSec.\\ | ||
+ | Редактируем файл /// | ||
+ | |||
+ | < | ||
+ | # Первая значимая строка файла должна указывать версию спецификации | ||
+ | version 2.0 | ||
+ | |||
+ | # Eединственный конфигурационный раздел, | ||
+ | config setup | ||
+ | nat_traversal=yes | ||
+ | # Допустимые значения: | ||
+ | |||
+ | virtual_private=%v4: | ||
+ | | ||
+ | oe=off | ||
+ | # Оппортунистическое шифрование - это термин для описания использования туннелей | ||
+ | # IPsec без предварительного согласования. | ||
+ | |||
+ | protostack=netkey | ||
+ | # Допустимыми значениями являются «auto», «klips», «netkey» и «mast». | ||
+ | |||
+ | uniqueids=yes | ||
+ | # (автоматически вводимым ключом) соединением с использованием идентификатора | ||
+ | # с другого IP-адреса. Допустимые значения: | ||
+ | |||
+ | # Раздел содержит спецификацию соединения по умолчанию | ||
+ | conn %default | ||
+ | forceencaps=yes | ||
+ | # В некоторых случаях, | ||
+ | # или когда удаленный узел IPsec неправильно распознает NAT, может быть полезно | ||
+ | # принудительно инкапсулировать RFC-3948. Значение yes заставляет код обнаружения | ||
+ | # NAT указывать удаленному узлу, что требуется инкапсуляция RFC-3948 | ||
+ | # (ESP в пакетах UDP-порта 4500). Чтобы этот параметр имел какой-либо эффект, | ||
+ | # необходимо установить параметр nat_traversal = yes. | ||
+ | |||
+ | compress=yes | ||
+ | | ||
+ | # Раздел содержит спецификацию определенного соединения, | ||
+ | conn l2tp-psk-nat | ||
+ | |||
+ | # Всё начинающееся с: | ||
+ | # left - означает локальный компьютер, | ||
+ | # right - означает удалённый компьютер, | ||
+ | # по сути, все остальные. | ||
+ | | ||
+ | rightsubnet=vhost: | ||
+ | # маска. В настоящее время поддерживаются диапазоны IPv4 и IPv6. Если не указывать, | ||
+ | # то предполагается, | ||
+ | # только к right участнику. | ||
+ | # Поддерживает два волшебных сокращения vhost: и vnet:, которые могут перечислять | ||
+ | # подсети в том же синтаксисе, | ||
+ | # Значение %priv расширяется до сетей, указанных в virtual_private. | ||
+ | # Значение %no означает отсутствие подсети. | ||
+ | # При использовании vnet соединение создает экземпляр, | ||
+ | # несколько туннелей с разными подсетями. | ||
+ | # Вышесказанное действительно и для leftsubnet. | ||
+ | |||
+ | |||
+ | also=l2tp-psk-nonat | ||
+ | # они являлись частью этого раздела. Указанный раздел должен существовать, | ||
+ | # за текущим и иметь один и тот же тип раздела. (Вложенность разрешена, | ||
+ | # более одного в одном разделе, | ||
+ | # одного раза.) | ||
+ | | ||
+ | # Раздел содержит спецификацию определенного соединения, | ||
+ | # такое же как указанно в параметре also в разделе выше. | ||
+ | conn l2tp-psk-nonat | ||
+ | authby=secret | ||
+ | # Допустимые значения являются " | ||
+ | # RSA (по умолчанию). | ||
+ | |||
+ | pfs=yes | ||
+ | # соединения (при использовании PFS, проникновение протокола обмена ключами не | ||
+ | # компрометирует ключи, согласованные ранее). | ||
+ | # Допустимые значения: | ||
+ | |||
+ | auto=add | ||
+ | # Допустимые значения: | ||
+ | # " | ||
+ | # " | ||
+ | # " | ||
+ | # " | ||
+ | |||
+ | keyingtries=1 | ||
+ | # соединения (по умолчанию %forever). Значение " | ||
+ | # сдаваться» (может быть записано как " | ||
+ | |||
+ | rekey=no | ||
+ | # Допустимые значения: | ||
+ | |||
+ | ikelifetime=8h | ||
+ | # повторного обсуждения. Допустимые значения " | ||
+ | # максимум " | ||
+ | |||
+ | keylife=1h | ||
+ | # Как долго должен длиться определенный экземпляр соединения, | ||
+ | # переговоров до истечения срока действия. | ||
+ | # Допустимые значения - целое число " | ||
+ | # за которым следуют " | ||
+ | # По умолчанию " | ||
+ | |||
+ | type=transport | ||
+ | # " | ||
+ | # или " | ||
+ | # " | ||
+ | # " | ||
+ | # " | ||
+ | # " | ||
+ | |||
+ | left=77.77.77.77 | ||
+ | | ||
+ | leftprotoport=17/ | ||
+ | # искаться в / | ||
+ | # протокол/ | ||
+ | # (например, | ||
+ | # / | ||
+ | # разрешения всех портов определенного протокола. Чаще всего этот вариант | ||
+ | # используется для соединений L2TP, разрешающих только пакеты l2tp (порт 1701 UDP), | ||
+ | # например: | ||
+ | |||
+ | leftnexthop=%defaultroute | ||
+ | # По умолчанию используется значение " | ||
+ | # Если leftnexthop = %defaultroute и, указанные в секции config setup, | ||
+ | # interfaces=%defaultroute, | ||
+ | # интерфейса шлюза по умолчанию. | ||
+ | |||
+ | right=%any | ||
+ | rightprotoport=17/ | ||
+ | rightnexthop=%defaultroute | ||
+ | | ||
+ | dpddelay=60 | ||
+ | # Если используется dpddelay, то необходимо, | ||
+ | | ||
+ | dpdtimeout=180 | ||
+ | # не будет ответа и трафика, | ||
+ | # SA (по умолчанию 120 секунд). Если используется dpdtimeout, то необходимо, | ||
+ | # также, установить dpdaction. | ||
+ | |||
+ | dpdaction=clear | ||
+ | # " | ||
+ | # " | ||
+ | # " | ||
+ | # " | ||
+ | |||
+ | aggrmode=no | ||
+ | # Агрессивный режим менее безопасен и уязвим для атак типа «отказ в обслуживании». | ||
+ | # Он также уязвим для атак с использованием таких программ, | ||
+ | # Он не должен использоваться, | ||
+ | # групповыми секретами (PSK). | ||
+ | </ | ||
+ | Создаем файл /// | ||
+ | < | ||
+ | # На самом деле вариантов много, см. "man ipsec.secrets", | ||
+ | # но в нашей реализации, | ||
+ | |||
+ | # где_ждать от_кого": | ||
+ | |||
+ | 77.77.77.77 %any : PSK " | ||
+ | </ | ||
+ | Подправим // | ||
+ | < | ||
+ | L2TP_IFACE=" | ||
+ | IPTABLES="/ | ||
+ | |||
+ | # l2tp/ipsec INPUT | ||
+ | $IPTABLES -A INPUT -p udp --dport 1701 -j ACCEPT | ||
+ | $IPTABLES -A INPUT -p udp --dport 500 -j ACCEPT | ||
+ | $IPTABLES -A INPUT -p udp --dport 4500 -j ACCEPT | ||
+ | $IPTABLES -A INPUT -i $L2TP_IFACE -j ACCEPT | ||
+ | |||
+ | # l2tp/ipsec FORWARD | ||
+ | $IPTABLES -A FORWARD -i $L2TP_IFACE -j ACCEPT | ||
+ | |||
+ | # l2tp/ | ||
+ | $IPTABLES -A OUTPUT -p udp --sport 500 -j ACCEPT | ||
+ | $IPTABLES -A OUTPUT -p udp --sport 4500 -j ACCEPT | ||
+ | $IPTABLES -A OUTPUT -p udp --sport 1701 -j ACCEPT | ||
+ | </ | ||
+ | Создадим файл /// | ||
+ | < | ||
+ | net.ipv4.ip_forward = 1 | ||
+ | net.ipv4.conf.all.send_redirects = 0 | ||
+ | net.ipv4.conf.all.accept_redirects = 0 | ||
+ | net.ipv4.conf.default.send_redirects = 0 | ||
+ | net.ipv4.conf.default.accept_redirects = 0 | ||
+ | net.ipv4.icmp_ignore_bogus_error_responses = 1 | ||
+ | </ | ||
+ | Применим параметры ядра без перезагрузки. | ||
+ | < | ||
+ | # sysctl -p | ||
+ | </ | ||
+ | Запустим IPSec и проверим работоспособность. | ||
+ | < | ||
+ | # / | ||
+ | ipsec_setup: | ||
+ | |||
+ | # ipsec verify | ||
+ | Checking if IPsec got installed and started correctly: | ||
+ | |||
+ | Version check and ipsec on-path | ||
+ | Openswan U2.6.49/ | ||
+ | See `ipsec --copyright' | ||
+ | Checking for IPsec support in kernel | ||
+ | | ||
+ | ICMP default/ | ||
+ | ICMP default/ | ||
+ | XFRM larval drop [OK] | ||
+ | Hardware random device check [N/A] | ||
+ | Two or more interfaces found, checking IP forwarding | ||
+ | Checking rp_filter | ||
+ | Checking that pluto is running | ||
+ | Pluto listening for IKE on udp 500 [OK] | ||
+ | Pluto listening for IKE on tcp 500 [NOT IMPLEMENTED] | ||
+ | Pluto listening for IKE/NAT-T on udp 4500 [OK] | ||
+ | Pluto listening for IKE/NAT-T on tcp 4500 [NOT IMPLEMENTED] | ||
+ | Pluto listening for IKE on tcp 10000 (cisco) | ||
+ | Checking NAT and MASQUERADEing | ||
+ | Checking ' | ||
+ | Checking ' | ||
+ | </ | ||
+ | Смотрим /// | ||
+ | < | ||
+ | ipsec_setup: | ||
+ | ipsec__plutorun: | ||
+ | pluto: adjusting ipsec.d to / | ||
+ | ipsec__plutorun: | ||
+ | pluto: Labelled IPsec not enabled; value 32001 ignored. | ||
+ | ipsec__plutorun: | ||
+ | ipsec__plutorun: | ||
+ | ipsec__plutorun: | ||
+ | ipsec__plutorun: | ||
+ | ipsec__plutorun: | ||
+ | ipsec__plutorun: | ||
+ | ipsec__plutorun: | ||
+ | ipsec__plutorun: | ||
+ | ipsec__plutorun: | ||
+ | ipsec__plutorun: | ||
+ | ipsec__plutorun: | ||
+ | </ | ||
+ | IPSec готов, останавливаем. | ||
+ | < | ||
+ | # / | ||
+ | ipsec_setup: | ||
+ | </ | ||
+ | Переходим к настройке L2TP. | ||
+ | |||
+ | ===== L2TP ===== | ||
+ | |||
+ | Редактируем /// | ||
+ | < | ||
+ | [global] | ||
+ | |||
+ | ; IP-адрес интерфейса на котором слушает демон. По умолчанию 0.0.0.0, означающее то, что он прослушивает все интерфейсы. | ||
+ | |||
+ | listen-addr = 77.77.77.77 | ||
+ | |||
+ | ; Использовать отслеживание IPsec Security Association. Допустимые значения " | ||
+ | ; Если разрешено, | ||
+ | ; отслеживать несколько клиентов с использованием одного и того же внутреннего NAT-адреса или за одним и тем же | ||
+ | ; маршрутизатором NAT. Должно поддерживаться ядром. В настоящее время работает только с Openswan KLIPS в режиме " | ||
+ | | ||
+ | ipsec saref = no | ||
+ | |||
+ | [lns default] | ||
+ | ; Диапазон ip адресов, | ||
+ | |||
+ | ip range = 192.168.3.50-192.168.3.150 | ||
+ | |||
+ | ; Адрес локального интерфейса VPN. | ||
+ | |||
+ | local ip = 192.168.3.251 | ||
+ | |||
+ | ; Требовать от удаленного узла производить аутентификацию по протоколу CHAP. | ||
+ | |||
+ | require chap = yes | ||
+ | |||
+ | ; Запретить удаленному узлу производить аутентификацию по протоколу PAP. | ||
+ | |||
+ | refuse pap = yes | ||
+ | |||
+ | ; Требовать от удаленного узла аутентификацию | ||
+ | |||
+ | require authentication = yes | ||
+ | |||
+ | ; Запретить отладку pppd | ||
+ | |||
+ | ppp debug = no | ||
+ | |||
+ | ; Путь к файлу в котором содержатся параметры конфигурации pppd. | ||
+ | |||
+ | pppoptfile = / | ||
+ | |||
+ | ; Использовать бит длины, указывающий полезную нагрузку пакета l2tp. | ||
+ | |||
+ | length bit = yes | ||
+ | </ | ||
+ | Теперь отредактируем файл /// | ||
+ | < | ||
+ | # Принимать предложение удаленного узла о нашем локальном IP адресе, | ||
+ | |||
+ | ipcp-accept-local | ||
+ | |||
+ | # Принимать предложение от удаленного узла о его IP-адресе, | ||
+ | |||
+ | ipcp-accept-remote | ||
+ | |||
+ | # Разрешить аутентификацию по протоколу — MS CHAP v2. | ||
+ | |||
+ | require-mschap-v2 | ||
+ | |||
+ | # Разрешить аутентификацию по протоколу — MS CHAP. | ||
+ | |||
+ | require-mschap | ||
+ | |||
+ | # Разрешить аутентификацию по протоколу — CHAP. | ||
+ | |||
+ | require-chap | ||
+ | |||
+ | # Запретить аутентификацию по протоколу — PAP | ||
+ | |||
+ | refuse-pap | ||
+ | |||
+ | # Первичный DNS сервера для L2TP-клиентов. | ||
+ | |||
+ | ms-dns 192.168.3.250 | ||
+ | |||
+ | # Вторичный DNS сервера для L2TP-клиентов. | ||
+ | |||
+ | ms-dns 8.8.8.8 | ||
+ | |||
+ | # async карта символов - 32-bit hex; каждый бит - символ, | ||
+ | # чтобы pppd мог его принять. 0x00000001 - это маска для ' | ||
+ | |||
+ | asyncmap 0 | ||
+ | |||
+ | # Отключить согласование протокола управления сжатием (Compression Control Protocol). | ||
+ | |||
+ | noccp | ||
+ | |||
+ | # Требование для удаленной стороны назвать себя перед тем как начнется обмен пакетами. | ||
+ | |||
+ | auth | ||
+ | |||
+ | # Использовать аппаратное управление потоком данных (напр., RTS/CTS) | ||
+ | |||
+ | crtscts | ||
+ | |||
+ | # Использовать lock в стиле UUCP на последовательное устройство, | ||
+ | |||
+ | lock | ||
+ | |||
+ | # При протоколировании содержимого пакетов PAP исключить строку пароля из журнала. | ||
+ | |||
+ | hide-password | ||
+ | |||
+ | # Использовать линии управления модемом. | ||
+ | |||
+ | modem | ||
+ | |||
+ | # Имя локальной системы для целей аутентификации. | ||
+ | |||
+ | name l2tpd | ||
+ | |||
+ | # Отправлять кадр LCP echo-request удаленной стороне каждое указанное количество секунд. | ||
+ | # Под Linux, echo-request отправляется тогда, когда пакеты не принимаются от удаленной стороны указанное количество секунд. | ||
+ | # Обычно удаленная сторона должна отвечать на echo-request отправкой echo-reply. | ||
+ | |||
+ | lcp-echo-interval 30 | ||
+ | |||
+ | # Завершить связь, если указанное количество LCP echo-requests отправлены без приема правильных LCP echo-reply. | ||
+ | # Требует ненулевого значения для параметра lcp-echo-interval. | ||
+ | | ||
+ | lcp-echo-failure 4 | ||
+ | |||
+ | # Отключиться, | ||
+ | |||
+ | idle 1800 | ||
+ | |||
+ | # Значение MTU [Maximum Transmit Unit]. | ||
+ | |||
+ | mtu 1400 | ||
+ | |||
+ | # Значение MRU [Maximum Receive Unit]. | ||
+ | |||
+ | mru 1400 | ||
+ | |||
+ | # Добавить запись в таблицу ARP [Address Resolution Protocol] этой системы с IP-адресом удаленного узла и Ethernet-адресом | ||
+ | # этой системы. Чтобы удаленный узел появился в локальной сети. | ||
+ | |||
+ | proxyarp | ||
+ | |||
+ | </ | ||
+ | Отредактируем файл /// | ||
+ | < | ||
+ | # Secrets for authentication using CHAP | ||
+ | # client | ||
+ | user1 * | ||
+ | user2 * | ||
+ | user3 * | ||
+ | </ | ||
+ | Создадим файл /// | ||
+ | < | ||
+ | #!/bin/sh | ||
+ | # | ||
+ | # xl2tpd | ||
+ | # | ||
+ | # description: | ||
+ | # | ||
+ | |||
+ | CONFIG_FILE=/ | ||
+ | DAEMON=xl2tpd | ||
+ | |||
+ | [ -x / | ||
+ | |||
+ | RETVAL=0 | ||
+ | |||
+ | start() { | ||
+ | echo -n " | ||
+ | if [ ! -d / | ||
+ | then | ||
+ | mkdir / | ||
+ | fi | ||
+ | / | ||
+ | RETVAL=$? | ||
+ | [ $RETVAL -eq 0 ] && touch / | ||
+ | echo "" | ||
+ | return $RETVAL | ||
+ | } | ||
+ | |||
+ | stop() { | ||
+ | echo -n " | ||
+ | kill -9 `cat / | ||
+ | RETVAL=$? | ||
+ | echo | ||
+ | [ $RETVAL -eq 0 ] && rm -f / | ||
+ | return $RETVAL | ||
+ | } | ||
+ | |||
+ | restart() { | ||
+ | stop | ||
+ | start | ||
+ | } | ||
+ | |||
+ | |||
+ | status() { | ||
+ | PID=`ps ax | awk '{if (match($5, " | ||
+ | if test " | ||
+ | echo " | ||
+ | else | ||
+ | echo " | ||
+ | fi | ||
+ | } | ||
+ | |||
+ | |||
+ | # See how we were called. | ||
+ | case " | ||
+ | start) | ||
+ | start | ||
+ | ;; | ||
+ | stop) | ||
+ | stop | ||
+ | ;; | ||
+ | status) | ||
+ | status | ||
+ | ;; | ||
+ | restart|reload) | ||
+ | restart | ||
+ | ;; | ||
+ | condrestart) | ||
+ | [ -f / | ||
+ | ;; | ||
+ | *) | ||
+ | echo " | ||
+ | exit 1 | ||
+ | esac | ||
+ | </ | ||
+ | Сделаем этот файл исполняемым. | ||
+ | < | ||
+ | # chmod +x / | ||
+ | </ | ||
+ | |||
+ | Всё готово! Запускаем IPSec и L2TP. | ||
+ | < | ||
+ | # / | ||
+ | ipsec_setup: | ||
+ | |||
+ | # / | ||
+ | Starting xl2tpd : | ||
+ | |||
+ | # / | ||
+ | IPsec running | ||
+ | pluto pid 28314 | ||
+ | No tunnels up | ||
+ | |||
+ | # / | ||
+ | xl2tpd is running. | ||
+ | </ | ||
+ | |||
+ | Для автозапуска после перезагрузки пропишем в /// | ||
+ | < | ||
+ | # L2TP/IPSEC | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | ====== Клиенты ====== | ||
+ | |||
+ | Покажу настройку Linux-клиентов для подключения к нескольким L2TP/IPSec серверам, | ||
+ | В Windows, думаю, и так понятно как подключаться к нескольким серверам. Поэтому, | ||
+ | Для примера буду использовать: | ||
+ | **77.77.77.77 (vpn.mydom.ru)**\\ | ||
+ | **88.88.88.88 (vpn.yourdom.ru)** - сервер за // | ||
+ | |||
+ | ===== Linux ===== | ||
+ | |||
+ | Версия, | ||
+ | |||
+ | Берем [[http:// | ||
+ | < | ||
+ | # wget https:// | ||
+ | </ | ||
+ | правим // | ||
+ | < | ||
+ | # upgradepkg --install-new / | ||
+ | Package openswan-2.6.49.1-i486-1_SBo.tgz installed. | ||
+ | </ | ||
+ | Берем [[http:// | ||
+ | < | ||
+ | # wget -O xl2tpd-1.3.8.tar.gz https:// | ||
+ | </ | ||
+ | Правим // | ||
+ | < | ||
+ | # upgradepkg --install-new / | ||
+ | Package xl2tpd-1.3.8-i486-1_SBo.tgz installed. | ||
+ | </ | ||
+ | Переходим к настройке IPSec. | ||
+ | |||
+ | ==== IPSec ==== | ||
+ | |||
+ | Редактируем файл /// | ||
+ | < | ||
+ | version 2.0 | ||
+ | |||
+ | config setup | ||
+ | |||
+ | plutodebug=all | ||
+ | plutostderrlog=/ | ||
+ | nat_traversal=yes | ||
+ | protostack=netkey | ||
+ | |||
+ | conn mydom-vpn | ||
+ | |||
+ | authby=secret | ||
+ | pfs=yes | ||
+ | keyingtries=3 | ||
+ | rekey=yes | ||
+ | type=transport | ||
+ | left=%defaultroute | ||
+ | leftnexthop=%defaultroute | ||
+ | leftprotoport=17/ | ||
+ | right=77.77.77.77 | ||
+ | rightid=" | ||
+ | rightprotoport=17/ | ||
+ | auto=add | ||
+ | |||
+ | conn yourdom-vpn # Сервер за NAT' | ||
+ | |||
+ | authby=secret | ||
+ | pfs=yes | ||
+ | keyingtries=3 | ||
+ | rekey=yes | ||
+ | type=transport | ||
+ | left=%defaultroute | ||
+ | leftnexthop=%defaultroute | ||
+ | leftprotoport=17/ | ||
+ | right=88.88.88.88 | ||
+ | rightid=" | ||
+ | rightprotoport=17/ | ||
+ | auto=add | ||
+ | </ | ||
+ | |||
+ | Создадим 3 файла с правами 600, пустая строка в конце файла обязательна: | ||
+ | */// | ||
+ | < | ||
+ | %any 77.77.77.77: | ||
+ | |||
+ | </ | ||
+ | |||
+ | */// | ||
+ | < | ||
+ | # Обратите внимание, | ||
+ | %any 10.0.0.250: PSK " | ||
+ | |||
+ | </ | ||
+ | |||
+ | */// | ||
+ | < | ||
+ | include ipsec.*.secrets | ||
+ | |||
+ | </ | ||
+ | Необходимо открыть порты, если используется // | ||
+ | < | ||
+ | L2TP_IFACE=" | ||
+ | IPTABLES="/ | ||
+ | |||
+ | # l2tp/ipsec INPUT | ||
+ | $IPTABLES -A INPUT -p udp --dport 1701 -j ACCEPT | ||
+ | $IPTABLES -A INPUT -p udp --dport 500 -j ACCEPT | ||
+ | $IPTABLES -A INPUT -p udp --dport 4500 -j ACCEPT | ||
+ | $IPTABLES -A INPUT -i $L2TP_IFACE -j ACCEPT | ||
+ | |||
+ | # l2tp/ipsec FORWARD | ||
+ | $IPTABLES -A FORWARD -i $L2TP_IFACE -j ACCEPT | ||
+ | |||
+ | # l2tp/ | ||
+ | $IPTABLES -A OUTPUT -p udp --sport 500 -j ACCEPT | ||
+ | $IPTABLES -A OUTPUT -p udp --sport 4500 -j ACCEPT | ||
+ | $IPTABLES -A OUTPUT -p udp --sport 1701 -j ACCEPT | ||
+ | </ | ||
+ | Создадим файл /// | ||
+ | < | ||
+ | net.ipv4.ip_forward = 1 | ||
+ | net.ipv4.conf.all.send_redirects = 0 | ||
+ | net.ipv4.conf.all.accept_redirects = 0 | ||
+ | net.ipv4.conf.default.send_redirects = 0 | ||
+ | net.ipv4.conf.default.accept_redirects = 0 | ||
+ | net.ipv4.icmp_ignore_bogus_error_responses = 1 | ||
+ | </ | ||
+ | Применим параметры ядра без перезагрузки. | ||
+ | < | ||
+ | # sysctl -p | ||
+ | </ | ||
+ | Запустим IPSec и проверим работоспособность. | ||
+ | < | ||
+ | # / | ||
+ | ipsec_setup: | ||
+ | |||
+ | # / | ||
+ | IPsec running | ||
+ | pluto pid 14263 | ||
+ | No tunnels up | ||
+ | |||
+ | # ipsec verify | ||
+ | Checking if IPsec got installed and started correctly: | ||
+ | |||
+ | Version check and ipsec on-path | ||
+ | Openswan U2.6.49.1/ | ||
+ | See `ipsec --copyright' | ||
+ | Checking for IPsec support in kernel | ||
+ | | ||
+ | ICMP default/ | ||
+ | ICMP default/ | ||
+ | XFRM larval drop [OK] | ||
+ | Hardware random device check [N/A] | ||
+ | Two or more interfaces found, checking IP forwarding | ||
+ | Checking rp_filter | ||
+ | Checking that pluto is running | ||
+ | Pluto listening for IKE on udp 500 [OK] | ||
+ | Pluto listening for IKE on tcp 500 [NOT IMPLEMENTED] | ||
+ | Pluto listening for IKE/NAT-T on udp 4500 [OK] | ||
+ | Pluto listening for IKE/NAT-T on tcp 4500 [NOT IMPLEMENTED] | ||
+ | Pluto listening for IKE on tcp 10000 (cisco) | ||
+ | Checking NAT and MASQUERADEing | ||
+ | Checking ' | ||
+ | Checking ' | ||
+ | |||
+ | # ipsec auto --status | ||
+ | 000 using kernel interface: netkey | ||
+ | 000 interface lo/lo ::1 (AF_INET6) | ||
+ | 000 interface lo/lo 127.0.0.1 (AF_INET) | ||
+ | 000 interface lo/lo 127.0.0.1 (AF_INET) | ||
+ | 000 interface eth0/eth0 192.168.10.44 (AF_INET) | ||
+ | 000 interface eth0/eth0 192.168.10.44 (AF_INET) | ||
+ | 000 %myid = (none) | ||
+ | 000 debug raw+crypt+parsing+emitting+control+lifecycle+klips+dns+oppo+controlmore+pfkey+nattraversal+x509+dpd+oppoinfo | ||
+ | 000 | ||
+ | 000 virtual_private (%priv): | ||
+ | 000 - allowed 0 subnets: | ||
+ | 000 - disallowed 0 subnets: | ||
+ | ... | ||
+ | ... | ||
+ | 000 algorithm ESP encrypt: id=2, name=ESP_DES, | ||
+ | 000 algorithm ESP encrypt: id=3, name=ESP_3DES, | ||
+ | ... | ||
+ | ... | ||
+ | 000 algorithm IKE encrypt: id=0, name=(null), | ||
+ | 000 algorithm IKE encrypt: id=5, name=OAKLEY_3DES_CBC, | ||
+ | ... | ||
+ | ... | ||
+ | 000 | ||
+ | 000 " | ||
+ | 000 " | ||
+ | 000 " | ||
+ | 000 " | ||
+ | 000 " | ||
+ | 000 " | ||
+ | 000 " | ||
+ | 000 " | ||
+ | 000 " | ||
+ | 000 " | ||
+ | 000 " | ||
+ | 000 " | ||
+ | </ | ||
+ | Поднимем оба тоннеля. | ||
+ | < | ||
+ | # ipsec auto --up mydom-vpn | ||
+ | 002 " | ||
+ | 105 " | ||
+ | 003 " | ||
+ | 003 " | ||
+ | 003 " | ||
+ | 002 " | ||
+ | 002 " | ||
+ | 107 " | ||
+ | 003 " | ||
+ | 002 " | ||
+ | 109 " | ||
+ | 003 " | ||
+ | 002 " | ||
+ | 002 " | ||
+ | 004 " | ||
+ | 002 " | ||
+ | 118 " | ||
+ | 000 " | ||
+ | 000 " | ||
+ | 002 " | ||
+ | 004 " | ||
+ | |||
+ | # ipsec auto --up yourdom-vpn | ||
+ | 002 " | ||
+ | 105 " | ||
+ | 003 " | ||
+ | 003 " | ||
+ | 003 " | ||
+ | 002 " | ||
+ | 002 " | ||
+ | 107 " | ||
+ | 003 " | ||
+ | 002 " | ||
+ | 109 " | ||
+ | 003 " | ||
+ | 002 " | ||
+ | 002 " | ||
+ | 004 " | ||
+ | 002 " | ||
+ | 002 " | ||
+ | 118 " | ||
+ | 000 " | ||
+ | 000 " | ||
+ | 002 " | ||
+ | 002 " | ||
+ | 004 " | ||
+ | |||
+ | # / | ||
+ | IPsec running | ||
+ | pluto pid 14263 | ||
+ | 2 tunnels up | ||
+ | some eroutes exist | ||
+ | </ | ||
+ | Всё хорошо, | ||
+ | Остановим //ipsec// и настроим //xl2tpd//. | ||
+ | < | ||
+ | # ipsec auto --down yourdom-vpn | ||
+ | 002 " | ||
+ | 002 " | ||
+ | 000 " | ||
+ | 002 " | ||
+ | |||
+ | # ipsec auto --down mydom-vpn | ||
+ | 002 " | ||
+ | 002 " | ||
+ | 000 " | ||
+ | 002 " | ||
+ | |||
+ | # / | ||
+ | ipsec_setup: | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== L2TP ==== | ||
+ | |||
+ | Редактируем /// | ||
+ | < | ||
+ | [global] | ||
+ | debug tunnel = no ; для настройки можно поставить в " | ||
+ | |||
+ | [lac mydom-vpn] | ||
+ | lns = vpn.mydom.ru | ||
+ | require chap = yes | ||
+ | refuse pap = yes | ||
+ | require authentication = no | ||
+ | name = user1 ; имя пользователя в / | ||
+ | ppp debug = no ; для настройки можно поставить в " | ||
+ | pppoptfile = / | ||
+ | length bit = yes | ||
+ | redial = yes | ||
+ | ;autodial = yes ; Убрать комментарий, | ||
+ | ; старта xl2tpd | ||
+ | |||
+ | [lac yourdom-vpn] | ||
+ | lns = vpn.yourdom.ru | ||
+ | require chap = yes | ||
+ | refuse pap = yes | ||
+ | require authentication = no | ||
+ | name = user2 ; имя пользователя в / | ||
+ | ppp debug = no ; для настройки можно поставить в " | ||
+ | pppoptfile = / | ||
+ | length bit = yes | ||
+ | redial = yes | ||
+ | ;autodial = yes ; Убрать комментарий, | ||
+ | ; старта xl2tpd | ||
+ | </ | ||
+ | |||
+ | Создадим файл /// | ||
+ | < | ||
+ | ipcp-accept-local | ||
+ | ipcp-accept-remote | ||
+ | refuse-eap | ||
+ | noccp | ||
+ | noauth | ||
+ | idle 3600 | ||
+ | mtu 1400 | ||
+ | mru 1400 | ||
+ | nodefaultroute | ||
+ | connect-delay 5000 | ||
+ | noipdefault | ||
+ | silent | ||
+ | linkname mydom-vpn | ||
+ | # появится файл ppp-mydom-vpn.pid, | ||
+ | </ | ||
+ | |||
+ | Создадим файл /// | ||
+ | < | ||
+ | ipcp-accept-local | ||
+ | ipcp-accept-remote | ||
+ | refuse-eap | ||
+ | noccp | ||
+ | noauth | ||
+ | idle 3600 | ||
+ | mtu 1400 | ||
+ | mru 1400 | ||
+ | nodefaultroute | ||
+ | connect-delay 5000 | ||
+ | noipdefault | ||
+ | silent | ||
+ | linkname yourdom-vpn | ||
+ | # появится файл ppp-yourdom-vpn.pid, | ||
+ | </ | ||
+ | |||
+ | Отредактируем файл /// | ||
+ | < | ||
+ | # Secrets for authentication using CHAP | ||
+ | # client | ||
+ | user1 * | ||
+ | user2 * | ||
+ | |||
+ | </ | ||
+ | Создаем скрипт /// | ||
+ | < | ||
+ | # chmod +x / | ||
+ | </ | ||
+ | |||
+ | Для автозапуска после перезагрузки пропишем в /// | ||
+ | < | ||
+ | # L2TP/IPSEC | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | Всё готово! Запускаем //ipsec//, //xl2tpd// и проверяем работу. | ||
+ | < | ||
+ | # / | ||
+ | ipsec_setup: | ||
+ | |||
+ | # / | ||
+ | IPsec running | ||
+ | pluto pid 23112 | ||
+ | No tunnels up | ||
+ | |||
+ | # / | ||
+ | Starting xl2tpd : | ||
+ | |||
+ | # / | ||
+ | xl2tpd is running. | ||
+ | |||
+ | # ipsec auto --up mydom-vpn | ||
+ | 002 " | ||
+ | 105 " | ||
+ | 003 " | ||
+ | 003 " | ||
+ | 003 " | ||
+ | ... | ||
+ | ... | ||
+ | |||
+ | # ipsec auto --up yourdom-vpn | ||
+ | 002 " | ||
+ | 105 " | ||
+ | 003 " | ||
+ | 003 " | ||
+ | 003 " | ||
+ | ... | ||
+ | ... | ||
+ | |||
+ | # / | ||
+ | IPsec running | ||
+ | pluto pid 23112 | ||
+ | 2 tunnels up | ||
+ | some eroutes exist | ||
+ | |||
+ | # echo "c mydom-vpn" | ||
+ | # echo "c yourdom-vpn" | ||
+ | # ifconfig | ||
+ | ... | ||
+ | ... | ||
+ | ppp0: flags=4305< | ||
+ | inet 192.168.3.50 | ||
+ | ppp txqueuelen 3 (Point-to-Point Protocol) | ||
+ | RX packets 4 bytes 46 (46.0 B) | ||
+ | RX errors 0 dropped 0 overruns 0 frame 0 | ||
+ | TX packets 9 bytes 240 (240.0 B) | ||
+ | TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 | ||
+ | |||
+ | ppp1: flags=4305< | ||
+ | inet 10.0.0.50 | ||
+ | ppp txqueuelen 3 (Point-to-Point Protocol) | ||
+ | RX packets 4 bytes 46 (46.0 B) | ||
+ | RX errors 0 dropped 0 overruns 0 frame 0 | ||
+ | TX packets 6 bytes 120 (120.0 B) | ||
+ | TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 | ||
+ | ... | ||
+ | ... | ||
+ | |||
+ | </ | ||
+ | |||
+ | Всё, подняли VPN с двумя разными серверами. Но работать мы можешь только с самими серверами, | ||
+ | < | ||
+ | # route add -net 192.168.3.0 netmask 255.255.255.0 | ||
+ | # route add -net 10.0.0.0 netmask 255.255.255.0 | ||
+ | </ | ||
+ | |||
+ | Если тоннели больше не нужны, закрываем их. | ||
+ | < | ||
+ | # echo "d mydom-vpn" | ||
+ | # echo "d yourdom-vpn" | ||
+ | # ipsec auto --down mydom-vpn | ||
+ | # ipsec auto --down yourdom-vpn | ||
+ | </ | ||
+ | |||
+ | ==== Скрипт ==== | ||
+ | |||
+ | Для автоматизации запуска и остановки //ipsec// и //xl2tpd// соединений, | ||
+ | Для его корректной работы необходимо, | ||
+ | Использование: | ||
+ | < | ||
+ | ./ | ||
+ | </ | ||
+ | Прежде, | ||
+ | У меня он работает на множестве VPN соединений. | ||
+ | |||
+ | Вопросы, | ||
+ | ===== Windows ===== | ||
+ | |||
+ | Как создавать новое VPN подключение, | ||
+ | //" | ||
+ | Я покажу как настроить VPN подключение к нашему L2TP/IPSec серверу и решение 2-х, часто возникающих ошибок при подключении. | ||
+ | |||
+ | Допустим, | ||
+ | \\ | ||
+ | {{: | ||
+ | {{: | ||
+ | \\ | ||
+ | {{: | ||
+ | \\ | ||
+ | Все остальные параметры оставим по умолчанию. И пробуем подключиться, | ||
+ | \\ | ||
+ | {{: | ||
+ | \\ | ||
+ | |||
+ | Иногда, | ||
+ | Находим ветку реестра\\ | ||
+ | **HKLM\SYSTEM/ | ||
+ | Создаем в нем параметр **AssumeUDPEncapsulationContextOnSendRule** //DWORD (32 бита)// | ||
+ | Изменяем его значение на одно из следующих: | ||
+ | **1** - настраивает Windows на возможность создания ассоциаций безопасности с серверами, | ||
+ | **2** - настраивает Windows на возможность создания ассоциаций безопасности , когда и клиент и сервер находятся за устройствами NAT. \\ | ||
+ | (чаще помогает - 2)\\ | ||
+ | Перезагрузите компьютер. | ||
+ | |||
+ | **Ошибка 789:**\\ | ||
+ | Находим ветку реестра и меняем значения, | ||
+ | **HKLM/ | ||
+ | **ProhibitIpSec**=// | ||
+ | **AllowL2TPWeakCrypto**=// | ||
+ | |||
+ | ---- | ||
+ | [[http:// | ||
+ | |||