Posts

Showing posts from August 3, 2008

Remote Triggered Black Hole(RTBH) Configuration Sample

基本設定步驟如下:
(1)每個Router上設置一筆static route指向null0,通常會使用192.0.2.0/24這個unused IP Range。
(2)"Tigger" Router上設置redistribution,通常是透過static route,同時設置不同的參數,包括設定192.0.2.0/24範圍的IP Address當成是next-hop。
(3)當Remote Router學習到網路資訊時,它們會在routing table中針對被攻擊的網段或是主機IP位址設置一筆路由,next-hop為192.0.2.0/24這個範圍的IP Address。

R1(config)#ip route 192.0.2.2 255.255.255.255 null0
R2(config)#ip route 192.0.2.2 255.255.255.255 null0

R2(config)#route-map BLACKHOLE
R2(config-route-map)#match tag 911
R2(config-route-map)#set community no-export
R2(config-route-map)#set ip next-hop 192.0.2.2
R2(config-route-map)#set origin igp

R2(config)#router bgp 100
R2(config-router)#address-familiy ipv4 unicast
R2(config-router-af)#redistribute static route-map BLACKHOLE

R2(config)#ip route 203.203.203.203 255.255.255.255 192.0.2.2 tag 911
!假設203.203.203.203是攻擊受害者,我們在R2上利用BGP宣告設置black hole
!利用static route設置受害者所使用的IP Address來Trigger RTBH,宣告給所有BGP Border Speaker

R1(config)#int null0
R1(config-if)#no ip unreachable

R2(config)#int null0
R2(config-if)#no …

Multicast RP Redundancy

在Multicast中,如果使用Sparse Mode必須手動/自動選擇Rendevous Point(RP)。所以如果只有一個RP,很容易因為RP fail而改用Dense Mode。

我們可以使用MSDP(Multicast Source Discovery Protocol) for Anycast RP功能來達到Redundancy和Load-Sharing。首先我們必須在R1,R2上建立相同的Loopback Interface IP Address並且透過OSPF宣告出去。同時設定所有的Router使用Static RP指向這個Loopback Interface IP Address。很重要的一點是記得要在Loopback Interface上啟動ip pim sparse。

R1(config)#int loopback 100
R1(config-if)#ip address 100.100.100.100 255.255.255.255
R1(config-if)#ip pim sparse
R1(config)#ip pim rp-address 100.100.100.100

R2(config)#int loopback 100
R2(config-if)#ip address 100.100.100.100 255.255.255.255
R2(config-if)#ip pim sparse
R2(config)#ip pim rp-address 100.100.100.100

R1(config)#router ospf 1
R1(config)#network 100.100.100.100 0.0.0.0 area 0

R2(config)#router ospf 1
R2(config)#network 100.100.100.100 0.0.0.0 area 0

讓R1,R2之間建立MSDP Peering交換active source information

R1(config)#ip msdp peer 2.2.2.2 connect-source loopback 0
R1(config)#ip msdp originator-id loopback0

R2(config)#ip msdp peer 1.1.1.1 connect-source lo…

Frame Relay End-to-End Keepalive

只要學習過Frame Relay的同學都知道,Frame Relay兩端的FRAD(Frame Relay Access Device),只透過Frame Relay PVC(LMI)來跟Frame Relay Switch Keepalive,藉此,Frame Relay Switch可以得知兩端的PVC是否正常連通(Active),但是對於FRAD來說,它們只能透過LMI查詢得知PVC的狀態,而無法直接跟另一端的FRAD保持Keepalive。

因此我在此介紹一個很特別的技巧,那就是End-to-End Keepalive,設定上很簡單,只要利用map-class的設定再加上end-to-end function即可:

R1(config)#map-class frame-relay EtoE
R1(config-map-class)#frame-relay end-to-end keepalive mode bidirection
! 你可以使用bidirection or request or reply or passive-reply等不同的模式
! 詳情請參考http://www.cisco.com/en/US/docs/ios/12_0t/12_0t5/feature/guide/FRKeep.html

R1(config)#int s0/0/0.1
R1(config-subif)#frame-relay interface-dlci 102
R1(config-fr-dlci)#class EtoE

R2(config)#map-class frame-relay EtoE
R2(config-map-class)#frame-relay end-to-end keepalive mode bidirection

R1(config)#int s0/0/0.1
R1(config-subif)#frame-relay interface-dlci 201
R1(config-fr-dlci)#class EtoE

利用CoPP(Control Plane Policing)阻擋Telnet遠端管理

「山不轉路轉,路不轉心轉」,這句話最適用於CCIE Lab考試上,準備CCIE Lab考試最令人頭痛的莫過於了解同一個問題所有的解法(所謂「只知其一,不知其二」是準備CCIE Lab最忌諱的事情)。

