VPN / OpenVPN


基本設定
OpenVPN Tun(L3)によるルーティング型リモートアクセスVPN
サーバー(本製品)側
クライアント側(参考)
OpenVPN Tap(L2)によるルーティング型リモートアクセスVPN
サーバー(本製品)側
クライアント側(参考)
OpenVPN Tap(L2)によるブリッジ型リモートアクセスVPN
サーバー(本製品)側
クライアント側(参考)
設定と状態の確認
外部のRADIUS/LDAPサーバーを使用する場合
2要素認証(2FA)
クライアント証明書認証
証明書の準備と配布
クライアント証明書認証が無効な場合
クライアント設定ファイルとCA証明書ファイルを別ファイルとしてクライアントに配布する
クライアント設定ファイル内にCA証明書のデータを埋め込んで配布する
クライアント証明書認証が有効な場合
ローカルCA発行の証明書を使う場合
外部CA発行の証明書を使う場合
iOS版クライアントを使用する場合
クライアント設定ファイルの変更
エンティティー定義にもとづく経路通知
設定方法
ダウンロードポータル


OpenVPNはSSL/TLSをベースに各種機能を組み合わせたオールインワン型のSSL VPNです。
本製品では、WindowsやMacOS X等をクライアントとするリモートアクセス型VPNの構築に使います。

OpenVPNにはTap(L2)、Tun(L3)の2つのモードがあり、それぞれ L2(ブリッジ型またはルーティング型)、L3(ルーティング型)のリモートアクセスに対応できます。

本章ではOpenVPNトンネルインターフェースに特化した説明を行います。

トンネルインターフェース全般については「VPN」/「トンネルインターフェース」を、インターフェース全般については「インターフェース」/「一般設定」をご覧ください。

また、OpenVPNを使用するための具体的かつ全体的な設定については「設定例集」を、サポートするOpenVPNクライアント(OS、アプリケーション)についてはリリースノートをご覧ください。

基本設定

OpenVPNでは接続クライアントのユーザー名・パスワード認証にRADIUSサーバーかLDAPサーバーを使用します。
また、クライアントにIPアドレスなどのネットワーク設定情報を提供する場合にもRADIUSサーバーかLDAPサーバーを使用することができます。
以下の各例では、本製品のローカルRADIUSサーバーを使うものと仮定しています。
外部のRADIUSサーバーやLDAPサーバーを使用する場合の変更点は、「外部のRADIUS/LDAPサーバーを使用する場合」をご参照ください。

また、ローカルRADIUSサーバーについては「運用・管理」/「RADIUSサーバー」をご覧ください。

また、OpenVPNサーバーとなる本製品はIPv4でインターネットに接続しているものとします。WAN側インターフェースのIPアドレスは固定であり、クライアント・本製品間でIPv4の通信ができる状態になっているものとします。

Note
OpenVPNトンネルインターフェースは同時に2つまで使用可能です(TunモードとTapモードを1つずつ)。なお、2つ同時に使用する場合は、各トンネルインターフェースで異なるUDPポート番号を使用するよう設定してください(tunnel openvpn portコマンド)。

OpenVPN Tun(L3)によるルーティング型リモートアクセスVPN

この構成は、OpenVPNクライアント(Windows、MacOS X)が本製品のOpenVPNトンネルインターフェースとポイントツーポイントで接続されているイメージです。クライアントとLAN側の通信はルーティングによって行われます。クライアントのIP設定情報はRADIUS属性によって提供します。


サーバー(本製品)側

  1. ローカルRADIUSサーバーにOpenVPNユーザーを登録します。
    ここでは、userA、userB、userCという3人のユーザーを登録するものとします。


  2. OpenVPNで使用するRADIUSサーバーを登録します。これには、radius-server hostコマンドとaaa authentication openvpnコマンドを使います。
    awplus(config)# radius-server host 127.0.0.1 key awplus-local-radius-server
    awplus(config)# aaa authentication openvpn default group radius
    

  3. トンネルインターフェースtunnel0を作成します。これにはinterfaceコマンドを使います。
    awplus(config)# interface tunnel0
    

  4. トンネリング方式としてopenvpn tunを指定します。これには、tunnel mode openvpn tunコマンドを使います。
    awplus(config-if)# tunnel mode openvpn tun
    

  5. トンネルインターフェースtunnel0にIPアドレスを設定して、同インターフェースでIPv4パケットのルーティングが行われるようにします。これには、ip addressコマンドを使います。
    awplus(config-if)# ip address 192.168.254.1/24
    
インターフェースへのIPアドレス設定については「IP」/「IPインターフェース」を、IPの経路設定については「IP」/「経路制御」、および、ダイナミックルーティングに関する各セクションをご覧ください。

クライアント側(参考)

本構成における、Windows版クライアントの設定ファイル例を示します。
[tun_client.ovpn]
# OpenVPNサーバー(ルーター)と接続先ポートの指定
remote 10.1.1.1 1194 udp

# 経路情報等をサーバーから取得する
pull

# TLSクライアントを有効にする
tls-client

# openvpnバージョンの指定
compat-mode 2.4.0

# 使用する暗号形式
data-ciphers AES-256-GCM:AES-128-GCM:Chacha20-Poly1305
cipher AES-128-CBC

# デジタル署名形式
auth SHA1

# TLSのバージョン
tls-version-min 1.2

# TLSの形式
tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA

explicit-exit-notify

# ユーザー名・パスワード認証を有効にする
auth-user-pass

# ルーターから取得したローカルCAの自署ルート証明書
ca cacert.pem

# keepaliveの送信間隔とタイムアウトの時間
keepalive 10 120

# アイドル時間
inactive 300 100000

# 使用するモード(Tunモード)
dev tun

# インターフェースのIPをサーバーから取得する
float

# IPv6のトンネリングを有効にする(Tunモードのみ)
tun-ipv6

# トンネルを有効にする(Tunモード時必須)
topology subnet

