Различия

Показаны различия между двумя версиями страницы.


wiki:articles:l2tp [17/05/2017 19:16] (текущий) – создано - внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +Дата написания: //май 2017 г.//\\
 +Автор: //Graf//\\
 +\\
 +^   **L2TP/IPSec VPN**   ^
 +\\
 +
 +----
 +====== Сервер ======
 +
 +В качестве сервера используется //Slackware Linux 14.2 64-bit// с ядром //4.4.38//, без //DE// и всем, что с ними связанно.\\
 +Eth1 - смотрит в Интернет - **77.77.77.77** (//vpn.mydom.ru//)\\
 +Eth0 - смотрит в локальную сеть - **192.168.3.250**\\
 +Клиентам VPN будут выдан диапазон IP адресов из этой же локальной сети - **192.168.3.0/24**, хотя этого и не рекомендуют делать, но у меня нет DHCP и каждому клиенту я лично буду выдавать логин, пароль и ip-адрес. Это позволит осуществлять двусторонний обмен данными и ip-адреса не будут пересекаться.
 +
 +Берем [[http://slackware.su/forum/files/openswan_slackbuild.tar.gz|openswan_slackbuild.tar.gz]], распаковываем и в этот же каталог скачиваем последнюю версию //openswan//, на сегодня это - 2.6.49.1
 +<code>
 +# wget https://download.openswan.org/openswan/openswan-2.6.49.1.tar.gz
 +</code>
 +правим //openswan.SlackBuild// в части версии и запускаем его. По окончании сборки устанавливаем полученный пакет.
 +<code>
 +# upgradepkg --install-new /tmp/openswan-2.6.49.1-x86_64-1_SBo.tgz
 +Package openswan-2.6.49.1-x86_64-1_SBo.tgz installed.
 +</code>
 +Берем [[http://slackware.su/forum/files/xl2tpd_slackbuild.tar.gz|xl2tpd_slackbuild.tar.gz]], распаковываем и в этот же каталог скачиваем последнюю версию //xl2tpd//, на сегодня это - 1.3.8, переименовав под требуемый slackbuild'ом шаблон.
 +<code>
 +# wget -O xl2tpd-1.3.8.tar.gz https://github.com/xelerance/xl2tpd/archive/v1.3.8.tar.gz
 +</code>
 +Правим //xl2tpd.SlackBuild// в части версии и запускаем его. По окончании сборки устанавливаем полученный пакет.
 +<code>
 +# upgradepkg --install-new /tmp/xl2tpd-1.3.8-x86_64-1_SBo.tgz
 +Package xl2tpd-1.3.8-x86_64-1_SBo.tgz installed.
 +</code>
 +
 +===== IPSec =====
 +Настраиваем IPSec.\\
 +Редактируем файл ///etc/ipsec.conf//, отступы в начале строк параметров, обязательны.
 +
 +<code=bash>
 +# Первая значимая строка файла должна указывать версию спецификации
 +version 2.0
 +
 +# Eединственный конфигурационный раздел, который содержит информацию, используемую при запуске программы. 
 +config setup
 +  nat_traversal=yes                      # Разрешить поддержку NAT (NAPT, также известный как «IP Masquerade»). 
 +                                         # Допустимые значения: "yes" и "no" (по умолчанию).
 +                                         
 +  virtual_private=%v4:192.168.3.0/24     # Подсеть, в которую будут попадать клиенты VPN
 +  
 +  oe=off                                 # Включить(on) или нет(off) оппортунистическое шифрование. По умолчанию нет(off)
 +                                         # Оппортунистическое шифрование - это термин для описания использования туннелей 
 +                                         # IPsec без предварительного согласования. 
 +
 +  protostack=netkey                      # Решить, какой стек протокола будет использоваться. 
 +                                         # Допустимыми значениями являются «auto», «klips», «netkey» и «mast».
 +
 +  uniqueids=yes                          # Следует ли сохранить уникальный идентификатор участника с любым новым
 +                                         # (автоматически вводимым ключом) соединением с использованием идентификатора
 +                                         # с другого IP-адреса. Допустимые значения: "yes" (по умолчанию) и "no"
 +                                         
 +# Раздел содержит спецификацию соединения по умолчанию
 +conn %default
 +  forceencaps=yes                        # Допустимые значения: "yes" или "no" (по умолчанию).
 +                                         # В некоторых случаях, например, когда пакеты ESP отфильтровываются 
 +                                         # или когда удаленный узел IPsec неправильно распознает NAT, может быть полезно 
 +                                         # принудительно инкапсулировать RFC-3948. Значение yes заставляет код обнаружения
 +                                         # NAT указывать удаленному узлу, что требуется инкапсуляция RFC-3948 
 +                                         # (ESP в пакетах UDP-порта 4500). Чтобы этот параметр имел какой-либо эффект, 
 +                                         # необходимо установить параметр nat_traversal = yes. 
 +                                         
 +  compress=yes                           # Предлагать сжатие. Допустимыми значениями являются "yes" и "no" (по умолчанию). 
 +  
 +# Раздел содержит спецификацию определенного соединения, название произвольное. 
 +conn l2tp-psk-nat
 +
 +# Всё начинающееся с:
 +# left - означает локальный компьютер, на котором хранится текущий файл с настройками, т.е. наш сервер;
 +# right - означает удалённый компьютер, то есть тот, с которым будет произведена попытка установить удалённое подключение, 
 +# по сути, все остальные.
 +  
 +  rightsubnet=vhost:%priv                # Приватная подсеть за удаленным участником (right), выраженная как сеть/сетевая
 +                                         # маска. В настоящее время поддерживаются диапазоны IPv4 и IPv6. Если не указывать,
 +                                         # то предполагается, что это right/32, означающее, что right конец соединения идет
 +                                         # только к right участнику.
 +                                         # Поддерживает два волшебных сокращения vhost: и vnet:, которые могут перечислять
 +                                         # подсети в том же синтаксисе, что и virtual_private. 
 +                                         # Значение %priv расширяется до сетей, указанных в virtual_private. 
 +                                         # Значение %no означает отсутствие подсети.
 +                                         # При использовании vnet соединение создает экземпляр, позволяя использовать
 +                                         # несколько туннелей с разными подсетями.
 +                                         # Вышесказанное действительно и для leftsubnet.
 +                                         
 +
 +  also=l2tp-psk-nonat                    # Значение является именем раздела, параметры которого добавляются так, как если бы
 +                                         # они являлись частью этого раздела. Указанный раздел должен существовать, следовать 
 +                                         # за текущим и иметь один и тот же тип раздела. (Вложенность разрешена, может быть
 +                                         # более одного в одном разделе, хотя запрещается добавлять один и тот же раздел более 
 +                                         # одного раза.)
 +  
 +# Раздел содержит спецификацию определенного соединения, название произвольное, но в данном случае, 
 +# такое же как указанно в параметре also в разделе выше. 
 +conn l2tp-psk-nonat
 +  authby=secret                          # Как два шлюза безопасности должны аутентифицировать друг друга.
 +                                         # Допустимые значения являются "secret" для PSK и "rsasig" для цифровых подписей 
 +                                         # RSA (по умолчанию).
 +                                         
 +  pfs=yes                                # Необходима ли полная секретность ключей (Perfect Forward Secrecy) на канале связи
 +                                         # соединения (при использовании PFS, проникновение протокола обмена ключами не
 +                                         # компрометирует ключи, согласованные ранее).
 +                                         # Допустимые значения: "yes"(по умолчанию) и "no".
 +                                         
 +  auto=add                               # Операция выполняемая автоматически при запуске IPsec.
 +                                         # Допустимые значения:
 +                                         # "add" (автоматическое добавление ipsec);
 +                                         # "route" (auto-route ipsec);
 +                                         # "start" (автоматическое обновление ipsec);
 +                                         # "ignore" (по умолчанию) (отсутствие автоматического запуска).
 +                                         
 +  keyingtries=1                          # Сколько попыток (целое или %forever) должно быть принято для согласования 
 +                                         # соединения (по умолчанию %forever). Значение "%forever" означает «никогда не
 +                                         # сдаваться» (может быть записано как "0").
 +                                         
 +  rekey=no                               # Следует ли пересматривать соединение после истечения срока его действия.
 +                                         # Допустимые значения: "yes"(по умолчанию) и "no".
 +                                         
 +  ikelifetime=8h                         # Как долго должен сохраняться канал соединения (фраза: "ISAKMP SA") до 
 +                                         # повторного обсуждения. Допустимые значения "1h"(по умолчанию)-1 час, 
 +                                         # максимум "24h" - 24 часа.
 +                                         
 +  keylife=1h                             # То же, что и "salifetime".
 +                                         # Как долго должен длиться определенный экземпляр соединения, от успешных
 +                                         # переговоров до истечения срока действия. 
 +                                         # Допустимые значения - целое число "s"(секунды) или десятичное число, 
 +                                         # за которым следуют "m", "h" или "d"(минуты, часы или дни соответственно). 
 +                                         # По умолчанию "8h", максимум "24h".
 +                                         
 +  type=transport                         # Тип соединения. Допустимые значения:
 +                                         # "tunnel"(по умолчанию) - туннель "host-to-host", "host-to-subnet" 
 +                                         # или "subnet-to-subnet"; 
 +                                         # "transport" - транспортный режим "host-to-host"; 
 +                                         # "passthrough" - обработка IPsec вообще не требуется; 
 +                                         # "drop" - пакеты должны быть отброшены; 
 +                                         # "reject" - пакеты должны быть отброшены, а диагностический ICMP возвращен.
 +                                         
 +  left=77.77.77.77                       # Внешний IP адрес сервера.
 +  
 +  leftprotoport=17/1701                  # Разрешенные протоколы и порты. Может использоваться число или имя, которое будет
 +                                         # искаться в /etc/protocols, например, leftprotoport = icmp, или в виде 
 +                                         # протокол/порт, например, tcp/smtp. Порты могут быть определены как число
 +                                         # (например, 25) или как имя (например, smtp), которое будет искать в
 +                                         # /etc/services. Специальное ключевое слово %any может использоваться для 
 +                                         # разрешения всех портов определенного протокола. Чаще всего этот вариант
 +                                         # используется для соединений L2TP, разрешающих только пакеты l2tp (порт 1701 UDP),
 +                                         # например: leftprotoport = 17/1701.
 +                                         
 +  leftnexthop=%defaultroute              # IP-адрес шлюза next-hop для подключения left участника к общедоступной сети;
 +                                         # По умолчанию используется значение "%direct" (имеется в виду right). 
 +                                         # Если leftnexthop = %defaultroute и, указанные в секции config setup,
 +                                         # interfaces=%defaultroute, то для шлюза next-hop, будет использоваться адрес
 +                                         # интерфейса шлюза по умолчанию.
 +                                         
 +  right=%any
 +  rightprotoport=17/%any
 +  rightnexthop=%defaultroute
 +  
 +  dpddelay=60                            # Интервал между keep-alive пакетами, в секундах (по умолчанию 30 секунд).
 +                                         # Если используется dpddelay, то необходимо, также, установить dpdtimeout.
 +    
 +  dpdtimeout=180                         # Интервал времени бездействия, в секундах. По прошествии этого периода, если
 +                                         # не будет ответа и трафика, то будет считаться, что узел мертв и будет удален
 +                                         # SA (по умолчанию 120 секунд). Если используется dpdtimeout, то необходимо, 
 +                                         # также, установить dpdaction.
 +                                         
 +  dpdaction=clear                        # Какие действия следует предпринять, когда узел объявлен мертвым. 
 +                                         # "hold"(по умолчанию) - eroute будет переведен в состояние %hold,
 +                                         # "clear" - eroute и SA будут очищены. 
 +                                         # "restart" - SA будет немедленно перезаключен.
 +                                         # "restart_by_peer" - все SA для мертвого узла будут пересмотрены.
 +                                         
 +  aggrmode=no                            # Использовать Агрессивный режим вместо основного режима. 
 +                                         # Агрессивный режим менее безопасен и уязвим для атак типа «отказ в обслуживании».
 +                                         # Он также уязвим для атак с использованием таких программ, как ikecrack.
 +                                         # Он не должен использоваться, и его особенно не следует использовать с XAUTH и
 +                                         # групповыми секретами (PSK).
 +</code>
 +Создаем файл ///etc/ipsec.secrets//
 +<code=bash>
 +# На самом деле вариантов много, см. "man ipsec.secrets",
 +# но в нашей реализации, это, примерно, следующее:
 +
 +# где_ждать от_кого": ЧТО_ждать "Пароль или ключ" 
 +
 +77.77.77.77 %any : PSK "my_super_password"
 +</code>
 +Подправим //iptables// добавив в соответствующие цепочки следующее:
 +<code=bash>
 +L2TP_IFACE="ppp+"
 +IPTABLES="/usr/sbin/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/ipsec  OUTPUT
 +$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
 +</code>
 +Создадим файл ///etc/sysctl.conf//
 +<code>
 +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
 +</code>
 +Применим параметры ядра без перезагрузки.
 +<code>
 +# sysctl -p
 +</code>
 +Запустим IPSec и проверим работоспособность.
 +<code>
 +# /etc/rc.d/rc.ipsec start
 +ipsec_setup: Starting Openswan IPsec U2.6.49.1/K4.4.38...
 +
 +# ipsec verify
 +Checking if IPsec got installed and started correctly:
 +
 +Version check and ipsec on-path                         [OK]
 +Openswan U2.6.49/K4.4.38 (netkey)
 +See `ipsec --copyright' for copyright information.
 +Checking for IPsec support in kernel                    [OK]
 + NETKEY: Testing XFRM related proc values
 +         ICMP default/send_redirects                    [OK]
 +         ICMP default/accept_redirects                  [OK]
 +         XFRM larval drop                               [OK]
 +Hardware random device check                            [N/A]
 +Two or more interfaces found, checking IP forwarding    [OK]
 +Checking rp_filter                                      [OK]
 +Checking that pluto is running                          [OK]
 + 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)           [NOT IMPLEMENTED]
 +Checking NAT and MASQUERADEing                          [TEST INCOMPLETE]
 +Checking 'ip' command                                   [OK]
 +Checking 'iptables' command                             [OK]
 +</code>
 +Смотрим ///var/log/syslog//, видим что-то подобное:
 +<code>
 +ipsec_setup: ...Openswan IPsec started
 +ipsec__plutorun: adjusting ipsec.d to /etc/ipsec.d
 +pluto: adjusting ipsec.d to /etc/ipsec.d
 +ipsec__plutorun: Labelled IPsec not enabled; value 32001 ignored.
 +pluto: Labelled IPsec not enabled; value 32001 ignored.
 +ipsec__plutorun: 002 adding connection: "l2tp-psk-nat"
 +ipsec__plutorun: 002 adding connection: "l2tp-psk-nonat"
 +ipsec__plutorun: 002 listening for IKE messages
 +ipsec__plutorun: 002 adding interface eth0/eth0 192.168.3.250:500 (AF_INET)
 +ipsec__plutorun: 002 adding interface eth0/eth0 192.168.3.250:4500
 +ipsec__plutorun: 002 adding interface eth1/eth1 77.77.77.77:500 (AF_INET)
 +ipsec__plutorun: 002 adding interface eth1/eth1 77.77.77.77:4500
 +ipsec__plutorun: 002 adding interface lo/lo 127.0.0.1:500 (AF_INET)
 +ipsec__plutorun: 002 adding interface lo/lo 127.0.0.1:4500
 +ipsec__plutorun: 002 adding interface lo/lo ::1:500 (AF_INET6)
 +ipsec__plutorun: 002 loading secrets from "/etc/ipsec.secrets"
 +</code>
 +IPSec готов, останавливаем.
 +<code>
 +# /etc/rc.d/rc.ipsec stop
 +ipsec_setup: Stopping Openswan IPsec...
 +</code>
 +Переходим к настройке L2TP.
 +
 +===== L2TP =====
 +
 +Редактируем ///etc/xl2tpd/xl2tpd.conf//
 +<code=asm>
 +[global]
 +
 +; IP-адрес интерфейса на котором слушает демон. По умолчанию 0.0.0.0, означающее то, что он прослушивает все интерфейсы.
 +
 +listen-addr = 77.77.77.77
 +
 +; Использовать отслеживание IPsec Security Association. Допустимые значения "yes" или "no"(по умолчанию).
 +; Если разрешено, то пакеты, полученные xl2tpd, должны иметь дополнительные поля (refme и refhim), которые позволяют
 +; отслеживать несколько клиентов с использованием одного и того же внутреннего NAT-адреса или за одним и тем же
 +; маршрутизатором NAT. Должно поддерживаться ядром. В настоящее время работает только с Openswan KLIPS в режиме "mast".
 +               
 +ipsec saref = no
 +
 +[lns default]
 +; Диапазон ip адресов, из которого клиентам при подключении будет назначен 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 = /etc/ppp/options.xl2tpd
 +
 +; Использовать бит длины, указывающий полезную нагрузку пакета l2tp.
 +
 +length bit = yes
 +</code>
 +Теперь отредактируем файл ///etc/ppp/options.xl2tpd//
 +<code=bash>
 +# Принимать предложение удаленного узла о нашем локальном IP адресе, даже если локальный IP адрес был указан в опциях.
 +
 +ipcp-accept-local
 +
 +# Принимать предложение от удаленного узла о его IP-адресе, даже если удаленный 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; каждый бит - символ, который надо представить в виде escape-последовательности,
 +# чтобы pppd мог его принять. 0x00000001 - это маска для '\x01', а 0x80000000 - маска для '\x1f'.
 +
 +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
 +
 +</code>
 +Отредактируем файл ///etc/ppp/chap-secrets//, внесём сюда логин, пароль и жёстко присвоим IP-адрес при подключении отдельно для каждого пользователя.
 +<code=bash>
 +# Secrets for authentication using CHAP
 +# client        server  secret                  IP addresses
 +user1  *       password-1    192.168.3.50
 +user2  *       password-2    192.168.3.51
 +user3  *       password-3    192.168.3.52
 +</code>
 +Создадим файл ///etc/rc.d/rc.xl2tpd//
 +<code=bash>
 +#!/bin/sh
 +#
 +# xl2tpd        This shell script takes care of starting and stopping l2tpd.
 +#
 +# description:  Layer 2 Tunnelling Protocol Daemon (RFC 2661)
 +#
 +
 +CONFIG_FILE=/etc/xl2tpd/xl2tpd.conf
 +DAEMON=xl2tpd
 +
 +[ -x /usr/sbin/$DAEMON ] || exit 0
 +
 +RETVAL=0
 +
 +start() {
 +        echo -n "Starting $DAEMON : "
 +        if [ ! -d /var/run/xl2tpd ]
 +        then
 +                mkdir /var/run/xl2tpd
 +        fi
 +        /usr/sbin/$DAEMON -c $CONFIG_FILE &
 +        RETVAL=$?
 +        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$DAEMON
 +        echo ""
 +        return $RETVAL
 +}
 +
 +stop() {
 +        echo -n "Stopping $DAEMON "
 +        kill -9 `cat /var/run/xl2tpd.pid`
 +        RETVAL=$?
 +        echo
 +        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$DAEMON
 +        return $RETVAL
 +}
 +
 +restart() {
 +        stop
 +        start
 +}
 +
 +
 +status() {
 +        PID=`ps ax | awk '{if (match($5, ".*/xl2tpd$") || $5 == "xl2tpd") print $1}'`
 +        if test "$PID" != ""; then
 +                echo "xl2tpd is running."
 +        else
 +                echo "xl2tpd is not running."
 +        fi
 +}
 +
 +
 +# See how we were called.
 +case "$1" in
 +  start)
 +        start
 +        ;;
 +  stop)
 +        stop
 +        ;;
 +  status)
 +        status
 +        ;;
 +  restart|reload)
 +        restart
 +        ;;
 +  condrestart)
 +        [ -f /var/lock/subsys/$DAEMON ] && restart || :
 +        ;;
 +  *)
 +        echo "Usage: $DAEMON {start|stop|status|restart|reload|condrestart}"
 +        exit 1
 +esac
 +</code>
 +Сделаем этот файл исполняемым.
 +<code>
 +# chmod +x /etc/rc.d/rc.xl2tpd
 +</code>
 +
 +Всё готово! Запускаем IPSec и L2TP.
 +<code>
 +# /etc/rc.d/rc.ipsec start
 +ipsec_setup: Starting Openswan IPsec U2.6.49.1/K4.4.38...
 +
 +# /etc/rc.d/rc.xl2tpd start
 +Starting xl2tpd : 
 +
 +# /etc/rc.d/rc.ipsec status
 +IPsec running  - pluto pid: 28314
 +pluto pid 28314
 +No tunnels up
 +
 +# /etc/rc.d/rc.xl2tpd status
 +xl2tpd is running.
 +</code>
 +
 +Для автозапуска после перезагрузки пропишем в ///etc/rc.d/rc.local//
 +<code>
 +# L2TP/IPSEC
 +/etc/rc.d/rc.ipsec start
 +/etc/rc.d/rc.xl2tpd start
 +</code>
 +
 +====== Клиенты ======
 +
 +Покажу настройку Linux-клиентов для подключения к нескольким L2TP/IPSec серверам, настроенным по [[wiki:articles:l2tp|текущей статье]]. Конфигурационные файлы будут без комментариев к параметрам, так как, большинство из них описано при настройки сервера, остальные в //<<man xl2tpd.conf>>// и //<<man ipsec.conf>>//.\\
 +В Windows, думаю, и так понятно как подключаться к нескольким серверам. Поэтому, для Windows-клиентов покажу пример для одного подключения, а так же, что делать при возникновении ошибок подключения.\\
 +Для примера буду использовать:\\
 +**77.77.77.77 (vpn.mydom.ru)**\\
 +**88.88.88.88 (vpn.yourdom.ru)** - сервер за //NAT//'ом, внутренний IP-адрес - 10.0.0.250 \\
 +
 +===== Linux =====
 +
 +Версия, разрядность и битность //Slackware Linux// не имеет значения. Проверялось на версиях 14.1 и 14.2, как 32, так и 64 битных. В примере будет использоваться //Slackware Linux 14.1 32-bit// с ядром //3.10.104//, IP - //192.168.10.44//
 +
 +Берем [[http://slackware.su/forum/files/openswan_slackbuild.tar.gz|openswan_slackbuild.tar.gz]], распаковываем и в этот же каталог скачиваем последнюю версию //openswan//, на сегодня это - 2.6.49.1
 +<code>
 +# wget https://download.openswan.org/openswan/openswan-2.6.49.1.tar.gz
 +</code>
 +правим //openswan.SlackBuild// в части версии и запускаем его. По окончании сборки устанавливаем полученный пакет.
 +<code>
 +# upgradepkg --install-new /tmp/openswan-2.6.49.1-i486-1_SBo.tgz
 +Package openswan-2.6.49.1-i486-1_SBo.tgz installed.
 +</code>
 +Берем [[http://slackware.su/forum/files/xl2tpd_slackbuild.tar.gz|xl2tpd_slackbuild.tar.gz]], распаковываем и в этот же каталог скачиваем последнюю версию //xl2tpd//, на сегодня это - 1.3.8, переименовав под требуемый slackbuild'ом шаблон.
 +<code>
 +# wget -O xl2tpd-1.3.8.tar.gz https://github.com/xelerance/xl2tpd/archive/v1.3.8.tar.gz
 +</code>
 +Правим //xl2tpd.SlackBuild// в части версии и запускаем его. По окончании сборки устанавливаем полученный пакет.
 +<code>
 +# upgradepkg --install-new /tmp/xl2tpd-1.3.8-i486-1_SBo.tgz
 +Package xl2tpd-1.3.8-i486-1_SBo.tgz installed.
 +</code>
 +Переходим к настройке IPSec.
 +
 +==== IPSec ====
 +
 +Редактируем файл ///etc/ipsec.conf//, отступы в начале строк параметров, обязательны.
 +<code=bash>
 +version 2.0
 +
 +config setup
 +
 +        plutodebug=all                         # Эти два параметра можно убрать после завершения отладки
 +        plutostderrlog=/var/log/openswan.log   # и стабильной работы IPSec
 +        nat_traversal=yes
 +        protostack=netkey
 +
 +conn mydom-vpn
 + 
 +        authby=secret
 +        pfs=yes
 +        keyingtries=3
 +        rekey=yes
 +        type=transport
 +        left=%defaultroute
 +        leftnexthop=%defaultroute
 +        leftprotoport=17/1701
 +        right=77.77.77.77
 +        rightid="vpn.mydom.ru"                 # Можно указать IP-адрес, можно вообще не указывать, если сервер не за NAT'ом 
 +        rightprotoport=17/1701
 +        auto=add        
 +
 +conn yourdom-vpn # Сервер за NAT'ом
 +
 +        authby=secret
 +        pfs=yes
 +        keyingtries=3
 +        rekey=yes
 +        type=transport
 +        left=%defaultroute
 +        leftnexthop=%defaultroute
 +        leftprotoport=17/1701
 +        right=88.88.88.88
 +        rightid="10.0.0.250"
 +        rightprotoport=17/1701
 +        auto=add
 +</code>
 +
 +Создадим 3 файла с правами 600, пустая строка в конце файла обязательна:\\
 +  *///etc/ipsec.mydom.secrets//  
 +<code=bash>
 +%any 77.77.77.77: PSK "mydom_super_password"
 + 
 +</code>
 +
 +  *///etc/ipsec.yourdom.secrets//
 +<code=bash>
 +# Обратите внимание, если сервер за NAT'ом, то указывать нужно его локальный IP-адрес
 +%any 10.0.0.250: PSK "yourdom_super_password"
 + 
 +</code>
 +
 +  *///etc/ipsec.secrets//
 +<code=bash>
 +include ipsec.*.secrets
 + 
 +</code>
 +Необходимо открыть порты, если используется //iptables//, то добавим в соответствующие цепочки следующее:
 +<code=bash>
 +L2TP_IFACE="ppp+"
 +IPTABLES="/usr/sbin/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/ipsec  OUTPUT
 +$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
 +</code>
 +Создадим файл ///etc/sysctl.conf//
 +<code>
 +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
 +</code>
 +Применим параметры ядра без перезагрузки.
 +<code>
 +# sysctl -p
 +</code>
 +Запустим IPSec и проверим работоспособность.
 +<code>
 +# /etc/rc.d/rc.ipsec start
 +ipsec_setup: Starting Openswan IPsec U2.6.49.1/K3.10.104-smp...
 +
 +# /etc/rc.d/rc.ipsec status
 +IPsec running  - pluto pid: 14263
 +pluto pid 14263
 +No tunnels up
 +
 +# ipsec verify
 +Checking if IPsec got installed and started correctly:
 +
 +Version check and ipsec on-path                         [OK]
 +Openswan U2.6.49.1/K3.10.104-smp (netkey)
 +See `ipsec --copyright' for copyright information.
 +Checking for IPsec support in kernel                    [OK]
 + NETKEY: Testing XFRM related proc values
 +         ICMP default/send_redirects                    [OK]
 +         ICMP default/accept_redirects                  [OK]
 +         XFRM larval drop                               [OK]
 +Hardware random device check                            [N/A]
 +Two or more interfaces found, checking IP forwarding    [OK]
 +Checking rp_filter                                      [OK]
 +Checking that pluto is running                          [OK]
 + 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)           [NOT IMPLEMENTED]
 +Checking NAT and MASQUERADEing                          [TEST INCOMPLETE]
 +Checking 'ip' command                                   [OK]
 +Checking 'iptables' command                             [OK]
 +
 +# 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, ivlen=8, keysizemin=64, keysizemax=64
 +000 algorithm ESP encrypt: id=3, name=ESP_3DES, ivlen=8, keysizemin=192, keysizemax=192
 +...
 +...
 +000 algorithm IKE encrypt: id=0, name=(null), blocksize=16, keydeflen=131
 +000 algorithm IKE encrypt: id=5, name=OAKLEY_3DES_CBC, blocksize=8, keydeflen=192
 +...
 +...
 +000 
 +000 "mydom-vpn": 192.168.10.44:17/1701...77.77.77.77:17/1701; unrouted; eroute owner: #0
 +000 "mydom-vpn":     myip=unset; hisip=unset;
 +000 "mydom-vpn":   ike_life: 3600s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries:
 +000 "mydom-vpn":   policy: PSK+ENCRYPT+PFS+IKEv2ALLOW+SAREFTRACK+lKOD+rKOD; prio: 32,32; interface: eth0; kind=CK_PERMANENT
 +000 "mydom-vpn":   dpd: action:clear; delay:30; timeout:120;  
 +000 "mydom-vpn":   newest ISAKMP SA: #0; newest IPsec SA: #0; eroute owner: #0;
 +000 "yourdom-vpn": 192.168.10.44:17/1701...88.88.88.88[10.0.0.250]:17/1701; unrouted; eroute owner: #0
 +000 "yourdom-vpn":     myip=unset; hisip=unset;
 +000 "yourdom-vpn":   ike_life: 28800s; ipsec_life: 3600s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries:
 +000 "yourdom-vpn":   policy: PSK+ENCRYPT+PFS+IKEv2ALLOW+SAREFTRACK+lKOD+rKOD; prio: 32,32; interface: eth0; kind=CK_PERMANENT
 +000 "yourdom-vpn":   dpd: action:clear; delay:30; timeout:120;  
 +000 "yourdom-vpn":   newest ISAKMP SA: #0; newest IPsec SA: #0; eroute owner: #0;
 +</code>
 +Поднимем оба тоннеля.
 +<code>
 +# ipsec auto --up mydom-vpn
 +002 "mydom-vpn" #10: initiating Main Mode
 +105 "mydom-vpn" #10: STATE_MAIN_I1: initiate
 +003 "mydom-vpn" #10: ignoring unknown Vendor ID payload [4f53576d77657d7c497e6c7c]
 +003 "mydom-vpn" #10: received Vendor ID payload [Dead Peer Detection]
 +003 "mydom-vpn" #10: received Vendor ID payload [RFC 3947] method set to=115 
 +002 "mydom-vpn" #10: enabling possible NAT-traversal with method RFC 3947 (NAT-Traversal)
 +002 "mydom-vpn" #10: transition from state STATE_MAIN_I1 to state STATE_MAIN_I2
 +107 "mydom-vpn" #10: STATE_MAIN_I2: sent MI2, expecting MR2
 +003 "mydom-vpn" #10: NAT-Traversal: Result using draft-ietf-ipsec-nat-t-ike (MacOS X): both are NATed
 +002 "mydom-vpn" #10: transition from state STATE_MAIN_I2 to state STATE_MAIN_I3
 +109 "mydom-vpn" #10: STATE_MAIN_I3: sent MI3, expecting MR3
 +003 "mydom-vpn" #10: received Vendor ID payload [CAN-IKEv2]
 +002 "mydom-vpn" #10: Main mode peer ID is ID_IPV4_ADDR: '77.77.77.77'
 +002 "mydom-vpn" #10: transition from state STATE_MAIN_I3 to state STATE_MAIN_I4
 +004 "mydom-vpn" #10: STATE_MAIN_I4: ISAKMP SA established {auth=OAKLEY_PRESHARED_KEY cipher=aes_128 prf=oakley_sha group=modp2048}
 +002 "mydom-vpn" #11: initiating Quick Mode PSK+ENCRYPT+PFS+UP+IKEv2ALLOW+SAREFTRACK {using isakmp#10 msgid:461ff689 proposal=defaults pfsgroup=OAKLEY_GROUP_MODP2048}
 +118 "mydom-vpn" #11: STATE_QUICK_I1: initiate
 +000 "mydom-vpn" #11: add inbound eroute 77.77.77.77/32:0 --17-> 192.168.10.44/32:1701 => tun.10000@192.168.10.44 succeeded
 +000 "mydom-vpn" #11: eroute_connection replace eroute 192.168.10.44/32:1701 --17-> 77.77.77.77/32:0 => esp.f07b394f@77.77.77.77 succeeded
 +002 "mydom-vpn" #11: transition from state STATE_QUICK_I1 to state STATE_QUICK_I2
 +004 "mydom-vpn" #11: STATE_QUICK_I2: sent QI2, IPsec SA established transport mode {ESP=>0xf07b394f <0xa4fe8efe xfrm=AES_128-HMAC_SHA1 NATOA=none NATD=77.77.77.77:4500 DPD=none}
 +
 +# ipsec auto --up yourdom-vpn
 +002 "yourdom-vpn" #12: initiating Main Mode
 +105 "yourdom-vpn" #12: STATE_MAIN_I1: initiate
 +003 "yourdom-vpn" #12: received Vendor ID payload [Openswan (this version) 2.6.49.1 ]
 +003 "yourdom-vpn" #12: received Vendor ID payload [Dead Peer Detection]
 +003 "yourdom-vpn" #12: received Vendor ID payload [RFC 3947] method set to=115 
 +002 "yourdom-vpn" #12: enabling possible NAT-traversal with method RFC 3947 (NAT-Traversal)
 +002 "yourdom-vpn" #12: transition from state STATE_MAIN_I1 to state STATE_MAIN_I2
 +107 "yourdom-vpn" #12: STATE_MAIN_I2: sent MI2, expecting MR2
 +003 "yourdom-vpn" #12: NAT-Traversal: Result using draft-ietf-ipsec-nat-t-ike (MacOS X): both are NATed
 +002 "yourdom-vpn" #12: transition from state STATE_MAIN_I2 to state STATE_MAIN_I3
 +109 "yourdom-vpn" #12: STATE_MAIN_I3: sent MI3, expecting MR3
 +003 "yourdom-vpn" #12: received Vendor ID payload [CAN-IKEv2]
 +002 "yourdom-vpn" #12: Main mode peer ID is ID_IPV4_ADDR: '10.0.0.250'
 +002 "yourdom-vpn" #12: transition from state STATE_MAIN_I3 to state STATE_MAIN_I4
 +004 "yourdom-vpn" #12: STATE_MAIN_I4: ISAKMP SA established {auth=OAKLEY_PRESHARED_KEY cipher=aes_128 prf=oakley_sha group=modp2048}
 +002 "yourdom-vpn" #12: Dead Peer Detection (RFC 3706): enabled
 +002 "yourdom-vpn" #13: initiating Quick Mode PSK+ENCRYPT+PFS+UP+IKEv2ALLOW+SAREFTRACK {using isakmp#12 msgid:c567bba6 proposal=defaults pfsgroup=OAKLEY_GROUP_MODP2048}
 +118 "yourdom-vpn" #13: STATE_QUICK_I1: initiate
 +000 "yourdom-vpn" #13: add inbound eroute 88.88.88.88/32:0 --17-> 192.168.10.44/32:1701 => tun.10000@192.168.10.44 succeeded
 +000 "yourdom-vpn" #13: eroute_connection replace eroute 192.168.10.44/32:1701 --17-> 88.88.88.88/32:0 => esp.461bbf8d@88.88.88.88 succeeded
 +002 "yourdom-vpn" #13: Dead Peer Detection (RFC 3706): enabled
 +002 "yourdom-vpn" #13: transition from state STATE_QUICK_I1 to state STATE_QUICK_I2
 +004 "yourdom-vpn" #13: STATE_QUICK_I2: sent QI2, IPsec SA established transport mode {ESP=>0x461bbf8d <0xa189d098 xfrm=AES_128-HMAC_SHA1 NATOA=none NATD=88.88.88.88:4500 DPD=enabled}
 +
 +# /etc/rc.d/rc.ipsec status
 +IPsec running  - pluto pid: 14263
 +pluto pid 14263
 +2 tunnels up
 +some eroutes exist
 +</code>
 +Всё хорошо, оба тоннеля поднялись.\\
 +Остановим //ipsec// и настроим //xl2tpd//.
 +<code>
 +# ipsec auto --down yourdom-vpn
 +002 "yourdom-vpn": terminating SAs using this connection
 +002 "yourdom-vpn" #15: deleting state #15 (STATE_QUICK_I2)
 +000 "yourdom-vpn" #15: delete (half) inbound eroute 88.88.88.88/32:1701 --17-> 192.168.10.44/32:1701 => unk255.10000@192.168.10.44 succeeded
 +002 "yourdom-vpn" #12: deleting state #12 (STATE_MAIN_I4)
 +
 +# ipsec auto --down mydom-vpn
 +002 "mydom-vpn": terminating SAs using this connection
 +002 "mydom-vpn" #16: deleting state #16 (STATE_QUICK_I2)
 +000 "mydom-vpn" #16: delete (half) inbound eroute 77.77.77.77/32:1701 --17-> 192.168.10.44/32:1701 => unk255.10000@192.168.10.44 succeeded
 +002 "mydom-vpn" #14: deleting state #14 (STATE_MAIN_I4)
 +
 +# /etc/rc.d/rc.ipsec stop
 +ipsec_setup: Stopping Openswan IPsec...
 +
 +</code>
 +
 +==== L2TP ====
 +
 +Редактируем ///etc/xl2tpd/xl2tpd.conf//
 +<code=asm>
 +[global]
 +debug tunnel = no                                   ; для настройки можно поставить в "yes"
 +
 +[lac mydom-vpn]
 +lns = vpn.mydom.ru                                  ; можно указать IP-адрес
 +require chap = yes
 +refuse pap = yes
 +require authentication = no
 +name = user1                                        ; имя пользователя в /etc/ppp/chap-secrets на сервере
 +ppp debug = no                                      ; для настройки можно поставить в "yes"
 +pppoptfile = /etc/ppp/options.xl2tpd.mydom-vpn      ; Можно написать один для всех соединений 
 +length bit = yes
 +redial = yes
 +;autodial = yes                                     ; Убрать комментарий, если хотим чтобы запускалось во время 
 +                                                    ; старта xl2tpd
 +
 +[lac yourdom-vpn]
 +lns = vpn.yourdom.ru                                ; можно указать IP-адрес
 +require chap = yes
 +refuse pap = yes
 +require authentication = no
 +name = user2                                        ; имя пользователя в /etc/ppp/chap-secrets на сервере
 +ppp debug = no                                      ; для настройки можно поставить в "yes"
 +pppoptfile = /etc/ppp/options.xl2tpd.yourdom-vpn    ; Можно написать один для всех соединений 
 +length bit = yes
 +redial = yes
 +;autodial = yes                                     ; Убрать комментарий, если хотим чтобы запускалось во время 
 +                                                    ; старта xl2tpd
 +</code>
 +
 +Создадим файл ///etc/ppp/options.xl2tpd.mydom-vpn//
 +<code=bash>
 +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       # имя соединения, можно использовать для контроля запуска. В /var/run 
 +                         # появится файл ppp-mydom-vpn.pid, внутри с номером процесса и номером ppp интерфейса.
 +</code>
 +
 +Создадим файл ///etc/ppp/options.xl2tpd.yourdom-vpn//
 +<code=bash>
 +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     # имя соединения, можно использовать для контроля запуска. В /var/run 
 +                         # появится файл ppp-yourdom-vpn.pid, внутри с номером процесса и номером ppp интерфейса.
 +</code>
 +
 +Отредактируем файл ///etc/ppp/chap-secrets//
 +<code=bash>
 +# Secrets for authentication using CHAP
 +# client        server  secret                  IP addresses
 +user1 *       mydom_super_password      192.168.3.50      
 +user2 *       yourdom_super_password                         # если не знаем какой IP получим.
 +
 +</code>
 +Создаем скрипт ///etc/rc.d/rc.xl2tpd// такой же как описан при настройке [[wiki:articles:l2tp#l2tp|сервера]] и сделаем этот файл исполняемым.
 +<code>
 +# chmod +x /etc/rc.d/rc.xl2tpd
 +</code>
 +
 +Для автозапуска после перезагрузки пропишем в ///etc/rc.d/rc.local//
 +<code>
 +# L2TP/IPSEC
 +/etc/rc.d/rc.ipsec start
 +/etc/rc.d/rc.xl2tpd start
 +</code>
 +
 +Всё готово! Запускаем //ipsec//, //xl2tpd// и проверяем работу.
 +<code>
 +# /etc/rc.d/rc.ipsec start
 +ipsec_setup: Starting Openswan IPsec U2.6.49.1/K3.10.104-smp...
 +
 +# /etc/rc.d/rc.ipsec status
 +IPsec running  - pluto pid: 23112
 +pluto pid 23112
 +No tunnels up
 +
 +# /etc/rc.d/rc.xl2tpd start
 +Starting xl2tpd : 
 +
 +# /etc/rc.d/rc.xl2tpd status
 +xl2tpd is running.
 +
 +# ipsec auto --up mydom-vpn
 +002 "mydom-vpn" #1: initiating Main Mode
 +105 "mydom-vpn" #1: STATE_MAIN_I1: initiate
 +003 "mydom-vpn" #1: ignoring unknown Vendor ID payload [4f53576d77657d7c497e6c7c]
 +003 "mydom-vpn" #1: received Vendor ID payload [Dead Peer Detection]
 +003 "mydom-vpn" #1: received Vendor ID payload [RFC 3947] method set to=115 
 +...
 +...
 +
 +# ipsec auto --up yourdom-vpn
 +002 "yourdom-vpn" #3: initiating Main Mode
 +105 "yourdom-vpn" #3: STATE_MAIN_I1: initiate
 +003 "yourdom-vpn" #3: received Vendor ID payload [Openswan (this version) 2.6.49.1 ]
 +003 "yourdom-vpn" #3: received Vendor ID payload [Dead Peer Detection]
 +003 "yourdom-vpn" #3: received Vendor ID payload [RFC 3947] method set to=115 
 +...
 +...
 +
 +# /etc/rc.d/rc.ipsec status
 +IPsec running  - pluto pid: 23112
 +pluto pid 23112
 +2 tunnels up
 +some eroutes exist
 +
 +# echo "c mydom-vpn" > /var/run/xl2tpd/l2tp-control
 +# echo "c yourdom-vpn" > /var/run/xl2tpd/l2tp-control
 +# ifconfig
 +...
 +...
 +ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1400
 +        inet 192.168.3.50  netmask 255.255.255.255  destination 192.168.3.251
 +        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<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1400
 +        inet 10.0.0.50  netmask 255.255.255.255  destination 10.0.0.251
 +        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
 +...
 +...
 +
 +</code>
 +
 +Всё, подняли VPN с двумя разными серверами. Но работать мы можешь только с самими серверами, а не с оборудованием и компьютерами в удалённой локальной сети. Чтобы получить такую возможность нужно пробросить маршрут до этих сетей.
 +<code>
 +# route add -net 192.168.3.0 netmask 255.255.255.0  gw 192.168.3.251
 +# route add -net 10.0.0.0 netmask 255.255.255.0  gw 10.0.0.251
 +</code>
 +
 +Если тоннели больше не нужны, закрываем их.
 +<code>
 +# echo "d mydom-vpn" > /var/run/xl2tpd/l2tp-control
 +# echo "d yourdom-vpn" > /var/run/xl2tpd/l2tp-control
 +# ipsec auto --down mydom-vpn
 +# ipsec auto --down yourdom-vpn
 +</code>
 +
 +==== Скрипт ====
 +
 +Для автоматизации запуска и остановки //ipsec// и //xl2tpd// соединений, а так же записи маршрута в таблицу маршрутизации, я написал [[http://slackware.su/forum/files/l2tp-ipsec-vpn.tar.gz| скрипт]].\\
 +Для его корректной работы необходимо, чтобы значение //lac// в //xl2tpd.conf//, //conn// в //ipsec.conf// и //linkname// в //options.xl2tpd.*//, были одинаковыми!\\
 +Использование:
 +<code>
 +./rc.l2ipsec-vpn {connection name} {start|stop|restart}
 +</code>
 +Прежде, чем запускать данный скрипт, изучите его содержимое. Я не несу никакой ответственности, если что-то пойдет не так, как вам казалось или хотелось. :)\\
 +У меня он работает на множестве VPN соединений.
 +
 +Вопросы, замечания и предложения по скрипту, а также финансовая благодарность, принимаются на [[ http://slackware.su/forum/index.php/topic,2793.0.html|форуме]] :)
 +===== Windows =====
 +
 +Как создавать новое VPN подключение, в Интернете описано во многих местах и очень подробно. Для каждой Windows системы отдельно и даже в картинках. Основной принцип сводится к:\\
 +//"Панель Управления" -> "Центр управления сетями и общим доступом" -> "Настройка нового подключения или сети"//\\
 +Я покажу как настроить VPN подключение к нашему L2TP/IPSec серверу и решение 2-х, часто возникающих ошибок при подключении.
 +
 +Допустим, мы назвали наше подключение //"my-vpn"// которое настроим на подключение к серверу по адресу //vpn.mydom.ru//:\\
 +\\
 +{{:wiki:win_l2tp1.png?nolink&350|}}
 +{{:wiki:win_l2tp2.png?nolink&340|}}\\
 +\\
 +{{:wiki:win_l2tp3.png?nolink&700|}}\\
 +\\
 +Все остальные параметры оставим по умолчанию. И пробуем подключиться, набрав имя пользователя и пароль указанный в ///etc/ppp/chap-secrets//\\
 +\\
 +{{:win_l2tp4.png?nolink&300|}}
 +\\
 +
 +Иногда, возникает ошибка подключения **(809)**, мне помог следующий рецепт:\\
 +Находим ветку реестра\\
 +**HKLM\SYSTEM/CurrentControlSet/Services/PolicyAgent** или **HKLM\SYSTEM/CurrentControlSet/Services/IPSec**\\
 +Создаем в нем параметр **AssumeUDPEncapsulationContextOnSendRule** //DWORD (32 бита)//
 +Изменяем его значение на одно из следующих:\\
 +**1** - настраивает Windows на возможность создания ассоциаций безопасности с серверами, которые расположены за NAT;\\
 +**2** - настраивает Windows на возможность создания ассоциаций безопасности , когда и клиент и сервер находятся за устройствами NAT. \\
 +(чаще помогает - 2)\\
 +Перезагрузите компьютер.
 +
 +**Ошибка 789:**\\
 +Находим ветку реестра и меняем значения, если нет, создаем:\\
 +**HKLM/System/CurrentControlSet/Services/Rasman/Parameters**  \\
 +**ProhibitIpSec**=//dword:00000001//\\
 +**AllowL2TPWeakCrypto**=//dword:00000001//\\
 +
 +----
 +[[http://slackware.su/forum/index.php/topic,2793.0.html| Обсуждаем на форуме.]]
 +
  
Навигация
Печать/экспорт
QR Code
QR Code wiki:articles:l2tp (generated for current page)