目录

前言
High-Level Data Link Control (HDLC)
Point-to-Point Protocol (PPP)
  Password Authentication Protocol (PAP)
  Challenge-Handshake Authentication Protocol (CHAP)
Point-to-Point Protocol over Ethernet (PPPoE)
  PPPoE Server 设定
  PPPoE Client 设定
Multilink PPP (MLPPP)

前言

Point-to-Point Protocol (PPP) 是用於 Layer 2 的 Protocol,一般应用於像 Serial Interface 这种点对点接口,目的是建立连线和提供认證功能等等。Cisco Router 预设在 Serial Interface 使用 High-Level Data Link Control (HDLC),虽然其他品牌都支缓 HDLC,但不同品牌之间的 HDLC 是不互通的!因此要连接不同品牌 Router 的 Serial Interface,就必需使用 PPP 了。

High-Level Data Link Control (HDLC)

现在先介绍一下 HDLC,毕竟是预设的 Protocol。其实也没有甚麽值得好研究的,因为设定不多,只能简单看看。

ppp

基本上,只要 R1 和 R2 的 Interface 都 no shutdown,HDLC 就启动了。用 show interface 指令就可看到。

R1#show interfaces serial 0/0
Serial0/0 is up, line protocol is up
  Hardware is M4T
  MTU 1500 bytes, BW 1544 Kbit, DLY 20000 usec,
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation HDLC, crc 16, loopback not set
  Keepalive set (10 sec)

show controllers 指令,可看到 Layer 2 资讯,Clockrate 是一项重要资料,表示这个 Interface 的传输速度。

R1#show controllers serial 0/0
M4T: show acontroller:
PAS unit 0, subunit 0, f/w version 1-45, rev ID 0x2800001, version 1
idb = 0x644130D0, ds = 0x64414190, ssb=0x6441454C
Clock mux=0x0, ucmd_ctrl=0x1C, port_status=0x7B
Serial config=0x8, line config=0x200
maxdgram=1608, bufpool=78Kb, 120 particles
     DCD=up  DSR=up  DTR=up  RTS=up  CTS=up
line state: up
cable type : V.11 (X.21) DCE cable, received clockrate 2015232

base0 registers=0x3C000000, base1 registers=0x3C002000
mxt_ds=0x64CB9E50, rx ring entries=78, tx ring entries=128
rxring=0x7B237A0, rxr shadow=0x6441ABA8, rx_head=45
txring=0x7B23A60, txr shadow=0x6441AF84, tx_head=47, tx_tail=47, tx_count=0
throttled=0, enabled=0
halted=0, last halt reason=0
Microcode fatal errors=0
rx_no_eop_err=0, rx_no_stp_err=0, rx_no_eop_stp_err=0
rx_no_buf=0, rx_soft_overrun_err=0, dump_err= 0, bogus=0, mxt_flags=0x0
tx_underrun_err=0, tx_soft_underrun_err=0, tx_limited=1(2)
tx_fullring=0, tx_started=47, mxt_flush_count=0
rx_int_count=45, tx_int_count=50

如果想更改 Clock Rate 可在 Interface 使用 clock rate 指令。速度必需使用以下的值,留意在真实环境下,Serial 接线分为 DCE 和 DTE 接口,只有 DCE 一端需要设定 Clock Rate,而 DTE 则会自动使用 DCE 的 Clock Rate。但在 GNS3 之中则不能模拟自动取 Clock Rate。

R1(config-if)#clock rate ?
  With the exception of the following standard values not subject to rounding,

          1200 2400 4800 9600 14400 19200 28800 38400
          56000 64000 128000 2015232

  accepted clockrates will be bestfitted (rounded) to the nearest value
  supportable by the hardware.

     DCE clock rate (bits per second)

R1(config-if)#clock rate 19200

再用 show controllers 指令确定 Clock Rate 已经改变。

R1#show controllers serial 0/0
*Mar  1 00:16:06.659: %SYS-5-CONFIG_I: Configured from console by console
R1#show controllers serial 0/0
M4T: show controller:
PAS unit 0, subunit 0, f/w version 1-45, rev ID 0x2800001, version 1
idb = 0x644130D0, ds = 0x64414190, ssb=0x6441454C
Clock mux=0x0, ucmd_ctrl=0x1C, port_status=0x7B
Serial config=0x8, line config=0x200
maxdgram=1608, bufpool=78Kb, 120 particles
     DCD=up  DSR=up  DTR=up  RTS=up  CTS=up
line state: up
cable type : V.11 (X.21) DCE cable, received clockrate 19200

Point-to-Point Protocol (PPP)

现在试把 HDLC 改成 PPP,Line Protocol 立刻 Down 了,当然!因为另一边都需要同样的设定。