# 暗号化前のパケットのTOS値を暗号化後のパケットにコピーする
passtos

# 接続に使用するポート番号
port 1194

# ログのレベル(0~7)。0はログを生成せず、数が大きくなるほど詳細なログを表示する
verb 3

# パスワードの保存を無効にする
setenv ALLOW_PASSWORD_SAVE 0

Note
上記の設定ファイル例は参考のために示した最小限の設定であり、動作を保証するものではありません。使用するクライアントやそのバージョン、OS、ネットワーク環境などによって必要な設定は異なりますので、あらかじめご了承ください。なお、OpenVPNを使用するための具体的かつ全体的な設定については「設定例集」もご参照ください。
Note
iOS版クライアントを使用する場合はクライアント設定ファイルの変更が必要です。詳しくは「iOS版クライアントを使用する場合」をご覧ください。
Note
caオプションで指定するCA証明書ファイルの配布方法については、「証明書の準備と配布」をご覧ください。

OpenVPN Tap(L2)によるルーティング型リモートアクセスVPN

この構成は、OpenVPNクライアント(Windows、MacOS X)が本製品のOpenVPNトンネルインターフェースとEthernetで接続されているイメージです。クライアントとLAN側の通信はルーティングによって行われます。

OpenVPN Tap(L2)トンネルインターフェースを使用する場合は、クライアントのIP設定情報をRADIUS属性だけでなく、DHCPで提供することも可能です。
以下の例では、本製品のDHCPサーバー機能を利用してOpenVPNクライアントにIPアドレスなどの情報を提供しています。

Note
Android版およびiOS版クライアントではTap(L2)モードでのOpenVPN接続が未サポートのため、本構成は使用できません。

サーバー(本製品)側

  1. ローカルRADIUSサーバーにOpenVPNユーザーを登録します。
    ここでは、userA、userB、userCという3人のユーザーを登録するものとします。


  2. OpenVPNで使用するRADIUSサーバーを登録します。これには、radius-server hostコマンドとaaa authentication openvpnコマンドを使います。
    awplus(config)# radius-server host 127.0.0.1 key awplus-local-radius-server
    awplus(config)# aaa authentication openvpn default group radius
    

  3. IP設定情報を提供するため、DHCPサーバーの設定を行います。
    DHCPサーバー機能の詳細については「IP付加機能」/「DHCPサーバー」をご覧ください。
    awplus(config)# ip dhcp option 121 name Classless-Static-Route hex  
    awplus(config)# ip dhcp pool pool254
    awplus(dhcp-config)# network 192.168.254.0 255.255.255.0
    awplus(dhcp-config)# range 192.168.254.231 192.168.254.240
    awplus(dhcp-config)# dns-server 192.168.10.5
    awplus(dhcp-config)# option Classless-Static-Route 18c0a80ac0a8fe01
    awplus(dhcp-config)# lease 0 2 0
    
    Note
    本製品のDHCPサーバー機能を利用してOpenVPNクライアントにIPアドレスを提供する場合は、ip dhcp optionコマンドで定義した DHCPオプション121(Classless Static Route Option)を用いてスタティック経路を通知してください。
    optionコマンドで指定している 18c0a80ac0a8fe01 は、各経路の「宛先ネットワークマスク長、宛先ネットワークアドレス、ネクストホップアドレス」を16進数表記で連結したもので、次のように解釈します。
    16進表記
    10進表記
    説明
    経路エントリー #1 (宛先 192.168.10/24 ネクストホップ 192.168.254.1)
    18 24 宛先マスク長
    c0 a8 0a 192 168 10 宛先アドレス
    c0 a8 fe 01 192 168 254 1 ネクストホップアドレス

  4. トンネルインターフェースtunnel0を作成します。これにはinterfaceコマンドを使います。
    awplus(config)# interface tunnel0
    

  5. トンネリング方式としてopenvpn tapを指定します。これには、tunnel mode openvpn tapコマンドを使います。
    awplus(config-if)# tunnel mode openvpn tap
    

  6. トンネルインターフェースtunnel0にIPアドレスを設定して、同インターフェースでIPv4パケットのルーティングが行われるようにします。これには、ip addressコマンドを使います。
    awplus(config-if)# ip address 192.168.254.1/24
    
インターフェースへのIPアドレス設定については「IP」/「IPインターフェース」を、IPの経路設定については「IP」/「経路制御」、および、ダイナミックルーティングに関する各セクションをご覧ください。

クライアント側(参考)

本構成における、Windows版クライアントの設定ファイル例を示します。
[tap_client.ovpn]
# OpenVPNサーバー(ルーター)と接続先ポートの指定
remote 10.1.1.1 1194 udp

# 経路情報等をサーバーから取得する
pull

# TLSクライアントを有効にする
tls-client

# openvpnバージョンの指定
compat-mode 2.4.0

# 使用する暗号形式
data-ciphers AES-256-GCM:AES-128-GCM:Chacha20-Poly1305
cipher AES-128-CBC

# デジタル署名形式
auth SHA1

# TLSのバージョン
tls-version-min 1.2

# TLSの形式
tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA

explicit-exit-notify

# ユーザー名・パスワード認証を有効にする
auth-user-pass

# ルーターから取得したローカルCAの自署ルート証明書
ca cacert.pem

# keepaliveの送信間隔とタイムアウトの時間
keepalive 10 120

# アイドル時間
inactive 300 100000

# 使用するモード(Tapモード)
dev tap

# インターフェースのIPをサーバーから取得する
float

# トンネルを有効にする
topology subnet

# 暗号化前のパケットのTOS値を暗号化後のパケットにコピーする
passtos

# 接続に使用するポート番号
port 1194

# ログのレベル(0~7)。0はログを生成せず、数が大きくなるほど詳細なログを表示する
verb 3

# パスワードの保存を無効にする
setenv ALLOW_PASSWORD_SAVE 0

