はじめに
前回 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
まずはユーザを作ろう。
1
2
3
4
5
|
# 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は、
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#
# 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
|
とりあえずこんな感じで。
デバッグモードで起動。
PPPoE Client side
こんな感じで書いて、
/etc/hostname.pppoe0
1
2
3
|
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
|
叩き起こす
1
|
# sh /etc/netstart pppoe0
|
で、おそらくこんな感じに。
1
2
3
4
5
6
7
8
9
10
|
# 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 Clientを1000個作る
調子に乗って、スーパーPPPoEセッションタイムをしよう!
まずはログ出力がやべぇのでバックグラウンドで動かそう。
PPPoE Server側で Ctrl + C
で pppoe -d
を停止して、再度起動
PPPoE Client側で、さっき余計に作ったユーザ部分を適当にピックアップしてPPPoE IFを作る。
ファイルで作ると酷いことになるのでコマンドラインで作ります。
1
|
# 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側のセッション
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 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側でこんな感じで叩いて
1
2
3
4
5
6
7
8
9
10
|
# 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側
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# 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側
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# 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セッション張れるかどうか知りたいだけだったのに…