はじめに
いまのプロジェクトで、Juniper MX をポータルからコントロールするような、いわゆる SDN 的な話がでてきたので、試しに vMX を少し触ってみた。ルータ触るのめっちゃ久しぶり。
下調べ
-
Juniper MX の H/W は弁当箱サイズから、冷蔵庫サイズみたいなのがあるみたいだが、当然 VM版 もあって、
vMX
というらしい -
vMX
は AWS および Azure のマーケットプレイスにすでにイメージがある - イメージのライセンスは他でもよくあるように、
PAYG
- Pay As You Go かBYOL
- Bring Your Own License から選べる-
BYOL
だと 60日間無料お試しができそう
-
- Juniper が 提供している Azure でのチュートリアル的なドキュメントは これ をみつけた1
今回の構成
先に出来上がりの様子を。公式の Getting Started Guide for Microsoft Azure のとおりにやると以下のような構成になる
この図は、Azure Portal から Network Watcher
> トポロジ
といくと確認できる。最近のクラウドはこういう可視化があたりまえになってるので助かる。ちなみにアイコンクリックするとアドレスとか詳細をみることができる
構築していきます
Azure アカウントがあって、Azure CLI ( az
コマンド)が使えることが前提
vMX イメージのライセンスを有効にする
Junper ライセンスの Term & Conditions に合意しないといけない。az
コマンドでできる
az vm image terms accept --urn juniper-networks:vmx-virtual-router:vmx-virtual-router-byol-image:18.3.x3
末尾の 18.3.x3
のところはイメージのバージョンなので、ここは使いたいイメージに合わせて変更する。現在使えるバージョン確認してみる
$ az vm image list --offer vMX --all --output table
Offer Publisher Sku Urn Version
--------------------------------- ---------------- --------------------------------- ------------------------------------------------------------------------------------------- ---------
cisco-meraki-vmx100 cisco vmx100 cisco:cisco-meraki-vmx100:vmx100:0.0.1 0.0.1
cisco-meraki-vmx100 cisco vmx100 cisco:cisco-meraki-vmx100:vmx100:0.0.2 0.0.2
cisco-meraki-vmx100 cisco vmx100 cisco:cisco-meraki-vmx100:vmx100:1.0.0 1.0.0
cisco-meraki-vmx100 cisco vmx100 cisco:cisco-meraki-vmx100:vmx100:1.0.1 1.0.1
vmx-services-gateway-byol juniper-networks vmx-services-gateway-byol juniper-networks:vmx-services-gateway-byol:vmx-services-gateway-byol:17.4.2 17.4.2
vmx-services-gateway-byol juniper-networks vmx-services-gateway-byol juniper-networks:vmx-services-gateway-byol:vmx-services-gateway-byol:17.4.3 17.4.3
vmx-services-gateway-byol juniper-networks vmx-services-gateway-byol juniper-networks:vmx-services-gateway-byol:vmx-services-gateway-byol:18.3.2 18.3.2
vmx-services-gateway-byol-soltemp juniper-networks vmx-services-gateway-byol-soltemp juniper-networks:vmx-services-gateway-byol-soltemp:vmx-services-gateway-byol-soltemp:17.4.3 17.4.3
vmx-virtual-router juniper-networks vmx-virtual-router-payg-image juniper-networks:vmx-virtual-router:vmx-virtual-router-payg-image:17.4.1 17.4.1
とりあえず、18.3.2
でよさそうなので、以下のように実行
$ az vm image terms accept --urn juniper-networks:vmx-services-gateway-byol:vmx-services-gateway-byol:18.3.2
スクリプトで一気に構築
ガイドどおりに azure.config
と azure_vmx_deploy.sh
を使って、一気に図の構成をつくる。azure.config
をきっちり設定しておけば、それを読んで、azure_vmx_deploy.sh
が設定してくれる
#
# Sample VMX deployment settings for Microsoft Azure
#
# Account config
account="your-account-id-is-here"
grpname="dcipoc"
location="japaneast"
# VM config
vmname="vmx-1"
admin="your-user-name-here"
vmximagename="juniper-networks:vmx-services-gateway-byol:vmx-services-gateway-byol:18.3.2"
# Network Config
number_of_nics=4
addressprefix="30.0.0.0/16"
PrivateIpAddress="30.0.0.10"
PrivateIpAddress2="30.0.1.10"
subnet_prefixes=( 30.0.0.0/24 30.0.1.0/24 30.0.2.0/24 30.0.3.0/24 )
$ ./azure_vmx_deploy.sh
Creating resource group
Location Name
---------- ------
japaneast dcipoc
Created group dcipoc
Creating storage account
CreationTime EnableHttpsTrafficOnly Kind Location Name PrimaryLocation ProvisioningState ResourceGroup StatusOfPrimary
-------------------------------- ------------------------ ------- ---------- ---------- ----------------- ------------------- --------------- -----------------
2020-05-24T00:32:34.803507+00:00 True Storage japaneast dcipocstor japaneast Succeeded dcipoc available
Created storage account dcipocstor
Created
---------
True
Created container dcipoccont
Creating Azure virtual network dcipoc-vnet1....
Done creating Azure virtual network dcipoc-vnet1
Creating virtual subnet dcipoc-vnet1-vsubnet0 30.0.0.0/24..
AddressPrefix Name PrivateEndpointNetworkPolicies PrivateLinkServiceNetworkPolicies ProvisioningState ResourceGroup
--------------- --------------------- -------------------------------- ----------------------------------- ------------------- ---------------
30.0.0.0/24 dcipoc-vnet1-vsubnet0 Enabled Enabled Succeeded dcipoc
Done creating subnet dcipoc-vnet1-vsubnet0 with prefix 30.0.0.0/24
Creating virtual subnet dcipoc-vnet1-vsubnet1 30.0.1.0/24..
AddressPrefix Name PrivateEndpointNetworkPolicies PrivateLinkServiceNetworkPolicies ProvisioningState ResourceGroup
--------------- --------------------- -------------------------------- ----------------------------------- ------------------- ---------------
30.0.1.0/24 dcipoc-vnet1-vsubnet1 Enabled Enabled Succeeded dcipoc
Done creating subnet dcipoc-vnet1-vsubnet1 with prefix 30.0.1.0/24
Creating virtual subnet dcipoc-vnet1-vsubnet2 30.0.2.0/24..
AddressPrefix Name PrivateEndpointNetworkPolicies PrivateLinkServiceNetworkPolicies ProvisioningState ResourceGroup
--------------- --------------------- -------------------------------- ----------------------------------- ------------------- ---------------
30.0.2.0/24 dcipoc-vnet1-vsubnet2 Enabled Enabled Succeeded dcipoc
Done creating subnet dcipoc-vnet1-vsubnet2 with prefix 30.0.2.0/24
Creating virtual subnet dcipoc-vnet1-vsubnet3 30.0.3.0/24..
AddressPrefix Name PrivateEndpointNetworkPolicies PrivateLinkServiceNetworkPolicies ProvisioningState ResourceGroup
--------------- --------------------- -------------------------------- ----------------------------------- ------------------- ---------------
30.0.3.0/24 dcipoc-vnet1-vsubnet3 Enabled Enabled Succeeded dcipoc
Done creating subnet dcipoc-vnet1-vsubnet3 with prefix 30.0.3.0/24
Creating routing tables...
DisableBgpRoutePropagation Location Name ProvisioningState ResourceGroup
---------------------------- ---------- -------------------- ------------------- ---------------
False japaneast dcipoc-rt-to-subnet2 Succeeded dcipoc
DisableBgpRoutePropagation Location Name ProvisioningState ResourceGroup
---------------------------- ---------- -------------------- ------------------- ---------------
False japaneast dcipoc-rt-to-subnet3 Succeeded dcipoc
AddressPrefix Name PrivateEndpointNetworkPolicies PrivateLinkServiceNetworkPolicies ProvisioningState ResourceGroup
--------------- --------------------- -------------------------------- ----------------------------------- ------------------- ---------------
30.0.2.0/24 dcipoc-vnet1-vsubnet2 Enabled Enabled Succeeded dcipoc
AddressPrefix Name PrivateEndpointNetworkPolicies PrivateLinkServiceNetworkPolicies ProvisioningState ResourceGroup
--------------- --------------------- -------------------------------- ----------------------------------- ------------------- ---------------
30.0.3.0/24 dcipoc-vnet1-vsubnet3 Enabled Enabled Succeeded dcipoc
Creating public IP addresses and NICs...
Created NIC vmx-1-vfp-nic with public IP...
Created NIC vmx-1-vcp-nic with public IP...
Created NIC vmx-1-wan-nic2...
Created NIC vmx-1-wan-nic3...
Adding routes to routing tables
AddressPrefix Name NextHopIpAddress NextHopType ProvisioningState ResourceGroup
--------------- --------- ------------------ ---------------- ------------------- ---------------
30.0.3.0/24 ToSubnet3 30.0.2.4 VirtualAppliance Succeeded dcipoc
AddressPrefix Name NextHopIpAddress NextHopType ProvisioningState ResourceGroup
--------------- --------- ------------------ ---------------- ------------------- ---------------
30.0.2.0/24 ToSubnet2 30.0.3.4 VirtualAppliance Succeeded dcipoc
Creating vMX VM...
ResourceGroup PowerState PublicIpAddress Fqdns PrivateIpAddress MacAddress Location Zones
--------------- ------------ --------------------------- ------- ------------------------------------- ----------------------------------------------------------------------- ---------- -------
dcipoc VM running your-pu-ip-1, your-pub-ip-2 30.0.0.10,30.0.1.10,30.0.2.4,30.0.3.4 00-0D-3A-CD-49-85,00-0D-3A-CD-48-20,00-0D-3A-CD-49-49,00-0D-3A-CD-47-A1 japaneast
vMX deployment complete
ここらで、Azure Portal でリソースグループ dcipoc
をみると、いろいろできあがっている
vMX
に SSH
する IPアドレスを取得して
$ az network public-ip show --name vMX-1-vcp-public-ip -g dcipoc --query "{address: ipAddress}"
{
"address": "<you-public-ip-address-here>"
}
ssh
したら JUNOS のシェルがお出迎え
$ ssh gdc@<you-public-ip-address-here>
Last login: Sun May 24 00:57:49 2020 from your-ip-address
--- JUNOS 18.3X3.2 Kernel 64-bit JNPR-11.0-20190907.2386fa2_buil
gdc@vmx-1>
試しに show int
うん、JUNOS だ
gdc@vmx-1> show interfaces ge-0/0/0
Physical interface: ge-0/0/0, Enabled, Physical link is Up
Interface index: 148, SNMP ifIndex: 526
Link-level type: Ethernet, MTU: 1514, MRU: 1522, LAN-PHY mode, Speed: 1000mbps, BPDU Error: None, Loop Detect PDU Error: None,
Ethernet-Switching Error: None, MAC-REWRITE Error: None, Loopback: Disabled, Source filtering: Disabled, Flow control: Enabled,
Auto-negotiation: Enabled, Remote fault: Online
Pad to minimum frame size: Disabled
Device flags : Present Running
Interface flags: SNMP-Traps Internal: 0x4000
Link flags : None
CoS queues : 8 supported, 8 maximum usable queues
Current address: 00:0d:3a:cd:49:49, Hardware address: 00:0d:3a:cd:49:49
Last flapped : 2020-05-24 00:52:05 UTC (00:06:28 ago)
Input rate : 0 bps (0 pps)
Output rate : 0 bps (0 pps)
Active alarms : None
Active defects : None
PCS statistics Seconds
Bit errors 0
Errored blocks 0
Ethernet FEC statistics Errors
FEC Corrected Errors 0
FEC Uncorrected Errors 0
FEC Corrected Errors Rate 0
FEC Uncorrected Errors Rate 0
Interface transmit statistics: Disabled
セキュリティをちゃんとしとこう
このあたりで、セキュリティをちゃんとしたほうがいいと思う。Azure Portal から ネットワーク セキュリティ グループ
を設定し、自分の Src IP
からのみ SSH
できるようにしておいた
セキュリティグループを作成して、FWルールを書くだけではダメで、グループにインターフェースまたはサブネットを 関連付け
する必要がある。今回は Public IP
をもつインターフェースを対象にした
二つの Public IP
があるが以下のようになっているので二つとも関連付けする
-
vmx-1-vfp-nic
に SSH するとLinux
のシェル -
vmx-1-vcp-nic
に SSH するとvMX
のシェル
また、関連付けしても、1分くらいは FW が有効にならないので確認するときはしばらく待つ
うまくいくと、トポロジにもシールドのマークが表れた
シリーズ
-
最初は、vMX のインスタンスが立っている状態から始めてしまって、いろいろうまくいかなかった。事前にVMを立てておく必要はなく、Azureのアカウントがある状態からこのドキュメントに従うとうまくいくはず ↩