Note
上記の設定ファイル例は参考のために示した最小限の設定であり、動作を保証するものではありません。使用するクライアントやそのバージョン、OS、ネットワーク環境などによって必要な設定は異なりますので、あらかじめご了承ください。なお、OpenVPNを使用するための具体的かつ全体的な設定については「設定例集」もご参照ください。
Note
Android版およびiOS版クライアントではTap(L2)モードでのOpenVPN接続は未サポートです。
Note
caオプションで指定するCA証明書ファイルの配布方法については、「証明書の準備と配布」をご覧ください。

OpenVPN Tap(L2)によるブリッジ型リモートアクセスVPN

この構成は、OpenVPNクライアント(Windows、MacOS X)が本製品のLAN側(vlan1)に直接接続されているイメージです。クライアントとLAN側の通信はブリッジングによって行われます。また、vlan1以外のネットワークとの通信はブリッジインターフェース(brX)を経由するルーティングで行われます。また、クライアントのIP設定情報はLAN側に設置されているDHCPサーバーによって提供します。


Note
Android版およびiOS版クライアントではTap(L2)モードでのOpenVPN接続が未サポートのため、本構成は使用できません。

サーバー(本製品)側

  1. ローカルRADIUSサーバーにOpenVPNユーザーを登録します。
    ここでは、userA、userB、userCという3人のユーザーを登録するものとします。


  2. OpenVPNで使用するRADIUSサーバーを登録します。これには、radius-server hostコマンドとaaa authentication openvpnコマンドを使います。
    awplus(config)# radius-server host 127.0.0.1 key awplus-local-radius-server
    awplus(config)# aaa authentication openvpn default group radius
    

  3. トンネルインターフェースtunnel0を作成します。これにはinterfaceコマンドを使います。
    awplus(config)# interface tunnel0
    

  4. トンネリング方式としてopenvpn tapを指定します。これには、tunnel mode openvpn tapコマンドを使います。
    awplus(config-if)# tunnel mode openvpn tap
    

  5. ソフトウェアブリッジ「1」を作成します。これには、bridgeコマンドを使います。
    awplus(config-if)# exit
    awplus(config)# bridge 1
    

  6. ソフトウェアブリッジ「1」にvlan1を追加します。これには、bridge-groupコマンドを使います。
    awplus(config)# interface vlan1
    awplus(config-if)# bridge-group 1
    awplus(config-if)# exit
    

  7. ソフトウェアブリッジ「1」にtunnel0を追加します。これには、bridge-groupコマンドを使います。
    awplus(config)# interface tunnel0
    awplus(config-if)# mtu 1500
    awplus(config-if)# bridge-group 1
    awplus(config-if)# exit
    

  8. ソフトウェアブリッジ「1」を表すブリッジインターフェースbr1にIPアドレスを設定し、ソフトウェアブリッジ「1」と他のインターフェースの間でルーティングを行えるようにします。これには、ip addressコマンドを使います。
    awplus(config)# interface br1
    awplus(config-if)# ip address 192.168.10.1/24
    
ブリッジングについては、「ブリッジング」/「一般設定」をご覧ください。

クライアント側(参考)

本構成におけるWindows版クライアントの設定ファイル例を示します。
[tap_client.ovpn]
# OpenVPNサーバー(ルーター)と接続先ポートの指定
remote 10.1.1.1 1194 udp

# 経路情報等をサーバーから取得する
pull

# TLSクライアントを有効にする
tls-client

# openvpnバージョンの指定
compat-mode 2.4.0

# 使用する暗号形式
data-ciphers AES-256-GCM:AES-128-GCM:Chacha20-Poly1305
cipher AES-128-CBC

# デジタル署名形式
auth SHA1

# TLSのバージョン
tls-version-min 1.2

# TLSの形式
tls-cipher TLS-DHE-RSA-WITH-AES-256-CBC-SHA

explicit-exit-notify

# ユーザー名・パスワード認証を有効にする
auth-user-pass

# ルーターから取得したローカルCAの自署ルート証明書
ca cacert.pem

# keepaliveの送信間隔とタイムアウトの時間
keepalive 10 120

# アイドル時間
inactive 300 100000

# 使用するモード(Tapモード)
dev tap

# インターフェースのIPをサーバーから取得する
float

# トンネルを有効にする
topology subnet

# 暗号化前のパケットのTOS値を暗号化後のパケットにコピーする
passtos

# 接続に使用するポート番号
port 1194

# ログのレベル(0~7)。0はログを生成せず、数が大きくなるほど詳細なログを表示する
verb 3

# パスワードの保存を無効にする
setenv ALLOW_PASSWORD_SAVE 0

Note
上記の設定ファイル例は参考のために示した最小限の設定であり、動作を保証するものではありません。使用するクライアントやそのバージョン、OS、ネットワーク環境などによって必要な設定は異なりますので、あらかじめご了承ください。なお、OpenVPNを使用するための具体的かつ全体的な設定については「設定例集」もご参照ください。
Note
Android版およびiOS版クライアントではTap(L2)モードでのOpenVPN接続は未サポートです。
Note
caオプションで指定するCA証明書ファイルの配布方法については、「証明書の準備と配布」をご覧ください。

設定と状態の確認

■ OpenVPNトンネルインターフェースの情報はshow interfaceコマンドで確認できます。
awplus> show interface tunnel0
Interface tunnel0
  Link is UP, administrative state is UP
  Hardware is Tunnel
  index 11 metric 1 mtu 1500
  Bridge-group 1 (br1)
  <UP,BROADCAST,RUNNING,PROMISC,MULTICAST>
  SNMP link-status traps: Disabled
  Tunnel source UNKNOWN, destination UNKNOWN
  Tunnel name local awplus, remote  UNKNOWN
  Tunnel ID local (not set), remote (not set)
  Tunnel protocol/transport openvpn tap, key disabled, sequencing disabled
  Tunnel TTL -
  Tunnel RADIUS servers:
    host 127.0.0.1, port 1812
  Checksumming of packets disabled, path MTU discovery disabled
    input packets 1279, bytes 141524, dropped 0, multicast packets 0
    output packets 97, bytes 9760, multicast packets 0 broadcast packets 0
  Time since last state change: 0 days 00:26:27

