Страница 1 из 1

mpd5 L2TP проблемы с маршрутизацией

Добавлено: 2014-06-13 5:03:33
knowy
Добрый день. Сделал на FreeBSD 8.4 в VirtualBox подключение к провайдеру L2TP вот по этойинструкции, теперь при загрузке поднимается туннель и в статистике показывается поднятая сессия, но, как водится, пакеты не ходят. Сервер VPN при поднятом туннеле не пингуется, пинг на интернет-сайты дает No route to host. Проблема явно в маршрутизации. Много экспериментировал с up.sh, но ничего толкового не получил, т.к. не хватает понимания сути (по ссылке на обсуждение ходил и там все ссылки тоже ткнул и раскурил, но не помогло).
mpd.conf:

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

default:
        load l2tp_client
l2tp_client:
        create bundle static B1
        create link static L1 l2tp
        set link action bundle B1
        set iface up-script /usr/local/etc/mpd5/up.sh
        set iface down-script /usr/local/etc/mpd5/down.sh
        set auth authname login
        set auth password <pass>
        set link max-redial 99
        set link mtu 1460
        set link keep-alive 20 75
        set l2tp peer vpn2.nsplus.ru
        open
up.sh

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

#!/bin/sh
route delete $4
route add $4 10.34.9.1
route change default $4
echo $4 > /tmp/l2tp_GW
down.sh

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

#!/bin/sh
vpn_GW=`cat /tmp/l2tp_GW`

route delete $vpn_GW
route delete default
route add default 10.34.9.1
rm -f /var/dr
Скрины таблиц маршрутизации для фри и вин7, поднятой на виртуалке с теми же настройками и рабочим ВПН, - во вложениях. 91.189.162.62 - сервер ДНС, 172.31.33.19 - сервер vpn (vpn2.nsplus.ru).
Самая очевидная разница между ними - FreeBSD создает маршрут на 172,31,33,19 через интерфейс туннеля, а винда - через локальный шлюз, но route change 172.31.33.19 -ifp em0 не дает эффекта

Re: mpd5 L2TP проблемы с маршрутизацией

Добавлено: 2014-06-13 18:47:28
knowy
Upd. Пробовал команды

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

route change 172.31.33.19 -ifp em0
route change 172.31.33.19 -ifp em0 и 
route add default -ifp ng0, 
в произвольном порядке, не помогло.

Re: mpd5 L2TP проблемы с маршрутизацией

Добавлено: 2014-06-13 21:25:51
Alex Keda
knowy писал(а):Upd. Пробовал команды

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

route change 172.31.33.19 -ifp em0
route change 172.31.33.19 -ifp em0 и 
route add default -ifp ng0, 
в произвольном порядке, не помогло.
а пакеты реально туда идти начинают?

Re: mpd5 L2TP проблемы с маршрутизацией

Добавлено: 2014-06-14 3:51:27
knowy
Поправка:
route change 10.34.9.1 -ifp em0
route change 172.31.33.19 -ifp ng0 и
route add default -ifp ng0,

[quote=Alex Keda]а пакеты реально туда идти начинают?[/quote]
Не понял вопроса. Если пакеты начали ходить, то проблема вроде бы как должна решиться, но она не решена => нет, пакеты не ходят. Или какие-то другие пакеты? У меня на третьи сутки от обилия информации уже мозг хрустит.

Re: mpd5 L2TP проблемы с маршрутизацией

Добавлено: 2014-06-14 22:41:47
Alex Keda
то что они туда уходят - ничего не значит
может MTU несовпасть и т.п.
и работать не будет

Re: mpd5 L2TP проблемы с маршрутизацией

Добавлено: 2014-06-16 8:54:36
knowy
Вкурил, что если написать в консоли

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

route change default <внешний_адрес> -ifp ng0
route change 172.31.33.19 <локальный_шлюз> -ifp re0
,
то инет поднимается. Соотв-но, есть подозрение, что маршруты от сервера выдаются уже после отработки up.sh. Что делать?
Засунуть в скрипт паузу на 10 секунд? Прописать эти 2 команды в крон отдельно на перезагрузку?
Если прописать статикой в rc.conf, то туннель вообще не создается:

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

mpd: [B1] IFACE: Adding IPv4 address to ng0 failed: File exists
Гугл говорит, это как раз из-за статичного маршрута на шлюз.

Re: mpd5 L2TP проблемы с маршрутизацией

Добавлено: 2014-06-17 11:48:10
andrian_freebsd
У меня тоже mpd подключается к провайдеру от мой скрипт:
/usr/local/etc/mpd5/link_up

#!/bin/sh
pppoe_gw=`ifconfig ng0 | grep inet | cut -d' ' -f 4`
if [ $pppoe_gw != '' ]
then
route change default $pppoe_gw
fi
exit 0


от из mpd.conf
pppoe_client:
#
# PPPoE client: only outgoing calls, auto reconnect,
# ipcp-negotiated address, one-sided authentication,
# default route points on ISP's end
#

