目錄

前言
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)

<--Output Omitted-->

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 <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.

  <246-8064000>    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

<--Output Omitted-->

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