■ 接続中のOpenVPNクライアントの情報はshow openvpn connectionsコマンド、show openvpn connections detailコマンドで確認できます。
awplus> show openvpn connections

Maximum connections: 100

Interface: tunnel0
                                      Rx      Tx
Username    Real Address              Bytes   Bytes   Connected Since
--------------------------------------------------------------------------------
userA       ::ffff:10.1.252.4         46224   29943   Tue Mar 31 05:40:57 2015
userB       ::ffff:10.213.82.232      6224    4150    Tue Mar 31 06:40:57 2015
userC       ::ffff:10.10.10.184       15768   11087   Tue Mar 31 06:43:22 2015

awplus> show openvpn connections detail

Interface: tunnel0
 Username: userA
  Route:      192.168.20.0 255.255.255.0 192.168.10.32
  Address:    192.168.10.231 255.255.255.0
  DNS Server: 192.168.10.3
  DNS Server: 192.168.10.4

 Username: userB
  Route:      192.168.20.0 255.255.255.0 192.168.10.32
  Address:    192.168.10.232 255.255.255.0

 Username: userC
  Route:      192.168.20.0 255.255.255.0 192.168.10.32
  Address:    192.168.10.233 255.255.255.0

外部のRADIUS/LDAPサーバーを使用する場合

前記の基本設定例ではOpenVPNクライアントのユーザー名・パスワード認証にローカルRADIUSサーバーを使用していますが、外部のRADIUSサーバーまたはLDAPサーバーを使うこともできます。
Note
ユーザー情報や提供する属性値の登録方法など、外部RADIUSサーバー、LDAPサーバーの設定方法については、ご使用になるRADIUSサーバー、LDAPサーバーのマニュアルをご参照ください。

その場合は、基本設定例に対し、次の変更を加えてください。
  1. 使用するサーバーの種類(RADIUS/LDAP)に応じて、サーバー情報の登録を変更します。


  2. ローカルRADIUSサーバーを使う場合、ローカルRADIUSサーバーのセットアップ過程でOpenVPNのサーバー認証に必要なCA証明書とサーバー証明書が自動的に生成されますが、外部RADIUS/LDAPサーバーを使う場合は自動生成されていない可能性が高いため、必要な証明書が作られているかどうかを確認します。これには、特権EXECモードのshow crypto pki certificatesコマンドを使います。
    Note
    現在ローカルRADIUSサーバーを使用していなくても、過去に一度でも設定を行ったことがある場合は証明書が生成されている可能性があります。
    awplus(config)# end
    awplus# show crypto pki certificates
    


  3. 手順2の確認で証明書が不足していた場合は、下記の手順にしたがい足りない証明書を生成してください。


    証明書を生成したら、手順2に戻って必要な証明書が揃っているか再確認してください。問題がなければ、これで設定変更は完了です。

2要素認証(2FA)

本製品のOpenVPN機能では、RADIUS/LDAPサーバーを利用したユーザー名・パスワード認証とTOTP/HOTPまたは電子メールによるワンタイムパスワードを併用した2要素認証(2FA)をサポートしています。

2FAの設定方法については「運用・管理」/「2要素認証」をご覧ください。

クライアント証明書認証

OpenVPNの接続時には本製品(サーバー)からクライアントに対してサーバー証明書を送信しますが、オプションとして本製品がクライアントの証明書を検証することもできます(クライアント証明書認証)。

クライアント証明書認証は、RADIUS/LDAPサーバーを利用したユーザー名・パスワード認証、2要素認証と併用可能です。
認証順序は次のとおりです。
  1. クライアント証明書認証 ※有効時のみ
  2. ユーザー名・パスワード認証(RADIUS/LDAP)
  3. ワンタイムパスワード(TOTP/HOTPまたは電子メール)※有効時のみ
Note
「ユーザー名・パスワード認証」は必須です。無効にはできません。

■ クライアント証明書認証を有効にするには、OpenVPNトンネルインターフェースに対してtunnel openvpn verify-client-certificate trustpointコマンドを実行し、必要な証明書が格納されているトラストポイント名を指定します。
クライアント証明書認証に必要なトラストポイントの設定については「証明書の準備と配布 > クライアント証明書認証が有効な場合」をご覧ください。
たとえば、ローカルCA(トラストポイント「local」)が発行した証明書を使ってクライアント証明書認証を行うには次のようにします。
外部CAが発行した証明書を使う場合は「local」の代わりに外部CA用に作成したトラストポイントの名前を指定してください。
awplus(config)# interface tunnel0
awplus(config-if)# tunnel openvpn verify-client-certificate trustpoint local

■ 初期設定では、クライアントのユーザー名とクライアント証明書のCommon Name(CN)が一致していない場合、クライアント証明書の検証自体は成功しても認証結果は失敗となります。ユーザー名とCommon Name(CN)の不一致を許可したいときは、tunnel openvpn verify-client-certificate strict-common-name-checkコマンドをno形式で実行し、Common Nameの厳密チェックを無効にしてください。
awplus(config)# interface tunnel0
awplus(config-if)# no tunnel openvpn verify-client-certificate strict-common-name-check

■ クライアント証明書の準備など、クライアント側に必要な設定については「証明書の準備と配布 > クライアント証明書認証が有効な場合」をご覧ください。

証明書の準備と配布

OpenVPNでは電子証明書を利用して接続相手の確認(認証)を行うため、サーバー・クライアントにそれぞれ下記の証明書がインストールされている必要があります。
 
クライアント証明書認証
 
無効(初期設定)
有効
OpenVPNサーバー(本製品)
CA証明書、サーバー証明書 CA証明書、サーバー証明書
OpenVPNクライアント
CA証明書 CA証明書、クライアント証明書

