###################################################################### # All Rights Reserved, Copyright FUJITSU LIMITED 2015-2018 # # API実行サンプル名: # 05-003_IPSecVPN接続 # # 内容: # 異なるプロジェクト間でのIPSecVPN接続を行う手順です。 # # # 版数:v1.2 # 更新日:2018/1/26 ###################################################################### 手順: ─────────────────────────────────── 項番1.【プロジェクト1】プロジェクト1の情報確認 項番1-1.【プロジェクト1】ルータ1の確認 項番1-2.【プロジェクト1】ネットワーク1の確認 項番1-3.【プロジェクト1】サブネット1の確認 項番1-4.【プロジェクト1】ポート1の確認 項番1-4-1.【プロジェクト1】ポート一覧参照 項番1-4-2.【プロジェクト1】ポート1の確認 項番2.【プロジェクト1】ポート1にフローティングIPの付与 項番2-1.【プロジェクト1】フローティングIPの付与 項番2-2.【プロジェクト1】フローティングIPの確認 項番3.【プロジェクト1】VPNサービス1の作成 項番3-1.【プロジェクト1】VPNサービス1の作成 項番3-2.【プロジェクト1】VPNサービス1の確認 項番4.【プロジェクト1】IKEポリシー1の作成 項番4-1.【プロジェクト1】IKEポリシー1の作成 項番4-2.【プロジェクト1】IKEポリシー1の確認 項番5.【プロジェクト1】IPSecポリシー1の作成 項番5-1.【プロジェクト1】IPSecポリシー1の作成 項番5-2.【プロジェクト1】IPSecポリシー1の確認 項番6.【プロジェクト2】プロジェクト2の情報確認 項番6-1.【プロジェクト2】ルータ2の確認 項番6-2.【プロジェクト2】ネットワーク2の確認 項番6-3.【プロジェクト2】サブネット2の確認 項番6-4.【プロジェクト2】ポート2の確認 項番6-4-1.【プロジェクト2】ポート一覧参照 項番6-4-2.【プロジェクト2】ポート2の確認 項番7.【プロジェクト2】ポート2にフローティングIPの付与 項番7-1.【プロジェクト2】フローティングIPの付与 項番7-2.【プロジェクト2】フローティングIPの確認 項番8.【プロジェクト2】VPNサービス2の作成 項番8-1.【プロジェクト2】VPNサービス2の作成 項番8-2.【プロジェクト2】VPNサービス2の確認 項番9.【プロジェクト2】IKEポリシー2の作成 項番9-1.【プロジェクト2】IKEポリシー2の作成 項番9-2.【プロジェクト2】IKEポリシー2の確認 項番10.【プロジェクト2】IPSecポリシー2の作成 項番10-1.【プロジェクト2】IPSecポリシー2の作成 項番10-2.【プロジェクト2】IPSecポリシー2の確認 項番11.【プロジェクト1・2】ファイアーウォールルール/セキュリティグループルールの設定 項番12.【プロジェクト1】IPSecサイトコネクション1の作成 項番12-1.【プロジェクト1】IPSecサイトコネクション1の作成 項番12-2.【プロジェクト1】VPNサービス1の確認 項番12-3.【プロジェクト1】IPSecサイトコネクション1の確認 項番13.【プロジェクト2】IPSecサイトコネクション2の作成 項番13-1.【プロジェクト2】IPSecサイトコネクション2の作成 項番13-2.【プロジェクト2】VPNサービス2の確認 項番13-3.【プロジェクト2】IPSecサイトコネクション2の確認 項番14.【プロジェクト1・2】疎通確認 参考1.IPSecサイトコネクションの削除 参考2.IPSecポリシーの削除 参考3.IKEポリシーの削除 参考4.VPNサービスの削除 ─────────────────────────────────── 事前準備: あらかじめ以下を準備する必要があります。 ─────────────────────────────────── ・プロジェクト1 ルータ1 ネットワーク1 サブネット1 ポート1 ファイアーウォール1 セキュリティグループ1 キーペア1(プロジェクト2と共有) 仮想サーバ1 ※疎通確認に使用。 ・プロジェクト2 ルータ2 ネットワーク2 サブネット2 ポート2 ファイアーウォール2 セキュリティグループ2 キーペア1(プロジェクト1と共有) 仮想サーバ2 ※疎通確認に使用。 ─────────────────────────────────── IPSecVPN接続構成例: 以下のような異なるプロジェクト間のIPSecVPN接続構成例を示します。 ====================================================================== 【プロジェクト1】 【プロジェクト2】 【ルータ1】 (IPSecVPN接続) 【ルータ2】 (133.162.146.101)━━━━━━━━━━━━━━━(133.162.147.102) (192.168.201.1) (192.168.201.1) ┃ ┃ 【サブネット1】 【サブネット2】 (192.168.201.0/24) (192.168.211.0/24) ━━━━┳━━━━━━━ ━━━━━━┳━━━━━━━ ┃ ┃ 【仮想サーバ1】 【仮想サーバ2】 (192.168.201.11) (192.168.211.12) ====================================================================== 注意事項: ・本手順では、2つのプロジェクトを利用してIPSecVPN接続を行っています。 そのため、各プロジェクトの切り替えにはトークンの再取得が必要です。 ・IPSecVPN機能では、1つのルータに20個までVPNトンネルを作成可能です。 ・複数のVPN接続を作成する場合、ルータに作成した1つのVPNサービスに 対して、複数のIPSecVPN接続(IPSec-site-connection)を作成するように してください。 →Router:VPN Service:SiteConnection=1:1:N となるように VPN接続を作成してください。 ・VPNハブ&スポーク構成は実現できません。 ・本機能の仕様上、IPSecVPNを付与したルータはUDP/500番ポートが許可 されます。 ・本サンプルでは、「グローバルIP」を「フローティングIP」として 記載しています。 項番1.【プロジェクト1】プロジェクト1の情報確認 プロジェクト1のルータ、ネットワーク、サブネット、ポートの情報を 確認します。 項番1-1.【プロジェクト1】ルータ1の確認 ルータ1の設定情報を確認します。 環境コマンド例: ====================================================================== # ROUTER_ID=<ルータ1のID> ROUTER_ID=59e84618-a830-450d-8339-9d79b7f31246 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/routers/$ROUTER_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq . レスポンス例: ====================================================================== { "router": { "availability_zone": "jp-west-2a", "id": "59e84618-a830-450d-8339-9d79b7f31246", "routes": [], "tenant_id": "<プロジェクトID>", "admin_state_up": true, "name": "TEST_ROUTER_01", "external_gateway_info": { "enable_snat": true, "network_id": "112c51e5-9d1b-490e-9a96-5a20dfbc2298" }, "status": "ACTIVE" } } ====================================================================== 項番1-2.【プロジェクト1】ネットワーク1の確認 ネットワーク1の設定情報を確認します。 環境コマンド例: ====================================================================== # NETWORK_ID=<ルータ1に接続しているネットワークID> NETWORK_ID=ceb24647-7f27-4414-939f-9f3198a04nr3 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/networks/$NETWORK_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq . レスポンス例: ====================================================================== { "network": { "availability_zone": "jp-west-2a", "status": "ACTIVE", "subnets": [ "ca8b81d4-0d67-4599-87a7-302f91265390" ], "name": "TEST_NETWORK_01", "router:external": false, "tenant_id": "<プロジェクトID>", "admin_state_up": true, "shared": false, "id": "ceb24647-7f27-4414-939f-9f3198a04nr3" } } ====================================================================== 項番1-3.【プロジェクト1】サブネット1の確認 サブネット1の設定情報を確認します。 環境コマンド例: ====================================================================== # SUBNET_ID=<ルータ1に接続しているサブネットID> SUBNET_ID=ca8b81d4-0d67-4599-87a7-302f91265390 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/subnets/$SUBNET_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq . レスポンス例: ====================================================================== { "subnet": { "availability_zone": "jp-west-2a", "id": "ca8b81d4-0d67-4599-87a7-302f91265390", "cidr": "192.168.201.0/24", "gateway_ip": "192.168.201.1", "name": "TEST_SUBNET_01", "enable_dhcp": true, "network_id": "ceb24647-7f27-4414-939f-9f3198a04nr3", "tenant_id": "<プロジェクトID>", "dns_nameservers": [ "133.162.145.10", "133.162.145.9" ], "allocation_pools": [ { "end": "192.168.201.254", "start": "192.168.201.2" } ], "host_routes": [], "ip_version": 4 } } ====================================================================== 項番1-4.【プロジェクト1】ポート1の確認 ルータ1に接続しているポート1の情報を確認します。 項番1-4-1.【プロジェクト1】ポート一覧参照 ポート一覧を表示し、ルータ1に接続しているポート1を確認します。 ルータに接続しているポートは「network:router_interface」が表示され ます。 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/ports -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq '.ports[]| .device_owner, .name, .status, .id, .fixed_ips[]' レスポンス例: ====================================================================== } "compute:jp-west-2a" "" "ACTIVE" "2d62bdcd-4fa4-454f-9ba5-beacfaa6ce42" { "ip_address": "192.168.201.11", "subnet_id": "ca8b81d4-0d67-4599-87a7-302f91265390" } ~(中略)~ } "network:router_interface" "" "ACTIVE" "9e7bd693-976d-45a8-9ebe-6d0ab85006k5" { "ip_address": "192.168.201.1", "subnet_id": "ca8b81d4-0d67-4599-87a7-302f91265390" } ====================================================================== 項番1-4-2.【プロジェクト1】ポート1の確認 項番1-4-1で確認したポート1が、ルータ1に接続していることを 確認します。 「device_id」にルータ1のIDが表示されていることを確認します。 環境コマンド例: ====================================================================== # PORT_ID=<ポート1のID> PORT_ID=9e7bd693-976d-45a8-9ebe-6d0ab85006k5 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/ports/$PORT_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq . レスポンス例: ====================================================================== { "port": { "availability_zone": "jp-west-2a", "device_id": "59e84618-a830-450d-8339-9d79b7f31246", "security_groups": [], "id": "9e7bd693-976d-45a8-9ebe-6d0ab85006k5", "fixed_ips": [ { "ip_address": "192.168.201.1", "subnet_id": "ca8b81d4-0d67-4599-87a7-302f91265390" } ], "mac_address": "fa:16:3e:71:4d:a5", "device_owner": "network:router_interface", "status": "ACTIVE", "name": "", "allowed_address_pairs": [], "admin_state_up": true, "network_id": "ceb24647-7f27-4414-939f-9f3198a04nr3", "tenant_id": "<プロジェクトID>", "extra_dhcp_opts": [], "binding:vnic_type": "normal" } } ====================================================================== 項番2.【プロジェクト1】ポート1にフローティングIPの付与 ルータ1に接続しているポート1に対して、外部からアクセスするための フローティングIPの付与および確認を行います。 項番2-1.【プロジェクト1】フローティングIPの付与 ルータ1に接続しているポート1に対して、フローティングIPを付与します。 注意事項: ・設定する外部ネットワークIDはルータ1に接続している外部ネット ワークのIDを設定してください。 (項番1-1で確認したルータ情報の以下のパラメータを確認して ください。 「"external_gateway_info": { "network_id": "112c51e5-9d1b-490e-9a96-5a20dfbc2298"」) 環境コマンド例: ====================================================================== # EXT_NW_ID=<ルータ1に接続している外部ネットワークID> EXT_NW_ID=112c51e5-9d1b-490e-9a96-5a20dfbc2298 # ROUTER_PORT_ID=<ポート1のID> ROUTER_PORT_ID=9e7bd693-976d-45a8-9ebe-6d0ab85006k5 # AZ=<ルータ1が属するアベイラビリティーゾーン> AZ=jp-west-2a API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/floatingips -X POST -H "X-Auth-Token:$OS_AUTH_TOKEN" -H "Content-Type:application/json" -d '{"floatingip":{"floating_network_id":"'$EXT_NW_ID'", "port_id":"'$ROUTER_PORT_ID'", "availability_zone": "'$AZ'"}}' | jq . レスポンス例: ====================================================================== { "floatingip": { "availability_zone": "jp-west-2a", "router_id": "59e84618-a830-450d-8339-9d79b7f31246", "status": "DOWN", "tenant_id": "<プロジェクトID>", "floating_network_id": "112c51e5-9d1b-490e-9a96-5a20dfbc2298", "fixed_ip_address": "192.168.201.1", "floating_ip_address": "133.162.146.101", "port_id": "9e7bd693-976d-45a8-9ebe-6d0ab85006k5", "id": "e8e48456-e66d-4b41-b241-a08c138ef83j" } ====================================================================== 項番2-2.【プロジェクト1】フローティングIPの確認 ポート1にフローティングIPが付与されたことを確認します。 環境コマンド例: ====================================================================== # FLOATINGIP_ID=<ポート1に付与されたフローティングIPのID> FLOATINGIP_ID=e8e48456-e66d-4b41-b241-a08c138ef83j API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/floatingips/$FLOATINGIP_ID -X GET -H "X-Auth-Token:$OS_AUTH_TOKEN" -H "Content-Type:application/json" | jq . レスポンス例: ====================================================================== { "floatingip": { "availability_zone": "jp-west-2a", "router_id": "59e84618-a830-450d-8339-9d79b7f31246", "status": "ACTIVE", "tenant_id": "<プロジェクトID>", "floating_network_id": "112c51e5-9d1b-490e-9a96-5a20dfbc2298", "fixed_ip_address": "192.168.201.1", "floating_ip_address": "133.162.146.101", "port_id": "9e7bd693-976d-45a8-9ebe-6d0ab85006k5", "id": "e8e48456-e66d-4b41-b241-a08c138ef83j" } } ====================================================================== 項番3.【プロジェクト1】VPNサービス1の作成 ルータ1に対して、VPNサービス1の作成および確認を行います。 項番3-1.【プロジェクト1】VPNサービス1の作成 ルータ1にVPNサービス1を作成します。 環境コマンド例: ====================================================================== # VPN_SERVICE_NAME=<作成するVPNサービス名> VPN_SERVICE_NAME=TEST_VPN_Service_01 # SUBNET_ID=<ルータ1が接続しているサブネットID> SUBNET_ID=ca8b81d4-0d67-4599-87a7-302f91265390 # ROUTER_ID=<ルータ1のID> ROUTER_ID=59e84618-a830-450d-8339-9d79b7f31246 # ADMIN_STATE_UP= ADMIN_STATE_UP=true # AZ=<ルータ1が属するアベイラビリティゾーン> AZ=jp-west-2a API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/vpn/vpnservices -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"vpnservice":{"subnet_id": "'$SUBNET_ID'", "router_id": "'$ROUTER_ID'", "name": "'$VPN_SERVICE_NAME'", "admin_state_up": "'$ADMIN_STATE_UP'", "availability_zone": "'$AZ'" }}' | jq . レスポンス例: ====================================================================== { "vpnservice": { "availability_zone": "jp-west-2a", "router_id": "59e84618-a830-450d-8339-9d79b7f31246", "status": "PENDING_CREATE", "name": "TEST_VPN_Service_01", "admin_state_up": true, "subnet_id": "ca8b81d4-0d67-4599-87a7-302f91265390", "tenant_id": "<プロジェクトID>", "id": "5436461d-146c-4659-b92a-7c118bd07w31", "description": "" } } ====================================================================== 項番3-2.【プロジェクト1】VPNサービス1の確認 VPNサービス1が作成されたことを確認します。 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/vpn/vpnservices -X GET -H "X-Auth-Token:$OS_AUTH_TOKEN" -H "Content-Type:application/json" | jq . レスポンス例: ====================================================================== { "vpnservices": [ { "availability_zone": "jp-west-2a", "router_id": "59e84618-a830-450d-8339-9d79b7f31246", "status": "PENDING_CREATE", "name": "TEST_VPN_Service_01", "admin_state_up": true, "subnet_id": "ca8b81d4-0d67-4599-87a7-302f91265390", "tenant_id": "<プロジェクトID>", "id": "5436461d-146c-4659-b92a-7c118bd07w31", "description": "" } ] } ====================================================================== 項番4.【プロジェクト1】IKEポリシー1の作成 IPSec接続で使用するIKEポリシー1の作成および確認を行います。 項番4-1.【プロジェクト1】IKEポリシー1の作成 IPSec接続で使用するIKEポリシー1を作成します。 環境コマンド例: ====================================================================== # IKE_POLICY_NAME=<作成するIKEポリシー名> IKE_POLICY_NAME=TEST_IKEPOLICY_01 # PHASE_NEGOTIATION_MODE= PHASE_NEGOTIATION_MODE=main # AUTH_ALGORITHM=<認証ハッシュアルゴリズム(「sha1」を指定)> AUTH_ALGORITHM=sha1 # ENCRYPTION_ALGORITHM=<暗号化アルゴリズム(「aes-128」を指定)> ENCRYPTION_ALGORITHM=aes-128 # PFS= PFS=group5 # LIFETIME_UNITS=<ライフタイムの単位(「seconds」を指定)> LIFETIME_UNITS=seconds # LIFETIME_VALUE=<ライフタイムの値(「60~86400」までを指定)> LIFETIME_VALUE=7200 # IKE_VERSION= IKE_VERSION=v1 # AZ=<ルータ1が属するアベイラビリティゾーン> AZ=jp-west-2a API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/vpn/ikepolicies -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{ "ikepolicy": { "phase1_negotiation_mode": "'$PHASE_NEGOTIATION_MODE'", "auth_algorithm": "'$AUTH_ALGORITHM'", "encryption_algorithm": "'$ENCRYPTION_ALGORITHM'", "pfs": "'$PFS'", "lifetime": { "units": "'$LIFETIME_UNITS'", "value": "'$LIFETIME_VALUE'" }, "ike_version": "'$IKE_VERSION'", "name": "'$IKE_POLICY_NAME'", "availability_zone": "'$AZ'" } }' | jq . レスポンス例: ====================================================================== { "ikepolicy": { "availability_zone": "jp-west-2a", "phase1_negotiation_mode": "main", "id": "3acccabd-fb9e-433b-85c8-537d67812wl7", "name": "TEST_IKEPOLICY_01", "tenant_id": "<プロジェクトID>", "description": "", "auth_algorithm": "sha1", "encryption_algorithm": "aes-128", "pfs": "group5", "lifetime": { "value": 7200, "units": "seconds" }, "ike_version": "v1" } } ====================================================================== 項番4-2.【プロジェクト1】IKEポリシー1の確認 IKEポリシー1が作成されたことを確認します。 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/vpn/ikepolicies -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" | jq . レスポンス例: ====================================================================== { "ikepolicies": [ { "availability_zone": "jp-west-2a", "phase1_negotiation_mode": "main", "id": "3acccabd-fb9e-433b-85c8-537d67812wl7", "name": "TEST_IKEPOLICY_01", "tenant_id": "<プロジェクトID>", "description": "", "auth_algorithm": "sha1", "encryption_algorithm": "aes-128", "pfs": "group5", "lifetime": { "value": 7200, "units": "seconds" }, "ike_version": "v1" } ] } ====================================================================== 項番5.【プロジェクト1】IPSecポリシー1の作成 IPSec接続で使用するIPSecポリシー1の作成および確認を行います。 項番5-1.【プロジェクト1】IPSecポリシー1の作成 IPSec接続で使用するIPSecポリシー1を作成します。 環境コマンド例: ====================================================================== # IPSEC_POLICY_NAME=<作成するIPSecポリシー名> IPSEC_POLICY_NAME=TEST_IPSECPOLICY_01 # TRASFORM_PROTOCOL=<使用する変換プロトコル(「esp」を指定)> TRASFORM_PROTOCOL=esp # AUTH_ALGORITHM=<認証アルゴリズム(「sha1」を指定)> AUTH_ALGORITHM=sha1 # ENCAPSULATION_MODE=<カプセル化モード(「tunnel」を指定)> ENCAPSULATION_MODE=tunnel # ENCRYPTION_ALGORITHM=<暗号化アルゴリズム(「aes-128」を指定)> ENCRYPTION_ALGORITHM=aes-128 # PFS= PFS=group5 # LIFETIME_UNITS=<ライフタイムの単位(「seconds」を指定)> LIFETIME_UNITS=seconds # LIFETIME_VALUE=<ライフタイムの値(「60~86400」までを指定)> LIFETIME_VALUE=7200 # AZ=<ルータ1が属するアベイラビリティゾーン> AZ=jp-west-2a API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/vpn/ipsecpolicies -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{ "ipsecpolicy": { "name": "'$IPSEC_POLICY_NAME'", "transform_protocol": "'$TRASFORM_PROTOCOL'", "auth_algorithm": "'$AUTH_ALGORITHM'", "encapsulation_mode": "'$ENCAPSULATION_MODE'", "encryption_algorithm": "'$ENCRYPTION_ALGORITHM'", "pfs": "'$PFS'", "lifetime": { "units": "'$LIFETIME_UNITS'", "value": "'$LIFETIME_VALUE'" }, "availability_zone": "'$AZ'" } }' | jq . レスポンス例: ====================================================================== { "ipsecpolicy": { "availability_zone": "jp-west-2a", "description": "", "id": "ba5072d2-504d-448f-b1ed-deb1f030a941", "name": "TEST_IPSECPOLICY_01", "transform_protocol": "esp", "auth_algorithm": "sha1", "encapsulation_mode": "tunnel", "encryption_algorithm": "aes-128", "pfs": "group5", "tenant_id": "<プロジェクトID>", "lifetime": { "value": 7200, "units": "seconds" } } } ====================================================================== 項番5-2.【プロジェクト1】IPSecポリシー1の確認 IPSecポリシー1が作成されたことを確認します。 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/vpn/ipsecpolicies -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" | jq . レスポンス例: ====================================================================== { "ipsecpolicies": [ { "availability_zone": "jp-west-2a", "description": "", "id": "ba5072d2-504d-448f-b1ed-deb1f030a941", "name": "TEST_IPSECPOLICY_01", "transform_protocol": "esp", "auth_algorithm": "sha1", "encapsulation_mode": "tunnel", "encryption_algorithm": "aes-128", "pfs": "group5", "tenant_id": "<プロジェクトID>", "lifetime": { "value": 7200, "units": "seconds" } } ] } ====================================================================== 項番6.【プロジェクト2】プロジェクト2の情報確認 プロジェクト2のルータ、ネットワーク、サブネット、ポートの情報を 確認します。 注意事項: プロジェクトの切り替えにはトークンの再取得が必要です。 項番6-1.【プロジェクト2】ルータ2の確認 ルータ2の設定情報を確認します。 環境コマンド例: ====================================================================== # ROUTER_ID=<ルータ2のID> ROUTER_ID=a05306c5-f09d-4eb2-8f18-01b62ce248c1 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/routers/$ROUTER_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq . レスポンス例: ====================================================================== { "router": { "availability_zone": "jp-west-2a", "id": "a05306c5-f09d-4eb2-8f18-01b62ce248c1", "routes": [], "tenant_id": "<プロジェクトID>", "admin_state_up": true, "name": "TEST_ROUTER_02", "external_gateway_info": { "enable_snat": true, "network_id": "112c51e5-9d1b-490e-9a96-5a20dfbc2298" }, "status": "ACTIVE" } } ====================================================================== 項番6-2.【プロジェクト2】ネットワーク2の確認 ネットワーク2の設定情報を確認します。 環境コマンド例: ====================================================================== # NETWORK_ID=<ルータ2に接続しているネットワークID> NETWORK_ID=d8c49da6-0162-4014-972b-084e3e6bdr26 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/networks/$NETWORK_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq . レスポンス例: ====================================================================== { "network": { "availability_zone": "jp-west-2a", "status": "ACTIVE", "subnets": [ "e67cc3c9-a5a8-499f-bd76-820ce5fcf1d2" ], "name": "TEST_NETWORK_02", "router:external": false, "tenant_id": "<プロジェクトID>", "admin_state_up": true, "shared": false, "id": "d8c49da6-0162-4014-972b-084e3e6bdr26" } } ====================================================================== 項番6-3.【プロジェクト2】サブネット2の確認 サブネット2の設定情報を確認します。 環境コマンド例: ====================================================================== # SUBNET_ID=<ルータ2に接続しているサブネットID> SUBNET_ID=e67cc3c9-a5a8-499f-bd76-820ce5fcf1d2 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/subnets/$SUBNET_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq . レスポンス例: ====================================================================== { "subnet": { "availability_zone": "jp-west-2a", "id": "e67cc3c9-a5a8-499f-bd76-820ce5fcf1d2", "cidr": "192.168.211.0/24", "gateway_ip": "192.168.211.1", "name": "TEST_SUBNET_02", "enable_dhcp": true, "network_id": "d8c49da6-0162-4014-972b-084e3e6bdr26", "tenant_id": "<プロジェクトID>", "dns_nameservers": [ "133.162.145.10", "133.162.145.9" ], "allocation_pools": [ { "end": "192.168.211.254", "start": "192.168.211.2" } ], "host_routes": [], "ip_version": 4 } } ====================================================================== 項番6-4.【プロジェクト2】ポート2の確認 ルータ2に接続しているポート2の情報を確認します。 項番6-4-1.【プロジェクト2】ポート一覧参照 ポート一覧を表示し、ルータ2に接続しているポート2を確認します。 ルータに接続しているポートは「network:router_interface」が表示 されます。 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/ports -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq '.ports[]| .device_owner, .name, .status, .id, .fixed_ips[]' レスポンス例: ====================================================================== "compute:jp-west-2a" "" "ACTIVE" "0f56919a-5b3c-4798-a11b-61b49b0df128" { "ip_address": "192.168.211.12", "subnet_id": "e67cc3c9-a5a8-499f-bd76-820ce5fcf1d2" } ~中略~ "network:router_interface" "" "ACTIVE" "060d8788-6ec7-47b4-8e9c-d9903e2aceo6" { "ip_address": "192.168.211.1", "subnet_id": "e67cc3c9-a5a8-499f-bd76-820ce5fcf1d2" } ====================================================================== 項番6-4-2.【プロジェクト2】ポート2の確認 項番6-4-1で確認したポート2が、ルータ2に接続していることを 確認します。 「device_id」にルータ2のIDが表示されていることを確認します。 環境コマンド例: ====================================================================== # PORT_ID=<ポート2のID> PORT_ID=060d8788-6ec7-47b4-8e9c-d9903e2aceo6 API実行コマンド例: ====================================================================== curl -s $NETWORK/v2.0/ports/$PORT_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq . レスポンス例: ====================================================================== { "port": { "availability_zone": "jp-west-2a", "device_id": "a05306c5-f09d-4eb2-8f18-01b62ce248c1", "security_groups": [], "id": "060d8788-6ec7-47b4-8e9c-d9903e2aceo6", "fixed_ips": [ { "ip_address": "192.168.211.1", "subnet_id": "e67cc3c9-a5a8-499f-bd76-820ce5fcf1d2" } ], "mac_address": "fa:16:3e:a9:2e:72", "device_owner": "network:router_interface", "status": "ACTIVE", "name": "", "allowed_address_pairs": [], "admin_state_up": true, "network_id": "d8c49da6-0162-4014-972b-084e3e6bdr26", "tenant_id": "<プロジェクトID>", "extra_dhcp_opts": [], "binding:vnic_type": "normal" } } ====================================================================== 項番7.【プロジェクト2】ポート2にフローティングIPの付与 ルータ2に接続しているポート2に対して、外部からアクセスするための フローティングIPの付与および確認を行います。 項番7-1.【プロジェクト2】フローティングIPの付与 ルータ2に接続しているポート2に対して、フローティングIPを付与します。 注意事項: 設定する外部ネットワークIDはルータ2に接続している外部ネット ワークのIDを設定してください。 (項番6-1で確認したルータ情報の以下のパラメータを確認して ください。 「"external_gateway_info": { "network_id": "112c51e5-9d1b-490e-9a96-5a20dfbc2298"}」) 環境コマンド例: ====================================================================== # EXT_NW_ID=<ルータ2に接続している外部ネットワークID> EXT_NW_ID=112c51e5-9d1b-490e-9a96-5a20dfbc2298 # ROUTER_PORT_ID=<ポート2のID> ROUTER_PORT_ID=060d8788-6ec7-47b4-8e9c-d9903e2aceo6 # AZ=<ルータ2が属するアベイラビリティーゾーン> AZ=jp-west-2a API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/floatingips -X POST -H "X-Auth-Token:$OS_AUTH_TOKEN" -H "Content-Type:application/json" -d '{"floatingip":{"floating_network_id":"'$EXT_NW_ID'", "port_id":"'$ROUTER_PORT_ID'", "availability_zone": "'$AZ'"}}' | jq . レスポンス例: ====================================================================== { "floatingip": { "availability_zone": "jp-west-2a", "router_id": "a05306c5-f09d-4eb2-8f18-01b62ce248c1", "status": "DOWN", "tenant_id": "<プロジェクトID>", "floating_network_id": "112c51e5-9d1b-490e-9a96-5a20dfbc2298", "fixed_ip_address": "192.168.211.1", "floating_ip_address": "133.162.147.102", "port_id": "060d8788-6ec7-47b4-8e9c-d9903e2aceo6", "id": "092c6b38-ee81-4468-9e11-001bb411f8tg" } } ====================================================================== 項番7-2.【プロジェクト2】フローティングIPの確認 ポート2にフローティングIPが付与されたことを確認します。 環境コマンド例: ====================================================================== # FLOATINGIP_ID=<ポート2に付与されたフローティングIPのID> FLOATINGIP_ID=092c6b38-ee81-4468-9e11-001bb411f8tg API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/floatingips/$FLOATINGIP_ID -X GET -H "X-Auth-Token:$OS_AUTH_TOKEN" -H "Content-Type:application/json" | jq . レスポンス例: ====================================================================== { "floatingip": { "availability_zone": "jp-west-2a", "router_id": "a05306c5-f09d-4eb2-8f18-01b62ce248c1", "status": "ACTIVE", "tenant_id": "<プロジェクトID>", "floating_network_id": "112c51e5-9d1b-490e-9a96-5a20dfbc2298", "fixed_ip_address": "192.168.211.1", "floating_ip_address": "133.162.147.102", "port_id": "060d8788-6ec7-47b4-8e9c-d9903e2aceo6", "id": "092c6b38-ee81-4468-9e11-001bb411f8tg" } } ====================================================================== 項番8.【プロジェクト2】VPNサービス2の作成 ルータ2に対して、VPNサービス2の作成および確認を行います。 項番8-1.【プロジェクト2】VPNサービス2の作成 ルータ2にVPNサービス2を作成します。 環境コマンド例: ====================================================================== # VPN_SERVICE_NAME=<作成するVPNサービス名> VPN_SERVICE_NAME=TEST_VPN_Service_02 # SUBNET_ID=<ルータ2が接続されているサブネットID> SUBNET_ID=e67cc3c9-a5a8-499f-bd76-820ce5fcf1d2 # ROUTER_ID=<ルータ2のID> ROUTER_ID=a05306c5-f09d-4eb2-8f18-01b62ce248c1 # ADMIN_STATE_UP= ADMIN_STATE_UP=true # AZ=<ルータ2が属するアベイラビリティゾーン> AZ=jp-west-2a API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/vpn/vpnservices -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"vpnservice":{"subnet_id": "'$SUBNET_ID'", "router_id": "'$ROUTER_ID'", "name": "'$VPN_SERVICE_NAME'", "admin_state_up": "'$ADMIN_STATE_UP'", "availability_zone": "'$AZ'" }}' | jq . レスポンス例: ====================================================================== { "vpnservice": { "availability_zone": "jp-west-2a", "router_id": "a05306c5-f09d-4eb2-8f18-01b62ce248c1", "status": "PENDING_CREATE", "name": "TEST_VPN_Service_02", "admin_state_up": true, "subnet_id": "e67cc3c9-a5a8-499f-bd76-820ce5fcf1d2", "tenant_id": "<プロジェクトID>", "id": "35c872c5-b505-409a-a3c8-cb17b023b5ig", "description": "" } } ====================================================================== 項番8-2.【プロジェクト2】VPNサービス2の確認 VPNサービス2が作成されたことを確認します。 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/vpn/vpnservices -X GET -H "X-Auth-Token:$OS_AUTH_TOKEN" -H "Content-Type:application/json" | jq . レスポンス例: ====================================================================== { "vpnservices": [ { "availability_zone": "jp-west-2a", "router_id": "a05306c5-f09d-4eb2-8f18-01b62ce248c1", "status": "PENDING_CREATE", "name": "TEST_VPN_Service_02", "admin_state_up": true, "subnet_id": "e67cc3c9-a5a8-499f-bd76-820ce5fcf1d2", "tenant_id": "<プロジェクトID>", "id": "35c872c5-b505-409a-a3c8-cb17b023b5ig", "description": "" } ] } ====================================================================== 項番9.【プロジェクト2】IKEポリシー2の作成 IPSec接続で使用するIKEポリシー2の作成および確認を行います。 項番9-1.【プロジェクト2】IKEポリシー2の作成 IPSec接続で使用するIKEポリシー2を作成します。 環境コマンド例: ====================================================================== # IKE_POLICY_NAME=<作成するIKEポリシー名> IKE_POLICY_NAME=TEST_IKEPOLICY_02 # PHASE_NEGOTIATION_MODE= PHASE_NEGOTIATION_MODE=main # AUTH_ALGORITHM=<認証ハッシュアルゴリズム(「sha1」を指定)> AUTH_ALGORITHM=sha1 # ENCRYPTION_ALGORITHM=<暗号化アルゴリズム(「aes-128」を指定)> ENCRYPTION_ALGORITHM=aes-128 # PFS= PFS=group5 # LIFETIME_UNITS=<ライフタイムの単位(「seconds」を指定)> LIFETIME_UNITS=seconds # LIFETIME_VALUE=<ライフタイムの値(「60~86400」までを指定)> LIFETIME_VALUE=7200 # IKE_VERSION= IKE_VERSION=v1 # AZ=<ルータ2が属するアベイラビリティゾーン> AZ=jp-west-2a API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/vpn/ikepolicies -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{ "ikepolicy": { "phase1_negotiation_mode": "'$PHASE_NEGOTIATION_MODE'", "auth_algorithm": "'$AUTH_ALGORITHM'", "encryption_algorithm": "'$ENCRYPTION_ALGORITHM'", "pfs": "'$PFS'", "lifetime": { "units": "'$LIFETIME_UNITS'", "value": "'$LIFETIME_VALUE'" }, "ike_version": "'$IKE_VERSION'", "name": "'$IKE_POLICY_NAME'", "availability_zone": "'$AZ'" } }' | jq . レスポンス例: ====================================================================== { "ikepolicy": { "availability_zone": "jp-west-2a", "phase1_negotiation_mode": "main", "id": "28693654-953c-4f3f-99da-c1abe2640wdy", "name": "TEST_IKEPOLICY_02", "tenant_id": "<プロジェクトID>", "description": "", "auth_algorithm": "sha1", "encryption_algorithm": "aes-128", "pfs": "group5", "lifetime": { "value": 7200, "units": "seconds" }, "ike_version": "v1" } } ====================================================================== 項番9-2.【プロジェクト2】IKEポリシー2の確認 IKEポリシー2が作成されたことを確認します。 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/vpn/ikepolicies -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" | jq . レスポンス例: ====================================================================== { "ikepolicies": [ { "availability_zone": "jp-west-2a", "phase1_negotiation_mode": "main", "id": "28693654-953c-4f3f-99da-c1abe2640wdy", "name": "TEST_IKEPOLICY_02", "tenant_id": "<プロジェクトID>", "description": "", "auth_algorithm": "sha1", "encryption_algorithm": "aes-128", "pfs": "group5", "lifetime": { "value": 7200, "units": "seconds" }, "ike_version": "v1" } ] } ====================================================================== 項番10.【プロジェクト2】IPSecポリシー2の作成 IPSec接続で使用するIPSecポリシー2の作成および確認を行います。 項番10-1.【プロジェクト2】IPSecポリシー2の作成 IPSec接続で使用するIPSecポリシー2を作成します。 環境コマンド例: ====================================================================== # IPSEC_POLICY_NAME=<作成するIPSecポリシー名> IPSEC_POLICY_NAME=TEST_IPSECPOLICY_02 # TRASFORM_PROTOCOL=<使用する変換プロトコル(「esp」を指定)> TRASFORM_PROTOCOL=esp # AUTH_ALGORITHM=<認証アルゴリズム(「sha1」を指定)> AUTH_ALGORITHM=sha1 # ENCAPSULATION_MODE=<カプセル化モード(「tunnel」を指定)> ENCAPSULATION_MODE=tunnel # ENCRYPTION_ALGORITHM=<暗号化アルゴリズム(「aes-128」を指定)> ENCRYPTION_ALGORITHM=aes-128 # PFS= PFS=group5 # LIFETIME_UNITS=<ライフタイムの単位(「seconds」を指定)> LIFETIME_UNITS=seconds # LIFETIME_VALUE=<ライフタイムの値(「60~86400」までを指定)> LIFETIME_VALUE=7200 # AZ=<ルータ2が属するアベイラビリティゾーン> AZ=jp-west-2a API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/vpn/ipsecpolicies -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{ "ipsecpolicy": { "name": "'$IPSEC_POLICY_NAME'", "transform_protocol": "'$TRASFORM_PROTOCOL'", "auth_algorithm": "'$AUTH_ALGORITHM'", "encapsulation_mode": "'$ENCAPSULATION_MODE'", "encryption_algorithm": "'$ENCRYPTION_ALGORITHM'", "pfs": "'$PFS'", "lifetime": { "units": "'$LIFETIME_UNITS'", "value": "'$LIFETIME_VALUE'" }, "availability_zone": "'$AZ'" } }' | jq . レスポンス例: ====================================================================== { "ipsecpolicy": { "availability_zone": "jp-west-2a", "description": "", "id": "121462af-364a-4ebb-9635-c31a236499iu", "name": "TEST_IPSECPOLICY_02", "transform_protocol": "esp", "auth_algorithm": "sha1", "encapsulation_mode": "tunnel", "encryption_algorithm": "aes-128", "pfs": "group5", "tenant_id": "<プロジェクトID>", "lifetime": { "value": 7200, "units": "seconds" } } } ====================================================================== 項番10-2.【プロジェクト2】IPSecポリシー2の確認 IPSecポリシー2が作成されたことを確認します。 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/vpn/ipsecpolicies -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" | jq . レスポンス例: ====================================================================== { "ipsecpolicies": [ { "availability_zone": "jp-west-2a", "description": "", "id": "121462af-364a-4ebb-9635-c31a236499iu", "name": "TEST_IPSECPOLICY_02", "transform_protocol": "esp", "auth_algorithm": "sha1", "encapsulation_mode": "tunnel", "encryption_algorithm": "aes-128", "pfs": "group5", "tenant_id": "<プロジェクトID>", "lifetime": { "value": 7200, "units": "seconds" } } ] } ====================================================================== 項番11.【プロジェクト1・2】ファイアーウォールルール/セキュリティグループルールの設定 プロジェクト1とプロジェクト2の双方に必要に応じてファイアーウォール ルール/セキュリティグループルールの設定を実施してください。 注意事項: ・本機能の仕様上、IPSecVPNを付与したルータはUDP/500番ポートが許可 されます。 ・ルールの作成方法については、APIユーザーズガイド「ファイアー ウォールルールの作成」または「セキュリティグループルールの作成」 を参照してください。 ルール追加設定例: ====================================================================== ssh(22ポート)、ICMPを許可する場合。 ・【プロジェクト1】での設定 「プロジェクト2」のサブネットのネットワーク(「192.168.211.0/24」) に対して22ポート、ICMPを許可。 ・【プロジェクト2】での設定 「プロジェクト1」のサブネットのネットワーク(「192.168.201.0/24」) に対して22ポート、ICMPを許可。 項番12.【プロジェクト1】IPSecサイトコネクション1の作成 プロジェクト1にIPSecサイトコネクション1の作成および状態確認を行い ます。 項番12-1.【プロジェクト1】IPSecサイトコネクション1の作成 プロジェクト1にIPSecサイトコネクション1を作成します。 注意事項: ・事前に作成しているキーペアはプロジェクト間で共通のキーペアを 使用してください。 ・キーペアのインポートの手順はサービスポータルユーザーズガイド 「キーペアインポート」を参照してください。 環境コマンド例: ====================================================================== # IPSEC_SITE_NAME= IPSEC_SITE_NAME=TEST_IPSEC_SITE_CON_01 # PSK=<事前に作成したキーペア名> PSK=TEST_Shared_Key01 # INITIATOR=<イニシエータモード(「bi-directional」を指定)> INITIATOR=bi-directional # IPSEC_POLICY_ID=<項番5-1で作成したIPSecポリシー1のID> IPSEC_POLICY_ID=ba5072d2-504d-448f-b1ed-deb1f030a941 # ADMIN_STATE_UP= ADMIN_STATE_UP=true # PEER_CIDRS=<サブネット2のアドレス(CIDR形式で指定)> PEER_CIDRS=192.168.211.0/24 # MTU=<最大送信データサイズ> MTU=1500 # IKE_POLICY_ID=<項番4-1で作成したIKEポリシー1のID> IKE_POLICY_ID=3acccabd-fb9e-433b-85c8-537d67812wl7 # DPD_ACTION=<接続先無応答時の動作(「hold」(保持)を指定)> DPD_ACTION=hold # DPD_INTERVAL=<接続先無応答時の接続確認リトライ間隔(秒)> DPD_INTERVAL=100 # DPD_TIMEOUT=<接続先無応答時のタイムアウト時間(秒)> DPD_TIMEOUT=240 # VPN_SERVICE_ID=<項番3-1で作成したVPNサービス1のID> VPN_SERVICE_ID=5436461d-146c-4659-b92a-7c118bd07w31 # PEER_ADDRESS=<項番7-1で作成したプロジェクト2のフローティングIP # アドレス> PEER_ADDRESS=133.162.147.102 # PEER_ID=<対向のルータを識別するためのID(プロジェクト2のフロー # ティングIPを指定)> PEER_ID=133.162.147.102 # AZ=<ルータ1が属するアベイラビリティゾーン> AZ=jp-west-2a API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/vpn/ipsec-site-connections -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"ipsec_site_connection": {"psk": "'$PSK'", "initiator": "'$INITIATOR'", "ipsecpolicy_id": "'$IPSEC_POLICY_ID'", "admin_state_up": "'$ADMIN_STATE_UP'", "peer_cidrs": ["'$PEER_CIDRS'"], "mtu": "'$MTU'", "ikepolicy_id": "'$IKE_POLICY_ID'", "dpd": {"action": "'$DPD_ACTION'", "interval": "'$DPD_INTERVAL'", "timeout": "'$DPD_TIMEOUT'"}, "vpnservice_id": "'$VPN_SERVICE_ID'", "peer_address": "'$PEER_ADDRESS'", "peer_id": "'$PEER_ID'", "name": "'$IPSEC_SITE_NAME'", "availability_zone": "'$AZ'"}}' | jq . レスポンス例: ====================================================================== { "ipsec_site_connection": { "availability_zone": "jp-west-2a", "description": "", "id": "892eaccb-aa3d-4ddb-8e2e-8dfeafa04914", "peer_cidrs": [ "192.168.211.0/24" ], "auth_mode": "psk", "tenant_id": "<プロジェクトID>", "admin_state_up": true, "name": "TEST_IPSEC_SITE_CON_01", "initiator": "bi-directional", "psk": "TEST_Shared_Key01", "status": "PENDING_CREATE", "mtu": 1500, "ikepolicy_id": "3acccabd-fb9e-433b-85c8-537d67812wl7", "vpnservice_id": "5436461d-146c-4659-b92a-7c118bd07w31", "dpd": { "timeout": 240, "interval": 100, "action": "hold" }, "route_mode": "static", "ipsecpolicy_id": "ba5072d2-504d-448f-b1ed-deb1f030a941", "peer_address": "133.162.147.102", "peer_id": "133.162.147.102" } } ====================================================================== 項番12-2.【プロジェクト1】VPNサービス1の確認 VPNサービス1のステータスが「ACTIVE」(正常に動作中)になっているか を確認します。 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/vpn/vpnservices -X GET -H "X-Auth-Token:$OS_AUTH_TOKEN" -H "Content-Type:application/json" | jq . レスポンス例: ====================================================================== { "vpnservices": [ { "availability_zone": "jp-west-2a", "router_id": "59e84618-a830-450d-8339-9d79b7f31246", "status": "ACTIVE", "name": "TEST_VPN_Service_01", "admin_state_up": true, "subnet_id": "ca8b81d4-0d67-4599-87a7-302f91265390", "tenant_id": "<プロジェクトID>", "id": "5436461d-146c-4659-b92a-7c118bd07w31", "description": "" } ] } ====================================================================== 項番12-3.【プロジェクト1】IPSecサイトコネクション1の確認 IPSecサイトコネクション1のステータスを確認します。 プロジェクト2のIPSecサイトコネクション2が作成完了するまでは ステータスが「DOWN」となります。 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/vpn/ipsec-site-connections -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" | jq . レスポンス例: ====================================================================== { "ipsec_site_connections": [ { "availability_zone": "jp-west-2a", "description": "", "id": "892eaccb-aa3d-4ddb-8e2e-8dfeafa04914", "peer_cidrs": [ "192.168.211.0/24" ], "auth_mode": "psk", "tenant_id": "<プロジェクトID>", "admin_state_up": true, "name": "TEST_IPSEC_SITE_CON_01", "initiator": "bi-directional", "psk": "TEST_Shared_Key01", "status": "DOWN", "mtu": 1500, "ikepolicy_id": "3acccabd-fb9e-433b-85c8-537d67812wl7", "vpnservice_id": "59e84618-a830-450d-8339-9d79b7f31246", "dpd": { "timeout": 240, "interval": 100, "action": "hold" }, "route_mode": "static", "ipsecpolicy_id": "ba5072d2-504d-448f-b1ed-deb1f030a941", "peer_address": "133.162.147.102", "peer_id": "133.162.147.102" } ] } ====================================================================== 項番13.【プロジェクト2】IPSecサイトコネクション2の作成 プロジェクト2にIPSecサイトコネクション2の作成および状態確認を行います。 項番13-1.【プロジェクト2】IPSecサイトコネクション2の作成 プロジェクト2にIPSecサイトコネクション2を作成します。 注意事項: ・事前に作成しているキーペアはプロジェクト間で共通のキーペアを 使用してください。 ・キーペアのインポートについての手順はサービスポータルユーザーズ ガイド「キーペアインポート」を参照してください。 環境コマンド例: ====================================================================== # IPSEC_SITE_NAME= IPSEC_SITE_NAME=TEST_IPSEC_SITE_CON_02 # PSK=<事前に作成したキーペア名> PSK=TEST_Shared_Key01 # INITIATOR=<イニシエータモード(「bi-directional」を指定)> INITIATOR=bi-directional # IPSEC_POLICY_ID=<項番10-1で作成したIPSecポリシー2のID> IPSEC_POLICY_ID=121462af-364a-4ebb-9635-c31a236499iu # ADMIN_STATE_UP= ADMIN_STATE_UP=true # PEER_CIDRS=<サブネット1のアドレス(CIDR形式で指定)> PEER_CIDRS=192.168.201.0/24 # MTU=<最大送信データサイズ> MTU=1500 # IKE_POLICY_ID=<項番9-1で作成したIKEポリシーのID> IKE_POLICY_ID=28693654-953c-4f3f-99da-c1abe2640wdy # DPD_ACTION=<接続先無応答時の動作(「hold」(保持)を指定)> DPD_ACTION=hold # DPD_INTERVAL=<接続先無応答時の接続確認リトライ間隔(秒)> DPD_INTERVAL=100 # DPD_TIMEOUT=<接続先無応答時のタイムアウト時間(秒)> DPD_TIMEOUT=240 # VPN_SERVICE_ID=<項番8-1で作成したVPNサービス2のID> VPN_SERVICE_ID=35c872c5-b505-409a-a3c8-cb17b023b5ig # PEER_ADDRESS=<項番2-1で作成したプロジェクト1のフローティングIP # アドレス> PEER_ADDRESS=133.162.146.101 # PEER_ID=<対向のルータを識別するためのID(ここではフローティングIPを指定)> PEER_ID=133.162.146.101 # AZ=<ルータ2が属するアベイラビリティゾーン> AZ=jp-west-2a API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/vpn/ipsec-site-connections -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"ipsec_site_connection": {"psk": "'$PSK'", "initiator": "'$INITIATOR'", "ipsecpolicy_id": "'$IPSEC_POLICY_ID'", "admin_state_up": "'$ADMIN_STATE_UP'", "peer_cidrs": ["'$PEER_CIDRS'"], "mtu": "'$MTU'", "ikepolicy_id": "'$IKE_POLICY_ID'", "dpd": {"action": "'$DPD_ACTION'", "interval": "'$DPD_INTERVAL'", "timeout": "'$DPD_TIMEOUT'"}, "vpnservice_id": "'$VPN_SERVICE_ID'", "peer_address": "'$PEER_ADDRESS'", "peer_id": "'$PEER_ID'", "name": "'$IPSEC_SITE_NAME'", "availability_zone": "'$AZ'"}}' | jq . レスポンス例: ====================================================================== { "ipsec_site_connection": { "availability_zone": "jp-west-2a", "description": "", "id": "01206dab-dccc-4d98-ad18-1ce1ed713uj6", "peer_cidrs": [ "192.168.201.0/24" ], "auth_mode": "psk", "tenant_id": "<プロジェクトID>", "admin_state_up": true, "name": "TEST_IPSEC_SITE_CON_02", "initiator": "bi-directional", "psk": "TEST_Shared_Key01", "status": "PENDING_CREATE", "mtu": 1500, "ikepolicy_id": "28693654-953c-4f3f-99da-c1abe2640wdy", "vpnservice_id": "35c872c5-b505-409a-a3c8-cb17b023b5ig", "dpd": { "timeout": 240, "interval": 100, "action": "hold" }, "route_mode": "static", "ipsecpolicy_id": "121462af-364a-4ebb-9635-c31a236499iu", "peer_address": "133.162.146.101", "peer_id": "133.162.146.101" } } ====================================================================== 項番13-2.【プロジェクト2】VPNサービス2の確認 VPNサービス2のステータスが「ACTIVE」(正常に動作中)になっているか を確認します。 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/vpn/vpnservices -X GET -H "X-Auth-Token:$OS_AUTH_TOKEN" -H "Content-Type:application/json" | jq . レスポンス例: ====================================================================== { "vpnservices": [ { "availability_zone": "jp-west-2a", "router_id": "a05306c5-f09d-4eb2-8f18-01b62ce248c1", "status": "ACTIVE", "name": "TEST_VPN_Service_02", "admin_state_up": true, "subnet_id": "e67cc3c9-a5a8-499f-bd76-820ce5fcf1d2", "tenant_id": "<プロジェクトID>", "id": "35c872c5-b505-409a-a3c8-cb17b023b5ig", "description": "" } ] } ====================================================================== 項番13-3.【プロジェクト2】IPSecサイトコネクション2の確認 IPSecサイトコネクション2のステータスが「ACTIVE」になっていることを 確認します。 API実行コマンド例: ====================================================================== curl -Ss $NETWORK/v2.0/vpn/ipsec-site-connections -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" | jq . レスポンス例: ====================================================================== { "ipsec_site_connections": [ { "availability_zone": "jp-west-2a", "description": "", "id": "01206dab-dccc-4d98-ad18-1ce1ed713uj6", "peer_cidrs": [ "192.168.201.0/24" ], "auth_mode": "psk", "tenant_id": "<プロジェクトID>", "admin_state_up": true, "name": "TEST_IPSEC_SITE_CON_02", "initiator": "bi-directional", "psk": "TEST_Shared_Key01", "status": "ACTIVE", "mtu": 1500, "ikepolicy_id": "28693654-953c-4f3f-99da-c1abe2640wdy", "vpnservice_id": "35c872c5-b505-409a-a3c8-cb17b023b5ig", "dpd": { "timeout": 240, "interval": 100, "action": "hold" }, "route_mode": "static", "ipsecpolicy_id": "121462af-364a-4ebb-9635-c31a236499iu", "peer_address": "133.162.146.101", "peer_id": "133.162.146.101" } ] } ====================================================================== 項番14.【プロジェクト1・2】疎通確認 各プロジェクトに作成されている仮想サーバから、接続先の仮想サーバに 対して、ping、ssh等で接続が可能であることを確認して下さい。 参考1.IPSecサイトコネクションの削除 指定したIPSecサイトコネクションを削除します。 環境コマンド例: ====================================================================== # TMP_IPSEC_SITE_CON_ID=<削除するIPSecサイトコネクションID> TMP_IPSEC_SITE_CON_ID=892eaccb-aa3d-4ddb-8e2e-8dfeafa04914 API実行コマンド例: ====================================================================== curl -i -Ss $NETWORK/v2.0/vpn/ipsec-site-connections/$TMP_IPSEC_SITE_CON_ID -X DELETE -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" レスポンス例: ====================================================================== HTTP/1.1 204 No Content X-Fcx-Endpoint-Request: EXECUTED_REQ001233810_204 Date: Tue, 25 Jul 2017 08:53:29 GMT Server: Apache x-openstack-request-id: req-7ca7b0b9-1005-4c25-b399-cc9a02171e2a Cache-Control: no-cache X-Request-Id: 08e65c5b-21d1-445f-8b0d-431d80f62b59 X-Runtime: 0.177000 Connection: close ====================================================================== 参考2.IPSecポリシーの削除 指定したIPSecポリシーを削除します。 環境コマンド例: ====================================================================== # TMP_IPSEC_POLICY_ID=<削除するIPSecポリシーID> TMP_IPSEC_POLICY_ID=ba5072d2-504d-448f-b1ed-deb1f030a941 API実行コマンド例: ====================================================================== curl -i -Ss $NETWORK/v2.0/vpn/ipsecpolicies/$TMP_IPSEC_POLICY_ID -X DELETE -H "X-Auth-Token:$OS_AUTH_TOKEN" -H "Content-Type:application/json" レスポンス例: ====================================================================== HTTP/1.1 204 No Content X-Fcx-Endpoint-Request: EXECUTED_REQ001234075_204 Date: Tue, 25 Jul 2017 09:06:55 GMT Server: Apache x-openstack-request-id: req-e1493474-cb86-4c0f-8f8a-2e48f2111fc1 Cache-Control: no-cache X-Request-Id: 61aaf732-0db0-40b8-8aec-27348017644d X-Runtime: 0.148000 Connection: close ====================================================================== 参考3.IKEポリシーの削除 指定したIKEポリシーを削除します。 環境コマンド例: ====================================================================== # TMP_IKE_POLICY_ID=<削除するIKEポリシーID> TMP_IKE_POLICY_ID=3acccabd-fb9e-433b-85c8-537d67812wl7 API実行コマンド例: ====================================================================== curl -i -Ss $NETWORK/v2.0/vpn/ikepolicies/$TMP_IKE_POLICY_ID -X DELETE -H "X-Auth-Token:$OS_AUTH_TOKEN" -H "Content-Type:application/json" レスポンス例: ====================================================================== HTTP/1.1 204 No Content X-Fcx-Endpoint-Request: EXECUTED_REQ001164249_204 Date: Tue, 25 Jul 2017 09:04:07 GMT Server: Apache x-openstack-request-id: req-e894b884-24d5-4568-af7b-e2ab46a77b8f Cache-Control: no-cache X-Request-Id: be6f2d25-3648-4588-ad48-9ba16ef60675 X-Runtime: 0.103000 Connection: close ====================================================================== 参考4.VPNサービスの削除 指定したVPNサービスを削除します。 環境コマンド例: ====================================================================== # TMP_VPN_SERVICE_ID=<削除するVPNサービスID> TMP_VPN_SERVICE_ID=5436461d-146c-4659-b92a-7c118bd07w31 API実行コマンド例: ====================================================================== curl -i -Ss $NETWORK/v2.0/vpn/vpnservices/$TMP_VPN_SERVICE_ID -XDELETE -H "X-Auth-Token:$OS_AUTH_TOKEN" -H "Content-Type:application/json" レスポンス例: ====================================================================== HTTP/1.1 204 No Content X-Fcx-Endpoint-Request: EXECUTED_REQ001152224_204 Date: Tue, 25 Jul 2017 09:08:44 GMT Server: Apache x-openstack-request-id: req-05404013-e299-4712-9cac-525dfdf72e8e Cache-Control: no-cache X-Request-Id: e9c9bde8-c9ed-4b1a-9846-5e76a58ea40a X-Runtime: 0.161000 Connection: close ====================================================================== 変更履歴: ─────────────────────────────────── v1.1版: ・「参考2.IPSecポリシーの削除」:誤記修正 ・「参考3.IKEポリシーの削除」:誤記修正 ・ 117行目「注意事項」:説明修正 v1.2版: ・「項番12-1.【プロジェクト1】IPSecサイトコネクション1の 作成」:説明修正 ・「項番13-1.【プロジェクト2】IPSecサイトコネクション2の 作成」 ─────────────────────────────────── 以上