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デバイスたち

npppd_pppoe_1000session_ifconfig

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セッション張れるかどうか知りたいだけだったのに...