クライアント証明書認証の有効・無効により必要な証明書やサポートする発行元CAの要件が異なります。

以下、それぞれのケースについて、必要な証明書を準備してOpenVPNクライアントに(ユーザー)に配布する方法を説明します。

クライアント証明書認証が無効な場合

クライアント証明書認証が無効な場合(初期設定)、サーバー・クライアントに必要な証明書は以下のとおりです。
OpenVPNサーバー(本製品)
CA証明書、サーバー証明書
OpenVPNクライアント
CA証明書

クライアント証明書認証の無効時は、CA証明書、サーバー証明書とも、ローカルCA機能によって発行した証明書のみサポートとなります。

サーバー証明書は上記手順にしたがい生成するだけで使用可能ですが、CA証明書は、本製品からPEM形式のテキストデータとして出力し、以下のいずれかの方法で各OpenVPNクライアント(ユーザー)に配布する必要があります。

以下、それぞれの方法を説明します。

クライアント設定ファイルとCA証明書ファイルを別ファイルとしてクライアントに配布する

CA証明書をクライアント設定ファイルとは別のファイルとしてエクスポートした上で、各OpenVPNクライアント(ユーザー)に配布する場合は、以下の手順を実行します。

なお、必要な証明書は生成済みであると仮定します。
  1. 次のいずれかの方法でCA証明書をPEM形式ファイルとして保存します。

  2. 手順1の操作によりPCやサーバー上に保存したPEM形式のCA証明書ファイルを、任意の方法でOpenVPNクライアントのユーザーに配布します。

  3. OpenVPNクライアントの設定ファイルでは、配布されたPEM形式のCA証明書ファイルを「ca」パラメーターで指定してください。
    ca cacert.pem
    

クライアント設定ファイル内にCA証明書のデータを埋め込んで配布する

前項の説明では、クライアント設定ファイルとCA証明書ファイルを別ファイルとしてクライアントに配布していましたが、クライアント設定ファイル内にCA証明書を埋め込み、1つのファイルとして配布することも可能です。
以下、その手順を説明します。

なお、必要な証明書は生成済みであると仮定します。
  1. crypto pki export pemコマンドをterminalキーワード付きで実行し、その出力をコピーする。
    awplus# crypto pki export local pem terminal
    -----BEGIN CERTIFICATE-----
    MIIDdDCCAlygAwIBAgIJAMiyUsFb3mfKMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV
    BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1
    c0NBQTA1MDQ5MDAwMDAwMDAwMDAeFw0xNTA3MzAxMjI3NDhaFw0yNTA3MjcxMjI3
    NDhaMEoxHTAbBgNVBAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBB
    bGxpZWRXYXJlUGx1c0NBQTA1MDQ5MDAwMDAwMDAwMDCCASIwDQYJKoZIhvcNAQEB
    BQADggEPADCCAQoCggEBAO1PtX5iOAP8fIOwHy1Gb1D2ZnNTGDVA/6/mWE7UJCU2
    RA2pk6nwcTSyKtFIHKYMW+Zfu+K07NZzoNIENwVJoPSwdI4kSAVu6NBnWvQyTd1e
    yOvia6saU743p7eeiAUNOBNEFHw10wjvH0bG/8XdYZ+ZsKUroIozSKrakh0uCT/H
    /luAEAwuTNRxWWyfyNKOjCfC7eunPREubyVeKhnVdjZOYJllzf7y62baxfFmmRx3
    FhzYZ8fI7fgvsZXmOu648jlEJzZvB+NT2hIc6Zrr/OQdpvfpa1R1e84RYcdQpI84
    QjzDkxKj5xXGR25PqIqbm1Hha49HbgGLP1RgfWfPircCAwEAAaNdMFswHQYDVR0O
    BBYEFDKQyulFnc+P+cKNyoSUq2DiBCyvMB8GA1UdIwQYMBaAFDKQyulFnc+P+cKN
    yoSUq2DiBCyvMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEB
    CwUAA4IBAQDsLgLmtZTLutmwQn9IvVxMHOZt1lR55y4Ol2gaScb2qUZ8Ow8+AxXA
    NfPevFPXwhs+0KwidOeJi1qrnBsbkrhea2T6AD13yHjLi+V/9xoL4QNaoP1C76e/
    afYadCePY5KTcBw3J1uqZiIIZ8ZnuNLbWUEQPGoQhEwL2wbU1iQH9Xl1VfZZU477
    bKgcQ/xwAn41MzH2kwbfe4iNfVhD6rcoFmFt+6x61oK/lsdyGHcJcXeR549Oaq6r
    a3J7+poja/k6P95uGKNq9gYIOkyATryot917Fjby16P3THmdg/eNlHPSpEExAnW0
    5ZIw3kPC6CWlYqzYGLya73Ogh66h0Qra
    -----END CERTIFICATE-----
    
    Note
    コピーするのは、-----BEGIN CERTIFICATE----- から -----END CERTIFICATE----- の行までだけでかまいません。

  2. クライアント設定ファイル内に手順1でコピーした内容をペーストします。
    また、ペーストした内容の直前の行には <ca> を、直後の行には </ca> を記述してください。
    <ca>
    -----BEGIN CERTIFICATE-----
    MIIDdDCCAlygAwIBAgIJAMiyUsFb3mfKMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV
    BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1
    c0NBQTA1MDQ5MDAwMDAwMDAwMDAeFw0xNTA3MzAxMjI3NDhaFw0yNTA3MjcxMjI3
    NDhaMEoxHTAbBgNVBAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBB
    bGxpZWRXYXJlUGx1c0NBQTA1MDQ5MDAwMDAwMDAwMDCCASIwDQYJKoZIhvcNAQEB
    BQADggEPADCCAQoCggEBAO1PtX5iOAP8fIOwHy1Gb1D2ZnNTGDVA/6/mWE7UJCU2
    RA2pk6nwcTSyKtFIHKYMW+Zfu+K07NZzoNIENwVJoPSwdI4kSAVu6NBnWvQyTd1e
    yOvia6saU743p7eeiAUNOBNEFHw10wjvH0bG/8XdYZ+ZsKUroIozSKrakh0uCT/H
    /luAEAwuTNRxWWyfyNKOjCfC7eunPREubyVeKhnVdjZOYJllzf7y62baxfFmmRx3
    FhzYZ8fI7fgvsZXmOu648jlEJzZvB+NT2hIc6Zrr/OQdpvfpa1R1e84RYcdQpI84
    QjzDkxKj5xXGR25PqIqbm1Hha49HbgGLP1RgfWfPircCAwEAAaNdMFswHQYDVR0O
    BBYEFDKQyulFnc+P+cKNyoSUq2DiBCyvMB8GA1UdIwQYMBaAFDKQyulFnc+P+cKN
    yoSUq2DiBCyvMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEB
    CwUAA4IBAQDsLgLmtZTLutmwQn9IvVxMHOZt1lR55y4Ol2gaScb2qUZ8Ow8+AxXA
    NfPevFPXwhs+0KwidOeJi1qrnBsbkrhea2T6AD13yHjLi+V/9xoL4QNaoP1C76e/
    afYadCePY5KTcBw3J1uqZiIIZ8ZnuNLbWUEQPGoQhEwL2wbU1iQH9Xl1VfZZU477
    bKgcQ/xwAn41MzH2kwbfe4iNfVhD6rcoFmFt+6x61oK/lsdyGHcJcXeR549Oaq6r
    a3J7+poja/k6P95uGKNq9gYIOkyATryot917Fjby16P3THmdg/eNlHPSpEExAnW0
    5ZIw3kPC6CWlYqzYGLya73Ogh66h0Qra
    -----END CERTIFICATE-----
    </ca>
    
    Note
    この場合、クライアント設定ファイル内でCA証明書ファイルを指定する「ca」パラメーターを使用する必要はありません。

  3. 上記手順により作成したクライアント設定ファイルを、任意の方法でOpenVPNクライアントのユーザーに配布します。

