VPN (L2TP) сервер на основе xl2tpd

Используем пакеты, расширяющие возможности оборудования
Аватара пользователя
Zyxmon
Администратор
Сообщения: 1269
Зарегистрирован: 09 авг 2015, 14:33

Сообщение Zyxmon » 27 окт 2015, 16:21

Данная инструкция основана на теме старого форума - http://forum.zyxmon.org/topic638-vpn-l2 ... l2tpd.html и опробована на Keenetic Ultra II с сиcтемой пакетов Entware-ng.

Будет описано, как поднять l2tp сервер, как к нему и "квартирной сетке" подключиться из windows.

1. Для использования l2tp сервера на роутере следует разрешить к нему обращаться из внешней сети по udp/1701. На многих роутерах это делается с помощью дополнительных скриптов, на кинетиках с ndms v2 - так
fw.png


В крайнем случае можно использовать скрипт `/opt/etc/init.d/S20xl2tpd` (об этом дальше) исправив в нем очепятку - в нем долна быть строка
`iptables -I INPUT -p udp --dport 1701 -j ACCEPT` (нужно исправить tcp на udp).
2. Установим xl2tpd и отредактируем файлы

Код: Выделить всё

opkg install xl2tpd

Файл /opt/etc/xl2tpd/xl2tpd.conf

Код: Выделить всё

[global]
port = 1701
auth file = /opt/etc/xl2tpd/xl2tp-secrets
access control = no
force userspace = yes
[lns Serv]
exclusive = no
ip range = 192.168.11.2 - 192.168.11.195
lac = 0.0.0.0 - 255.255.255.254
hidden bit = no
local ip = 192.168.11.1
length bit = yes
require chap = yes
refuse pap = yes
refuse authentication = no
require authentication = no
name = Serv
ppp debug = no
pppoptfile = /opt/etc/ppp/options.xl2tpd
flow bit = yes

Что тут можно менять - диапазон выделяемых клиентам ip (ip range), ip сервера (со стороны клиента) (local ip), режим отладки ppp (ppp debug).
Настройки pppd редактируем в файле /opt/etc/ppp/options.xl2tpd

Код: Выделить всё

lcp-echo-interval 3
lcp-echo-failure 8
nodeflate
noproxyarp
mtu 1410
mru 1410
+chap
nobsdcomp
novj
novjccomp
ip-up-script /opt/etc/ppp/ip-up.sh
ip-down-script /opt/etc/ppp/ip-down.sh

Пароли и пользователи настраиваются в файле /opt/etc/ppp/chap-secrets (не путайте с /opt/etc/xl2tpd/xl2tp-secrets - он не используется).
Теперь приступим к скриптам /opt/etc/ppp/ip-up.sh и /opt/etc/ppp/ip-down.sh - эти скрипты вызываются при подключении и отключении клиента.
Для keentic'ов с ndms v2 они такие
/opt/etc/ppp/ip-up.sh:

Код: Выделить всё

#!/opt/bin/sh
PATH=/opt/sbin:/opt/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin
logger "*** L2TP client connected [$*]; adding iptables rules"
iptables -A INPUT -i $1 -j ACCEPT
iptables -A FORWARD -i $1 -j ACCEPT
iptables -A FORWARD -o $1 -j ACCEPT
iptables -t nat -A POSTROUTING -o $1 -j MASQUERADE

/opt/etc/ppp/ip-down.sh:

Код: Выделить всё

#!/opt/bin/sh
PATH=/opt/sbin:/opt/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin
logger "*** L2TP client disconnected [$*]; deleteting iptables rules"
iptables -D INPUT -i $1 -j ACCEPT
iptables -D FORWARD -i $1 -j ACCEPT
iptables -D FORWARD -o $1 -j ACCEPT
iptables -t nat -D POSTROUTING -o $1 -j MASQUERADE

На других маршрутизаторах могут незначительно отличаться.
Скрипт запуска `/opt/etc/init.d/S20xl2tpd` приведем к виду

Код: Выделить всё

~ # cat /opt/etc/init.d/K20xl2tpd
#!/bin/sh

ENABLED=yes
PROCS=xl2tpd
ARGS="-p /opt/var/run/xl2tpd.pid -c /opt/etc/xl2tpd/xl2tpd.conf -C /opt/var/run/l2tp-control"
PREARGS=""
DESC=$PROCS
PATH=/opt/sbin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

#iptables -I INPUT -p udp --dport 1701 -j ACCEPT

. /opt/etc/init.d/rc.func

И запустим сервер командой `/opt/etc/init.d/S20xl2tpd start`. В журнале роутера должно появится (примерно) следующее

