vSRXを活用した、JUNOSのお勉強まとめ【OSPF + MPLS編】
今回も、引き続き、JUNOSのお勉強メモです。
ttsubo.hatenablog.com
◼︎ vSRXトポロジ構成
今回は、vSRX3台構成としました。
[ AS: 65000 ] [ AS: 65000 ] 10.0.0.1 10.0.0.2 10.0.0.3 +-----+ +--------+ +--------+ +--------+ +-----+ | | 172.16.0.0/30 | | 192.168.0.0/30 | | 192.168.1.0/30 | | 172.16.1.0/30 | | 10.0.0.1/24 | pc1 | +-----------+ | vSRX-1 | +------------+ | vSRX-2 | +------------+ | vSRX-3 | +-----------+ | pc2 | 10.0.1.1/24 | | .1 .2 | | .1 .2 | | .1 .2 | | .1 .2 | | 10.0.2.1/24 +-----+ +--------+ +--------+ +--------+ +-----+ : : : : : : : : : < --------- > : : < ---------- > : : < ---------- > : : < --------- > : static : ospf ospf : static : : : : : < ------------------------------------ > : i-BGP
◼︎ JUNOSルーティング設定
複数台のvSRX間でIP通信が可能なように、各種ルーティング設定を行います。
(1) OSPF基本設定
今回は、すべてのvSRXルータをエリア0に収容する形態としました。
1. protocolsを設定する
まずは、vSRX-1の場合、ge-0/0/1.0 のインタフェースをOSPFエリア0に収容するには、次のようにコンフィグ設定します。
なお、ループバックでOSPFを有効にする場合には、パッシブインタフェースとして設定するのが一般的だそうです。
root@vSRX-1# set protocols ospf area 0.0.0.0 interface ge-0/0/1.0 root@vSRX-1# set protocols ospf area 0.0.0.0 interface lo0.0 passive root@vSRX-1# show | compare [edit] + protocols { + ospf { + area 0.0.0.0 { + interface ge-0/0/1.0; + interface lo0.0 { + passive; + } + } + } + } root@vSRX-1# commit
2. OSPF隣接関係の状態を確認しておく
すべてのvSRXルータでも同様に、OSPFエリア0に収容するインタフェースを有効にします。
vSRX-1で、OSPF隣接状態を確認してみます。
あと、ループバックインタフェースでもOSPFが有効になっていることを確認しておきます。
root@vSRX-1> show ospf neighbor Address Interface State ID Pri Dead 192.168.0.2 ge-0/0/1.0 Full 10.0.0.2 128 33 root@vSRX-1> show ospf interface Interface State Area DR ID BDR ID Nbrs ge-0/0/1.0 BDR 0.0.0.0 10.0.0.2 10.0.0.1 1 lo0.0 DRother 0.0.0.0 0.0.0.0 0.0.0.0 0
そして、vSRX-2でも、OSPF隣接状態を確認してみます。
root@vSRX-2> show ospf neighbor Address Interface State ID Pri Dead 192.168.0.1 ge-0/0/0.0 Full 10.0.0.1 128 35 192.168.1.2 ge-0/0/1.0 Full 10.0.0.3 128 39 root@vSRX-2> show ospf interface Interface State Area DR ID BDR ID Nbrs ge-0/0/0.0 DR 0.0.0.0 10.0.0.2 10.0.0.1 1 ge-0/0/1.0 BDR 0.0.0.0 10.0.0.3 10.0.0.2 1 lo0.0 DRother 0.0.0.0 0.0.0.0 0.0.0.0 0
さらに、vSRX-3でも、OSPF隣接状態を確認しておきます。
root@vSRX-3> show ospf neighbor Address Interface State ID Pri Dead 192.168.1.1 ge-0/0/0.0 Full 10.0.0.2 128 32 root@vSRX-3> show ospf interface Interface State Area DR ID BDR ID Nbrs ge-0/0/0.0 DR 0.0.0.0 10.0.0.3 10.0.0.2 1 lo0.0 DRother 0.0.0.0 0.0.0.0 0.0.0.0 0
最後に、OSPFプロトコルによって学習したルーティング情報を確認しておきます。
root@vSRX-1> show route protocol ospf inet.0: 9 destinations, 9 routes (9 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 10.0.0.2/32 *[OSPF/10] 00:21:26, metric 1 > to 192.168.0.2 via ge-0/0/1.0 10.0.0.3/32 *[OSPF/10] 00:21:26, metric 2 > to 192.168.0.2 via ge-0/0/1.0 192.168.1.0/30 *[OSPF/10] 00:21:26, metric 2 > to 192.168.0.2 via ge-0/0/1.0 224.0.0.5/32 *[OSPF/10] 00:21:41, metric 1 MultiRecv
(2) BGP基本設定
1. BGP Peer相手となる対向vSRXとの疎通性を確認しておく
まず、vSRX-1とvSRX-3の間で、ループバックインタフェース間での疎通性を確認しておきます。
root@vSRX-1> ping 10.0.0.3 source 10.0.0.1 count 5 PING 10.0.0.3 (10.0.0.3): 56 data bytes 64 bytes from 10.0.0.3: icmp_seq=0 ttl=63 time=3.796 ms 64 bytes from 10.0.0.3: icmp_seq=1 ttl=63 time=1.610 ms 64 bytes from 10.0.0.3: icmp_seq=2 ttl=63 time=1.324 ms 64 bytes from 10.0.0.3: icmp_seq=3 ttl=63 time=1.154 ms 64 bytes from 10.0.0.3: icmp_seq=4 ttl=63 time=1.340 ms --- 10.0.0.3 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 1.154/1.845/3.796/0.986 ms
問題なく、ping動作しております。
2. routing-optionを設定する
ここからは、ほぼ前回の記事と同じ作業になります。
BGP Peerアドレスとして、ループバックインタフェースを指定する点が異なります。
root@vSRX-1# set routing-options router-id 10.0.0.1 autonomous-system 65000 root@vSRX-1# show | compare [edit] + routing-options { + router-id 10.0.0.1; + autonomous-system 65000; + } root@vSRX-1# commit
3. protocolsを設定する
root@vSRX-1# set protocols bgp group INTERNAL type internal local-address 10.0.0.1 neighbor 10.0.0.3 root@vSRX-1# show | compare [edit protocols] + bgp { + group INTERNAL { + type internal; + local-address 10.0.0.1; + neighbor 10.0.0.3; + } + } root@vSRX-1# commit
4. BGP Peerの状態を確認しておく
root@vSRX-1> show bgp neighbor Peer: 10.0.0.3+57167 AS 65000 Local: 10.0.0.1+179 AS 65000 Type: Internal State: Established Flags: <Sync> Last State: OpenConfirm Last Event: RecvKeepAlive Last Error: None Options: <Preference LocalAddress Refresh> Local Address: 10.0.0.1 Holdtime: 90 Preference: 170 Number of flaps: 0 Peer ID: 10.0.0.3 Local ID: 10.0.0.1 Active Holdtime: 90 Keepalive Interval: 30 Group index: 0 Peer index: 0 BFD: disabled, down NLRI for restart configured on peer: inet-unicast NLRI advertised by peer: inet-unicast NLRI for this session: inet-unicast Peer supports Refresh capability (2) Stale routes from peer are kept for: 300 Peer does not support Restarter functionality NLRI that restart is negotiated for: inet-unicast NLRI of received end-of-rib markers: inet-unicast NLRI of all end-of-rib markers sent: inet-unicast Peer supports 4 byte AS extension (peer-as 65000) Peer does not support Addpath Table inet.0 Bit: 10000 RIB State: BGP restart is complete Send state: in sync Active prefixes: 0 Received prefixes: 0 Accepted prefixes: 0 Suppressed due to damping: 0 Advertised prefixes: 0 Last traffic (seconds): Received 21 Sent 21 Checked 21 Input messages: Total 3 Updates 1 Refreshes 0 Octets 101 Output messages: Total 3 Updates 0 Refreshes 0 Octets 120 Output Queue[0]: 0 (inet.0, init-unicast)
5. Export policy適用
こちらも、前回と同様に、Export policy作成して、適用します。
自分が保持している経路を、BGP Peerに対して、アドバタイズするには、Export policyを作成して、BGPピアのGroupに適用する必要があるようです。
root@vSRX-1# set policy-options policy-statement export-bgp term 1 from route-filter 172.16.0.0/30 exact root@vSRX-1# set policy-options policy-statement export-bgp term 1 then accept root@vSRX-1# set protocols bgp group INTERNAL export export-bgp root@vSRX-1# show | compare [edit protocols bgp group INTERNAL] + export export-bgp; [edit] + policy-options { + policy-statement export-bgp { + term 1 { + from { + route-filter 172.16.0.0/30 exact; + } + then accept; + } + } + } root@vSRX-1# commit
すると、想定どおりに、自分が保持している経路をアドバタイズするようになりました。
root@vSRX-1> show route advertising-protocol bgp 10.0.0.3 inet.0: 9 destinations, 9 routes (9 active, 0 holddown, 0 hidden) Prefix Nexthop MED Lclpref AS path * 172.16.0.0/30 Self 100 I
さらに、対向側(vSRX-3ルータ)でも、Export policy適用してみると、アドバタイズされた経路を受信できるようになりました。
root@vSRX-1> show route receive-protocol bgp 10.0.0.3 inet.0: 10 destinations, 10 routes (10 active, 0 holddown, 0 hidden) Prefix Nexthop MED Lclpref AS path * 172.16.1.0/30 10.0.0.3 100 I
今回は、さらに、vSRX-3側でスタティック経路も追加しておきます。
root@vSRX-3# set routing-options static route 10.0.0.0/24 next-hop 172.16.1.2 root@vSRX-3# set routing-options static route 10.0.1.0/24 next-hop 172.16.1.2 root@vSRX-3# set routing-options static route 10.0.2.0/24 next-hop 172.16.1.2 root@vSRX-3# show | compare [edit routing-options] + static { + route 10.0.0.0/24 next-hop 172.16.1.2; + route 10.0.1.0/24 next-hop 172.16.1.2; + route 10.0.2.0/24 next-hop 172.16.1.2; + } root@vSRX-3# commit
ただし、このままでは、vSRX-1側では、スタティック経路を受信しておりません。
vSRX-3側で保持しているスタティック経路を、BGP再配布するには、Export policyを作成して、BGPピアのGroupに適用する必要があるようです。
root@vSRX-1> show route receive-protocol bgp 10.0.0.3 inet.0: 10 destinations, 10 routes (10 active, 0 holddown, 0 hidden) Prefix Nexthop MED Lclpref AS path * 172.16.1.0/30 10.0.0.3 100 I
6. Export policy再適用
スタティック経路のBGP再配布に関わるExport policy作成して、適用します。
root@vSRX-3# set policy-options prefix-list PREFIX 10.0.0.0/24 root@vSRX-3# set policy-options prefix-list PREFIX 10.0.1.0/24 root@vSRX-3# set policy-options prefix-list PREFIX 10.0.2.0/24 root@vSRX-3# set policy-options policy-statement export-bgp term 1 from prefix-list PREFIX root@vSRX-3# set policy-options policy-statement export-bgp term 1 then accept root@vSRX-3# show | compare [edit policy-options] + prefix-list PREFIX { + 10.0.0.0/24; + 10.0.1.0/24; + 10.0.2.0/24; + } [edit policy-options policy-statement export-bgp term 1 from] + prefix-list PREFIX; root@vSRX-3# commit
この状態でのpolicy-options設定内容は、こんな感じになっています。
policy-options { prefix-list PREFIX { 10.0.0.0/24; 10.0.1.0/24; 10.0.2.0/24; } policy-statement export-bgp { term 1 { from { route-filter 172.16.1.0/30 exact; prefix-list PREFIX; } then accept; } } }
すると、vSRX-1ルータ側では、アドバタイズされたスタティック経路も受信できるようになりました。
root@vSRX-1> show route receive-protocol bgp 10.0.0.3 inet.0: 13 destinations, 13 routes (13 active, 0 holddown, 0 hidden) Prefix Nexthop MED Lclpref AS path * 10.0.0.0/24 172.16.1.2 100 I * 10.0.1.0/24 172.16.1.2 100 I * 10.0.2.0/24 172.16.1.2 100 I * 172.16.1.0/30 10.0.0.3 100 I
ここまでは、順調ですね。
(3) エンド端末間での疎通確認
それでは、OSPF, BGPの基本設定も完了したので、最後に、エンドエンド端末間でpingをうってみましょう。
tsubo@pc1:~$ ping 172.16.1.2 PING 172.16.1.2 (172.16.1.2) 56(84) bytes of data. ^C --- 172.16.1.2 ping statistics --- 15 packets transmitted, 0 received, 100% packet loss, time 13999ms
残念ながら、pingが成功しません!
ここでの課題は、vSRX-2では、"172.16.1.0/30"のルーティング情報を保持しておりません。
よって、ICMP Echo Requestのパケットを受信しても、vSRX-3に転送せずに、ドロップしてしまった!
こちらのSlideShareが参考になると思います。
(4) MPLS / LDP基本設定
早速、先ほどの課題解決のために、MPLS / LDPを設定します。
1. interfacesを設定する
root@vSRX-1# set interfaces ge-0/0/1 unit 0 family mpls root@vSRX-1# show | compare [edit interfaces ge-0/0/1 unit 0] + family mpls; root@vSRX-1# commit
2. protocolsを設定する
MPLSも有効にします。
root@vSRX-1# set protocols mpls interface ge-0/0/1.0 root@vSRX-1# show | compare [edit protocols] + mpls { + interface ge-0/0/1.0; + } root@vSRX-1# commit
LDPも有効にします。
root@vSRX-1# set protocols ldp interface ge-0/0/1.0 [edit] root@vSRX-1# show | compare [edit protocols] + ldp { + interface ge-0/0/1.0; + } [edit] root@vSRX-1# commit commit complete
3. LDP隣接関係の状態を確認しておく
すべてのvSRXルータでも同様に、MPLS / LDPを設定します。
そして、vSRX-1で、LDP隣接状態を確認してみます。
root@vSRX-1> show ldp neighbor Address Interface Label space ID Hold time 192.168.0.2 ge-0/0/1.0 10.0.0.2:0 12 root@vSRX-1> show ldp interface Interface Label space ID Nbr count Next hello ge-0/0/1.0 10.0.0.1:0 1 4
さらに、vSRX-2でも、LDP隣接状態を確認してみます。
root@vSRX-2> show ldp neighbor Address Interface Label space ID Hold time 192.168.0.1 ge-0/0/0.0 10.0.0.1:0 12 192.168.1.2 ge-0/0/1.0 10.0.0.3:0 14 root@vSRX-2> show ldp interface Interface Label space ID Nbr count Next hello ge-0/0/0.0 10.0.0.2:0 1 1 ge-0/0/1.0 10.0.0.2:0 1 2
vSRX-3でも、OSPF隣接状態を確認しておきます。
root@vSRX-3> show ldp neighbor Address Interface Label space ID Hold time 192.168.1.1 ge-0/0/0.0 10.0.0.2:0 10 root@vSRX-3> show ldp interface Interface Label space ID Nbr count Next hello ge-0/0/0.0 10.0.0.3:0 1 3
LDPプロトコルによって学習したルーティング情報を確認しておきます。
root@vSRX-1> show route protocol ldp inet.0: 13 destinations, 13 routes (13 active, 0 holddown, 0 hidden) inet.3: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 10.0.0.2/32 *[LDP/9] 00:14:15, metric 1 > to 192.168.0.2 via ge-0/0/1.0 10.0.0.3/32 *[LDP/9] 00:13:31, metric 1 > to 192.168.0.2 via ge-0/0/1.0, Push 299792 mpls.0: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 299776 *[LDP/9] 00:14:15, metric 1 > to 192.168.0.2 via ge-0/0/1.0, Pop 299776(S=0) *[LDP/9] 00:14:15, metric 1 > to 192.168.0.2 via ge-0/0/1.0, Pop 299792 *[LDP/9] 00:13:31, metric 1 > to 192.168.0.2 via ge-0/0/1.0, Swap 299792
(5) エンド端末間での疎通確認
それでは、LDPの基本設定も完了したので、もう一度、エンドエンド端末間でpingをうってみましょう。
tsubo@pc1:~$ ping 172.16.1.2 PING 172.16.1.2 (172.16.1.2) 56(84) bytes of data. 64 bytes from 172.16.1.2: icmp_seq=1 ttl=61 time=0.758 ms 64 bytes from 172.16.1.2: icmp_seq=2 ttl=61 time=0.728 ms 64 bytes from 172.16.1.2: icmp_seq=3 ttl=61 time=0.758 ms 64 bytes from 172.16.1.2: icmp_seq=4 ttl=61 time=0.828 ms 64 bytes from 172.16.1.2: icmp_seq=5 ttl=61 time=55.9 ms ^C --- 172.16.1.2 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 3999ms rtt min/avg/max/mdev = 0.728/11.812/55.992/22.090 ms||<
今回は、pingが成功しましたね!
この時、pc2側でtcpdumpを動作させて、パケットモニタリングしておきます。
root@pc2:~# tcpdump -i eth1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes 17:29:11.583949 IP 172.16.0.1 > 172.16.1.2: ICMP echo request, id 2198, seq 1, length 64 17:29:11.583983 IP 172.16.1.2 > 172.16.0.1: ICMP echo reply, id 2198, seq 1, length 64 17:29:12.586912 IP 172.16.0.1 > 172.16.1.2: ICMP echo request, id 2198, seq 2, length 64 17:29:12.586940 IP 172.16.1.2 > 172.16.0.1: ICMP echo reply, id 2198, seq 2, length 64 17:29:13.588175 IP 172.16.0.1 > 172.16.1.2: ICMP echo request, id 2198, seq 3, length 64 17:29:13.588204 IP 172.16.1.2 > 172.16.0.1: ICMP echo reply, id 2198, seq 3, length 64 17:29:14.588207 IP 172.16.0.1 > 172.16.1.2: ICMP echo request, id 2198, seq 4, length 64 17:29:14.588240 IP 172.16.1.2 > 172.16.0.1: ICMP echo reply, id 2198, seq 4, length 64 17:29:14.974839 IP 192.168.105.1.17500 > 192.168.105.255.17500: UDP, length 131 17:29:15.590265 IP 172.16.0.1 > 172.16.1.2: ICMP echo request, id 2198, seq 5, length 64 17:29:15.590293 IP 172.16.1.2 > 172.16.0.1: ICMP echo reply, id 2198, seq 5, length 64
こちらも期待通り、ICMP Echo Request / Replyが観測できました。
さらに、pc2側の"10.0.0.1"に対して、pingをうってみましょう。
tsubo@pc1:~$ ping 10.0.0.1 PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.273 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.353 ms 64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.328 ms 64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=0.312 ms 64 bytes from 10.0.0.1: icmp_seq=5 ttl=64 time=0.264 ms ^C --- 10.0.0.1 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 3999ms rtt min/avg/max/mdev = 0.264/0.306/0.353/0.033 ms
こちらも、pingは、成功しました。
この時、pc2側でtcpdumpを動作させて、パケットモニタリングしておきます。
root@pc2:~# tcpdump -i eth1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes ^C 0 packets captured 0 packets received by filter 0 packets dropped by kernel
あれっ?
こちらは、期待に反して、ICMP Echo Request / Replyが観測できません。
pc2には、ICMP Echo Requestパケットが届いていないのに、pc1では、ICMP Echo Replyを受信してしまっている。
という、奇妙に現象が発生してしまいました。
◼︎ 最終的なコンフィグ内容の確認
root@vSRX-1> show configuration | display set set version 15.1X49-D15.4 set system host-name vSRX-1 set system time-zone Asia/Tokyo set system root-authentication encrypted-password "$1$XvI2vVPR$7lnJdb5gNeg4zql8lZ/1Q1" set system login user tsubo uid 2000 set system login user tsubo class super-user set system login user tsubo authentication encrypted-password "$1$THS.KlMg$SvjUk8SUxyDY3rDRGT3hK/" set system services ssh root-login allow set system services web-management http interface fxp0.0 set system syslog user * any emergency set system syslog file messages any any set system syslog file messages authorization info set system syslog file interactive-commands interactive-commands any set system license autoupdate url https://ae1.juniper.net/junos/key_retrieval set security forwarding-options family inet6 mode packet-based set security forwarding-options family mpls mode packet-based set interfaces ge-0/0/0 unit 0 family inet address 172.16.0.2/30 set interfaces ge-0/0/1 unit 0 family inet address 192.168.0.1/30 set interfaces ge-0/0/1 unit 0 family mpls set interfaces fxp0 unit 0 set interfaces lo0 unit 0 family inet address 10.0.0.1/32 set routing-options router-id 10.0.0.1 set routing-options autonomous-system 65000 set protocols mpls interface ge-0/0/1.0 set protocols bgp group INTERNAL type internal set protocols bgp group INTERNAL local-address 10.0.0.1 set protocols bgp group INTERNAL export export-bgp set protocols bgp group INTERNAL neighbor 10.0.0.3 set protocols ospf area 0.0.0.0 interface ge-0/0/1.0 set protocols ospf area 0.0.0.0 interface lo0.0 passive set protocols ldp interface ge-0/0/1.0 set policy-options policy-statement export-bgp term 1 from route-filter 172.16.0.0/30 exact set policy-options policy-statement export-bgp term 1 then accept
◼︎ 最後に
先ほどの課題は、次回、考察したいと思います。
以上です。