クライアント証明書認証が有効な場合

クライアント証明書認証が有効な場合、サーバー・クライアントに必要な証明書は以下のとおりです。
OpenVPNサーバー(本製品)
CA証明書、サーバー証明書
OpenVPNクライアント
CA証明書、クライアント証明書

クライアント証明書認証の有効時は、ローカルCA、外部CAのどちらによって発行された証明書もサポートしますが、次に示すように使用する証明書はすべて同一のCAから発行されている必要があります。

以下、それぞれのケースについて、必要な証明書を準備してOpenVPNクライアントに(ユーザー)に配布する方法を説明します。

ローカルCA発行の証明書を使う場合


OpenVPNサーバー(本製品)側は上記手順にしたがいCA証明書とサーバー証明書を生成するだけで準備完了ですが、OpenVPNクライアント側については、別途ローカルCA機能によってクライアント証明書を発行し、CA証明書とともにPKCS12形式のファイルとして出力して各OpenVPNクライアント(ユーザー)に配布する必要があります。

以下、そのための手順を説明します。
  1. 各ユーザーのクライアント証明書を発行します。
    crypto pki enroll userコマンドで発行対象のユーザー名を指定してください。
    ローカルRADIUSサーバーを使用する場合はローカルRADIUSサーバーに登録済みのユーザー名を、外部RADIUSサーバーまたはLDAPサーバーを使用する場合は該当サーバーに登録されているユーザー名を指定します。

    これにより、該当ユーザーのクライアント証明書(ユーザー証明書)が発行され、秘密鍵とともにローカルCA用のトラストポイントに格納されます。
    なお、同コマンドの実行時には、クライアント証明書の書き出し時にファイルを暗号化するためのパスワードを聞かれるため、確認を含め2回同じパスワード文字列を入力してください。空文字列や「abort」を入力した場合、および、入力した文字列が一致しない場合は発行が中止されます。
    awplus# crypto pki enroll local user userA
    Enter an export passphrase, or "abort" to cancel.
    XXXXXXXXXXXX ↓(実際には表示されません)
    Enter the export passphrase again.
    XXXXXXXXXXXX ↓(実際には表示されません)
    Generating a user private key for "userA"...
    Successfully enrolled user "userA".
    The PKCS#12 file is ready to export.
    

  2. 前の手順で発行したクライアント証明書と秘密鍵、ローカルCAのルートCA証明書をPKCS#12形式ファイルとして書き出します。
    crypto pki export pkcs12コマンドで書き出し先のファイル名を指定してください。
    awplus# crypto pki export local pkcs12 userA flash:/userA.p12
    

  3. 書き出したPKCS#12形式ファイル(ここではflash:/userA.p12)をopensslコマンドが利用可能なPCに転送します。

  4. PC(ここではLinux PCを想定)上でopensslコマンドのpkcs12サブコマンドを利用して、PKCS#12形式ファイルからクライアント証明書、クライアント秘密鍵、CA証明書をそれぞれPEM形式のテキストとして取り出します。
    同コマンド実行時の「Enter Import Password:」に対しては、crypto pki enroll userコマンド実行時に指定したパスワードを入力してください。
    LinuxPC$ openssl pkcs12 -in userA.p12 -nodes 
    Enter Import Password: XXXXXXXXXXXX ↓(実際には表示されません)
    

  5. 前記pkcs12サブコマンドを実行して正しいパスワードを入力すると、次のようにクライアント証明書、CA証明書、クライアント秘密鍵の内容が端末画面に出力されるので、それぞれをクライアント設定ファイル内にペーストして適切なタグを追加します。


  6. 上記手順により作成したクライアント設定ファイルを、任意の方法でOpenVPNクライアントのユーザーに配布します。
