PPPの設定方法についてまとめます。実践では使用頻度は低いですが、PPPoE接続をする時に必要になる知識ですので、頭の片隅程度には置いておきましょう。
PPP over Serial
必須設定
Serial link上でPPP接続するのは非常に簡単です。以下のように”encapsulation”のみを設定すれば事足ります。
s0/0 s0/0 +------+.1 .2+------+ | R1 +----------+ R2 | +------+ +------+ 192.168.12.0/24
[R1] interface Serial0/0 ip address 192.168.12.1 255.255.255.0 encapsulation ppp [R2] interface Serial0/0 ip address 192.168.12.2 255.255.255.0 encapsulation ppp
PAP
以下のコマンドでclientに対してPAP認証を求める事ができます。
Router(config-if)# ppp authentication pap
認証を求められたclientは、以下のコマンドでserverに伝えるユーザ名とパスワードを定義する事ができます。
Router(config-if)# ppp pap sent-username <username> password <password>
serverは、以下のように定義されたlocal databaseに存在するユーザならばPPP接続を許可します。
Router(config)# username <username> password <password>
PAPの設定例は以下の通りです。
s0/0 s0/0 +------+.1 .2+------+ | R1 +----------+ R2 | +------+ +------+ 192.168.12.0/24
[R1] interface Serial0/0 ip address 192.168.12.1 255.255.255.0 encapsulation ppp ppp authentication pap ! username R2PPP password CISCO [R2] interface Serial0/0 ip address 192.168.12.2 255.255.255.0 encapsulation ppp ppp pap sent-username R2PPP password CISCO
CHAP
PAPと同様に以下のコマンドでclientに対して認証を求める事ができます。なお、以下のように”pap chap”と指定した場合は、clientがPAPによる認証に応じた場合はPAPで認証し、clientがPAPを拒否した場合はCHAPによる認証を試みます。
Router(config-if)# ppp authentication pap chap
client側は以下のコマンドでPAPによる認証を拒否する事ができます。PAPは平文でユーザ名とパスワードを送信する仕様であるため、PAPは嫌われる傾向があります。
Router(config-if)# ppp pap refuse
認証を求められたclientは、以下のコマンドでserverに伝えるパスワードとホスト名を定義する事ができます。なお、ホスト名はalter hostnameと呼ばれる設定で必須設定ではありません。デフォルトでは”hostname”コマンドで設定されたホスト名がserverに伝えられますが、serverに伝えたいホスト名を変更したい場合は以下のコマンドを使用して下さい。
Router(config-if)# ppp chap <password> Router(config-if)# ppp chap hostname <password>
serverは、以下のように定義されたlocal databaseにホスト名とパスワードが存在するならば、PPP接続を許可します。なお、“username
Router(config)# username <hostname> password <password>
CHAPの設定例は以下の通りです。
s0/0 s0/0 +------+.1 .2+------+ | R1 +----------+ R2 | +------+ +------+ 192.168.12.0/24
[R1] interface Serial0/0 ip address 192.168.12.1 255.255.255.0 encapsulation ppp ppp authentication pap chap ! username R2CHAP password CISCO [R2] interface Serial0/0 ip address 192.168.12.2 255.255.255.0 encapsulation ppp ppp chap hostname R2CHAP ppp chap password CISCO ppp pap refuse
CHAP 処理順序
CHAPはパスワードを平文で伝えません。CHAPの処理順序および認証過程のパケットキャプチャは以下の通りです。
- serverはclientに対して、ホスト名とchallengeと呼ばれる乱数を送信します。
- client側は受信したホスト名を元にlocal databaseからパスワードを探します。もしlocal databseからパスワードがみつからなかった場合は、”ppp chap password”コマンドで設定されたパスワードを使用します。clientはserverに、ホスト名とresponse(challengeとパスワードのハッシュ値)を返信します。
- server側は受信したホスト名を元にlocal databaseからパスワードを探します。challengeとパスワードのハッシュ値を計算し、その値がresponseと一致していれば接続を認めます。
Frame 9 (27 bytes on wire, 27 bytes captured) Point-to-Point Protocol PPP Challenge Handshake Authentication Protocol Code: Challenge (1) Identifier: 2 Length: 23 Data (19 bytes) Value Size: 16 Value: CC61D0BAB0436ABECDA522D4FEE8E8A3 Name: R1 Frame 10 (31 bytes on wire, 31 bytes captured) Point-to-Point Protocol PPP Challenge Handshake Authentication Protocol Code: Response (2) Identifier: 2 Length: 27 Data (23 bytes) Value Size: 16 Value: C50EC6624FA20B885DDF04FEC7B0F2D0 Name: R2CHAP Frame 11 (8 bytes on wire, 8 bytes captured) Point-to-Point Protocol PPP Challenge Handshake Authentication Protocol Code: Success (3) Identifier: 2 Length: 4
繰り返しになりますが、clientはserverから受信したホスト名を元にlocal databseからパスワードを探します。つまり”ppp chap password”コマンドは使用しなくても接続を確立する事ができます。Cisco公式ドキュメントを見ると、”ppp chap password”コマンドを使用する例は少ないようです。以下のように”username”コマンドのみを使用する方法が多数派のようです。
s0/0 s0/0 +------+.1 .2+------+ | R1 +----------+ R2 | +------+ +------+ 192.168.12.0/24
[R1] interface Serial0/0 ip address 192.168.12.1 255.255.255.0 encapsulation ppp ppp authentication chap ! username R2 password CISCO [R2] interface Serial0/0 ip address 192.168.12.2 255.255.255.0 encapsulation ppp ! username R1 password CISCO
PPP over Frame Relay
必須設定
PPP over Frame Relayを定義するには、以下のようにDLCIとVirtual-Templateに対する紐づけを定義します。
Router(config-if)# frame-relay interface-dlci <dlci> ppp Virtual-Template <num>
DLCIとVirtual-Templateの紐づけが完了したら、以下のようにVirtual-Templateに対してIPアドレスを付与します。
Router(config)# Virtual-Template <num> Router(config-if)# ip address <addr> <mask>
192.168.12.0/24 +------+.1 +--------+ .2+------+ | R1 +--------+ FRSW +--------+ R2 | +------+s0/0 1+--------+2 s0/0+------+ 1:102 = 2:201
PPP over Frame Relayの設定例は以下の通りです。
[R1] interface Serial0/0 encapsulation frame-relay frame-relay interface-dlci 102 ppp Virtual-Template1 ! interface Virtual-Template1 ip address 192.168.12.1 255.255.255.0 [R2] interface Serial0/0 encapsulation frame-relay frame-relay interface-dlci 201 ppp Virtual-Template1 ! interface Virtual-Template1 ip address 192.168.12.2 255.255.255.0
Virtual-Accessがup状態になっている事を確認し、R1, R2が互いに疎通可能である事を確認します。
R1#show ip interface brief Interface IP-Address OK? Method Status Protocol Serial0/0 unassigned YES unset up up Serial0/1 unassigned YES unset administratively down down Serial0/2 unassigned YES unset administratively down down Serial0/3 unassigned YES unset administratively down down Virtual-Access1 192.168.12.1 YES TFTP up up Virtual-Template1 192.168.12.1 YES manual down down Virtual-Access2 unassigned YES unset down down R1# 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 = 4/43/96 ms R1#
IPCP
基本設定
PPPには、IPCP (Internet Protocol Control Protocol) というIPアドレス等を対向に割り当てる機能が備わっています。
対向に割り当てるアドレスを定義するには以下のコマンドを使用します。
Router(config-if)# peer default ip address <addr>
IPCPによって割り当てられたIPアドレスを使用するには、以下のコマンドを使用します。
Router(config-if)# ip address negotiated
設定例は以下の通りです。
s0/0 s0/0 +------+.1 .2+------+ | R1 +----------+ R2 | +------+ +------+ 192.168.12.0/24
[R1] interface Serial0/0 ip address 192.168.12.1 255.255.255.0 encapsulation ppp peer default ip address 192.168.12.2 [R2] interface Serial0/0 ip address negotiated encapsulation ppp
R2, R1間で疎通可能である事を確認します。また、R2のルーティングテーブルを見ると、R1 s0/0があたかも接続されているかのように見えます。なお、IPCPによって割り当てられたアドレスはsubnet maskが32bitになっている事に注意して下さい。
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 = 24/50/108 ms R2# R2#show ip route Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route Gateway of last resort is not set 192.168.12.0/32 is subnetted, 2 subnets C 192.168.12.1 is directly connected, Serial0/0 C 192.168.12.2 is directly connected, Serial0/0 R2#
あたかも対向が接続されているかのように扱われる挙動を打ち消すには、以下のコマンドを入力します。
Router(config-if)# no peer neighbor-route
設定例および動作確認は以下の通りです。
[R2] interface Serial0/0 ip address negotiated encapsulation ppp no peer neighbor-route R2#show ip route <omitted> Gateway of last resort is not set 192.168.12.0/32 is subnetted, 1 subnets C 192.168.12.2 is directly connected, Serial0/0 R2#
IPCP RIP併用環境
IPCP RIP併用環境はやや工夫が必要です。簡単な設定例を以下に示します。
s0/0 s0/0 +------+.1 .2+------+ | R1 +----------+ R2 | +------+ +------+ 192.168.12.0/24
[R1] interface Loopback0 ip address 10.1.1.1 255.255.255.0 ! interface Serial0/0 ip address 192.168.12.1 255.255.255.0 encapsulation ppp peer default ip address 192.168.12.2 ! router rip version 2 network 10.0.0.0 network 192.168.12.0 no auto-summary [R2] interface Loopback0 ip address 10.2.2.2 255.255.255.0 ! interface Serial0/0 ip address negotiated encapsulation ppp no peer neighbor-route ! router rip version 2 network 10.0.0.0 network 192.168.12.0 no auto-summary
R2のルーティングテーブルを見ると、RIPが正常に機能していないように見えます。
R2#show ip route <omitted> Gateway of last resort is not set 192.168.12.0/32 is subnetted, 1 subnets C 192.168.12.2 is directly connected, Serial0/0 10.0.0.0/24 is subnetted, 1 subnets C 10.2.2.0 is directly connected, Loopback0 R2#
原因を究明するためにdebug messageを表示させます。”bad source”と記載されている事から、validate-update-sourceという機能に起因する事が分かります。
validate-update-sourceは、RIP updateの送信元を検証する機能です。この場合では、R2 s0/0 (192.168.12.2/32 )でrip packetを受信します。rip packetの送信元は192.168.12.1ですので、R2は送信元が偽装されているのではないかと判断してしまいます。
R2#debug ip rip events RIP event debugging is on R2# *Mar 1 00:06:14.455: RIP: sending v2 update to 224.0.0.9 via Serial0/0 (192.168.12.2) *Mar 1 00:06:14.459: RIP: Update contains 1 routes *Mar 1 00:06:14.459: RIP: Update queued *Mar 1 00:06:14.463: RIP: Update sent via Serial0/0 *Mar 1 00:06:18.399: RIP: sending v2 update to 224.0.0.9 via Loopback0 (10.2.2.2) *Mar 1 00:06:18.403: RIP: Update contains 2 routes *Mar 1 00:06:18.403: RIP: Update queued *Mar 1 00:06:18.407: RIP: Update sent via Loopback0 *Mar 1 00:06:18.415: RIP: ignored v2 packet from 10.2.2.2 (sourced from one of our addresses) *Mar 1 00:06:20.399: RIP: ignored v2 update from bad source 192.168.12.1 on Serial0/0 R2#
この送信元検証機能validate-update-sourceを無効化するには、以下のコマンドを入力します。
Router(config-router)# no validate-update-source
R2でvalidate-update-sourceを無効化します。その後、RIPによる経路交換が正常に行われている事が確認できます。
R2(config)# router rip R2(config-router)# no validate-update-source R2#show ip route <omitted> Gateway of last resort is not set 192.168.12.0/32 is subnetted, 1 subnets C 192.168.12.2 is directly connected, Serial0/0 10.0.0.0/24 is subnetted, 2 subnets C 10.2.2.0 is directly connected, Loopback0 R 10.1.1.0 [120/1] via 192.168.12.1, 00:00:01 R2#
subnet maskの伝搬
基本的な設定ではIPCPでIPアドレスのみを伝えます。この場合は、subnet maskは32bitとして扱われます。しかし、設定によってはsubnetmaskやDNS serverをIPCPによって伝える事ができます。
以下のコマンドで、PPP ServerにsubnetmaskやDNS server等の情報を要求する事ができます。
Router(config-if)# ppp ipcp [ dns | mask | route | username | wins ] request
以下のコマンドで、PPP Clientに割り当てるDNS server, subnetmaskを定義する事ができます。
Router(config-if)# ppp ipcp dns <address> Router(config-if)# ppp ipcp mask <mask> Router(config-if)# ppp ipcp route <address>
以下はあやふやな情報なので、誤りがございましたらご指摘下さい。
IPCPでsubnet maskを取得するには”ip address negotiated”では不十分です。デフォルトの挙動ではDHCPでsubnetmaskを取得しようと試みるため、IPCPでsunbet mask等を取得するには、以下のようなDHCP poolを使用します。
Router(config)# ip dhcp pool <pool> Router(dhcp-config)# origin ipcp Router(dhcp-config)# import all Router(config)# interface <interface> Router(config-if)# ip address pool <pool>
設定例は以下の通りです。
s0/0 s0/0 +------+.1 .2+------+ | R1 +----------+ R2 | +------+ +------+ 192.168.12.0/24
[R1] interface Serial0/0 ip address 192.168.12.1 255.255.255.0 encapsulation ppp peer default ip address 192.168.12.2 ppp ipcp dns 192.168.12.1 ppp ipcp mask 255.255.255.0 [R2] ip dhcp pool IPCP import all origin ipcp ! interface Serial0/0 ip address pool IPCP encapsulation ppp ppp ipcp dns request ppp ipcp mask request
subnetmaskおよびDNS Serverが割り当てられている事を確認します。DNS Serverは適当な文字列を入力した時に名前解決をどのサーバに要求するかによって確認する事ができます。
R2#show ip interface Serial 0/0 Serial0/0 is up, line protocol is up Internet address is 192.168.12.2/24 Broadcast address is 255.255.255.255 <omitted> R2# R2# R2#tmp Translating "tmp"...domain server (192.168.12.1) (192.168.12.1) Translating "tmp"...domain server (192.168.12.1) % Unknown command or computer name, or unable to find computer address R2#