Обновлю исходные данные:
Код: Выделить всё
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 и почему он ничего не делает?