Note
ローカルCAでは証明書失効リスト(CRL)の発行をサポートしていないため、ユーザー証明書を無効にするには、ローカルCAの再セットアップが必要となります(crypto pki trustpointコマンドをno形式、通常形式の順に実行後、機器を再起動する)。なお、ローカルCAを再セットアップすると、それ以前に発行した証明書はすべて無効になり、再発行が必要になるので注意してください。

外部CA発行の証明書を使う場合

外部CA発行の証明書を使ってクライアント証明書認証を行う場合は、サーバー証明書とクライアント証明書(ユーザー証明書)を同じ外部CAから発行する必要があります。

以下、外部CA発行の証明書を使う場合の設定手順を説明します。
  1. 外部CA用トラストポイント「openvpn_certs」を作成します。
    これには、crypto pki trustpointenrollmentコマンドを使います。
    awplus(config)# crypto pki trustpoint openvpn_certs
    Created trustpoint "openvpn_certs".
    awplus(ca-trustpoint)# enrollment terminal
    awplus(ca-trustpoint)# end
    

  2. 外部CAの証明書をインポートします。
    crypto pki authenticateコマンドを実行すると「Paste the certificate PEM file into the terminal. Type "abort" to cancel.」のようなメッセージが表示されて入力待ちになるので、利用する外部CAのルート証明書ファイル(PEM形式)をテキストエディターで開き、-----BEGIN CERTIFICATE----- から -----END CERTIFICATE----- の行までをコピー&ペーストして、「Enter」キーを押します。
    証明書の概要が表示されたら内容を確認し、「Accept this certificate?」に「y」で答えてください。
    awplus# crypto pki authenticate openvpn_certs
    Paste the certificate PEM file into the terminal.
    Type "abort" to cancel.
    -----BEGIN CERTIFICATE-----
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    ...
    xaPuyjGcQ3kCjW32sO0InQxjLPCp/celKKRZbIwETAor
    -----END CERTIFICATE-----
    Complete ("END CERTIFICATE" detected).
    Subject     : /C=JP/O=EXAMPLE/CN=SampleRootCA
    Issuer      : /C=JP/O=EXAMPLE/CN=SampleRootCA
    Algorithms  : Public Key : rsaEncryption, 2048 bits
                : Signature  : sha256WithRSAEncryption
    Valid From  : Apr  7 05:32:30 2023 GMT
    Valid To    : Apr  4 05:32:30 2033 GMT
    Fingerprint : D51BB535 8CBCFE2C BDD6E56B 759BB5C9 4CF9DCBF 
    This is a self-signed CA certificate.
    The certificate has been validated successfully.
    Accept this certificate? (y/n): y 
    Successfully authenticated trustpoint "openvpn_certs".
    

  3. 次に本製品のサーバー証明書の署名要求(CSR)の生成します。
    crypto pki enrollコマンドを実行すると次のようにCSRの内容が出力されるので、 -----BEGIN CERTIFICATE REQUEST----- から -----END CERTIFICATE REQUEST----- の行までをクリップボードにコピーしてPC上のファイル(ここでは「openvpn_server_csr.pem」とします)に保存してください。
    awplus# crypto pki enroll openvpn_certs
    Using private key "server-default"...
    Cut and paste this request to the certificate authority:
    -----------------------------------------------------------------
    -----BEGIN CERTIFICATE REQUEST-----
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    ...
    sQCD7gbOkrMSEpDCSdB85P5on2Gs+CwpHsYlhA==
    -----END CERTIFICATE REQUEST-----
    -----------------------------------------------------------------
    

  4. 外部CAにサーバー証明書の発行を依頼します。
    前の手順でPC上に保存したCSRファイル(本例ではopenvpn_server_csr.pem)を外部CAに渡し、サーバー証明書の発行を依頼してください。
    ここでは、外部CAが発行した本製品のサーバー証明書を openvpn_server_cert.pem という名前のファイルとして入手したものと仮定します。

  5. 発行されたサーバー証明書をインポートします。
    crypto pki import pemコマンドを実行すると「Paste the certificate PEM file into the terminal. Type "abort" to cancel.」のようなメッセージが表示されて入力待ちになるので、外部CAから入手した本製品のサーバー証明書ファイル(PEM形式)をテキストエディターで開き、-----BEGIN CERTIFICATE----- から -----END CERTIFICATE----- の行までをコピー&ペーストして、「Enter」キーを押します。
    証明書の概要が表示されたら内容を確認し、「Accept this certificate?」に「y」で答えてください。
    awplus# crypto pki import openvpn_certs pem terminal
    Paste the certificate PEM file into the terminal.
    Type "abort" to cancel.
    -----BEGIN CERTIFICATE-----
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    ...
    WF/C9/ijoy0UIjDFJms6uBo5gw==
    -----END CERTIFICATE-----
    
    Complete ("END CERTIFICATE" detected).
    Subject     : /C=JP/O=EXAMPLE/CN=OpenVPNServer
    Issuer      : /C=JP/O=EXAMPLE/CN=SampleRootCA
    Algorithms  : Public Key : rsaEncryption, 2048 bits
                : Signature  : sha256WithRSAEncryption
    Valid From  : Apr 19 07:41:24 2023 GMT
    Valid To    : Apr 18 07:41:24 2024 GMT
    Fingerprint : FAB1FC57 6CD0DC6A 7198C3F2 67E37C0F 6FAE8AFB 
    This is not a valid CA certificate. Attempting to import as a server certificate.
    The certificate has been validated successfully.
    Accept this certificate? (y/n): y 
    The certificate was successfully imported.
    

  6. 外部CAに各ユーザーのクライアント証明書の発行を依頼します。
    その際、クライアント証明書のCommon Name(CN)がOpenVPNユーザー名と一致するようにしてください。
    Note
    tunnel openvpn verify-client-certificate strict-common-name-checkコマンドを設定する場合は一致しなくてもかまいません。
    ここでは、外部CAにOpenVPNユーザー「userA」のクライアント証明書の発行を依頼し、userA.p12という名前のPKCS#12形式ファイルを入手したものと仮定します。同ファイルにはクライアント証明書とクライアント秘密鍵に加え、外部CA自身の証明書も含まれているものとします。

  7. 証明書と秘密鍵をPKCS#12形式からPEM形式に変換します。
    PC(ここではLinux PCを想定)上でopensslコマンドのpkcs12サブコマンドを利用して、PKCS#12形式ファイルからクライアント証明書、クライアント秘密鍵、CA証明書をそれぞれPEM形式のテキストとして取り出します。
    同コマンド実行時の「Enter Import Password:」に対しては、外部CAから通知されたパスワードを入力してください。
    LinuxPC$ openssl pkcs12 -in userA.p12 -nodes 
    Enter Import Password: XXXXXXXXXXXX ↓(実際には表示されません)
    
    Note
    クライアント証明書、クライアント秘密鍵、CA証明書をPEM形式で入手・保持している場合、本手順は不要です。

  8. 前記pkcs12サブコマンドを実行して正しいパスワードを入力すると、次のようにクライアント証明書、CA証明書、クライアント秘密鍵の内容が端末画面に出力されるので、それぞれをクライアント設定ファイル内にペーストして適切なタグを追加します。
    Note
    クライアント証明書、クライアント秘密鍵、CA証明書をPEM形式で入手・保持している場合は、各ファイルの内容を適宜ペーストしてください。

  9. 上記手順により作成したクライアント設定ファイルを、任意の方法でOpenVPNクライアントのユーザーに配布します。