R1(config-if)#encapsulation ppp
R1(config-if)#
*Mar  1 00:18:37.135: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial0/0, changed state to down

把 R2 的 Serial Interface 也设成 PPP 看看。

R2(config-if)#encapsulation ppp
R2(config-if)#
*Mar  1 00:21:23.375: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial0/0, changed state to up
R2(config-if)#do show interface serial 0/0
Serial0/0 is up, line protocol is up
  Hardware is M4T
  MTU 1500 bytes, BW 1544 Kbit, DLY 20000 usec,
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation PPP, LCP Open
  Open: CDPCP, crc 16, loopback not set

Password Authentication Protocol (PAP)

PPP 能够支缓 Authentication,其中一个方法是 PAP。现在我们尝试由 R2 要求 R1 提供认證,首先在 R2 设定 Username 和 Password,然後在 Interface 用 ppp authentication pap 要求对方要提供 pap 认證资料。

R2(config)#username cisco password ccie
R2(config)#interface serial 0/0
R2(config-if)#ppp authentication pap

然後在 R1 设定好 PAP 的 Username 和 Password 便 OK 了!

R1(config-if)#ppp pap sent-username cisco password ccie

如果希望双向认證的话,只要把指令在另一只 Router 再执行一次便可以了,而双方的 Username 和 Password 可以不相同,结果如下:

hostname R1
!
username cisco2 password 0 ccie2
!
interface Serial0/0
 no ip address
 encapsulation ppp
 ppp authentication pap
 ppp pap sent-username cisco password 0 ccie
hostname R2
!
username cisco password 0 ccie 
!
interface Serial0/0
 no ip address
 encapsulation ppp
 ppp authentication pap
 ppp pap sent-username cisco2 password 0 ccie2

Challenge-Handshake Authentication Protocol (CHAP)

用 PAP 有一个问题,就是 Username 和 Password 会以明码传送,这可能会引起保安问题。转用 CHAP 会比较好,因为 CHAP 会先把 Username 和 Password Hash 後再传送。

首先在 R1 和 R2 设定 Username 和 Password,Username 必需是对方的 hostname,而 Password 必需相同。

R1(config)#username R2 password ccie
R2(config)#username R1 password ccie

然後,只要把 authentication 改成 chap 便可以了,结果如下:

hostname R1
!
username R2 password ccie
!
interface Serial0/0
 no ip address
 encapsulation ppp
 ppp authentication chap
hostname R2
!
username R1 password ccie
!
interface Serial0/0
 no ip address
 encapsulation ppp
 ppp authentication chap

Point-to-Point Protocol over Ethernet (PPPoE)

故名思义,PPPoE 是把 PPP 封装在 Ethernet 网络里面的一种协定,在 Ethernet 上实现了认證和加密等功能。一般应用在 Cable Modem 或 DSL 连线。

PPPoE Server 设定

要进行 PPPoE 实验,先要用一只 Router 模拟 ISP 的 Router。设定 ISP 的步骤如下:

首先设定将会配给 PPPoE Client 的 IP Pool。

ISP(config)#ip local pool Pool1 10.0.0.2 10.0.0.254

然後设定 Username 和 Password。

ISP(config)#username Client1 password 0 pass1

接著建立 Virtual-Template Interface,PPPoE Client 会连接到这个 Interface,给 Interface 定个 IP,然後告诉它要派给 Client 的 IP Pool 是什麽。

ISP(config)#interface virtual-template 1
ISP(config-if)#ip address 10.0.0.1 255.255.255.0
ISP(config-if)#peer default ip address pool Pool1
ISP(config-if)#ppp authentication chap

跟著建立 Broadband Aggregation (BBA) group,把刚刚造起的 virtual-template 1 塞进去。

ISP(config)#bba-group pppoe Group1
ISP(config-bba-group)#virtual-template 1

最後把这个 BBA Group 放进 Interface。

ISP(config)#int ethernet 0/0
ISP(config-if)#pppoe enable group Group1
ISP(config-if)#no shutdown

PPPoE Client 设定

建立 Dialer Interface,MTU 要设成 1492 ,IP Address 用 negotiated 来问 Server 取 IP,最後提供密码。

Client1(config)#interface Dialer1
Client1(config-if)#mtu 1492
Client1(config-if)#ip address negotiated
Client1(config-if)#encapsulation ppp
Client1(config-if)#dialer pool 1
Client1(config-if)#ppp chap password 0 pass1

然後把这个 Dialer Pool 放进 Interface 里。

Client1(config)#interface Ethernet0/0
Client1(config-if)#pppoe-client dial-pool-number 1
Client1(config-if)#no shutdown

