更新内容
2022年9月追記
Cisco SD-WANコントローラのバージョン20.5以降では、Cloud-Initのファイルフォーマットが変更となり、Yamlフォーマットを利用する必要があります。旧Cloud-Initのフォーマットのままだとファイルが読み込みされず、初期状態でインスタンスが起動しますので、AWSコンソールなどから初期セットアップを行う必要がありますのでご注意ください。
コントローラのスナップショットはvhdファイルからの作成も可能ですが、CiscoTAC経由でご利用のAWSアカウントに対してシェアすることも可能となりました。詳細は以下のURLをご参照ください。
https://www.cisco.com/c/en/us/td/docs/routers/sdwan/configuration/sdwan-xe-gs-book/controller-aws.html
はじめに
日本のインターネット回線はサービスの仕様からルータのWAN側にIPv6アドレスのみをサポートするものがあります。今回はIPv6に対応したCiscoSD-WANのテスト環境をTerraformを使って構築する手順について解説します。
#1. SoftwareDownloadとアップロード
SD-WANソフトダウンロードリンク
- CiscoソフトウェアダウンロードサイトからSD-WANコントローラ各種のソフトウェアをダウンロードします。
対象のソフトウェアはVHDを選択してください。
例)
vbond: viptela-edge-20.3.2-genericx86-64_vhd.tar.gz
vsmart: viptela-smart-20.3.2-genericx86-64_vhd.tar.gz
vmanage: viptela-vmanage-20.3.2-genericx86-64_vhd.tar.gz
-
TAR.GZファイル3つを解凍します。解凍するとファイル名が変化します。ファイルサイズが11GBと22GBと大きいので注意。
例)
vbond: viptela-edge-genericx86-64.vhd
vsmart: viptela-smart-genericx86-64.vhd
vmanage: viptela-vmanage-genericx86-64.vhd -
AWS-CLIで上記3つのVHDファイルをS3にアップロードしてください。*S3のバケット名はご利用の物を
aws s3 cp viptela-edge-genericx86-64.vhd s3://<bucket-name>/viptela-edge-genericx86-64.vhd
aws s3 cp viptela-smart-genericx86-64.vhd s3://<bucket-name>/viptela-smart-genericx86-64.vhd
aws s3 cp viptela-vmanage-genericx86-64.vhd s3://<bucket-name>/viptela-vmanage-genericx86-64.vhd
- 先ほどアップロードした3つのファイルをSnapshotにします。
Snapshot作成用のJSONファイルの作成
cat <<EOF > /var/tmp/containers1.json
{
"Description": "vbond 20.3.2 VHD",
"Format": "VHD",
"UserBucket": {
"S3Bucket": "<bucket-name>",
"S3Key": "viptela-edge-genericx86-64.vhd"
}
}
EOF
cat <<EOF > /var/tmp/containers2.json
{
"Description": "vsmart 20.3.2 VHD",
"Format": "VHD",
"UserBucket": {
"S3Bucket": "<bucket-name>",
"S3Key": "viptela-smart-genericx86-64.vhd"
}
}
EOF
cat <<EOF > /var/tmp/containers3.json
{
"Description": "vmanage 20.3.2 VHD",
"Format": "VHD",
"UserBucket": {
"S3Bucket": "<bucket-name>",
"S3Key": "viptela-vmanage-genericx86-64.vhd"
}
}
EOF
Snapshot作成コマンド
aws ec2 import-snapshot --description "vbond 20.3.2 VHD" --disk-container file:///var/tmp/containers1.json
aws ec2 import-snapshot --description "vsmart 20.3.2 VHD" --disk-container file:///var/tmp/containers2.json
aws ec2 import-snapshot --description "vmanage 20.3.2 VHD" --disk-container file:///var/tmp/containers3.json
-
AWSのAMI作成は記載した方法とは別に、一般的なimport-imageコマンドでの作成手法がありますが、
これだとOSの制限がありますので無理でした。
KaptopPC$ aws ec2 describe-import-image-tasks
USERBUCKET <bucket-name> viptela-smart-genericx86-64.vhd
IMPORTIMAGETASKS vbond200302 import-ami-01b9cxxxxxxxx BYOL deleted ClientError: Unknown OS / Missing OS files.
#3. Terraformの事前準備
今回はローカルTerraformでのオペレーションを想定して解説し、オリジナルと差分がある部分をピックアップして記載します。
-
Githubリンク
CiscoDevNetサイトからterraform-sdwanをGitCloneします。 -
ディレクトリ丸ごとTerraformの作業ディレクトリ(~/terraform/terraform-sdwan/)にコピーしTFファイルをそれぞれ環境に合わせて修正します。
-
~/terraform/terraform-sdwan/Provision_Instances/my_instances_variables.auto.tfvars.json 前の章で作成した各AMIのIDに修正しインスタンスタイプはお好みの物を。
{
"vbond_instances_type": "c4.large",
"vsmart_instances_type": "c4.large",
"vmanage_instances_type": "c4.4xlarge",
"vbond_ami": "ami-07acxxxxxxxxxxxxx",
"vsmart_ami": "ami-0935xxxxxxxxxxxxx",
"vmanage_ami": "ami-0f89xxxxxxxxxxxxx",
"vbond_count": "1",
"vmanage_count": "1",
"vsmart_count": "1"
}
- ~/terraform/terraform-sdwan/Provision_VPC/aws.tf と ~/terraform/terraform-sdwan/Provision_Instances/aws.tf の両方でProfileをDefaultに変更、Regionはお好みで今回は東京。
provider "aws" {
shared_credentials_file = "~/.aws/credentials"
profile = "default"
region = "ap-northeast-1"
}
- ~/terraform/terraform-sdwan/Provision_Instances/vbond/vbond.tf
バージョン20.x.x以降のvbondのインスタンスは、起動後のログインにSSH-KEYが必要となります。
インスタンス作成のTFファイルに以下(key_nameのみ)を追記します。
AWSコンソールのEC2からVBOND用のKey pairsを作成しておいてください。
resource "aws_instance" "vbond" {
key_name = "vbondkey"
}
-
~/terraform/terraform-sdwan/Provision_Instances/cloud-init/各種
vbond/vsmart/vmanageの起動Configがここに格納されています。
ログインユーザとパスワードは初期状態だとadmin/adminになっているので注意。 -
余談ですが、個人用のGithubにディレクトリをアップロードして、Terraformと連携させ、WebUIからやる方法の方が個人的にはお勧めです。
- 早速terraformでVPCの作成をします。
- $を含む変数がTF旧バージョン形式なのでワーニングが出ますが無視しても大丈夫。
cd ~/terraform/terraform-sdwan/Provision_VPC
terraform init
terraform plan
terraform apply
- 次にインスタンスを作成します。
cd ~/terraform/terraform-sdwan/Provision_Instances
terraform init
terraform plan
terraform apply
- インスタンスが起動してきたらプライマリのIPv4アドレスに対してSSHをします。
vbondインスタンスはssh-keyが必要なのでSSHコマンドが地味に違うので注意してください。
ssh -i ~/vbondkey.pem admin@<vbond-ipv4-address>
ssh admin@<smart-ipv4-address>
ssh admin@<vmanage-ipv4-address>
vmanageにログインするとボリュームが見つからないから電源切るねのメッセージがでてきますが、気にしないでそのままエンターしてPoweroffしてください。
- vManageの追加EBSボリューム
AWSコンソールのEC2のVolumeからvManageの追加ボリュームを作成、作成したボリュームをvmanageインスタンスにアタッチします。直感的に/dev/sd b を使うべきに感じますが、Bをつかって起動すると、謎に起動時にボリュームを認識しないです。下のスクショのAWSのNoteに記載の通り、/dev/sd fなどのf-pの間を使ってください。アタッチしたのちに再度vmanageのインスタンスを起動します。
-
全てのコントローラインスタンスにログインできましたでしょうか。CLIでVPN0のインタフェースにIPv6-DHCPクライアントの設定を入れること、またDNSサーバの指定などができていることを確認してください。
-
各種コントローラにsystem設定を行なっていきます。system-ipやorganization-name,vbondなどの設定は次の章で行う設定値にも関連します。
-
順番が前後しますが、事前にcloud-initファイルに必要項目を入力しておくと手間がいっそう少なくなります。
コントローラの構築及びIPv6接続に必要な設定をここでピックアップしておきます。
VBOND-FQDNはドメインを持っている場合はそれを、持っていない、テストの際はIPアドレスでも構いません。
system
host-name <hostname>
system-ip <system-ip>
site-id 1000
sp-organization-name <organization-name>
organization-name <organization-name>
vbond <vbond-fqdn> #vbond local vbond-onlyとかをVbondは入れる
!
vpn 0
dns 8.8.8.8 primary
dns 2001:4860:4860::8888 primary
interface eth1
ip dhcp-client
ipv6 dhcp-client
-
AWSコンソール画面のNetworkInterfaceから各コントローラのVPN0に相当するインタフェースにIPv6のアドレスをアサインします。
-
SSH-CLIでコントローラにログインしてIPv6のリーチャビリティを確認してください。デフォゲのIPv6ネイバーはリンクローカルっぽいアドレスが表示されますがそれでOK.
vBond# show ipv6 routes
Codes Proto-sub-type:
IA -> ospf-intra-area, IE -> ospf-inter-area,
E1 -> ospf-external1, E2 -> ospf-external2,
N1 -> ospf-nssa-external1, N2 -> ospf-nssa-external2,
e -> bgp-external, i -> bgp-internal
Codes Status flags:
F -> fib, S -> selected, I -> inactive,
B -> blackhole, R -> recursive, L -> import
PROTOCOL NEXTHOP NEXTHOP NEXTHOP
VPN PREFIX PROTOCOL SUB TYPE IF NAME ADDR VPN TLOC IP COLOR ENCAP STATUS
---------------------------------------------------------------------------------------------------------------------------------------------
0 ::/0 static - ge0/0 fe80::40c:bfff:fe07:aa7e- - - - F,S
0 2406:da14:4a8:1d00::/64connected - ge0/0 - - - - - F,S
512 fcff::/120 connected - loop0.2 - - - - - F,S
vBond#
vBond# ping 2001:4860:4860::8888
Ping in VPN 0
PING 2001:4860:4860::8888(2001:4860:4860::8888) 56 data bytes
64 bytes from 2001:4860:4860::8888: icmp_seq=2 ttl=105 time=15.3 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=3 ttl=105 time=16.3 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=4 ttl=105 time=17.3 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=5 ttl=105 time=20.3 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=6 ttl=105 time=22.4 ms
^C
--- 2001:4860:4860::8888 ping statistics ---
6 packets transmitted, 5 received, 16% packet loss, time 5005ms
rtt min/avg/max/mdev = 15.309/18.362/22.454/2.653 ms
vBond#
#7. CiscoPnPポータルでVA及びコントローラプロファイルを作成
https://software.cisco.com/
-
Cisco Software Centralにログインして画面下部のAdministrationの項目のManage Smart Accountをクリックします。
-
VAのユーザやユーザグループの指定の画面に遷移しますが特に指定せず画面最下部のNext。最終確認の画面に遷移したら画面最下部のCreate Virtual Accountボタンをクリックします。(メールアドレスが表示されているのでスクショなし)
-
トップ画面に戻ってPlug and Play Connectをクリックします。
-
以下のように各種パラメータを入力します。Primay Controllerの項目はVBONDのFQDN(IPv4AレコードとIPv6AAAAレコードに対応させる)を入力してください。
-
vManageの管理画面にアクセスして作成したコントローラ間登録をしていきます。
-
vManageのAdministration > SettingsからController CertificateをManualに設定。
-
Configuration > DeviceからControllerをクリックします。
-
vbondの登録にはデフォルトのadmin/adminが使用できません(SSH-KEYが必要なため)、SSHCLIでログイン用の別のNETADMIN権限のユーザを作っておくことをお勧めします。
-
Configuration > CertificateからControllerに移動して全コントローラのCSRをダウンロードします。
-
PnPポータルに戻りCertificateタブのGenerate Certificateから先ほど作成したCSRをアップロード、サイン、ダウンロードします。
-
Configuration > Certificateに戻りInstall Certificateからダウンロードした証明書をインストールします。
-
なお、VBONDだけはこのGUIからの証明書インストールどうしてもできなかったので、SSH-SCPでコマンドラインで行いました。
scp -i ./vbondkey.pem admin@<vbond-ip>/home/admin/vbond.crt
ssh -i ./vbondkey.pem admin@<vbond-ip>
vbond#request certificate install /home/admin/vbond.crt
- 手元のルータインスタンスをIPv6オンリーの環境で起動して今回のコントローラと接続します。
- WAN側インタフェースにIPv4アドレスが無い状態でIPv6アドレスでの接続に自動的に切り替わります。
おわりに
IPv6対応のコントローラを利用すると、IPoEなどのIPv6のみの回線でもルータは自動的にIPv6アドレスを取得し、VBONDのFQDNのDNS登録が行われていれば、ゼロタッチでのコントローラ接続ができるようになります。
Ciscoクラウドによる正式サポートの体制を順次整えている状況です。来年度には社内体制をアップデート、みなさまへウェビナーや説明会等でご報告できると思います。
SD-WAN絡みの投稿もつくった
https://qiita.com/KoheiYamashita1/items/df798022b2697464e2d8
アドベントカレンダーのトップページはこちら
https://qiita.com/advent-calendar/2020/cisco
https://qiita.com/advent-calendar/2020/cisco2