OpenBSDとnpppdにルータのご相談(2)
Posted on 2012/08/13(Mon) 16:48 in technical
前回、 OpenBSDとnpppdにルータのご相談(1) でスルーしたPPPoEも簡単に試す。
- pppoe(4)の動作確認。
- npppdが可能なのはPPPoE Server(BAS)側なので、サーバ側はそちらで。
環境は以下です(適当)
- VirtualBoxホスト : 2740p i7 CPU M 620 @ 2.67GHz
- PPPoE Client : 1コア 256MB 内部net(PPPoE) HostOnly(ssh用)
- PPPoE Server : 1コア 256MB 内部net(PPPoE) HostOnly(ssh用)
PPPoE Server side
まずはユーザを作ろう。
# echo "Username,Password,Framed-IP-Address,Framed-IP-Netmask,Description,Calling-Id" >> /etc/npppd/npppd-users.tmp # echo "user1,secret,10.0.90.129,,memo for user1" >> /etc/npppd/npppd-users.tmp # i=257; while [[ $i -lt 8000 ]]; do let j=$i/256; let n=$i%256; echo "test$i,secret,10.0.$j.$n,,memo for test$i"; (( i += 1 ));done >> /etc/npppd/npppd-users.tmp # mv /etc/npppd/npppd-users.csv /etc/npppd/npppd-users.old # mv /etc/npppd/npppd-users.tmp /etc/npppd/npppd-users.csv
最初1行は無視されるので。あとおまけで適当にユーザ作る。
/etc/npppd/npppd.confは、
# # PPPoE test server # interface_list: tun0 interface.tun0.ip4addr: 10.0.0.1 # IP address pool pool.dyna_pool: 10.0.0.0/25 pool.pool: 10.0.0.0/16 # Local file authentication auth.local.realm_list: local auth.local.realm.acctlist: /etc/npppd/npppd-users.csv realm.local.concentrate: tun0 lcp.mru: 1400 auth.method: mschapv2 chap # PPPoE daemon pppoed.enabled: true pppoed.interface: PPPoE em0 pipex.enabled: true
とりあえずこんな感じで。
デバッグモードで起動。
# npppd -d
PPPoE Client side
こんな感じで書いて、
/etc/hostname.pppoe0
inet 0.0.0.0 255.255.255.255 NONE pppoedev em0 authproto chap authname user1 authkey "secret" up dest 0.0.0.1 !/sbin/route add default -ifp pppoe0 0.0.0.1
叩き起こす
# sh /etc/netstart pppoe0
で、おそらくこんな感じに。
# ifconfig pppoe0 pppoe0: flags=8851 mtu 1492 priority: 0 dev: em0 state: session sid: 0x4d5 PADI retries: 4 PADR retries: 0 time: 00:03:35 sppp: phase network authproto chap groups: pppoe egress status: active inet6 fe80::a00:27ff:fef9:d2d3%pppoe0 -> prefixlen 64 scopeid 0x5 inet 10.0.90.129 --> 10.0.0.1 netmask 0xffffffff
調子に乗って、スーパーPPPoEセッションタイムをしよう!
まずはログ出力がやべぇのでバックグラウンドで動かそう。
PPPoE Server側でCtrl+Cでpppoe -dを停止して、再度起動
# pppoed
PPPoE Client側で、さっき余計に作ったユーザ部分を適当にピックアップしてPPPoE IFを作る。
ファイルで作ると酷いことになるのでコマンドラインで作ります。
# i=1000; while [[ $i -lt 2001 ]]; do ifconfig pppoe$i 0.0.0.0 0.0.0.1 netmask 0xffffffff pppoedev em0 authproto chap authname test$i authkey "secret" up; (( i += 1 ));done
PPPoEデバイスたち
PPPoE Server側のセッション
# npppctl session brief Ppp Id Assigned IPv4 Username Proto Tunnel From ---------- --------------- -------------------- ----- ------------------------- 16 10.0.7.208 test2000 PPPoE 08:00:27:f9:d2:d3 17 10.0.7.207 test1999 PPPoE 08:00:27:f9:d2:d3 18 10.0.7.206 test1998 PPPoE 08:00:27:f9:d2:d3 !!!!!!!!!! 中略 !!!!!!!!!! 402 10.0.6.94 test1630 PPPoE 08:00:27:f9:d2:d3 403 10.0.6.93 test1629 PPPoE 08:00:27:f9:d2:d3 404 10.0.6.92 test1628 PPPoE 08:00:27:f9:d2:d3 npppctl: recv: Resource temporarily unavailable npppctl: There are 1002 sessions in total, but we received only 385 sessions. Receive buffer size may not be enough, use -r option to increase the size.
表示しきれなくて怒られた(ファイルには吐けるのでコンソールの問題ですが)。
確立不能セッションの確認には、PPPoE Client側でこんな感じで叩いて
# ifconfig \grep "0\\.0\\.0\\.0" -B 8 pppoe1280: flags=8851 mtu 1492 priority: 0 dev: em0 state: session sid: 0x8399 PADI retries: 0 PADR retries: 0 time: 00:00:03 sppp: phase terminate authproto chap authname "test1280" groups: pppoe status: no carrier inet6 fe80::a00:27ff:fef9:d2d3%pppoe1280 -> prefixlen 64 scopeid 0x11f inet 0.0.0.0 --> 0.0.0.1 netmask 0xffffffff
あぁ、こいつね。とユーザ名を検索かけるとかして追いました。
トラフィック流してないので何とも言えないけど...
PPPoE Client側
# top -d 1 load averages: 0.21, 0.24, 0.16 yukari.ainoniwa.net 01:46:40 20 processes: 19 idle, 1 on processor CPU states: 0.4% user, 0.0% nice, 2.1% system, 0.6% interrupt, 96.8% idle Memory: Real: 8188K/71M act/tot Free: 171M Cache: 40M Swap: 0K/81M PID USERNAME PRI NICE SIZE RES STATE WAIT TIME CPU COMMAND 16614 yuki 2 0 3372K 2068K sleep select 0:03 0.00% sshd 10520 _syslogd 2 0 460K 736K idle poll 0:02 0.00% syslogd 26415 root 18 0 696K 504K sleep pause 0:00 0.00% ksh 22783 yuki 18 0 684K 504K idle pause 0:00 0.00% ksh 26580 _pflogd 4 0 620K 328K sleep bpf 0:00 0.00% pflogd 15482 root 2 0 1536K 1940K sleep select 0:00 0.00% sendmail 20511 root 2 0 3404K 2488K idle poll 0:00 0.00% sshd 10187 root 2 0 520K 872K idle select 0:00 0.00% cron 4871 root 3 0 308K 780K idle ttyin 0:00 0.00% getty 1 root 10 0 352K 368K idle wait 0:00 0.00% init 30962 root 3 0 308K 788K idle ttyin 0:00 0.00% getty 25921 root 2 0 340K 776K idle select 0:00 0.00% inetd 388 root 3 0 440K 784K idle ttyin 0:00 0.00% getty 29400 root 2 0 452K 720K idle netio 0:00 0.00% syslogd 21185 root 3 0 408K 788K idle ttyin 0:00 0.00% getty 16260 root 2 0 660K 1200K idle select 0:00 0.00% sshd 11237 root 3 0 352K 796K idle ttyin 0:00 0.00% getty 17021 root 2 0 556K 440K idle netio 0:00 0.00% pflogd
PPPoE Server側
# top -d 1 load averages: 0.08, 0.16, 0.13 yukari.ainoniwa.net 01:36:42 26 processes: 25 idle, 1 on processor CPU states: 0.1% user, 0.0% nice, 0.7% system, 0.1% interrupt, 99.0% idle Memory: Real: 17M/83M act/tot Free: 159M Cache: 45M Swap: 0K/81M PID USERNAME PRI NICE SIZE RES STATE WAIT TIME CPU COMMAND 1844 _ppp 2 0 8188K 9272K sleep kqread 0:04 0.00% npppd 28292 yuki 2 0 3344K 2088K idle select 0:04 0.00% sshd 1662 _syslogd 2 0 532K 724K sleep poll 0:01 0.00% syslogd 17575 yuki 2 0 3240K 2100K sleep select 0:00 0.00% sshd 10891 _pflogd 4 0 564K 328K sleep bpf 0:00 0.00% pflogd 8329 root 2 0 1484K 1912K sleep select 0:00 0.00% sendmail 7078 root 2 0 476K 920K idle kqread 0:00 0.00% npppd 8414 root 18 0 608K 516K idle pause 0:00 0.00% ksh 1106 root 2 0 3372K 2496K idle poll 0:00 0.00% sshd 14124 root 2 0 3272K 2592K idle poll 0:00 0.00% sshd 8293 root 18 0 500K 528K sleep pause 0:00 0.00% ksh 12964 root 2 0 688K 876K idle select 0:00 0.00% cron 1 root 10 0 468K 360K idle wait 0:00 0.00% init 31298 yuki 18 0 680K 488K idle pause 0:00 0.00% ksh 16386 root 3 0 332K 780K idle ttyin 0:00 0.00% getty 32546 yuki 18 0 472K 488K idle pause 0:00 0.00% ksh 21571 root 2 0 448K 772K idle select 0:00 0.00% inetd 10274 root 3 0 456K 784K idle ttyin 0:00 0.00% getty
つまりまぁ、PPPoE複数セッション自体は問題無さそうでした、という話。
PPPoE Client側が同時3セッション張れるかどうか知りたいだけだったのに...