create bundle static B1
set iface route default
set iface up-script /usr/local/etc/mpd5/link_up
set iface down-script /usr/local/etc/mpd5/link_down
set iface enable tcpmssfix
set ipcp ranges 0.0.0.0/0 0.0.0.0/0
create link static L1 pppoe
set link action bundle B1
set auth authname 4283245
set auth password bhj45rdf5
set link max-redial 0
set link mtu 1460
set link keep-alive 10 60
set pppoe iface em0
set pppoe service "Volia"
open


ну и для разрыва
/usr/local/etc/mpd5/link_down

#!/bin/sh
route change default 127.0.0.3
exit 0


а от в rc.conf что касается дефолтного шлюза напиши:
defaultrouter="127.0.0.3"

после поднятия сесии с провайдером скрипт дефотный шлюз сделает провайдера.

Re: mpd5 L2TP проблемы с маршрутизацией

Добавлено: 2014-06-17 15:55:12
knowy
Обновлю исходные данные:

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

root@:/usr/local/etc/mpd5 # uname -a
FreeBSD .nsplus.ru 9.1-RELEASE-p14 FreeBSD 9.1-RELEASE-p14 #0: Tue Jun  3 08:49:09 UTC 2014     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  i386
mpd.conf (та часть, что касается l2tp):

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

default
        load l2tp_client
l2tp_client:
        create bundle static B1
        set iface route default
        set iface up-script /usr/local/etc/mpd5/up.sh
        set iface down-script /usr/local/etc/mpd5/down.sh
        create link static L1 l2tp
        set link action bundle B1
        set link max-redial 99
        set link mtu 1456
        set link keep-alive 20 75
        set auth authname login
        set auth password pass
        set l2tp peer 172.31.33.19
        open
up.sh (специально абсолютно дубовый и с повторением для надежности)

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

root@:/usr/local/etc/mpd5 # file up.sh
up.sh: POSIX shell script, ASCII text executable
root@:/usr/local/etc/mpd5 # cat up.sh
#!/bin/sh
route add default <external-IP> -ifp ng0
route add 172.31.33.19 10.100.144.1 -ifp re0
route change default <external-IP> -ifp ng0
route change 172.31.33.19 10.100.144.1 -ifp re0
Все адреса, включая выдаваемый провайдером внешний (external-IP в конфиге), статические, так что с переменными в данный момент не заморачиваюсь и пишу напрямую.
В rc.conf стоит defaultrouter="10.100.144.1"
down.sh некритичен, отключать инет я не собираюсь.
Кусок mpd.log:

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

Jun 17 18:20:19  mpd: [L1] Link: Matched action 'bundle "B1" ""'
Jun 17 18:20:19  mpd: [L1] Link: Join bundle "B1"
Jun 17 18:20:19  mpd: [B1] Bundle: Status update: up 1 link, total bandwidth 64000 bps
Jun 17 18:20:19  mpd: [B1] IPCP: Open event
Jun 17 18:20:19  mpd: [B1] IPCP: state change Initial --> Starting
Jun 17 18:20:19  mpd: [B1] IPCP: LayerStart
Jun 17 18:20:19  mpd: [B1] IPCP: Up event
Jun 17 18:20:19  mpd: [B1] IPCP: state change Starting --> Req-Sent
Jun 17 18:20:19  mpd: [B1] IPCP: SendConfigReq #1
Jun 17 18:20:19  mpd: [B1]   IPADDR <local-IP>
Jun 17 18:20:19  mpd: [B1]   COMPPROTO VJCOMP, 16 comp. channels, no comp-cid
Jun 17 18:20:19  mpd: [B1] IPCP: rec'd Configure Request #78 (Req-Sent)
Jun 17 18:20:19  mpd: [B1]   IPADDR 172.31.33.19
Jun 17 18:20:19  mpd: [B1]     172.31.33.19 is OK
Jun 17 18:20:19  mpd: [B1] IPCP: SendConfigAck #78
Jun 17 18:20:19  mpd: [B1]   IPADDR 172.31.33.19
Jun 17 18:20:19  mpd: [B1] IPCP: state change Req-Sent --> Ack-Sent
Jun 17 18:20:19  mpd: [B1] IPCP: rec'd Configure Reject #1 (Ack-Sent)
Jun 17 18:20:19  mpd: [B1]   COMPPROTO VJCOMP, 16 comp. channels, no comp-cid
Jun 17 18:20:19  mpd: [B1] IPCP: SendConfigReq #2
Jun 17 18:20:19  mpd: [B1]   IPADDR <local-IP>
Jun 17 18:20:19  mpd: [B1] IPCP: rec'd Configure Nak #2 (Ack-Sent)
Jun 17 18:20:19  mpd: [B1]   IPADDR <external-IP>
Jun 17 18:20:19  mpd: [B1]     <external-IP> is OK
Jun 17 18:20:19  mpd: [B1] IPCP: SendConfigReq #3
Jun 17 18:20:19  mpd: [B1]   IPADDR <external-IP>
Jun 17 18:20:19  mpd: [B1] IPCP: rec'd Configure Ack #3 (Ack-Sent)
Jun 17 18:20:19  mpd: [B1]   IPADDR <external-IP>
Jun 17 18:20:19  mpd: [B1] IPCP: state change Ack-Sent --> Opened
Jun 17 18:20:19  mpd: [B1] IPCP: LayerUp
Jun 17 18:20:19  mpd: [B1]   <external-IP> -> 172.31.33.19
Jun 17 18:20:19  mpd: [B1] IFACE: Add route 0.0.0.0/0 172.31.33.19 failed: File exists
Jun 17 18:20:19  mpd: [B1] IFACE: Up event
При загрузке системы поднимается туннель между local-IP и external-IP, но в таблице маршрутизации указано, что ходить на 172.31.33.19 (адрес l2tp-сервера провайдера) надо через туннель, а на external-IP - через локалку, так что никто никуда не ходит. Предпоследняя строчка mpd.log говорит, что up.sh вроде бы таки отрабатывается, но маршрут по умолчанию уже существует, на что в up.sh специально прописано route change default..., который ни фига не меняет.
При обрыве восстановить соединение вообще не получается, но этот момент я пока толком не прорабатывал и ничего внятного сказать не могу.
После прописывания ручками последних двух строк из up.sh инет появляется.
Собственно, что плохого в моем up.sh и почему он ничего не делает?

