SSL-VPNコネクションの作成(V2サービス/自己署名証明書利用)
SSL-VPNコネクション(V2サービス)を作成する手順を解説します。
-
以下で必要な設定を行います。
$ NAME=<コネクション名(任意)>
$ CREDENTIAL_ID=<鍵コンテナID>
$ VPNSERVICE_ID=<VPNサービスID>
$ PROTOCOL=tcp
$ AZ=<アベイラビリティゾーン>
$ CLIENT_ADDRESS_POOL_CIDR=<VPNトンネルの仮想ネットワークcidr(任意)>
CLIENT_ADDRESS_POOL_CIDRはXXX.XXX.XXX.XXX/XX形式でネットワークアドレスの指定を行ってください。
例)192.168.246.0/24
警告:本サービスで使用しているネットワークアドレスやクライアントPCが接続しているローカルネットワークアドレスと競合しないネットワークアドレスを指定してください。
注:本手順を利用してSSL-VPNコネクションを作成した場合、以下の設定が自動的に追加されます。
- ファイアーウォールルール
SSL-VPN接続専用にSSL-VPNコネクションへのアクセスを許可するファイアーウォールルール(443/TCP)が自動的に追加されます。
自動的に追加されるファイアーウォールルールを変更したい場合は、SSL-VPNコネクション作成後に変更してください。
- スタティックルーティング
SSL-VPN接続専用にSSL-VPNコネクションに設定した「client_address_pool_cidr」へのルーティングが仮想ルータに追加されます。
- セキュリティグループ
SSL-VPN接続専用に全ての通信許可が設定されたセキュリティグループが作成されます。
SSL-VPNコネクションを作成する際に「security_groups」パラメーターを指定することでユーザーが作成したセキュリティグループを利用することも可能です。
詳細については IaaS APIリファレンス(Network編)を参照してください。
- グローバルIPアドレス
「floatingips」パラメーターを省略するとSSL-VPNコネクションに割り当てられるグローバルIPアドレスが作成されます。
事前に作成したグローバルIPを利用する場合は「floatingips」パラメーターを指定してください。
詳細については IaaS APIリファレンス(Network編)を参照してください。
注:自動的に追加された設定の他に、SSL-VPNコネクションの「client_address_pool_cidrs」パラメーターに設定した仮想ネットワークから仮想サーバへのアクセス許可をセキュリティグループとファイアーウォールルールに定義する必要があります。
- ファイアーウォールルール
-
次のAPIを実行します。
$ curl -sS $NETWORK/v2.0/vpn/ssl-vpn-v2-connections -X POST \ -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" \ -d '{"ssl_vpn_v2_connection": {"name": "'$NAME'", "client_address_pool_cidrs": [ "'$CLIENT_ADDRESS_POOL_CIDR'" ], "admin_state_up": true, "credential_id":"'$CREDENTIAL_ID'", "vpnservice_id": "'$VPNSERVICE_ID'", "availability_zone": "'$AZ'", "protocol": "'$PROTOCOL'" }}' | jq .
以下のレスポンスが返ってきます。
{ "ssl_vpn_v2_connections": [ { "access_points": [ { "floatingip": null, "client_address_pool_cidr": "<VPNトンネルの仮想ネットワークcidr>", "internal_gateway": "<SSL-VPNコネクションのプライベートIPアドレス>", "external_address": "<SSL-VPNのグローバルIPアドレス>" } ], "security_groups": [ "<SSL-VPN接続専用のセキュリティグループ>" ], "protocol": "tcp", "availability_zone": "<アベイラビリティゾーン>", "tenant_id": "<プロジェクトID>", "name": "<SSL-VPNコネクション名>", "admin_state_up": true, "client_address_pool_cidrs": [ "<VPNトンネルの仮想ネットワークcidr>" ], "credential_id": "<鍵コンテナID>", "vpnservice_id": "<VPNサービス名>", "id": "<SSL-VPNコネクションID>", "status": "PENDING_CREATE" } ] }
-
作成したSSL-VPNコネクションの状態を確認するため、以下のAPIを実行します。
$ curl -sS $NETWORK/v2.0/vpn/ssl-vpn-v2-connections -X GET \ -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type:application/json" | jq .
以下のように、SSL-VPNコネクションのstatusがACTIVEになっていることを確認します。
{ "ssl_vpn_v2_connections": [ { "access_points": [ { "floatingip": null, "client_address_pool_cidr": "<VPNトンネルの仮想ネットワークcidr>", "internal_gateway": "<SSL-VPNコネクションのプライベートIPアドレス>", "external_address": "<SSL-VPNのグローバルIPアドレス>" } ], "security_groups": [ "<SSL-VPN接続専用のセキュリティグループ>" ], "protocol": "tcp", "availability_zone": "<アベイラビリティゾーン>", "tenant_id": "<プロジェクトID>", "name": "<SSL-VPNコネクション名>", "admin_state_up": true, "client_address_pool_cidrs": [ "<VPNトンネルの仮想ネットワークcidr>" ], "credential_id": <鍵コンテナID>, "vpnservice_id": "<VPNサービス名>", "id": "<SSL-VPNコネクションID>", "status": "ACTIVE" } ] }
作成直後は、statusがPENDING_CREATEのままとなっている場合があります。その場合は時間をおいてから、再度、確認APIを実行してください。
-
VPNサービスの状態を確認するため、以下のAPIを実行します。
$ curl -sS $NETWORK/v2.0/vpn/vpnservices -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" \ -H "Content-Type:application/json" | jq .
以下のように、VPNサービスのstatusがACTIVEになっていることを確認できた場合、作成は完了です。
{ "vpnservices": [ { "availability_zone": "<アベイラビリティゾーン>", "router_id": "<SSL-VPNで接続されたルータID>", "status": "ACTIVE", "name": "<VPNサービス名>", "admin_state_up": true, "subnet_id": "<SSL-VPNで接続するサブネットID>", "tenant_id": "<SSL-VPNで接続するプロジェクトID>", "id": "<VPNサービスID>", "description": "" } ] }