Назад | Перейти на главную страницу

ожидать, mpd5 и загрузка динамической конфигурации

У меня есть сервер FreeBSD, подключенный к глобальной сети через PPPoE. Ива успешно установил IP L2TP и PPTP VPN поверх этого WAN-соединения PPPoE. Проблема в том, что L2TP необходимо вызвать предложение set lt2p self, чтобы начать прослушивание порта udp / 1701, поэтому при восстановлении сеанса WAN PPPoE мне нужно динамически настроить часть конфигурации L2TP. Для этого я использую сценарий ожидания, он подключается к сетевой консоли mpd5 и загружает часть конфигурации, и делает это так:

set timeout 2
spawn telnet localhost 5005

expect -re "Username: " {
    send myc00ll0g1n\r
    exp_continue -continue_timer
}
expect -re "Password: " {
    send myc00lpa$$\r
    exp_continue -continue_timer
}

# destroying the knob
send "destroy link l2tplink\r"
expect ".+"
send "destroy bundle l2tpbundle\r"
expect ".+"

# loading the full knob:
send "create bundle template l2tpbundle\r"
expect ".+"
send "set iface idle 1800\r"
expect ".+"
send "set iface enable tcpmssfix\r"
expect ".+"
send "set iface group vpn\r"
expect ".+"
expect ".+"
send "set ipcp yes vjcomp\r"
expect ".+"
send "set ipcp ranges 192.168.58.1/32 ippool vpn-pool\r"
expect ".+"
send "set ipcp dns 192.168.57.254\r"
expect ".+"
send "set bundle enable compression\r"
expect ".+"
send "create link template l2tplink l2tp\r"
expect ".+"
send "set link action bundle l2tpbundle\r"
expect ".+"
send "set link enable multilink\r"
expect ".+"
send "set link yes acfcomp protocomp\r"
expect ".+"
send "set link no pap chap eap chap-md5 chap-msv1 chap-msv2\r"
expect ".+"
send "set link enable chap\r"
expect ".+"
send "set link enable pap\r"
expect ".+"
send "set link enable chap-md5\r"
expect ".+"
send "set link enable chap-msv1\r"
expect ".+"
send "set link enable chap-msv2\r"
expect ".+"
send "set link enable eap\r"
expect ".+"
send "set eap no md5 radius-proxy\r"
expect ".+"
send "set eap enable eap\r"
expect ".+"
send "set eap enable radius-proxy\r"
expect ".+"
send "set link keep-alive 10 60\r"
expect ".+"
send "set link mtu 1360\r"
expect ".+"
send "set link enable incoming\r"
expect ".+"
send "set l2tp self 384.656.768.272\r"
expect ".+"
send "set link max-children 50\r"
expect ".+"
send "set radius server 127.0.0.1 myc00lradiuspa$$\r"
expect ".+"
send "set radius retries 3\r"
expect ".+"
send "set radius timeout 3\r"
expect ".+"
send "set radius me 127.0.0.1\r"
expect ".+"
send "set auth acct-update 300\r"
expect ".+"
send "set auth enable radius-auth\r"
expect ".+"

Он полностью работает, когда я вызываю его в интерактивном режиме через ssh. Поэтому я добавил его в set iface up-script <expect wrapper> и ожидаемая оболочка называет это как expect -f myscript.exp. Но когда это происходит при восстановлении соединения PPPoE, я получаю следующую группу ошибок в mpd.log:

Mar 21 17:42:23 ronin mpd[37412]: [wan] IFACE: Up event
Mar 21 17:42:23 ronin mpd[37412]: CONSOLE: Connect
Mar 21 17:42:23 ronin mpd[37412]: CONSOLE: Allocated new console session 0x802000010 from 127.0.0.1
Mar 21 17:42:23 ronin mpd[37412]: CONSOLE: Failed login attempt from 127.0.0.1
Mar 21 17:42:23 ronin syslogd: last message repeated 34 times
Mar 21 17:42:23 ronin mpd[37412]: CONSOLE: Error while reading: Connection reset by peer

И это определенно мой ожидаемый сценарий (потому что он отправляет около 34 строк команд). Зачем ? Почему он работает, когда я вызываю его вручную, а когда mpd5 вызывает - нет? Хорошо, я понимаю, что когда я вызываю его, у него есть управляющий терминал, а когда mpd5 вызывает его, его нет, но имеет ли это значение? Как мне решить эту проблему? Или корень проблемы в другом?