Re: mpd5 L2TP проблемы с маршрутизацией

Добавлено: 2014-06-17 17:54:24
andrian_freebsd
root@:/usr/local/etc/mpd5 # file up.sh
up.sh: POSIX shell script, ASCII text executable
root@:/usr/local/etc/mpd5 # cat up.sh
#!/bin/sh
route add default <external-IP> -ifp ng0
route add 172.31.33.19 10.100.144.1 -ifp re0
route change default <external-IP> -ifp ng0
route change 172.31.33.19 10.100.144.1 -ifp re0
Во-первых, скрипт должен быть исполняемым:

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

root@freebsd:/usr/local/etc/mpd5 # ls -l
total 124
-rwxr-xr-x  1 root  wheel     48 22 сер  2013 link_down
-rwxr-xr-x  1 root  wheel    141 22 сер  2013 link_up
#chmod +x "ваш скрипт"
Во-вторых,

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

route add default <external-IP> -ifp ng0
комманда исполнятся не будет так так к дефотному пути добавить дефолтный нельзя.
Во-третих,

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

route add 172.31.33.19 10.100.144.1 -ifp re0
а ето вы как маршрут 172.31.33.19 прописываете на интерфейс re0 - который не в сети с провайдером вам нужно ето прописывать на "ng0".
Во-червертых, в своем проблемном скрипте в строке допешите отладку #!/bin/sh -x запустите й посмотрите что не играет у вас ...

Re: mpd5 L2TP проблемы с маршрутизацией

Добавлено: 2014-06-17 19:40:46
knowy
andrian_freebsd писал(а):Во-первых, скрипт должен быть исполняемым:
Исполняемый он, исполняемый.
Во-вторых,комманда исполнятся не будет так так к дефотному пути добавить дефолтный нельзя.
Честно предупредил - специально писал дубово и 2 раза для надежности, чтобы если первая строка не добавит дефолтный путь, то 3-я его изменила.
Во-третих,а ето вы как маршрут 172.31.33.19 прописываете на интерфейс re0 - который не в сети с провайдером вам нужно ето прописывать на "ng0".
Cм. первый пост: 172.31.33.19 - сервер vpn (vpn2.nsplus.ru). Прописываю элементарно, в сети с провайдером, не нужно.

За инфу об отладке спасибо, проверю.

Re: mpd5 L2TP проблемы с маршрутизацией

Добавлено: 2014-06-18 9:29:40
knowy
Все чудесатее и чудесатее (с)
Почистил лог mpd, дописал в скрипт ключ -x к первой строке, добавил второй logfile=/... - и после перезагрузки интернет молча поднялся самостоятельно. Возможно, это из-за сделанного вчера freebsd-update, но я после того пару раз перезагрузился, поднимая интернет руками. Но остались вопросы:
как его восстанавливать при обрыве, т.к. каждый раз перезагружаться неинтересно;
и какова вероятность, что оно в один прекрасный момент отвалится обратно?

Re: mpd5 L2TP проблемы с маршрутизацией

Добавлено: 2014-06-18 16:29:06
andrian_freebsd
Непонятно, какаой вывод вы сделали после включения отладки в скрипте? Вы отладку смотрели?

Re: mpd5 L2TP проблемы с маршрутизацией

Добавлено: 2014-06-19 10:57:16
Dmitriy_3206
Меняйте не default маршрут а установите более конкретные маршруты

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

 0.0.0.0/1
128.0.0.0/1
А что бы это делать не из скрипта, можно в конфиге MPD указатьб строки

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

 set iface route 0.0.0.0/1
 set iface route 128.0.0.0/1
Тогда при обрыве связи, эти конкретные маршруты удалятся, и у Вас останется "живой" дефаулт