Juniper MXを試してみたいが実機がないのでvMXでやってみる
三行まとめ
今回はやや中途半端なエントリなので、三行まとめを先に:
- AWSでvMXを動かしてみた
- マネジメントのインターフェースに加えて、WANポートが一つまでだと問題なく動いた[1]
- 二つ目のWANポートをVMにattachするとWANポートが動かなくなる
参考にした手順
構成図
2台のvMX(J1とJ2)を二つのネットワークで繋ぐ。それぞれにマネジメントネットワークも。
│ │
Mgmt Mgmt
│ │
┌───────┴───────┐ ┌───────┴───────┐
│ P0 │ J1-J2-1 │ P0 │
│ J1_P1├───────────┤J2_P1 │
│ │ │ │
│ J1_P2├───────────┤J2_P2 │
│ │ J1-J2-2 │ │
└───────────────┘ └───────────────┘
J1 J2
設定の流れ
設定の流れは以下のようになります。ほとんどがAWS側の手順です。
- 公開鍵のインポートなど、EC2使うのに共通的な設定
- VPCをつくって、CIDRブロックを決める
- 上記のCIDRブロックを分割してサブネットをつくる
- Internet Gatewayをつくる
- ネットワークインターフェースをつくる
- ネットワークインターフェースにIPアドレスを付与
- VMをラウンチ
- SSHする
- JUNOSでWANのIPアドレスを設定
- REST APIを設定
1. 公開鍵のインポート
AWSコンソールで EC2
> Key pairs
> Import key pair
でインポートしておく
2. VPCをつくる
VPC
> Your VPCs
> Create VPC
にてVPCを作って、そのVPCで使うCIDRブロックとして10.0.0.0/16
を割り当ておいた
3. サブネットをつくる
VPC
> Subnets
> Create subnet
で以下のサブネットを作成
Name Subnet
Mgmt 10.0.0.0/24 # いらなかった
J1-J1-1 10.0.1.0/24
J1-J2-2 10.0.2.0/24
マネジメントのインターフェース(fxp0)はインスタンス作成時につくられて、IPが振られるのでここでは作らなくてもよかったみたい
4. インターネット・ゲートウェイ
そとからvMXにアクセスするために必要
VPC
> Internet gateways
> Create internet gateway
でGWを作る
VPC
> Internet gateways
> Actions
ボタンにて、上記のGWをVPCにAttach
VPC
> Route Tables
> Routes
タブにて、デフォルトルート0.0.0.0/0
をInternet Gatewayにむける
5. ネットワークインターフェースをつくる
EC2
> Network interfaces
> Create network interface
作る時には、Description
にスイッチ名を入れておくべき。int1
とかだと、どのスイッチのものかわからなくなる。また、Mgmt
もスイッチの数分追加しておくことになる。
ひとまず試しに以下のインターフェースを作成して、それぞれサブネットをさっき作ったものに紐付ける
J1_Mgmt
J1_P1
J1_P2
J2_P1
J2_P2
参考にしているドキュメントには以下のように書かれているが、最近AWSのコンソールが変わったようで、Web intercaceでも、二つ以上のインターフェースをインスタンスに割り当てることができるようになっている
NOTE: You can only associate two interfaces when creating the EC2 instance using the Web interface. You must have at least one WAN interface.
ついでに、Network interfaces
> Actions
> Change source/dest. check
にてDisable
にする。何をやっているかというと...
Source/destination checking
You can enable or disable source/destination checks, which ensure that the instance is either the source or the destination of any traffic that it receives. Source/destination checks are enabled by default. You must disable source/destination checks if the instance runs services such as network address translation, routing, or firewalls.
ということらしい
6. ネットワーク・インターフェースにElastic IPを付与する
あとで書くように、VM起動時にAuto-assign Public IP
を指定しておけばいらないかもしれないが、マネジメントのインターフェースにElastic IPをつける場合は以下。Elastic IPはAllocateしてからAccociateする。
Allocate:
VPC
> Elastic IP addresses
> Allocate Elastic IP address
Accociate:
VPC
> Elastic IP addresses
> ***.***.***.***
> Associate Elastic IP address
7. VMをラウンチ
ドキュメントには以下のようにあるので、ひとまず、C5.2xlarge
を選択してすすめる。
You can create following types of instances on AWS:
• m4.4xlarge
• C4.2xlarge
• C5.2xlarge and C5.4xlarge (from Junos OS Release 19.4R1 onwards)
AMIをvmx
で検索して、コミュニティイメージの方から以下を選択
vmx-nested-19.4R1.9-c8e2662f-22aa-4cd4-99fe-90a1606d0970-ami-04c93b2ff5fe2f974.4
オフィシャルイメージの方がいいのかな...
以下のようにインスタンスを立ち上げる時に、Instance Details
でさっき作ったVPCを指定する。またセキュリティグループはVPC毎に管理されているようなので、VPCを選んだ時点で、そのVPCに割り当てられたセキュリティグループしか選べない
セキュリティグループはマネジメントインターフェースはMy IPからのみ許可するやつを作って割り当て。WANインターフェースは通信できなくなりそうなので、defaultのフルオープンのものにしておいた
初めてのvMXのラウンチで怒られた。リソースのvalidateが必要らしい。
Launch Failed
Your request for accessing resources in this region is being validated, and you will not be able to launch additional resources in this region until the validation is complete. We will notify you by email once your request has been validated. While normally resolved within minutes, please allow up to 4 hours for this process to complete. If the issue still persists, please let us know by writing to aws-verification@amazon.com for further assistance.
しばらく待てばいいのか? > 10minくらいで、Acceptのメールきた
これでとりあえず立ち上がった
8. SSHしてみる
ssh jnpr@<ip-address>
これでJUNOSのシェルはつかえるようになった
$ ssh jnpr@<IP-address>
Last login: Sat Apr 3 00:56:31 2021 from <ip-address>
--- JUNOS 19.4R1.9 Kernel 64-bit JNPR-11.0-20191115.14c2ad5_buil
jnpr@ip-10-0-0-140> show version
Hostname: ip-10-0-0-140
Model: vmx
Junos: 19.4R1.9
JUNOS OS Kernel 64-bit [20191115.14c2ad5_builder_stable_11]
JUNOS OS libs [20191115.14c2ad5_builder_stable_11]
JUNOS OS runtime [20191115.14c2ad5_builder_stable_11]
JUNOS OS time zone information [20191115.14c2ad5_builder_stable_11]
JUNOS network stack and utilities [20191213.231146_builder_junos_194_r1]
JUNOS libs [20191213.231146_builder_junos_194_r1]
JUNOS OS libs compat32 [20191115.14c2ad5_builder_stable_11]
JUNOS OS 32-bit compatibility [20191115.14c2ad5_builder_stable_11]
JUNOS libs compat32 [20191213.231146_builder_junos_194_r1]
JUNOS runtime [20191213.231146_builder_junos_194_r1]
JUNOS Packet Forwarding Engine Simulation Package [20191213.231146_builder_junos_194_r1]
JUNOS sflow mx [20191213.231146_builder_junos_194_r1]
JUNOS py extensions2 [20191213.231146_builder_junos_194_r1]
JUNOS py extensions [20191213.231146_builder_junos_194_r1]
JUNOS py base2 [20191213.231146_builder_junos_194_r1]
JUNOS py base [20191213.231146_builder_junos_194_r1]
JUNOS OS vmguest [20191115.14c2ad5_builder_stable_11]
JUNOS OS crypto [20191115.14c2ad5_builder_stable_11]
JUNOS na telemetry [19.4R1.9]
JUNOS mx libs compat32 [20191213.231146_builder_junos_194_r1]
JUNOS mx runtime [20191213.231146_builder_junos_194_r1]
JUNOS RPD Telemetry Application [19.4R1.9]
Redis [20191213.231146_builder_junos_194_r1]
JUNOS common platform support [20191213.231146_builder_junos_194_r1]
JUNOS Openconfig [19.4R1.9]
JUNOS mtx network modules [20191213.231146_builder_junos_194_r1]
JUNOS modules [20191213.231146_builder_junos_194_r1]
JUNOS mx modules [20191213.231146_builder_junos_194_r1]
JUNOS mx libs [20191213.231146_builder_junos_194_r1]
JUNOS SQL Sync Daemon [20191213.231146_builder_junos_194_r1]
JUNOS mtx Data Plane Crypto Support [20191213.231146_builder_junos_194_r1]
JUNOS daemons [20191213.231146_builder_junos_194_r1]
JUNOS mx daemons [20191213.231146_builder_junos_194_r1]
JUNOS appidd-mx application-identification daemon [20191213.231146_builder_junos_194_r1]
JUNOS Simulation Linux Package [20191213.231146_builder_junos_194_r1]
JUNOS Simulation Package [20191213.231146_builder_junos_194_r1]
JUNOS Simulation Package [20191213.231146_builder_junos_194_r1]
JUNOS Services URL Filter package [20191213.231146_builder_junos_194_r1]
JUNOS Services TLB Service PIC package [20191213.231146_builder_junos_194_r1]
JUNOS Services Telemetry [20191213.231146_builder_junos_194_r1]
JUNOS Services TCP-LOG [20191213.231146_builder_junos_194_r1]
JUNOS Services SSL [20191213.231146_builder_junos_194_r1]
JUNOS Services SOFTWIRE [20191213.231146_builder_junos_194_r1]
JUNOS Services Stateful Firewall [20191213.231146_builder_junos_194_r1]
JUNOS Services RTCOM [20191213.231146_builder_junos_194_r1]
JUNOS Services RPM [20191213.231146_builder_junos_194_r1]
JUNOS Services PCEF package [20191213.231146_builder_junos_194_r1]
JUNOS Services NAT [20191213.231146_builder_junos_194_r1]
JUNOS Services Mobile Subscriber Service Container package [20191213.231146_builder_junos_194_r1]
JUNOS Services MobileNext Software package [20191213.231146_builder_junos_194_r1]
JUNOS Services Logging Report Framework package [20191213.231146_builder_junos_194_r1]
JUNOS Services LL-PDF Container package [20191213.231146_builder_junos_194_r1]
JUNOS Services Jflow Container package [20191213.231146_builder_junos_194_r1]
JUNOS Services Deep Packet Inspection package [20191213.231146_builder_junos_194_r1]
JUNOS Services IPSec [20191213.231146_builder_junos_194_r1]
JUNOS Services IDS [20191213.231146_builder_junos_194_r1]
JUNOS IDP Services [20191213.231146_builder_junos_194_r1]
JUNOS Services HTTP Content Management package [20191213.231146_builder_junos_194_r1]
JUNOS Services Crypto [20191213.231146_builder_junos_194_r1]
JUNOS Services Captive Portal and Content Delivery Container package [20191213.231146_builder_junos_194_r1]
JUNOS Services COS [20191213.231146_builder_junos_194_r1]
JUNOS AppId Services [20191213.231146_builder_junos_194_r1]
JUNOS Services Application Level Gateways [20191213.231146_builder_junos_194_r1]
JUNOS Services AACL Container package [20191213.231146_builder_junos_194_r1]
JUNOS Extension Toolkit [20191213.231146_builder_junos_194_r1]
JUNOS Juniper Malware Removal Tool (JMRT) [1.0.0+20191213.231146_builder_junos_194_r1]
JUNOS J-Insight [20191213.231146_builder_junos_194_r1]
JUNOS Online Documentation [20191213.231146_builder_junos_194_r1]
JUNOS jail runtime [20191115.14c2ad5_builder_stable_11]
JUNOS FIPS mode utilities [20191213.231146_builder_junos_194_r1]
9. WANポートの設定
EC2
> Network interfaces
からさっき作ったネットワーク・インターフェースを選択して、vMXインスタンスに割り当てる。まずはJ1_P1
とJ2_P1
のみをattachして、インスタンスを再起動
ここで、VMのインターフェースにPrivate IPが振られる
10. JunosにてWANのIPを設定
一つ目のインターフェースをVMにattachした時点で、10個のポートge-0/0/0
からge-0/0/9
が現れる
jnpr@ip-10-0-0-140> show interfaces terse | find ge
ge-0/0/0 up up
ge-0/0/0.0 up up inet 10.0.1.241/24
multiservice
lc-0/0/0 up up
lc-0/0/0.32769 up up vpls
pfe-0/0/0 up up
pfe-0/0/0.16383 up up inet
inet6
pfh-0/0/0 up up
pfh-0/0/0.16383 up up inet
pfh-0/0/0.16384 up up inet
ge-0/0/1 up down
ge-0/0/1.0 up down
ge-0/0/2 up down
ge-0/0/2.16386 up down
ge-0/0/3 up down
ge-0/0/3.16386 up down
ge-0/0/4 up down
ge-0/0/4.16386 up down
ge-0/0/5 up down
ge-0/0/5.16386 up down
ge-0/0/6 up down
ge-0/0/6.16386 up down
ge-0/0/7 up down
ge-0/0/7.16386 up down
ge-0/0/8 up down
ge-0/0/8.16386 up down
ge-0/0/9 up down
ge-0/0/9.16386 up down
cbp0 up up
demux0 up up
dsc up up
em1 up up
em1.0 up up inet 10.0.0.4/8
128.0.0.1/2
128.0.0.4/2
inet6 fe80::5254:ff:fe12:bdfe/64
fec0::a:0:0:4/64
tnp 0x4
esi up up
fti0 up up
fti1 up up
fti2 up up
fti3 up up
fti4 up up
fti5 up up
fti6 up up
fti7 up up
fxp0 up up
fxp0.0 up up inet 10.0.0.140/24
gre up up
ipip up up
irb up up
jsrv up up
jsrv.1 up up inet 128.0.0.127/2
lo0 up up
lo0.16384 up up inet 127.0.0.1 --> 0/0
lo0.16385 up up inet
lsi up up
mif up up
mtun up up
pimd up up
pime up up
pip0 up up
pp0 up up
rbeb up up
tap up up
vtep up up
JUNOSにログインして、VMに振られたものと同じPrivate IPを設定する。ge-0/0/0
を指定しているが、他のポートでもいいはず。J1_P1
とJ2_P1
に同様に実施
jnpr@ip-10-0-0-140> configure
Entering configuration mode
[edit]
jnpr@ip-10-0-0-140# set interfaces ge-0/0/0 unit 0 family inet address 10.0.1.241/24
jnpr@ip-10-0-0-140# commit
commit complete
インターフェース名のge-0/0/0
の読み方はtype-fpc/pic/port
であり、それぞれの内容は以下。
- fpc: DPC、FPC、または MPC が設置されているスロット
- pic: PICが配置されているFPC上のスロット。DPC、MIC、16ポートMPCの場合、PIC値はポートの論理グループであり、プラットフォームにより異なります。
- port: DPC、PIC、MPC、または MICのポート番号
これでPingが通る。そして大抵のドキュメントはここで終わる...
jnpr@ip-10-0-0-140> ping 10.0.1.135
PING 10.0.1.135 (10.0.1.135): 56 data bytes
64 bytes from 10.0.1.135: icmp_seq=0 ttl=64 time=51.158 ms
64 bytes from 10.0.1.135: icmp_seq=1 ttl=64 time=2.609 ms
64 bytes from 10.0.1.135: icmp_seq=2 ttl=64 time=2.270 ms
^C
--- 10.0.1.135 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 2.270/18.679/51.158/22.967 ms
二つ目のWANインターフェースをAttachすると動かなくなる...
ここで二つ目のWANインターフェースJ1_P2
とJ2_P2
をattachすると、J1_P1
とJ2_P1
間でのPingが飛ばなくなる。detouchすると通る、という状況に陥る。
VMにインターフェースつれけはAWS上にどんなネットワークでも作れるかと思ったが....二つ以上できないのであればできない...
そもそもAWSでインターフェースを一つattachすると、JUNOS上ではポートが10個できるので、VMのインターフェースはJUNOS上ではPICに対応しているのかもしれない。
となると、AWSのインターフェースとMXのポートは1:多の関係。JUNOS上のコンフィグとVMのネットワークインターフェースを対応づけるパラメータはIPアドレスしかないので、PIC内のポートは一つしか使えないのか?
VMに二つ目のネットワークインターフェースをattachしても、PICは増えないしなぁ...わからん...
11. REST APIを設定する
まけずにREST APIを設定します。
以下で、REST APIが有効になる。公式などでは https
を含めた方法が書かれているが、とりあえず http
使うだけなら以下の3行でできる
jnpr@ip-10-0-0-140# set system services rest control allowed-sources <your-client-ip-here>
jnpr@ip-10-0-0-140# set system services rest http port 3000
jnpr@ip-10-0-0-140# set system services rest enable-explorer
確認してみる
jnpr@ip-10-0-0-140> show configuration system services rest
http {
port 3000;
}
control {
allowed-sources <your-client-ip-here>;
}
enable-explorer;
APIでアクセスするユーザーをつくる
jnpr@ip-10-0-0-140# set system login user apiuser class operator
jnpr@ip-10-0-0-140# set system login user apiuser authentication plain-text-password
New password:
Retype new password:
curl
でアクセス
curl -u "user:pass" http://ip-address:port/rpc/get-software-information -H "Content-Type: application/xml" -H "Accept: application/json"
{
"software-information" : [
{
"host-name" : [
{
"data" : "vmx-1"
}
],
"product-model" : [
{
"data" : "vmx"
}
],
"product-name" : [
{
"data" : "vmx"
}
],
"junos-version" : [
{
"data" : "18.3X3.2"
}
:
: 長いので省略
:
{
"name" : [
{
"data" : "jail-runtime"
}
],
"comment" : [
{
"data" : "JUNOS jail runtime [20190907.2386fa2_builder_stable_11]"
}
]
}
]
}
]
}
API Explorer
ブラウザで http:/juniper-vmx-ip-address:port/
にアクセスするだけ
一通り試せる。いろいろできる
-
vMXの大抵の情報はここで終わっている。WANポートが一つだとvMXを動かす意味はあるのだろうか? ↩︎
Discussion