iOS版クライアントを使用する場合

iOS版のOpenVPNクライアントを使用する場合は、クライアント設定ファイルを次のように記述してください。

クライアント設定ファイルの変更

iOS版クライアントで経路情報の設定を行うには、クライアント設定ファイル(.ovpnファイル)を下記のとおり変更してください。

エンティティー定義にもとづく経路通知

OpenVPNクライアントに対し、VPN経由で到達可能なネットワークやホストへの経路を通知する方法には次のものがあります。
(a)~(c)については前記例のとおりです。ここでは(d)のエンティティー定義による経路通知について説明します。

エンティティー定義は、本製品においてサブネットやホストの集合を定義する設定要素です。
おもにファイアウォール、QoS、ポリシーベースルーティングなどの各機能において、制御・適用対象のトラフィック(送信元、宛先)を指定するために使用しますが、OpenVPNサーバー機能においては、接続してきたクライアントに通知する経路の集合を定義するために使用できます。
エンティティー定義方式では、他の形式と異なり、完全ホスト名(FQDN)でホスト経路を指定できる点が特徴的です。
Note
エンティティー定義にもとづく経路通知と他の方式の併用可否は以下のとおりです。

設定方法

接続してきたOpenVPNクライアントに対し、エンティティー定義にもとづいて経路情報を通知するには次の設定を行います。
  1. FQDNでホスト経路を指定する場合は、エンティティー定義解説ページのFQDNによる指定を参照の上、FQDNホスト定義を使用するために必要なDNS関連の設定を行ってください。FQDN指定のホスト経路を通知しない場合、本設定は不要です。

  2. エンティティーを作成して通知する経路を定義します。
    具体的にはVPN経由で通信させたいサブネットやホストを定義します。
    たとえばクライアントに対して、プライベートなサブネット「10.25.0.0/16」とクラウドサービス上のサーバーホスト「cloud-server.example.com」宛ての通信をVPN経由で行わせたい場合は、次のようなエンティティーを定義します。
    Note
    エンティティー定義の詳細については「UTM」/「エンティティー定義」をご覧ください。
    Note
    サブネット定義ではインターフェースを指定しないでください。インターフェース指定付きサブネットは通知されません。
    awplus(config)# zone ovpn_routes
    awplus(config-zone)# network private
    awplus(config-network)# ip subnet 10.25.0.0/16
    awplus(config-network)# exit
    awplus(config-zone)# network public
    awplus(config-network)# host server
    awplus(config-host)# ip address dynamic fqdn cloud-server.example.com
    awplus(config-host)# exit
    awplus(config-network)# exit
    awplus(config-zone)# exit
    

  3. OpenVPNトンネルインターフェースにおいて、接続してきたクライアントに対し、指定したエンティティー定義内のサブネットおよびホスト経路を通知するよう設定します。これにはtunnel openvpn routeコマンドを使います。
    Note
    ここではOpenVPNトンネルインターフェースとしての他の設定は省いています。利用環境にあわせて適宜設定してください。
    awplus(config)# interface tunnel0
    awplus(config-if)# tunnel openvpn route ovpn_routes
    

設定は以上です。
これにより本製品のOpenVPNサーバーは、OpenVPNクライアントが接続してきたときにエンティティー定義内のサブネットとホストへの経路を通知するようになります。
Note
エンティティー定義内の経路が通知されるのはOpenVPNクライアントが接続してきたときだけです。
OpenVPNクライアントの接続中にエンティティー定義の内容を変更しても経路情報の更新通知は行われません。
変更後に新規接続してきたOpenVPNクライアントには新しい経路情報が通知されます。

なお、FQDNで指定したホストへの経路(前記の例ではcloud-server.example.comへの経路)は、OpenVPNクライアントの接続時点において、本製品に接続されている他の端末が本製品のDNSリレー機能を通じてcloud-server.example.comのIPアドレスを解決(取得)済みの場合のみ、32ビットマスク経路(ホスト経路)として通知されます。FQDNが未解決の場合、該当ホスト経路は通知されません。

ダウンロードポータル

OpenVPNユーザーにクライアント設定ファイルや接続用ソフトウェアを配布する際、本製品内蔵の認証付きWebサイト「ダウンロードポータル」を使用することもできます。詳しくは「Web GUI」/「ネットワークサービス」をご覧ください。




(C) 2019 - 2024 アライドテレシスホールディングス株式会社

PN: 613-002735 Rev.AD