SSL-VPNコネクションの作成(V2サービス/クライアント証明書利用)

SSL-VPNコネクション(V2サービス)を作成する手順を解説します。



  1. 以下で必要な設定を行います。
    $ NAME=<コネクション名(任意)>
    $ 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コネクションを作成した場合、以下の設定が自動的に追加されます。

    1. ファイアーウォールルール

      SSL-VPN接続専用にSSL-VPNコネクションへのアクセスを許可するファイアーウォールルール(443/TCP)が自動的に追加されます。

      自動的に追加されるファイアーウォールルールを変更したい場合は、SSL-VPNコネクション作成後に変更してください。

    2. スタティックルーティング

      SSL-VPN接続専用にSSL-VPNコネクションに設定した「client_address_pool_cidr」へのルーティングが仮想ルータに追加されます。

    3. セキュリティグループ

      SSL-VPN接続専用に全ての通信許可が設定されたセキュリティグループが作成されます。

      SSL-VPNコネクションを作成する際に「security_groups」パラメーターを指定することでユーザーが作成したセキュリティグループを利用することも可能です。

      詳細については IaaS APIリファレンス(Network編)を参照してください。

    4. グローバルIPアドレス

      「floatingips」パラメーターを省略するとSSL-VPNコネクションに割り当てられるグローバルIPアドレスが作成されます。

      事前に作成したグローバルIPを利用する場合は「floatingips」パラメーターを指定してください。

      詳細についてはIaaS APIリファレンス(Network編)を参照してください。

    注:

    自動的に追加された設定の他に、SSL-VPNコネクションの「client_address_pool_cidrs」パラメーターに設定した仮想ネットワークから仮想サーバへのアクセス許可をセキュリティグループとファイアーウォールルールに定義する必要があります。

  2. 次の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, "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": null,
          "vpnservice_id": "<VPNサービス名>",
          "id": "<SSL-VPNコネクションID>",
          "status": "PENDING_CREATE"
        }
      ]
    }
  3. 作成した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": null,
          "vpnservice_id": "<VPNサービス名>",
          "id": "<SSL-VPNコネクションID>",
          "status": "ACTIVE"
        }
      ]
    }
    

    作成直後は、statusがPENDING_CREATEのままとなっている場合があります。その場合は時間をおいてから、再度、確認APIを実行してください。

  4. 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": ""
        }
      ]
    }