Код: Выделить всё

[C] Feb 17 13:40:13 xl2tpd[1213]: setsockopt recvref[30]: Protocol not available 
[I] Feb 17 13:40:13 xl2tpd[1213]: Not looking for kernel support. 
[I] Feb 17 13:40:13 xl2tpd[1215]: xl2tpd version xl2tpd-1.3.6 started on Keenetic_Ultra PID:1215 
[I] Feb 17 13:40:13 xl2tpd[1215]: Written by Mark Spencer, Copyright (C) 1998, Adtran, Inc. 
[I] Feb 17 13:40:13 xl2tpd[1215]: Forked by Scott Balmos and David Stipp, (C) 2001 
[I] Feb 17 13:40:13 xl2tpd[1215]: Inherited by Jeff McAdams, (C) 2002 
[I] Feb 17 13:40:13 xl2tpd[1215]: Forked again by Xelerance (www.xelerance.com) (C) 2006 
[I] Feb 17 13:40:13 xl2tpd[1215]: Listening on IP address 0.0.0.0, port 1701 
[I] Feb 17 13:40:13 root: Started xl2tpd from .

3. Настройка windows.
Для подключение к роутеру из с windows необходимо отредактировать реестр и отключить ipsec для l2tp. Это описано на страницах настройки l2tp у многих интернет провайдеров.

Проще всего скачать файл http://keenetic.zyxmon.org/files/l2tp-disable-ipsec.reg
Сделать на скачанном двойной щелчок, согласиться с изменением реестра и перезагрузиться.
После этого:
* Создаем VPN соединение с ip/DDNS роутера. Указываем в разделе безопасность тип "L2TP IPSec VPN".
* В свойствах Сеть-> Протокол IPv4->Свойства на закладке дополнительно снимаем галочку на "Использовать удаленный шлюз для удаленной сети".
* Проверяем, что соединение устанавливается и кинетик доступен по адресу "remote ip" из файла xl2tpd.conf (192.168.11.1).
Лог роутера (примерно) такой

Код: Выделить всё

[I] Feb 17 13:40:33 xl2tpd[1215]: Connection established to 95.131.150.118, 1701.  Local: 56555, Remote: 19 (ref=0/0).  LNS session is 'Serv' 
[I] Feb 17 13:40:33 xl2tpd[1215]: result_code_avp: result code not appropriate for Incoming-Call-Request.  Ignoring. 
[I] Feb 17 13:40:33 xl2tpd[1215]: start_pppd: I'm running:  
[I] Feb 17 13:40:33 xl2tpd[1215]: "/opt/sbin/pppd"  
[I] Feb 17 13:40:33 xl2tpd[1215]: "/dev/pts/1"  
[I] Feb 17 13:40:33 xl2tpd[1215]: "passive"  
[I] Feb 17 13:40:33 xl2tpd[1215]: "nodetach"  
[I] Feb 17 13:40:33 xl2tpd[1215]: "192.168.11.1:192.168.11.2"  
[I] Feb 17 13:40:33 xl2tpd[1215]: "refuse-pap"  
[I] Feb 17 13:40:33 xl2tpd[1215]: "name"  
[I] Feb 17 13:40:33 xl2tpd[1215]: "Serv"  
[I] Feb 17 13:40:33 xl2tpd[1215]: "file"  
[I] Feb 17 13:40:33 xl2tpd[1215]: "/opt/etc/ppp/options.xl2tpd"  
[I] Feb 17 13:40:33 xl2tpd[1215]: Call established with 95.131.150.118, Local: 28062, Remote: 1, Serial: 0 
[I] Feb 17 13:40:33 pppd[1220]: pppd 2.4.7 started by root, uid 0
[I] Feb 17 13:40:33 pppd[1220]: Using interface ppp0
[I] Feb 17 13:40:33 pppd[1220]: Connect: ppp0 <--> /dev/pts/1
[W] Feb 17 13:40:33 pppd[1220]: kernel does not support PPP filtering
[I] Feb 17 13:40:33 pppd[1220]: local  IP address 192.168.11.1
[I] Feb 17 13:40:33 pppd[1220]: remote IP address 192.168.11.2
[I] Feb 17 10:40:33 root: *** L2TP client connected [ppp0 /dev/pts/1 150 192.168.11.1 192.168.11.2]; adding iptables rules

*. Для того, чтобы была доступна квартирная сеть за кинетиком на клиенте (компе, с которого идет соединение) нужно прописать до нее маршрут, выполнив (с правами администратора) команду

Код: Выделить всё

