PPPoE設定についてまとめます。PPPoEはCHAP Authentication, IPCP等のトピックと絡めた複雑な設定を紹介します。
概要
PPPoEの設定方法についてまとめます。なお、IPCP, On-Demand Address Poolなどの他のトピックに関連する説明は省略します。
コマンド一覧
このシナリオで重要なコマンド一覧は以下の通りです。
Router(config)# interface <interface> Router(config-if)# pppoe enable group <bba> Router(config)# bba-group pppoe <bba> Router(config-bba-group)# virtual-template <num> Router(config-bba-group)# sessions [ per-mac | per-vc | per-vlan ] limit <count> Router(config-bba-group)# sessions [ per-mac | per-vc | per-vlan ] throttle <count> <within> <block_time> Router(config)# interface Virtual-Template <num> Router(config-if)# ip address <addr> Router(config)# interface <interface> Router(config-if)# pppoe-client dial-pool-number <num> Router(config)# interface <dialer-interface> Router(config-if)# ip address <addr> Router(config-if)# encapsulation ppp Router(config-if)# dialer pool <num> Router(config-if)# dialer idle-timeout <min>
構成図
以下の環境で動作確認を行います。
e0/0 e0/0 +--------+.1 .2+--------+ | R1 +--------+ R2 | +--------+ +--------+ 192.168.12.0/24 Loopback0 Loopback0 10.1.1.1/32 10.2.2.2/32
[R1] router ospf 1 network 10.1.1.1 0.0.0.0 area 0 network 192.168.12.1 0.0.0.0 area 0 [R2] router ospf 1 network 10.2.2.2 0.0.0.0 area 0 network 192.168.12.2 0.0.0.0 area 0
設定全文は下記ファイルです。詳細設定は下記を参照ください。
仕様説明
PPPoE Server
PPPoE Serverの設定は以下のとおりです。BBA(Broad Band Access) groupという単位を用いて、物理interfaceとvirtual-templateを紐づけます。
Router(config)# interface <interface> Router(config-if)# pppoe enable group <bba> Router(config)# bba-group pppoe <bba> Router(config-bba-group)# virtual-template <num> Router(config)# interface Virtual-Template <num> Router(config-if)# ip address <addr>
PPPoE Client
PPPoE Clientの設定は以下の通りです。dialer poolという単位を用いて、物理interfaceとdialer interfaceを紐づけます。なお、dialer interfaceの設定は以下を誤りやすいので注意して下さい。
- dialer interfaceのデフォルトのカプセル化設定はHDLCです。“encapsulation ppp”コマンドでカプセル化タイプを変更して下さい。
- 検索エンジンを用いてPPPoE設定を検索すると、”dialer-group”というコマンドがヒットします。これはレガシーコマンドなので、最近のIOSでは使用する必要はございません。
- PPPoEはPPPoE header 6 byteとPPP header 2 byteを考慮する必要があります。PPPoE Client側にip mtu 1492との設定を投入しないと、size 1500のpingが疎通不能になったり、OSPF neighborが確立できなかったりのトラブルが発生します。
Router(config)# interface <interface> Router(config-if)# pppoe-client dial-pool-number <num> Router(config)# interface <dialer-interface> Router(config-if)# ip address <addr> Router(config-if)# encapsulation ppp Router(config-if)# dialer pool <num>
PPPoE header, PPP headerのsize指定に迷ったときは、PPPoE Server側のshow ip interfaceコマンドで調査する事もできます。
R1#show ip interface Virtual-Access 1.1 Virtual-Access1.1 is up, line protocol is up Internet address is 192.168.12.1/24 Broadcast address is 255.255.255.255 Address determined by configuration file Peer address is 192.168.12.2 MTU is 1492 bytes
PPPoE Clientは無通信状態が続くと接続を切断するという仕様があります。以下のコマンドでタイムアウト時間(分)を指定する事ができます。なお、0を指定した場合は無通信状態が続いても切断しないという意味になります。
Router(config)# interface <dialer-interface> Router(config-if)# dialer idle-timeout <min>
アクセス制限
PPPoE Server側で、最大セッション数<count>を定義する事ができます。なお、セッション数はMACアドレス毎かVC毎かVLAN毎かを指定する事ができます。
Router(config)# bba-group pppoe <bba> Router(config-bba-group)# sessions [ per-mac | per-vc | per-vlan ] limit <count>
一定時間<within>に閾値を超えるアクセス<count>を受けた場合、一定時間<block_time>のアクセスを禁止します。なお、セッション数はMACアドレス毎かVC毎かVLAN毎かを指定する事ができます。
Router(config)# bba-group pppoe <bba> Router(config-bba-group)# sessions [ per-mac | per-vc | per-vlan ] throttle <count> <within> <block_time>
基本設定
設定投入
R1をPPPoE Server、R2をPPPoE Clientとして設定します。
[R1] interface Ethernet 0/0 pppoe enable group BBA no shutdown ! bba-group pppoe BBA virtual-template 1 ! interface Virtual-Template 1 ip address 192.168.12.1 255.255.255.0 [R2] interface Ethernet 0/0 pppoe-client dial-pool-number 1 no shutdown ! interface Dialer 0 dialer pool 1 ip address 192.168.12.2 255.255.255.0 encapsulation ppp
動作確認
疎通可能になった事を確認します。
[R1] R1#ping 192.168.12.2 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.168.12.2, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 20/41/116 ms R1#
DHCP, IPCP
設定投入
PPPoE Clientは、DHCP, IPCPなどで動的にIPアドレスが割り当てられる事が一般的です。R1がR2にIPCPによってアドレスを割り当てる設定について考察します。
[R1] interface Virtual-Template 1 peer default ip address pool R2 ! ip local pool R2 192.168.12.2 [R2] interface Dialer0 ip address negotiated
動作確認
debugを有効にした後に、dialer interfaceをshut/no shutします。IPアドレスが動的に割り当てられた様子を観察します。
[R2] R2#debug ppp negotiation PPP protocol negotiation debugging is on R2# R2#conf t Enter configuration commands, one per line. End with CNTL/Z. R2(config)#int di 0 R2(config-if)#shut R2(config-if)#no shut *Mar 1 00:32:49.839: Di0 DDR: dialer shutdown complete R2(config-if)# *Mar 1 00:32:53.971: %LINK-3-UPDOWN: Interface Dialer0, changed state to up R2(config-if)# *Mar 1 00:33:10.351: %DIALER-6-BIND: Interface Vi1 bound to profile Di0 <omitted> *Mar 1 00:33:10.731: Vi1 IPCP: O CONFREQ [ACKsent] id 2 len 10 *Mar 1 00:33:10.731: Vi1 IPCP: Address 192.168.12.2 (0x0306C0A80C02) *Mar 1 00:33:10.743: Vi1 IPCP: I CONFACK [ACKsent] id 2 len 10 *Mar 1 00:33:10.747: Vi1 IPCP: Address 192.168.12.2 (0x0306C0A80C02) *Mar 1 00:33:10.747: Vi1 IPCP: State is Open *Mar 1 00:33:10.751: Di0 IPCP: Install negotiated IP interface address 192.168.12.2 *Mar 1 00:33:10.775: Di0 IPCP: Install route to 192.168.12.1 *Mar 1 00:33:10.795: Vi1 IPCP: Add link info for cef entry 192.168.12.1 *Mar 1 00:33:11.495: %LINEPROTO-5-UPDOWN: Line protocol on Interface Virtual-Access1, changed state to up *Mar 1 00:33:12.475: Vi1 CDPCP: Timeout: State REQsent *Mar 1 00:33:12.479: Vi1 CDPCP: O CONFREQ [REQsent] id 2 len 4 *Mar 1 00:33:12.523: Vi1 LCP: I PROTREJ [Open] id 3 len 10 protocol CDPCP (0x820701020004) *Mar 1 00:33:12.527: Vi1 CDPCP: State is Closed *Mar 1 00:33:12.527: Vi1 CDPCP: State is Listen R2(config-if)# R2(config-if)# R2(config-if)#do show ip int bri di 0 Interface IP-Address OK? Method Status Protocol Dialer0 192.168.12.2 YES IPCP up up R2(config-if)#
基本設定
設定投入
PPPoEは認証設定と併用される事が多いです。設定例として、PPPoE Server側はpap, chapを許可し、PPPoE Clientはpapを拒否しchapのみ受け付けるように設定します。
[R1] username R2 password CISCO ! interface Virtual-Template1 ppp authentication pap chap [R2] username R1 password CISCO ! interface Dialer0 ppp pap refuse
動作確認
疎通可能である事を確認します。
[R2] R2#ping 192.168.12.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.168.12.1, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 20/35/56 ms R2#
OSPF併用
src not on the same network
疎通可能になったにも関わらずOSPF neighborが確立されません。原因を追究するために、debug ip ospfを観察します。
[R2] R2#debug ip ospf events OSPF events debugging is on R2# *Mar 1 00:41:19.511: OSPF: Send hello to 224.0.0.5 area 0 on Dialer0 from 192.168.12.2 *Mar 1 00:41:19.639: OSPF: Rcv pkt from 192.168.12.1, Dialer0, area 0.0.0.0 : src not on the same network *Mar 1 00:41:21.255: OSPF: Rcv pkt from 192.168.12.1, Dialer0, area 0.0.0.0 : src not on the same network R2#
このメッセージは、192.168.12.2/32であるdialer 0で192.168.12.1のパケットを受信しているため、同一ネットワークではないと見なしている事を意味しています。RIPならば”no validate-update-source”コマンドで回避できますが、OSPFにはこれと同等の機能を提供するコマンドはありません。
DHCPを用いてアドレス割り当てを行うか、IPCPを用いてsubnet maskをadvertiseするかでこのトラブルを回避できます。IPCPでsubnet maskを割り当てるのは、On-Demand Poolというやや難しい方法を用いるしかありませんが、今回は敢えてこの方法に挑戦してみましょう。設定例は以下の通りです。
[R1] interface Virtual-Template1 ppp ipcp mask 255.255.255.0 [R2] ip dhcp pool IPCP import all origin ipcp ! interface Dialer0 ip address pool IPCP ppp ipcp mask request
想定通りのsubnet maskが割り当てられた事を確認します。
[R2] R2#show ip interface dialer 0 Dialer0 is up, line protocol is up Internet address is 192.168.12.2/24 Broadcast address is 255.255.255.255
IP MTU
subnet maskによる問題を解消しても、未だOSPF neighborが確立されません。debug messageを観察するとMTU sizeが異なるようです。
[R2] R2#debug ip ospf events OSPF events debugging is on R2# *Mar 1 00:51:11.931: OSPF: Send hello to 224.0.0.5 area 0 on Dialer0 from 192.168.12.2 *Mar 1 00:51:11.955: OSPF: Rcv hello from 10.1.1.1 area 0 from Dialer0 192.168.12.1 *Mar 1 00:51:11.959: OSPF: End of hello processing *Mar 1 00:51:11.995: OSPF: Send DBD to 10.1.1.1 on Dialer0 seq 0xF7F opt 0x52 flag 0x7 len 32 *Mar 1 00:51:11.999: OSPF: Retransmitting DBD to 10.1.1.1 on Dialer0 [10] *Mar 1 00:51:12.099: OSPF: Rcv DBD from 10.1.1.1 on Dialer0 seq 0x10B4 opt 0x52 flag 0x7 len 32 mtu 1492 state EXSTART *Mar 1 00:51:12.099: OSPF: Nbr 10.1.1.1 has smaller interface MTU *Mar 1 00:51:12.103: OSPF: First DBD and we are not SLAVE
PPPoE Server側はheader sizeを考慮してIP MTUが1492 byteとなっていますが、PPPoE ClientのIP MTU sizeは1500 byteのままです。PPPoE ClientであるR2にIP MTUの設定を投入します。
[R2] interface Dialer0 ip mtu 1492
動作確認
OSPF neighborが確立された事を確認します。
[R2] R2#show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface 10.1.1.1 0 FULL/ - 00:00:39 192.168.12.1 Dialer0 R2#