○cisco simulatorの続き
とりあえず、PE-P-PEのRouter間はlabel switchでルーティングしてみます。
構成図はこちら
(前提)
MPLSネットワークを確立するため、リンクステートなIGP(OSPF/IS-IS)でpureIP網を構成する
必要があります。
*IGPで、LDP or RSVPメッセージを配布してもらいます。
MPLSをenableにして、OSPFでpureIP網を構成します。
○R1の設定
* MPLSを使用するときは、cef(Cisco Express Forwarding)をenableにする
R1(config)# ip cef
* MPLSコアを接続するinterfaceでmplsをenableに
R1(config-if)# mpls ip
* ospf の設定 (loopback + Labelswitchさせるip-interface)
R1(config)# router ospf 100
R1(config-router)# router-id 10.10.10.1
R1(config-router)# log-adjacency-changes
R1(config-router)# redistribute connected subnets < -- CE-CEの到達性を確保するために一時的にospfへredis
R1(config-router)# network 10.10.10.0 0.0.0.255 area 0
R1(config-router)# network 192.168.12.0 0.0.0.255 area 0
R1(config-router)# network 192.168.13.0 0.0.0.255 area 0
R1(config-router)# network 192.168.14.0 0.0.0.255 area 0
上記の設定を、R1-R4(P,PE-Router)に設定します。
で、動作確認をしていきます。
* mpls-inerfaceを確認する
R1# show mpls interface
Interface IP Tunnel BGP Static Operational
Serial1/0 Yes (ldp) No No No Yes
Serial1/1 Yes (ldp) No No No Yes
* ldp neighborを確認する
R1# show mpls ldp neighbor
Peer LDP Ident: 10.10.10.4:0; Local LDP Ident 10.10.10.1:0
TCP connection: 10.10.10.4.65201 - 10.10.10.1.646
State: Oper; Msgs sent/rcvd: 37/37; Downstream
Up time: 00:19:50
LDP discovery sources:
Serial1/0, Src IP addr: 192.168.14.4
Addresses bound to peer LDP Ident:
192.168.24.4 10.10.10.4 192.168.34.4 192.168.14.4
Peer LDP Ident: 10.10.10.2:0; Local LDP Ident 10.10.10.1:0
TCP connection: 10.10.10.2.28725 - 10.10.10.1.646
State: Oper; Msgs sent/rcvd: 37/37; Downstream
Up time: 00:19:48
LDP discovery sources:
Serial1/1, Src IP addr: 192.168.12.2
Addresses bound to peer LDP Ident:
192.168.24.2 10.10.10.2 192.168.12.2 192.168.23.2
"Peer LDP Ident"として、隣接RouterのLoopbackがみえています。
* LIB(Label information base)と呼ばれる、やりとりしたlabelの情報を確認する
R1# show mpls ldp bindings
lib entry: 10.10.10.1/32, rev 8
local binding: label: imp-null
remote binding: lsr: 10.10.10.4:0, label: 18
remote binding: lsr: 10.10.10.2:0, label: 21
lib entry: 10.10.10.2/32, rev 14
local binding: label: 18
remote binding: lsr: 10.10.10.4:0, label: 17
remote binding: lsr: 10.10.10.2:0, label: imp-null
lib entry: 10.10.10.3/32, rev 12
local binding: label: 17
remote binding: lsr: 10.10.10.4:0, label: 16
remote binding: lsr: 10.10.10.2:0, label: 16
・・・省略
* MPLSのFIBとなるLFIB(label fowarding information base)を確認します
PE-R1#show mpls forwarding-table
Local Outgoing Prefix Bytes Label Outgoing Next Hop
Label Label or Tunnel Id Switched interface
16 Pop Label 10.10.10.4/32 0 Se1/0 point2point
17 16 10.10.10.3/32 0 Se1/1 point2point
16 10.10.10.3/32 0 Se1/0 point2point
18 Pop Label 10.10.10.2/32 44 Se1/1 point2point
19 Pop Label 192.168.34.0/24 0 Se1/0 point2point
20 Pop Label 192.168.24.0/24 0 Se1/1 point2point
Pop Label 192.168.24.0/24 0 Se1/0 point2point
21 Pop Label 192.168.23.0/24 0 Se1/1 point2point
22 18 192.168.13.0/24 0 Se1/1 point2point
20 192.168.13.0/24 0 Se1/0 point2point
23 19 192.168.36.0/24 0 Se1/1 point2point *1)
22 192.168.36.0/24 0 Se1/0 point2point
"Local Label" -- > 自分がつけたlabel
"Outgoing Label" -- > 転送するときに付与するlabel,Pop Labelはlabelをはずして転送
"Prefix or Tunnel"- > 対象のprefix or tunnel
"Out-int" -- > どのinterfaceから転送するか
Ciscoだと、defaultでPHP(Penultimate Hop Popping)が有効になっていて、
last-hop-Routerの手前でlabelをはずします。
LSPでQoS制御するなどした場合にlast-hop-Routerで利かないというデメリットがあります。
R(config)# mpls ldp explicit-null
というオプションで回避可能
* 実際に"Label Switch"でルーティングされていることを確認します。
R2# debug mpls packet
としてから CEであるR5→R6へpingをなげます。
R5# ping 192.168.36.6
R2#
*Sep 7 16:51:13.303: MPLS turbo: Se1/0: rx: Len 108 Stack {19 0 254} - ipv4 data
*Sep 7 16:51:13.375: MPLS turbo: Se1/0: rx: Len 108 Stack {19 0 254} - ipv4 data
*Sep 7 16:51:13.403: MPLS turbo: Se1/0: rx: Len 108 Stack {19 0 254} - ipv4 data
R1のLFIB *1)をみてください。
"prefix" -- > 192.168.36.0/24
"Out-int" -- > Se1/1 (R2のinterface)
"Outgoing Label" -- > 19
R2のSe1/0 rx で19のLabel-packetを受信していることが確認できます。
ここまでで、ようやくLabel Switchingができました。
皆さんご承知のとおり、pureIPをルーティングしているだけでは、MPLSのメリットがありません。
(labelでroutingしなくても結果は同じだ)
次回から、
・MPLS VPN (L3/L2)
point L3はPEでVRFを動かして、Customer経路のRoutingTableをわけます。
L2ではPE間でtunnelを設定して、connectするimageで
・RSVP-TE
point tunnelを設定して、経路と帯域幅を指定して、traffic ngineeringします。
に対応していきます。
○おまけ
@ITさんの古い記事です。基本の復習は大事
http://www.atmarkit.co.jp/fnetwork/tokusyuu/11mpls/mpls01.html
Share your thoughts
○cisco simulatorの続き
以下の構成で、仮想ルータを起動する。
dynagenの.netファイルを以下に設定して起動する。
# Working with multiple dynamips servers
# A linux server
[localhost]
autostart = false
ghostios = true
sparsemem = true
[[7200]]
image = /var/cisco/ios/c7200.bin
npe = npe-400
ram = 160
[[ROUTER R1]]
idlepc = 0x62fc6278
model = 7200
S1/1 = R2 S1/0
F0/0 = R3 F0/0
[[ROUTER R2]]
idlepc = 0x62fc6278
model = 7200
S1/1 = R3 S1/0
F0/0 = R4 F0/0
[[ROUTER R3]]
idlepc = 0x62fc6278
model = 7200
S1/1 = R4 S1/0
[[ROUTER R4]]
idlepc = 0x62fc6278
model = 7200
S1/1 = R1 S1/0
[[ROUTER R5]]
idlepc = 0x62fc6278
model = 7200
F0/0 = R1 F0/1
[[ROUTER R6]]
idlepc = 0x62fc6278
model = 7200
F0/0 = R3 F0/1
$ sudo dynagen /etc/dynagen/c7200-6.net
Reading configuration file...
Network successfully loaded
Dynagen management console for Dynamips and Pemuwrapper 0.11.0
Copyright (c) 2005-2007 Greg Anuzelli, contributions Pavel Skovajsa
=> list
Name Type State Server Console
R1 7200 running localhost:7200 2000
R2 7200 running localhost:7200 2001
R3 7200 running localhost:7200 2002
R4 7200 running localhost:7200 2003
R5 7200 running localhost:7200 2004
R6 7200 running localhost:7200 2005
ルータが起動したら、telnetしていつもどおり設定
R1のconfigを抜粋
!
interface FastEthernet0/0
description To:R3
ip address 192.168.13.1 255.255.255.0
duplex auto
speed auto
!
!
interface FastEthernet0/1
description To:R5
ip address 192.168.15.1 255.255.255.0
duplex auto
speed auto
!
!
interface Serial1/0
description To:R4
ip address 192.168.14.1 255.255.255.0
no fair-queue
serial restart-delay 0
!
!
interface Serial1/1
description To:R2
ip address 192.168.12.1 255.255.255.0
serial restart-delay 0
とりあえずIPつけただけです。
PE-R1#show ip interface brief
Interface IP-Address OK? Method Status Protocol
FastEthernet0/0 192.168.13.1 YES NVRAM up up
FastEthernet0/1 192.168.15.1 YES manual up up
Serial1/0 192.168.14.1 YES NVRAM up up
Serial1/1 192.168.12.1 YES NVRAM up up
Serial1/2 unassigned YES NVRAM administratively down down
Serial1/3 unassigned YES NVRAM administratively down down
Serial1/4 unassigned YES NVRAM administratively down down
Serial1/5 unassigned YES NVRAM administratively down down
Serial1/6 unassigned YES NVRAM administratively down down
Serial1/7 unassigned YES NVRAM administratively down down
Loopback0 10.10.10.1 YES NVRAM up up
各intがupしていること
で、対向int-ipまでpingが通るところまで確認
PE-R1#ping 192.168.13.3 repeat 10
Type escape sequence to abort.
Sending 10, 100-byte ICMP Echos to 192.168.13.3, timeout is 2 seconds:
!!!!!!!!!!
Success rate is 100 percent (10/10), round-trip min/avg/max = 4/8/16 ms
PE-R1#ping 192.168.14.4 repeat 10
Type escape sequence to abort.
Sending 10, 100-byte ICMP Echos to 192.168.14.4, timeout is 2 seconds:
!!!!!!!!!!
Success rate is 100 percent (10/10), round-trip min/avg/max = 4/75/668 ms
PE-R1#
次回R1-R4でMLPSネットワークを構成する。ここからが本番
(2012/09/7追記)
MPLS網で、CE-PE-P-PE-CEのpathを明示的に構成するため、R1 F0/0 <--> R3 F0/0のlinkをshutdownしました。
Share your thoughts
時間ができてしまったので、Ciscoのシュミレータに挑戦する。
必要なパッケージは
dynmips – IOSをloadするもの
dynagen – dynampisを管理するUIツール
IOS – 正規ルートで入手する
(対応するIOSに制限あり、ルータモードのみ対応。switchはだめ)
○ dynagen をinstallする
$ cd /usr/local/src
⇒ sourceとってくる
$ sudo wget http://sourceforge.net/projects/dyna-gen/files/dynagen%20source%20_%20Linux/dynagen%200.11.0/dynagen-0.11.0.tar.gz/download
$ sudo tar -xzvf dynagen-0.11.0.tar.gz
⇒ slinkはっておく
$ ls -l /usr/local/src/dynagen-0.11.0/dynagen /usr/sbin/dynagen
⇒ 起動してみる
$ sudo dynagen
Dynagen management console for Dynamips and Pemuwrapper 0.11.0
Copyright (c) 2005-2007 Greg Anuzelli, contributions Pavel Skovajsa
=> help
Documented commands (type help ):
========================================
capture confreg cpuinfo export hist list py save show suspend
clear console end filter idlepc no reload send start telnet
conf copy exit help import push resume shell stop ver
=>
○ dynmips をinstallする
⇒ sourceとってくる
$ sudo wget http://en.sourceforge.jp/projects/sfnet_gns-3/downloads/Dynamips/0.2.8-RC2/dynamips-0.2.8-RC2-amd64.bin/
⇒ slinkはっておく
$ ls -l /usr/local/src/dynamips-0.2.8-RC2-amd64.bin /usr/sbin/dynamips
⇒ 起動してみる (TCP 7200listen)
$ sudo dynamips -H 7200 &
[1] 8103
$ Cisco Router Simulation Platform (version 0.2.8-RC2-amd64)
Copyright (c) 2005-2007 Christophe Fillot.
Build date: Oct 14 2007 10:46:52
Hypervisor TCP control server started (port 7200).
⇒ 7200 でlistenしてる
$ netstat -anp | grep 7200
tcp 0 0 0.0.0.0:7200 0.0.0.0:* LISTEN
○ ルータを起動してみる
$ sudo dynagen /etc/dynagen/c7200-4.net
Reading configuration file...
Shutdown in progress...
Shutdown completed.
*** Warning: Starting R1 with no idle-pc value
CPU0: carved JIT exec zone of 64 Mb into 2048 pages of 32 Kb.
C7200 instance 'R1' (id 0):
VM Status : 0
RAM size : 160 Mb
IOMEM size : 0 Mb
NVRAM size : 128 Kb
NPE model : npe-400
Midplane : vxr
IOS image : /var/cisco/ios/c7200-advipservicesk9-mz.150-1.M.bin
Loading ELF file '/var/cisco/ios/c7200-advipservicesk9-mz.150-1.M.bin'...
ELF entry point: 0x80008000
C7200 'R1': starting simulation (CPU0 PC=0xffffffffbfc00000), JIT enabled.
Network successfully loaded
Dynagen management console for Dynamips and Pemuwrapper 0.11.0
Copyright (c) 2005-2007 Greg Anuzelli, contributions Pavel Skovajsa
⇒ 動作しているRoterのlistを出す
=> list
Name Type State Server Console
R1 7200 running localhost:7200 2000
⇒ 別のconsoleで
$ telnet localhsot 2000
⇒ 普段のcisco router consoleがでてくれば成功です。
○ おまけ CPU負荷をさげる
$ sudo dynagen /etc/dynagen/c7200-4.net
Reading configuration file...
*** Warning: Starting R1 with no idle-pc value
Network successfully loaded
Dynagen management console for Dynamips and Pemuwrapper 0.11.0
Copyright (c) 2005-2007 Greg Anuzelli, contributions Pavel Skovajsa
=> list
Name Type State Server Console
R1 7200 running localhost:7200 2000
=> idlepc get R1
Please wait while gathering statistics...
1: 0x60191800 [202]
2: 0x62fc6268 [168]
3: 0x62fc6274 [200]
4: 0x62fc6278 [430]
Potentially better idlepc values marked with "*"
Enter the number of the idlepc value to apply [1-4] or ENTER for no change: 1
Applied idlepc value 0x60191800 to R1
=> idlepc save R1
idlepc value saved to section: ROUTER R1
- - -
⇒ /etc/dynagen/c7200-4.txtに
[[ROUTER R1]]
+ idlepc = 0x60191800
が追記されていること
Share your thoughts
たまたま、話題にあがったので、専門外だがSIPとNATの関係についてしらべた。
SIPはNAT超えできませんよ。ということくらいは知っていたので、プロトコルヘッダに
IP(or Port)を埋め込むんだろうくらいは想像できていたのだが、
SDP(Session Description Protocol)といわれるメッセージ・ボディに埋め込んでいるので、
IP/TCP/UDPのNAT箱では戻りパケットに対応できない。が正解のようす。
SSG(Netscreen)/YAMAHA-RTでは、それぞれALG/SIP-NAT機能で、DPIして、SDPも一緒に書き換えてしまうことができるようです。
規格ものでは、
STUN(Simple Traversal of UDP through NAT),TURN(Traversal Using Relay NAT)がNAT超えを吸収するGateweyとして動作するようす。
<STUN,TURNの参考> SIPのNATごえ
SIPはNGNでも採用されているので、きちんと勉強しないと。
Share your thoughts
MPLS Jpan 2012が東京大学で開催されます。
OpenFlowのセッションもあるようで、MPLSにかぎらなくキャリアーーなNetworkingについて何でもてきなカテゴリになりつつあります。
(過去のセッションはガッツリMPLS)
セッションメンバ見る限りJANOGよりさらに濃いいい面々のようで。
レガシなサービスもラベルスイッチでマイグレーションしようとしてる雰囲気があるので、ISPな人はまだまだ要注目だと思いますよ。
といいつつ、参加したことないのです。微妙な時期だけど都合あえば是非いきたい。
Share your thoughts