如果今天要求你不能利用Access-Class來防堵遠端Telnet管理時,你會想到那些方法? 最直覺的就是直接在所有interface上設定inbound ACL,不過這樣的方式比較麻煩,所以我今天來介紹如何利用CoPP(Control Plane Policing)來防止這類的連線管理。

所謂的CoPP(Control Plane Policing),主要是針對Cisco設備的Control Plane來進行網路連線封包的資料分析及避免Denial of Service所產生的一種保護機制。CoPP特色允許使用者設定QoS filter用來管理Control Plane封包的資料流用以保護Cisco IOS routers及switch的control plane,避免偵察行為及DoS攻擊。利用這種方式,不論在router或是switch有攻擊或是大量資料d的負載,control plane仍可以協助助維護封包轉送及協定狀態。

假設網路架構如下:
R1-R2-R3
我們要在R2上設定CoPP,只允許R1,R3的Loopback IP進行telnet遠端管理,禁止其他來源IP telnet至R2:

R2(config)#access-list 100 deny tcp host 1.1.1.1 any eq telnet
R2(config)#access-list 100 deny tcp host 3.3.3.3 any eq telnet
R2(config)#access-list 100 permit ip any any eq telnet

R2(config)#class-map TELNET
R2(config-cmap)#match access-group 100

R2(config)#policy-map CoPP
R2(config-pmap)#class TELNET
R2(config-pmap-c)#drop

R2(config)#control-plane
R2(config-cp)#service-policy input CoPP

Multilink Frame-Relay

各位可能用過Multilink PPP,不過可能沒有用過Multilink Frame-Relay,不過只要是R/S CCIE Candidates一定會聽過,因為這個topic近年來可以說是重點項目。

假設現在有兩個Router R1和R2,分別利用兩個Serial Interface對連,以下就是Multilink Frame-Relay的Sample Configuration:

R1(config)#frame-relay switching
R1(config)int mfr 1
R1(config-if)#frame intf-type dce
R1(config)#int mfr 1.1 point-to-point
R1(config-subif)#ip address 10.1.1.1 255.255.255.252
R1(config-subif)#frame-relay interface-dlci 102
R1(config-fr-dlci)#exit
R1(config-subif)#bandwidth 512

R1(config)#int s0/0/0
R1(config-if)#encapsulation frame-relay mfr 1
R1(config)#int s0/0/1
R1(config-if)#encapsulation frame-relay mfr 1

R2(config)#frame-relay switching
R2(config)int mfr 1
R2(config)#int mfr 1.1 point-to-point
R2(config-subif)#ip address 10.1.1.2 255.255.255.252
R2(config-subif)#frame-relay interface-dlci 102

R2(config)#int s0/0/0
R2(config-if)#encapsulation frame-relay mfr 1
R2(config)#int s0/0/1
R2(config-if)#encapsulation frame-relay mfr 1

CIR=Bc/Tc

當我們談論到CAR(Committed Access Rate)時,請務必要把這個公式記在腦海中,CIR=Bc/Tc,在計算時要注意單位的差異(Bytes/Bits),Cisco IOS無法定義Tc,因此只要定義出CIR,Bc就可以產生Tc的數值。

CIR(Committed Information Rate)(單位: Bits Per Second)Bc(Committed Burst)(單位: Bytes)Tc(Committed Time Interval)(單位: Seconds)【例】CIR=32Kbps,Tc=1.5 Sec
=> Bc=(32000/8) * 1.5=6000 (Bytes)


在設定CAR指令時就可以這樣設定
R1(config)#int s0/0/0
R1(config-if)#rate-limit output 32000 6000 12000 conform-action transmit exceeding-action drop

其中32000 bps是CIR,6000 bytes是Bc,12000 bytes是Be(Excess Burst)

L2PTv3 transport CDP, VTP, STP

Layer 2 Tunneling Protocol(L2TP)可以傳送CDP, VTP, STP跨越SP Backbone,這是Dot1q Tunneling(請參考Q-in-Q(Dot1Q Tunnel) Sample Configuration)的額外附加功能,預設並未啟用,啟用的指令如下:

SW1(config)#int f0/1
SW1(config-if)#l2protocol-tunnel cdp
SW1(config-if)#l2protocol-tunnel stp
SW1(config-if)#l2protocol-tunnel vtp

SW2(config)#int f0/1
SW2(config-if)#l2protocol-tunnel cdp
SW2(config-if)#l2protocol-tunnel stp
SW2(config-if)#l2protocol-tunnel vtp

Ethernet over Layer 2 Tunneling Protocol(L2TPv3)

假設網路架構如下,R1,R3並非屬於同一個Ethernet Segment/VLAN:
R1 - SW1 - R2 - SW2 - R3