如果设定成功,可用 show pppoe session 查询 PPPoE 的状态,当然也能够 Ping 到 Server 的 IP Address。

Client1#show pppoe session
     1 client session

Uniq ID  PPPoE  RemMAC          Port                    VT  VA         State
           SID  LocMAC                                      VA-st
    N/A    176  cc00.27a4.0000  Et0/0                  Di1  Vi1        UP
                cc01.27a4.0000                              UP
Client1#ping 10.0.0.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.0.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/28/40 ms

Multilink PPP (MLPPP)

Multilink PPP 可以把多条 PPP Link 组合成一条 Multilink,实现 Load Balance 效果,情况就像 Ethernet 里面的 EtherChannel,现在我们试试为以下网络设定 MLPPP。

ppp

先在 R1 为 Serial 0/0 和 Serial 0/1 设定 PPP 和 Multilink,Group 1 是 Multilink 的 logical group。

R1(config)#int serial 0/0
R1(config-if)#encapsulation ppp
R1(config-if)#ppp multilink
R1(config-if)#ppp multilink group 1
R1(config-if)#no shutdown
R1(config)#int serial 0/1
R1(config-if)#encapsulation ppp
R1(config-if)#ppp multilink
R1(config-if)#ppp multilink group 1
R1(config-if)#no shutdown

然後建立 1 条 Multilink Interface,设定 IP 和 Multilink。

R1(config)#int multilink 1
R1(config-if)#ip address 192.168.1.1 255.255.255.0
R1(config-if)#ppp multilink
R1(config-if)#ppp multilink group 1

设定好 R1 後,在 R2 做相同的设定。

R2(config)#int serial 0/0
R2(config-if)#encapsulation ppp
R2(config-if)#ppp multilink
R2(config-if)#ppp multilink group 1
R2(config-if)#no shutdown
R2(config)#int serial 0/1
R2(config-if)#encapsulation ppp
R2(config-if)#ppp multilink
R2(config-if)#ppp multilink group 1
R2(config-if)#no shutdown
R2(config)#int multilink 1
R2(config-if)#ip address 192.168.1.2 255.255.255.0
R2(config-if)#ppp multilink
R2(config-if)#ppp multilink group 1

现在證实一下两个 Interface 是否真的实现 Load Balance,先把 Serial 0/0 和 Serial 0/1 的 counter 清除:

R1#clear counters serial 0/0
Clear "show interface" counters on this interface [confirm]
R1#
*Mar  1 00:39:53.003: %CLEAR-5-COUNTERS: Clear counter on interface Serial0/0 by console
R1#clear counters serial 0/1
Clear "show interface" counters on this interface [confirm]
R1#
*Mar  1 00:39:56.683: %CLEAR-5-COUNTERS: Clear counter on interface Serial0/1 by console

然後用比较大的 Datagram size 来 Ping 对方:

R1#ping
Protocol [ip]:
Target IP address: 192.168.1.2
Repeat count [5]: 99
Datagram size [100]: 9999
Timeout in seconds [2]:
Extended commands [n]:
Sweep range of sizes [n]:
Type escape sequence to abort.
Sending 99, 9999-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 100 percent (99/99), round-trip min/avg/max = 72/80/112 ms

比较一下,Multilink 的 Input 和 Output 分别大约等於 Serial 0/0 及 Serial 0/1 的 Input 和 Ouput 总和。

R1#show interface multilink 1 | begin 5 minute output
  5 minute output rate 124000 bits/sec, 8 packets/sec
     694 packets input, 1004863 bytes, 0 no buffer
     Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
     694 input errors, 0 CRC, 694 frame, 0 overrun, 0 ignored, 0 abort
     694 packets output, 1014579 bytes, 0 underruns
     0 output errors, 0 collisions, 0 interface resets
     0 output buffer failures, 0 output buffers swapped out
     0 carrier transitions
R1#
R1#show interface serial 0/0 | begin 5 minute output
  5 minute output rate 59000 bits/sec, 7 packets/sec
     706 packets input, 506838 bytes, 0 no buffer
     Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
     706 packets output, 506838 bytes, 0 underruns
     0 output errors, 0 collisions, 0 interface resets
     0 output buffer failures, 0 output buffers swapped out
     0 carrier transitions     DCD=up  DSR=up  DTR=up  RTS=up  CTS=up

R1#
R1#show interface serial 0/1 | begin 5 minute output
  5 minute output rate 58000 bits/sec, 6 packets/sec
     706 packets input, 508125 bytes, 0 no buffer
     Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
     706 packets output, 508125 bytes, 0 underruns
     0 output errors, 0 collisions, 0 interface resets
     0 output buffer failures, 0 output buffers swapped out
     0 carrier transitions     DCD=up  DSR=up  DTR=up  RTS=up  CTS=up