Ключевые слова:pppoe, tun, tunnel, connect, ppp, freebsd, (найти похожие документы)
From: Alexander Sheiko <adsh@univ.kiev.ua.>
Date: Mon, 8 Jan 2008 14:31:37 +0000 (UTC)
Subject: Чистка старых адресов с tun интерфейса для PPPoE клиента под FreeBSD
Оригинал: http://www.opennet.dev/openforum/vsluhforumID1/73951.html
Столкнулся с такой проблемой. Используется 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
Неплохо было бы сначало подумать, а только зате писать. DSLAM фактически представляет собой подобие eternet коммутатора, работающего с arp. Отличие только в физическом уровне модели OSI. Настройка его порта - группа АТМ параметров (PVC, и.т.д.) и привязка vlan ID к PVC на порту. Ничеге не мешае иметь несколько BRAS в одном Vlan. Так каким образом выбор BRAS может быть функцией DSLAM???. Вопрос в том, как настроить коннект в BSD на нужный BRAS. для винды есть к примеру RASPPOE....