ROUTE ADD 192.168.1.0 MASK 255.255.255.0 192.168.11.1

Тут 192.168.1.0 MASK 255.255.255.0 - подсеть роутера, а 192.168.11.1 локальный ip l2tp сервера, если нужно ставьте свои.

Можно создать cmd/bat файл примерно такого содержания

Код: Выделить всё

rasdial "Тут имя VPN соединения" user password
ROUTE ADD X.X.X.X MASK 255.255.255.0 Y.Y.Y.Y

И запускать его (с правами администратора) для l2tp соединения с роутером и подсетью за ним.
На этом все.
Замечание, исправления, комментарии приветствуются
У вас нет необходимых прав для просмотра вложений в этом сообщении.

goddamnlb
Сообщения: 11
Зарегистрирован: 11 фев 2016, 12:47

Сообщение goddamnlb » 12 фев 2016, 08:48

тоже есть необходимость поднять l2tp сервер на роутете (Giga II). Подключил Entware, поставил xl2tp, настроил конфиг, а дальше не знаю, куда мне копать. Когда пробую запустить сервер в режиме отладки xl2tp -D, он сообщает

Код: Выделить всё

xl2tpd[2064]: open_controlfd: Unable to open /opt/var/run/xl2tpd/l2tp-control for reading.

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1269
Зарегистрирован: 09 авг 2015, 14:33

Сообщение Zyxmon » 12 фев 2016, 21:43

goddamnlb, для начала сделайте

Код: Выделить всё

mkdir -p /opt/var/run/xl2tpd
touch /opt/var/run/xl2tpd/l2tp-control

Я настраивал xl2tpd (правда под Zyxware). Надеюсь сохранилась флешка с рабочими настройками. Все описано на старом форуме
http://forum.zyxmon.org/topic638-vpn-l2 ... l2tpd.html
Под Entware был один тонкий момент. Про него писали на старом форуме - но сейчас на мой взгляд все решает примененный патч.

Пишите, как продвигаются дела, какие проблемы. Надеюсь с Вашей помощью оформлю FAQ по настройке. Или Вас попрошу.

goddamnlb
Сообщения: 11
Зарегистрирован: 11 фев 2016, 12:47

Сообщение goddamnlb » 14 фев 2016, 11:57

Zyxmon писал(а):Источник цитаты Все описано на старом форуме
http://forum.zyxmon.org/topic638-vpn-l2 ... l2tpd.html

Благодарю, согласно этому мануалу и вашей поправке насчет создания папки (файл создавать необходимости не было) xl2tpd запустился без проблем. Подключиться тоже удалось, но вот локальная сеть и инет в туннеле не раздаются, такое ощущение, будто Iptables проигнорировали мой запрос. Я не нашел его в таблице (iptables -t nat -L -n -v), там правила только из ndm вебинтерфейса

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1269
Зарегистрирован: 09 авг 2015, 14:33

Сообщение Zyxmon » 14 фев 2016, 12:08

В окончательном варианте следует добавлять правила iptables так -
https://github.com/ndmsystems/packages/ ... netfilterd

А для начала, конечно, руками пробовать. Правила iptables в v1 и v2 после старта разные, поэтому могут быть нюансы с добавлением.
Проверил на последнем правиле - все работает

Код: Выделить всё

~ # iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 1035K packets, 278M bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 15289 packets, 1490K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 11545 packets, 1232K bytes)
 pkts bytes target     prot opt in     out     source               destination
 
 
~ # iptables -t nat -A POSTROUTING -s 192.168.11.0/24 -o br0 -j MASQUERADE


~ # iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 1035K packets, 278M bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 15289 packets, 1490K bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MASQUERADE  all  --  *      br0     192.168.11.0/24      0.0.0.0/0

Chain OUTPUT (policy ACCEPT 11545 packets, 1232K bytes)
 pkts bytes target     prot opt in     out     source               destination
~ #

В соседней теме разбирались с pptp - там было аналогично. Туннель создается, а пакеты через него не ходят. Может какая специфика ndms v2 (с этим на keenopt). Или все же правила iptables не те.
Туннель openvpn на ndms v2 начинает работать после простейших правил

Код: Выделить всё

iptables -I FORWARD -o tun0 -j ACCEPT
iptables -I FORWARD -i tun0 -j ACCEPT
iptables -I INPUT -i tun0 -j ACCEPT

leshkaa
Сообщения: 5
Зарегистрирован: 04 фев 2016, 09:32

Сообщение leshkaa » 14 фев 2016, 16:31