R1(config)#pseudowire-class PW
R1(config-pw-class)#encapsulation l2tpv3
R1(config-pw-class)#ip local interface loopback 0

R1(config)#interface f0/0
R1(config-if)#xconnect 3.3.3.3 103 pw-class PW

R3(config)#pseudowire-class PW
R3(config-pw-class)#encapsulation l2tpv3
R3(config-pw-class)#ip local interface loopback 0

R3(config)#interface f0/0
R3(config-if)#xconnect 1.1.1.1 103 pw-class PW

Q-in-Q(Dot1Q Tunnel) Sample Configuration

透過IEEE 802.1q in IEEE 802.1q(Q-in-Q)的方式,我們可以讓VLAN的數量增加超過4096(4096*4096),也可以讓客戶自行設定Trunk穿過Service Provider所提供的Ethernet Solution(如:FTTx)。

假設現在的網路架構為:

SW1 F0/1 <- SP VLAN 10 -> SW2 F0/1

兩端的設備都是連接到VLAN 10,因此在兩端的Switch啟用Dot1q Tunnel建立Trunk

SW1(config)#vlan dot1q tag native
!預設,Native VLAN不會加上tag,如果在Q-in-Q中要針對native vlan加tag,必須使用上述指令

SW1(config)#int f0/1
SW1(config-if)#switchport mode dot1q-tunnel
SW1(config-if)#switchport access vlan 10
SW1(config)#system mtu 1508
!一般Switch預設system mtu 1500,為了支援多層tag,必須加大MTU,設定完成必須reload switch

SW2(config)#vlan dot1q tag native
!預設,Native VLAN不會加上tag,如果在Q-in-Q中要針對native vlan加tag,必須使用上述指令

SW2(config)#int f0/1
SW2(config-if)#switchport mode dot1q-tunnel
SW2(config-if)#switchport access vlan 10
SW2(config)#system mtu 1508
!一般Switch預設system mtu 1500,為了支援多層tag,必須加大MTU,設定完成必須reload switch

Frame Relay DLCI-to-DLCI Switching(L2TPv3)

這是L2 VPN的其中一種型式,在非Frame-Relay Switch(FRAD)上設定DLCI-to-DLCI的轉接達成Frame-Relay Switch模擬的功能,假設網路架構如下:

R1 <-> FR Network <-> R2 <- OSPF -> R3 <-> FR Network <-> R4

透過R2,R3兩個路由器的轉接讓R1 to R4有一個虛擬的L2通道(DLCI-to-DLCI)

(1)首先先在R2,R3上設定pseudowire class,利用R2,R3各自的loopback interface當根據

R2(config)#pseudowire-class PW
R2(config-pw-class)#encapsulation l2tpv3
R2(config-pw-class)#ip local interface loopback 0

R3(config)#pseudowire-class PW
R3(config-pw-class)#encapsulation l2tpv3
R3(config-pw-class)#ip local interface loopback 0


(2)將R1 to R2, R3 to R4特定DLCI設定為switched類型,藉此將R2,R3模擬成Frame-Relay Switch

R2(config)#int s0/0/0
R2(config-if)#frame-relay interface-dlci 201 switched

R3(config)#int s0/0/0
R3(config-if)#frame-relay interface-dlci 304 switched


(3)建立一個虛擬連線

R2(config)#connect R1toR4 s0/0/0 201 l2transport
R2(config-fr-pw-switching)#xconnect 3.3.3.3 203 pw-class PW

R3(config)#connect R1toR4 s0/0/0 304 l2transport
R3(config-fr-pw-switching)#xconnect 2.2.2.2 203 pw-class PW

VRRP Special Configuration Note

雖然HSRP是Cisco專屬指令,不過大部份的人可能還是比較熟悉HSRP,相較於VRRP,個人覺得HSRP指令比較直覺,VRRP就有點繞舌的感覺了。

首先最麻煩的是認證,VRRP要設定認證,必須先建立key chain(HSRP直接在指令後就可以使用password,只支援純文字是其缺點):


R1(config)#key chain TEST
R1(config-keychain)#key 1
R1(config-keychain-key)#key-string PASS

R1(config)#int f0/0
R1(config-if)#vrrp 10 authentication md5 key-chain TEST

R2(config)#key chain TEST
R2(config-keychain)#key 1
R2(config-keychain-key)#key-string PASS

R2(config)#int f0/0
R2(config-if)#vrrp 1 authentication md5 key-chain TEST


另外一個比較特別的則是VRRP的Monitoring(Track),必須先在Global Configuration中設定Track profile才能apply至interface上,跟HSRP直接在該特定interface下直接設定不同:


R1(config)#track 100 interace f0/0 line-protocol

R1(config)#int f0/0
R1(config-if)#vrrp 1 track 100 decrement 100