Чистка старых адресов с tun интерфейса для PPPoE клиента под FreeBSD

(pppoe tun tunnel connect ppp freebsd)


Столкнулся с такой проблемой. Используется FreeBSD 6.2 со штатным PPP для подключения через PPPoE. Провайдер меняет адрес раз в сутки. PPP производит реконнект, появляется новый адрес, но и старый не удаляется:


tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1492
inet LOCAL_ADDR --> PEER_ADDR netmask 0xff000000
inet LOCAL_ADDR_OLD --> PEER_ADDR_OLD netmask 0xff000000
Opened by PID 4714

Роут меняется на новый адрес, но некоторые программы (noip2 клиент) этого не замечают.

Команду на удаление битого интерфейса нуно вставлять не в ppp.linkdown, а в ppp.linkup. Логическая ошибка содержится даже в:

http://people.fluidsignal.com/~luferbu/hurd/um-pppd-0.20010804/examples/ppp/ppp.linkdown.sample

Читаем man ppp:
iface clear [INET | INET6]
If this command is used while ppp is in the OPENED state or while
in -auto mode, all addresses except for the NCP negotiated
address are deleted from the interface. If ppp is not in the
OPENED state and is not in -auto mode, all interface addresses
are deleted.
If the INET or INET6 arguments are used, only addresses for that
address family are cleared.

===> all addresses except for the NCP negotiated address are deleted from the interface

Поскольку PPPoE серверов может быть несколько и выбираются они в случайном порядке, велика вероятность последующего коненкта на другой сервер. При этом ppp считает, что старый адрес (привязанный к старому PPPoE серверу) удалять нельзя и плодит битые линки по числу PPPoE серверов :(.

Если же выполнить эту команду при выполнении соединения - все левые линки удалятся, а текущий не затронется.

Теперь выкладываю отработанные конфиги под FreeBSD 6.2.

ppp.conf:
default:
Ukrtelecom:
set log Phase tun command
set device PPPoE:rl1
set authname kv_xxxxx@dsl.ukrtel.net
set authkey xxxxx
set mru 1492
set mtu 1492
enable lqr
set lqrperiod 10
enable lqr echo
enable echo
set dial
set login
set timeout 0
set redial 60 0
add default HISADDR
nat enable yes
nat log yes
nat same_ports yes
nat use_sockets yes
nat unregistered_only yes
nat deny_incoming no
nat port tcp 192.168.0.1:80 80
nat port tcp 192.168.0.1:22 22
nat port tcp 192.168.0.2:55555 55555
nat port udp 192.168.0.2:55555 55555

На локальную машину натится torrent трафик, на роутере поднят SSH и
Apache, доступные из инета.

ppp.linkup:
Ukrtelecom:
iface clear
!bg /usr/bin/logger -t PPP "Connection to Ukrtelecom established"

ppp.linkdown:
Ukrtelecom:
!bg /usr/bin/logger -t PPP "Connection to Ukrtelecom destroyed"

rc.conf:
ppp_enable="YES"
ppp_profile="Ukrtelecom"
ppp_mode="ddial"
ppp_user="root"
ppp_nat="YES"

Пример лога ppp, при нормальном коннекте:
May 8 19:58:29 Launcher ppp[73373]: tun0: Phase: deflink: Connected!
May 8 19:58:29 Launcher ppp[73373]: tun0: Phase: deflink: opening -> dial
May 8 19:58:29 Launcher ppp[73373]: tun0: Phase: deflink: dial -> carrier
May 8 19:58:34 Launcher ppp[73373]: tun0: Phase: deflink: Disconnected!
May 8 19:58:34 Launcher ppp[73373]: tun0: Phase: deflink: carrier -> hangup
May 8 19:58:34 Launcher ppp[73373]: tun0: Phase: deflink: Connect time: 5 secs
: 0 octets in, 0 octets out
May 8 19:58:34 Launcher ppp[73373]: tun0: Phase: deflink: 213 packets in, 187
packets out
May 8 19:58:34 Launcher ppp[73373]: tun0: Phase: total 0 bytes/sec, peak 0 by
tes/sec on Tue May 8 19:58:29 2007
May 8 19:58:34 Launcher ppp[73373]: tun0: Phase: deflink: hangup -> opening
May 8 19:58:34 Launcher ppp[73373]: tun0: Phase: deflink: Enter pause (60) for
redialing.
May 8 19:59:34 Launcher ppp[73373]: tun0: Phase: deflink: Connected!
May 8 19:59:34 Launcher ppp[73373]: tun0: Phase: deflink: opening -> dial
May 8 19:59:34 Launcher ppp[73373]: tun0: Phase: deflink: dial -> carrier
May 8 19:59:35 Launcher ppp[73373]: tun0: Phase: Received NGM_PPPOE_ACNAME (ho
ok "BRAS-1-246")
May 8 19:59:35 Launcher ppp[73373]: tun0: Phase: Received NGM_PPPOE_SESSIONID
May 8 19:59:35 Launcher ppp[73373]: tun0: Phase: Received NGM_PPPOE_SUCCESS
May 8 19:59:35 Launcher ppp[73373]: tun0: Phase: deflink: carrier -> login
May 8 19:59:35 Launcher ppp[73373]: tun0: Phase: deflink: login -> lcp
May 8 19:59:35 Launcher ppp[73373]: tun0: Phase: bundle: Authenticate
May 8 19:59:35 Launcher ppp[73373]: tun0: Phase: deflink: his = PAP, mine = no
ne
May 8 19:59:35 Launcher ppp[73373]: tun0: Phase: Pap Output: kv_xxxx@dsl.ukrte
l.net ********
May 8 19:59:35 Launcher ppp[73373]: tun0: Phase: Pap Input: SUCCESS ()
May 8 19:59:35 Launcher ppp[73373]: tun0: Phase: deflink: lcp -> open
May 8 19:59:35 Launcher ppp[73373]: tun0: Phase: bundle: Network
May 8 19:59:35 Launcher ppp[73373]: tun0: Command: Ukrtelecom: iface clear
May 8 19:59:35 Launcher ppp[73373]: tun0: Command: Ukrtelecom: !bg /usr/bin/lo
gger -t PPP Connection to Ukrtelecom established

http://faqman.ru

Обновлено: 12.03.2015