Здравствуйте,
настроил l2tpd, соединение происходит, но сеть за VPN сервером не видна!
при попытке выполнить команду Iptable система говорит: -sh: ipatbles: not found
как быть и что делать? :) спасибо

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1269
Зарегистрирован: 09 авг 2015, 14:33

Сообщение Zyxmon » 14 фев 2016, 17:20

leshkaa писал(а):Источник цитаты как быть и что делать?

Установить iptables!

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1269
Зарегистрирован: 09 авг 2015, 14:33

Сообщение Zyxmon » 16 фев 2016, 23:01

Не пойму, все все настроили и лень написать новую инструкцию? Или все бросили?
На всякий случай пару комментариев.

После того, как клиент соединится с l2tp сервером на сервере (роутере) возникает интерфейс pppN (N - число, у меня это был ppp0).
Для того, чтобы пакеты начали бегать, нужны правила iptables.
На кинетиках с ndms v2 пакеты ходят через туннель после

Код: Выделить всё

/opt/sbin/iptables -I FORWARD -o ppp0 -j ACCEPT
/opt/sbin/iptables -I FORWARD -i ppp0 -j ACCEPT
/opt/sbin/iptables -I INPUT -i ppp0 -j ACCEPT

(путь полный, т.к. не знаю, в какой среде вы будете использовать эти команды).
Опять же в случае ndms v2 следует отредактировать скрипты ip-up.sh и ip-down.sh - в них указан полный путь к logger (/usr/bin/logger) - а нужно /opt/bin/logger! Да и shebang можно в этих скриптах подправить для v2. К бинарнику iptables в этих скриптах лучше указать полный путь или перед вызовом задать PATH - без этих манипуляций правила не работают. Наверное, можно и без этих скриптов обойтись. Может кому поможет и он напишет хорошую инструкцию для шапки.

goddamnlb
Сообщения: 11
Зарегистрирован: 11 фев 2016, 12:47

Сообщение goddamnlb » 17 фев 2016, 08:14

Не пойму, все все настроили и лень написать новую инструкцию? Или все бросили?

Я бросил, поскольку на форуме keenopt мне ответ был таков
Учтите, что в keenetic свой ядерный L2TP драйвер, написанный с самым минимальным необходимым набором фич (во имя скорости), и скорее всего он не будет работать сервером вообще - это в него не закладывалось.
Плюс его userspace-модуль к pppd тоже самописный, несовместимый с xl2tpd/openl2tpd.

Так что скорее всего у вас не получится работоспособного решения.


Upd.
Все же, после этих правил траффик в туннеле начинает ходить. Ну, ходить, сильно сказано. Пинги то идут исправно а вот вебморда роутера еле открывается, спустя минуту, примерно.

Код: Выделить всё

/opt/sbin/iptables -I FORWARD -o ppp0 -j ACCEPT
/opt/sbin/iptables -I FORWARD -i ppp0 -j ACCEPT
/opt/sbin/iptables -I INPUT -i ppp0 -j ACCEPT

Но правило с натом, чтобы инет в туннеле появился, по прежнему не работает.

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1269
Зарегистрирован: 09 авг 2015, 14:33

Сообщение Zyxmon » 17 фев 2016, 08:59

goddamnlb писал(а):Источник цитаты Я бросил, поскольку на форуме keenopt мне ответ был таков

Там же не знают, что у нас свой user-space pppd, от них ничего не нужно.
goddamnlb писал(а):Источник цитаты Все же, после этих правил траффик в теннеле начинает ходить.
....
Но правило с натом, чтобы инет в туннеле появился, по прежнему не работает.

Расшифруйте. Вы имеете в виду правило с маскарадингом, маршрут то на клиенте прописали? Скрипты без исправления не заработают. Нужно примерно так

Код: Выделить всё

~ # cat /opt/etc/ppp/ip-up.sh
#!/opt/bin/sh
/opt/bin/logger "*** L2TP client connected [$*]; adding iptables rules"
/opt/sbin/iptables -A INPUT -i $1 -j ACCEPT
/opt/sbin/iptables -A FORWARD -i $1 -j ACCEPT
/opt/sbin/iptables -A FORWARD -o $1 -j ACCEPT
/opt/sbin/iptables -t nat -A POSTROUTING -o $1 -j MASQUERADE

Я вчера через туннель, ходил на web морду кинетика. Правда все проверял во внутренней сети.


Вернуться в «Entware/Qnapware/Optware/Zyxware - обсуждаем репозитории пакетов»

Кто сейчас на конференции

Всего 1 посетитель :: 0 зарегистрированных, 0 скрытых и 1 гость (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (121) здесь было 18 май 2016, 18:19

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость