ことなかれblog 備忘録

何事もなく無事でありますように

cisco simulator – mpls

○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


cisco simulator – その2

○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しました。


cisco simulator – dynamips

時間ができてしまったので、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
が追記されていること


SIPとNAT

たまたま、話題にあがったので、専門外だが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でも採用されているので、きちんと勉強しないと。

 


MPLS Japan 2012

MPLS Jpan 2012が東京大学で開催されます。

OpenFlowのセッションもあるようで、MPLSにかぎらなくキャリアーーなNetworkingについて何でもてきなカテゴリになりつつあります。

(過去のセッションはガッツリMPLS)

セッションメンバ見る限りJANOGよりさらに濃いいい面々のようで。

レガシなサービスもラベルスイッチでマイグレーションしようとしてる雰囲気があるので、ISPな人はまだまだ要注目だと思いますよ。

といいつつ、参加したことないのです。微妙な時期だけど都合あえば是非いきたい。