VPN / OpenVPN
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の通信ができる状態になっているものとします。
OpenVPN Tun(L3)によるルーティング型リモートアクセスVPN
この構成は、OpenVPNクライアント(Windows、MacOS X)が本製品のOpenVPNトンネルインターフェースとポイントツーポイントで接続されているイメージです。クライアントとLAN側の通信はルーティングによって行われます。クライアントのIP設定情報はRADIUS属性によって提供します。
サーバー(本製品)側
- ローカルRADIUSサーバーにOpenVPNユーザーを登録します。
ここでは、userA、userB、userCという3人のユーザーを登録するものとします。
- ローカルRADIUSサーバーの設定を開始します。これには、radius-server localコマンドを実行します。
初回実行時のみ、ローカルCA(ローカルなルート認証局)の初期設定(自署ルートCA証明書の発行など)やサーバー証明書の発行などが自動的に行われ、またローカルホスト(127.0.0.1)をRADIUSクライアント(NAS)として自動登録します。
awplus(config)# radius-server local Created trustpoint "local". Generating 2048-bit key for local CA... Automatically authenticated trustpoint "local". Automatically enrolled the local server to trustpoint "local".
- ネットワーク設定情報を提供するため、ユーザーごとにユーザーグループを作成し、IPアドレスやスタティック経路、DNSサーバーアドレスなどの指定を行います。ユーザーグループの作成はgroupで、各種情報の指定はattributeでおこないます。
ユーザーuserA
awplus(config-radsrv)# group userA awplus(config-radsrv-group)# attribute Service-Type Authenticate-Only awplus(config-radsrv-group)# attribute Framed-IP-Address 192.168.254.231 awplus(config-radsrv-group)# attribute Framed-IP-Netmask 255.255.255.0 awplus(config-radsrv-group)# attribute Framed-Route "192.168.10.0/24 192.168.254.1" awplus(config-radsrv-group)# attribute MS-Primary-DNS-Server 192.168.10.5 awplus(config-radsrv-group)# exit
ユーザーuserB
awplus(config-radsrv)# group userB awplus(config-radsrv-group)# attribute Service-Type Authenticate-Only awplus(config-radsrv-group)# attribute Framed-IP-Address 192.168.254.232 awplus(config-radsrv-group)# attribute Framed-IP-Netmask 255.255.255.0 awplus(config-radsrv-group)# attribute Framed-Route "192.168.10.0/24 192.168.254.1" awplus(config-radsrv-group)# attribute MS-Primary-DNS-Server 192.168.10.5 awplus(config-radsrv-group)# exit
ユーザーuserC
awplus(config-radsrv)# group userC awplus(config-radsrv-group)# attribute Service-Type Authenticate-Only awplus(config-radsrv-group)# attribute Framed-IP-Address 192.168.254.233 awplus(config-radsrv-group)# attribute Framed-IP-Netmask 255.255.255.0 awplus(config-radsrv-group)# attribute Framed-Route "192.168.10.0/24 192.168.254.1" awplus(config-radsrv-group)# attribute MS-Primary-DNS-Server 192.168.10.5 awplus(config-radsrv-group)# exit
- ユーザーを登録します。これには、userの各コマンドを使います。
ユーザー名、パスワードに加え、groupパラメーターでネットワーク設定情報を含むユーザーグループを指定しています。
awplus(config-radsrv)# user userA password passwordA group userA awplus(config-radsrv)# user userB password passwordB group userB awplus(config-radsrv)# user userC password passwordC group userC
- ローカルRADIUSサーバーを有効化します。これには、server enableコマンドを使います。
awplus(config-radsrv)# server enable awplus(config-radsrv)# exit
- ローカルRADIUSサーバーの設定を開始します。これには、radius-server localコマンドを実行します。
- 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
- トンネルインターフェースtunnel0を作成します。これにはinterfaceコマンドを使います。
awplus(config)# interface tunnel0
- トンネリング方式としてopenvpn tunを指定します。これには、tunnel mode openvpn tunコマンドを使います。
awplus(config-if)# tunnel mode openvpn tun
- トンネルインターフェースtunnel0にIPアドレスを設定して、同インターフェースでIPv4パケットのルーティングが行われるようにします。これには、ip addressコマンドを使います。
awplus(config-if)# ip address 192.168.254.1/24
クライアント側(参考)
本構成における、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 # トンネルを有効にする topology subnet # 暗号化前のパケットのTOS値を暗号化後のパケットにコピーする passtos # 接続に使用するポート番号 port 1194 # ログのレベル(0~7)。0はログを生成せず、数が大きくなるほど詳細なログを表示する verb 3 # パスワードの保存を無効にする setenv ALLOW_PASSWORD_SAVE 0
OpenVPN Tap(L2)によるルーティング型リモートアクセスVPN
この構成は、OpenVPNクライアント(Windows、MacOS X)が本製品のOpenVPNトンネルインターフェースとEthernetで接続されているイメージです。クライアントとLAN側の通信はルーティングによって行われます。
以下の例では、本製品のDHCPサーバー機能を利用してOpenVPNクライアントにIPアドレスなどの情報を提供しています。
サーバー(本製品)側
- ローカルRADIUSサーバーにOpenVPNユーザーを登録します。
ここでは、userA、userB、userCという3人のユーザーを登録するものとします。
- ローカルRADIUSサーバーの設定を開始します。これには、radius-server localコマンドを実行します。
初回実行時のみ、ローカルCA(ローカルなルート認証局)の初期設定(自署ルートCA証明書の発行など)やサーバー証明書の発行などが自動的に行われ、またローカルホスト(127.0.0.1)をRADIUSクライアント(NAS)として自動登録します。
awplus(config)# radius-server local Created trustpoint "local". Generating 2048-bit key for local CA... Automatically authenticated trustpoint "local". Automatically enrolled the local server to trustpoint "local".
- ユーザーを登録します。これには、userの各コマンドを使います。
この例ではIP設定情報をDHCPで提供するためユーザーグループの設定は不要です。
awplus(config-radsrv)# user userA password passwordA awplus(config-radsrv)# user userB password passwordB awplus(config-radsrv)# user userC password passwordC
- ローカルRADIUSサーバーを有効化します。これには、server enableコマンドを使います。
awplus(config-radsrv)# server enable awplus(config-radsrv)# exit
- ローカルRADIUSサーバーの設定を開始します。これには、radius-server localコマンドを実行します。
- 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
- 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
- トンネルインターフェースtunnel0を作成します。これにはinterfaceコマンドを使います。
awplus(config)# interface tunnel0
- トンネリング方式としてopenvpn tapを指定します。これには、tunnel mode openvpn tapコマンドを使います。
awplus(config-if)# tunnel mode openvpn tap
- トンネルインターフェースtunnel0にIPアドレスを設定して、同インターフェースでIPv4パケットのルーティングが行われるようにします。これには、ip addressコマンドを使います。
awplus(config-if)# ip address 192.168.254.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
OpenVPN Tap(L2)によるブリッジ型リモートアクセスVPN
この構成は、OpenVPNクライアント(Windows、MacOS X)が本製品のLAN側(vlan1)に直接接続されているイメージです。クライアントとLAN側の通信はブリッジングによって行われます。また、vlan1以外のネットワークとの通信はブリッジインターフェース(brX)を経由するルーティングで行われます。また、クライアントのIP設定情報はLAN側に設置されているDHCPサーバーによって提供します。
サーバー(本製品)側
- ローカルRADIUSサーバーにOpenVPNユーザーを登録します。
ここでは、userA、userB、userCという3人のユーザーを登録するものとします。
- ローカルRADIUSサーバーの設定を開始します。これには、radius-server localコマンドを実行します。
初回実行時のみ、ローカルCA(ローカルなルート認証局)の初期設定(自署ルートCA証明書の発行など)やサーバー証明書の発行などが自動的に行われ、またローカルホスト(127.0.0.1)をRADIUSクライアント(NAS)として自動登録します。
awplus(config)# radius-server local Created trustpoint "local". Generating 2048-bit key for local CA... Automatically authenticated trustpoint "local". Automatically enrolled the local server to trustpoint "local".
- ユーザーを登録します。これには、userの各コマンドを使います。
この例ではIP設定情報をLAN上に存在するDHCPで提供するためユーザーグループの設定は不要です。
awplus(config-radsrv)# user userA password passwordA awplus(config-radsrv)# user userB password passwordB awplus(config-radsrv)# user userC password passwordC
- ローカルRADIUSサーバーを有効化します。これには、server enableコマンドを使います。
awplus(config-radsrv)# server enable awplus(config-radsrv)# exit
- ローカルRADIUSサーバーの設定を開始します。これには、radius-server localコマンドを実行します。
- 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
- トンネルインターフェースtunnel0を作成します。これにはinterfaceコマンドを使います。
awplus(config)# interface tunnel0
- トンネリング方式としてopenvpn tapを指定します。これには、tunnel mode openvpn tapコマンドを使います。
awplus(config-if)# tunnel mode openvpn tap
- ソフトウェアブリッジ「1」を作成します。これには、bridgeコマンドを使います。
awplus(config-if)# exit awplus(config)# bridge 1
- ソフトウェアブリッジ「1」にvlan1を追加します。これには、bridge-groupコマンドを使います。
awplus(config)# interface vlan1 awplus(config-if)# bridge-group 1 awplus(config-if)# exit
- ソフトウェアブリッジ「1」にtunnel0を追加します。これには、bridge-groupコマンドを使います。
awplus(config)# interface tunnel0 awplus(config-if)# mtu 1500 awplus(config-if)# bridge-group 1 awplus(config-if)# exit
- ソフトウェアブリッジ「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
設定と状態の確認
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サーバーを使うこともできます。その場合は、基本設定例に対し、次の変更を加えてください。
- 使用するサーバーの種類(RADIUS/LDAP)に応じて、サーバー情報の登録を変更します。
- 外部 RADIUSサーバーを使用する場合
radius-server hostコマンドでは、ローカルRADIUSサーバーを表す「127.0.0.1」ではなく、外部RADIUSサーバーのアドレスと共有パスワードを指定してください。
awplus(config)# radius-server host 192.168.10.5 key external-radius-server-password参照:「運用・管理」/「RADIUSクライアント」
- 外部 LDAPサーバーを使用する場合
ldap-serverコマンドとサブコマンドを使ってLDAPサーバーの情報を登録し、aaa authentication openvpnコマンドでOpenVPNの認証にLDAPを使用するよう設定してください。
awplus(config)# ldap-server our_directory awplus(config-ldap-server)# host 192.168.10.3 awplus(config-ldap-server)# bind authenticate root-dn cn=Administrator,cn=Users,dc=example,dc=local password 1ih3eaToo awplus(config-ldap-server)# base-dn dc=example,dc=local awplus(config-ldap-server)# login-attribute sAMAccountName awplus(config-ldap-server)# exit awplus(config)# aaa authentication openvpn default group ldap
参照:「運用・管理」/「LDAPクライアント」
- 外部 RADIUSサーバーを使用する場合
- ローカルRADIUSサーバーを使う場合、ローカルRADIUSサーバーのセットアップ過程でOpenVPNのサーバー認証に必要なCA証明書とサーバー証明書が自動的に生成されますが、外部RADIUS/LDAPサーバーを使う場合は自動生成されていない可能性が高いため、必要な証明書が作られているかどうかを確認します。これには、特権EXECモードのshow crypto pki certificatesコマンドを使います。
awplus(config)# end awplus# show crypto pki certificates
- 次のように「Self-signed root certificate」(CA証明書)と「Server certificate」(サーバー証明書)が表示される場合は、必要な証明書が存在していますので、これで設定変更は完了です。
awplus# show crypto pki certificates -------------------- Trustpoint "local" Certificate Chain -------------------- Server certificate Subject : /O=Allied-Telesis/CN=AlliedwarePlusSystem Issuer : /O=Allied Telesis, Inc./CN=AlliedWarePlusCAXXXXXXXXXXXXXXXX Algorithms : Public Key : rsaEncryption, 2048 bits : Signature : sha256WithRSAEncryption Valid From : Jul 30 10:56:08 2015 GMT Valid To : Jul 28 10:56:08 2020 GMT Fingerprint : 3A5B3E3B C0A4AE91 96386D8F 45A52EDA 60BA2084 Self-signed root certificate Subject : /O=Allied Telesis, Inc./CN=AlliedWarePlusCAXXXXXXXXXXXXXXXX Issuer : /O=Allied Telesis, Inc./CN=AlliedWarePlusCAXXXXXXXXXXXXXXXX Algorithms : Public Key : rsaEncryption, 2048 bits : Signature : sha256WithRSAEncryption Valid From : Jul 30 10:56:08 2015 GMT Valid To : Jul 27 10:56:08 2025 GMT Fingerprint : 8E668937 D96ABC7C A537CA93 E4FFFC60 1CB02C6C
- 次のように証明書が表示されなかったり、「Self-signed root certificate」(CA証明書)と「Server certificate」(サーバー証明書)のどちらか一方しか表示されない場合は、手順3に進み、不足している証明書を生成してください。
awplus# show crypto pki certificates There are no trustpoints defined.
awplus# show crypto pki certificates -------------------- Trustpoint "local" Certificate Chain -------------------- Self-signed root certificate Subject : /O=Allied Telesis, Inc./CN=AlliedWarePlusCAXXXXXXXXXXXXXXXX Issuer : /O=Allied Telesis, Inc./CN=AlliedWarePlusCAXXXXXXXXXXXXXXXX Algorithms : Public Key : rsaEncryption, 2048 bits : Signature : sha256WithRSAEncryption Valid From : Jul 30 12:23:22 2015 GMT Valid To : Jul 27 12:23:22 2025 GMT Fingerprint : 89FAF3C8 FAD1773A 3D34DFA1 2BF4C600 A076B443
- 次のように「Self-signed root certificate」(CA証明書)と「Server certificate」(サーバー証明書)が表示される場合は、必要な証明書が存在していますので、これで設定変更は完了です。
- 手順2の確認で証明書が不足していた場合は、下記の手順にしたがい足りない証明書を生成してください。
- 手順2で証明書が表示されなかった場合は、crypto pki trustpointコマンドでローカルCAをセットアップしてCA証明書を生成し、続いてcrypto pki enrollコマンドでサーバー証明書を発行します。
awplus# configure terminal Enter configuration commands, one per line. End with CNTL/Z. awplus(config)# crypto pki trustpoint local Created trustpoint "local". Generating 2048-bit key for local CA... Automatically authenticated trustpoint "local". awplus(ca-trustpoint)# end awplus# crypto pki enroll local Using private key "server-default"... Successfully enrolled the local server.
- 手順2で「Self-signed root certificate」の証明書は表示されたものの、「Server certificate」の証明書が表示されなかった場合は、crypto pki enrollコマンドでサーバー証明書だけを発行します。
awplus# crypto pki enroll local Using private key "server-default"... Successfully enrolled the local server.
- 手順2で「Server certificate」の証明書は表示されたものの、「Self-signed root certificate」の証明書が表示されなかった場合、表示された「Server certificate」の証明書は使えないため、何も表示されなかった場合と同様に、crypto pki trustpointコマンドでローカルCAをセットアップしてCA証明書を生成し(このとき既存のサーバー証明書は削除されます)、続いてcrypto pki enrollコマンドでサーバー証明書を発行します。
awplus# configure terminal Enter configuration commands, one per line. End with CNTL/Z. awplus(config)# crypto pki trustpoint local Created trustpoint "local". Generating 2048-bit key for local CA... Automatically authenticated trustpoint "local". awplus(ca-trustpoint)# end awplus# crypto pki enroll local Using private key "server-default"... Successfully enrolled the local server.
証明書を生成したら、手順2に戻って必要な証明書が揃っているか再確認してください。問題がなければ、これで設定変更は完了です。
- 手順2で証明書が表示されなかった場合は、crypto pki trustpointコマンドでローカルCAをセットアップしてCA証明書を生成し、続いてcrypto pki enrollコマンドでサーバー証明書を発行します。
2要素認証(2FA)
本製品のOpenVPN機能では、RADIUS/LDAPサーバーを利用したユーザー名・パスワード認証とTOTP/HOTPまたは電子メールによるワンタイムパスワードを併用した2要素認証(2FA)をサポートしています。2FAの設定方法については「運用・管理」/「2要素認証」をご覧ください。
クライアント証明書認証
OpenVPNの接続時には本製品(サーバー)からクライアントに対してサーバー証明書を送信しますが、オプションとして本製品がクライアントの証明書を検証することもできます(クライアント証明書認証)。クライアント証明書認証は、RADIUS/LDAPサーバーを利用したユーザー名・パスワード認証、2要素認証と併用可能です。
認証順序は次のとおりです。
- クライアント証明書認証 ※有効時のみ
- ユーザー名・パスワード認証(RADIUS/LDAP)
- ワンタイムパスワード(TOTP/HOTPまたは電子メール)※有効時のみ
クライアント証明書認証を有効にするには、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では電子証明書を利用して接続相手の確認(認証)を行うため、サーバー・クライアントにそれぞれ下記の証明書がインストールされている必要があります。| CA証明書、サーバー証明書 | CA証明書、サーバー証明書 | |
| CA証明書 | CA証明書、クライアント証明書 | |
クライアント証明書認証の有効・無効により必要な証明書やサポートする発行元CAの要件が異なります。
- クライアント証明書認証が無効な場合(初期設定)はローカルCA機能によって発行した証明書のみサポートとなります。
- CA証明書、サーバー証明書とも、ローカルCA機能によって発行したものを使う
- CA証明書、サーバー証明書とも、ローカルCA機能によって発行したものを使う
- クライアント証明書認証が有効な場合はローカルCA、外部CAのどちらで発行された証明書もサポートします。
サポートするパターンは以下のとおりです。
- CA証明書、サーバー証明書、クライアント証明書とも、ローカルCA機能によって発行したものを使う
- CA証明書、サーバー証明書、クライアント証明書とも、外部CAによって発行したものを使う
- CA証明書、サーバー証明書、クライアント証明書とも、ローカルCA機能によって発行したものを使う
以下、それぞれのケースについて、必要な証明書を準備してOpenVPNクライアントに(ユーザー)に配布する方法を説明します。
クライアント証明書認証が無効な場合
クライアント証明書認証が無効な場合(初期設定)、サーバー・クライアントに必要な証明書は以下のとおりです。| CA証明書、サーバー証明書 | |
| CA証明書 |
クライアント証明書認証の無効時は、CA証明書、サーバー証明書とも、ローカルCA機能によって発行した証明書のみサポートとなります。
- クライアントのユーザー名・パスワード認証にローカルRADIUSサーバー機能を使用する場合、これらの証明書はローカルRADIUSサーバーをセットアップする過程で自動的に生成されます。
- 一方、クライアントのユーザー名・パスワード認証に外部RADIUSサーバーまたはLDAPサーバーを使用する場合は環境によって状況が異なるため、前項「外部のRADIUS/LDAPサーバーを使用する場合」を参照し、必要な証明書が存在しているかどうかを確認し、不足している場合は手動で生成してください。
サーバー証明書は上記手順にしたがい生成するだけで使用可能ですが、CA証明書は、本製品からPEM形式のテキストデータとして出力し、以下のいずれかの方法で各OpenVPNクライアント(ユーザー)に配布する必要があります。
以下、それぞれの方法を説明します。
クライアント設定ファイルとCA証明書ファイルを別ファイルとしてクライアントに配布する
CA証明書をクライアント設定ファイルとは別のファイルとしてエクスポートした上で、各OpenVPNクライアント(ユーザー)に配布する場合は、以下の手順を実行します。なお、必要な証明書は生成済みであると仮定します。
- 次のいずれかの方法でCA証明書をPEM形式ファイルとして保存します。
- crypto pki export pemコマンドをterminalキーワード付きで実行し、その出力をコピー&ペーストなどでPC上のファイル(たとえば「cacert.pem」)として保存する。
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-----上記操作により端末画面に表示された内容をPC上のテキストエディターなどにコピー&ペーストして保存します。
- crypto pki export pemコマンドで本製品のファイルシステムにCA証明書をPEM形式で書き出し(この例では「flash:/cacert.pem」としてエクスポート)、そのファイルをcopyコマンドでサーバーなどにリモートコピーする。
awplus# crypto pki export local pem cacert.pem Copying... Successful operation awplus# dir 2917 -rw- Apr 2 2015 07:19:09 cacert.pem 1193 -rw- Apr 2 2015 07:14:51 default.cfg 39419519 -rw- Mar 24 2015 05:13:51 AR4050S-5.4.5-0.1.rel awplus# copy cacert.pem scp://zein@public.example.com/tmp/
- crypto pki export pemコマンドをterminalキーワード付きで実行し、その出力をコピー&ペーストなどでPC上のファイル(たとえば「cacert.pem」)として保存する。
- 手順1の操作によりPCやサーバー上に保存したPEM形式のCA証明書ファイルを、任意の方法でOpenVPNクライアントのユーザーに配布します。
- OpenVPNクライアントの設定ファイルでは、配布されたPEM形式のCA証明書ファイルを「ca」パラメーターで指定してください。
ca cacert.pem
クライアント設定ファイル内にCA証明書のデータを埋め込んで配布する
前項の説明では、クライアント設定ファイルとCA証明書ファイルを別ファイルとしてクライアントに配布していましたが、クライアント設定ファイル内にCA証明書を埋め込み、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-----
- クライアント設定ファイル内に手順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>
- 上記手順により作成したクライアント設定ファイルを、任意の方法でOpenVPNクライアントのユーザーに配布します。
クライアント証明書認証が有効な場合
クライアント証明書認証が有効な場合、サーバー・クライアントに必要な証明書は以下のとおりです。| CA証明書、サーバー証明書 | |
| CA証明書、クライアント証明書 |
クライアント証明書認証の有効時は、ローカルCA、外部CAのどちらによって発行された証明書もサポートしますが、次に示すように使用する証明書はすべて同一のCAから発行されている必要があります。
- CA証明書、サーバー証明書、クライアント証明書とも、ローカルCA機能によって発行したものを使う
- CA証明書、サーバー証明書、クライアント証明書とも、外部CAによって発行したものを使う
以下、それぞれのケースについて、必要な証明書を準備してOpenVPNクライアントに(ユーザー)に配布する方法を説明します。
ローカルCA発行の証明書を使う場合
- クライアントのユーザー名・パスワード認証にローカルRADIUSサーバー機能を使用する場合、CA証明書とサーバー証明書はローカルRADIUSサーバーをセットアップする過程で自動的に生成されます。
- 一方、クライアントのユーザー名・パスワード認証に外部RADIUSサーバーまたはLDAPサーバーを使用する場合は環境によって状況が異なるため、前項「外部のRADIUS/LDAPサーバーを使用する場合」を参照し、必要な証明書(CA証明書とサーバー証明書)が存在しているかどうかを確認し、不足している場合は手動で生成してください。
OpenVPNサーバー(本製品)側は上記手順にしたがいCA証明書とサーバー証明書を生成するだけで準備完了ですが、OpenVPNクライアント側については、別途ローカルCA機能によってクライアント証明書を発行し、CA証明書とともにPKCS12形式のファイルとして出力して各OpenVPNクライアント(ユーザー)に配布する必要があります。
以下、そのための手順を説明します。
- 各ユーザーのクライアント証明書を発行します。
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.
- 前の手順で発行したクライアント証明書と秘密鍵、ローカルCAのルートCA証明書をPKCS#12形式ファイルとして書き出します。
crypto pki export pkcs12コマンドで書き出し先のファイル名を指定してください。
awplus# crypto pki export local pkcs12 userA flash:/userA.p12
- 書き出したPKCS#12形式ファイル(ここではflash:/userA.p12)をopensslコマンドが利用可能なPCに転送します。
- 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 ↓(実際には表示されません)
- 前記pkcs12サブコマンドを実行して正しいパスワードを入力すると、次のようにクライアント証明書、CA証明書、クライアント秘密鍵の内容が端末画面に出力されるので、それぞれをクライアント設定ファイル内にペーストして適切なタグを追加します。
- クライアント証明書(openssl pkcs12サブコマンドの表示)
Bag Attributes friendlyName: userA localKeyID: 5D A7 36 79 DD 9B FF FB A0 36 5C 91 DC 9E B8 BF 08 79 25 71 subject=O = AlliedWare Plus, CN = userA issuer=O = "Allied Telesis, Inc.", CN = AlliedWarePlusCAC6FDB7839B8348B1 -----BEGIN CERTIFICATE----- MIIDZjCCAk6gAwIBAgIJAPbTuArUiH2aMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1 c0NBQzZGREI3ODM5QjgzNDhCMTAeFw0yMzA0MjIwMzU3NDRaFw0yODA0MjAwMzU3 NDRaMCoxGDAWBgNVBAoMD0FsbGllZFdhcmUgUGx1czEOMAwGA1UEAwwFdXNlckEw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKmvdAxLz+deEsBy7uYcIA ... vhcZMW9XIga3YQ== -----END CERTIFICATE-----表示された内容のうち-----BEGIN CERTIFICATE-----から-----END CERTIFICATE-----の行までをコピーし、クライアント設定ファイル内にペーストします。
ペーストした内容の直前の行には <cert> を、直後の行には </cert> を記述してください。
[クライアント設定ファイル]
<cert> -----BEGIN CERTIFICATE----- MIIDZjCCAk6gAwIBAgIJAPbTuArUiH2aMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1 c0NBQzZGREI3ODM5QjgzNDhCMTAeFw0yMzA0MjIwMzU3NDRaFw0yODA0MjAwMzU3 NDRaMCoxGDAWBgNVBAoMD0FsbGllZFdhcmUgUGx1czEOMAwGA1UEAwwFdXNlckEw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKmvdAxLz+deEsBy7uYcIA ... vhcZMW9XIga3YQ== -----END CERTIFICATE----- </cert>
- CA証明書(openssl pkcs12サブコマンドの表示)
Bag Attributes: <No Attributes> subject=O = "Allied Telesis, Inc.", CN = AlliedWarePlusCAC6FDB7839B8348B1 issuer=O = "Allied Telesis, Inc.", CN = AlliedWarePlusCAC6FDB7839B8348B1 -----BEGIN CERTIFICATE----- MIIDdDCCAlygAwIBAgIJAN8HeNbORdmzMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1 c0NBQzZGREI3ODM5QjgzNDhCMTAeFw0yMjA4MDkwNjU5NDZaFw0zMjA4MDYwNjU5 NDZaMEoxHTAbBgNVBAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBB bGxpZWRXYXJlUGx1c0NBQzZGREI3ODM5QjgzNDhCMTCCASIwDQYJKoZIhvcNAQEB ... NI2r2/BsMGFZDm185o1u37AlaKz7Jssj -----END CERTIFICATE-----
表示された内容のうち-----BEGIN CERTIFICATE-----から-----END CERTIFICATE-----の行までをコピーし、クライアント設定ファイル内にペーストします。
ペーストした内容の直前の行には <ca> を、直後の行には </ca> を記述してください。
[クライアント設定ファイル]
<ca> -----BEGIN CERTIFICATE----- MIIDdDCCAlygAwIBAgIJAN8HeNbORdmzMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1 c0NBQzZGREI3ODM5QjgzNDhCMTAeFw0yMjA4MDkwNjU5NDZaFw0zMjA4MDYwNjU5 NDZaMEoxHTAbBgNVBAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBB bGxpZWRXYXJlUGx1c0NBQzZGREI3ODM5QjgzNDhCMTCCASIwDQYJKoZIhvcNAQEB ... NI2r2/BsMGFZDm185o1u37AlaKz7Jssj -----END CERTIFICATE----- </ca>
- クライアント秘密鍵(openssl pkcs12サブコマンドの表示)
Bag Attributes friendlyName: userA localKeyID: 5D A7 36 79 DD 9B FF FB A0 36 5C 91 DC 9E B8 BF 08 79 25 71 Key Attributes: <No Attributes> -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDKmvdAxLz+deEs By7uYcIAD4XHJAQp9JnCPts+HEypCT6EbHURuf7Fgq4K+31JFo4vaQwUj/HR13Wb zRXBlBomcj7ClxXZ+40zlkIqK8ktV5CFEh9aZY6rBJIH6Mz/YYdFqv6wko9Z51Tm sRxab0NCREJz+or+GOZZwzi8xMssuazgmzTL05IBGNCf7JxIgMkDfBirJh4UH0hS o4AxDTFpubowMtV66+KNy2rXDXFeXCGcCL8VhCpv+BU61Q+xgQ37uexEvHGPrDDk ... XF+KgN13JEFZbPwoxZYlk/4= -----END PRIVATE KEY-----表示された内容のうち-----BEGIN PRIVATE KEY-----から-----END PRIVATE KEY-----の行までをコピーし、クライアント設定ファイル内にペーストします。
ペーストした内容の直前の行には <key> を、直後の行には </key> を記述してください。
[クライアント設定ファイル]
<key> -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDKmvdAxLz+deEs By7uYcIAD4XHJAQp9JnCPts+HEypCT6EbHURuf7Fgq4K+31JFo4vaQwUj/HR13Wb zRXBlBomcj7ClxXZ+40zlkIqK8ktV5CFEh9aZY6rBJIH6Mz/YYdFqv6wko9Z51Tm sRxab0NCREJz+or+GOZZwzi8xMssuazgmzTL05IBGNCf7JxIgMkDfBirJh4UH0hS o4AxDTFpubowMtV66+KNy2rXDXFeXCGcCL8VhCpv+BU61Q+xgQ37uexEvHGPrDDk ... XF+KgN13JEFZbPwoxZYlk/4= -----END PRIVATE KEY----- </key>
- クライアント証明書(openssl pkcs12サブコマンドの表示)
- 上記手順により作成したクライアント設定ファイルを、任意の方法でOpenVPNクライアントのユーザーに配布します。
外部CA発行の証明書を使う場合
外部CA発行の証明書を使ってクライアント証明書認証を行う場合は、サーバー証明書とクライアント証明書(ユーザー証明書)を同じ外部CAから発行する必要があります。以下、外部CA発行の証明書を使う場合の設定手順を説明します。
- 外部CA用トラストポイント「openvpn_certs」を作成します。
これには、crypto pki trustpoint、enrollmentコマンドを使います。
awplus(config)# crypto pki trustpoint openvpn_certs Created trustpoint "openvpn_certs". awplus(ca-trustpoint)# enrollment terminal awplus(ca-trustpoint)# end
- 外部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".
- 次に本製品のサーバー証明書の署名要求(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----- -----------------------------------------------------------------
- 外部CAにサーバー証明書の発行を依頼します。
前の手順でPC上に保存したCSRファイル(本例ではopenvpn_server_csr.pem)を外部CAに渡し、サーバー証明書の発行を依頼してください。
ここでは、外部CAが発行した本製品のサーバー証明書を openvpn_server_cert.pem という名前のファイルとして入手したものと仮定します。
- 発行されたサーバー証明書をインポートします。
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.
- 外部CAに各ユーザーのクライアント証明書の発行を依頼します。
その際、クライアント証明書のCommon Name(CN)がOpenVPNユーザー名と一致するようにしてください。
ここでは、外部CAにOpenVPNユーザー「userA」のクライアント証明書の発行を依頼し、userA.p12という名前のPKCS#12形式ファイルを入手したものと仮定します。同ファイルにはクライアント証明書とクライアント秘密鍵に加え、外部CA自身の証明書も含まれているものとします。
- 証明書と秘密鍵を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 ↓(実際には表示されません)
- 前記pkcs12サブコマンドを実行して正しいパスワードを入力すると、次のようにクライアント証明書、CA証明書、クライアント秘密鍵の内容が端末画面に出力されるので、それぞれをクライアント設定ファイル内にペーストして適切なタグを追加します。
- クライアント証明書(openssl pkcs12サブコマンドの表示)
Bag Attributes friendlyName: userA localKeyID: 5D A7 36 79 DD 9B FF FB A0 36 5C 91 DC 9E B8 BF 08 79 25 71 subject=C = JP, O = EXAMPLE, CN = userA issuer=C = JP, O = EXAMPLE, CN = SampleRootCA -----BEGIN CERTIFICATE----- MIIDZjCCAk6gAwIBAgIJAPbTuArUiH2aMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1 c0NBQzZGREI3ODM5QjgzNDhCMTAeFw0yMzA0MjIwMzU3NDRaFw0yODA0MjAwMzU3 NDRaMCoxGDAWBgNVBAoMD0FsbGllZFdhcmUgUGx1czEOMAwGA1UEAwwFdXNlckEw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKmvdAxLz+deEsBy7uYcIA ... vhcZMW9XIga3YQ== -----END CERTIFICATE-----表示された内容のうち-----BEGIN CERTIFICATE-----から-----END CERTIFICATE-----の行までをコピーし、クライアント設定ファイル内にペーストします。
ペーストした内容の直前の行には <cert> を、直後の行には </cert> を記述してください。
[クライアント設定ファイル]
<cert> -----BEGIN CERTIFICATE----- MIIDZjCCAk6gAwIBAgIJAPbTuArUiH2aMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1 c0NBQzZGREI3ODM5QjgzNDhCMTAeFw0yMzA0MjIwMzU3NDRaFw0yODA0MjAwMzU3 NDRaMCoxGDAWBgNVBAoMD0FsbGllZFdhcmUgUGx1czEOMAwGA1UEAwwFdXNlckEw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKmvdAxLz+deEsBy7uYcIA ... vhcZMW9XIga3YQ== -----END CERTIFICATE----- </cert>
- CA証明書(openssl pkcs12サブコマンドの表示)
Bag Attributes: <No Attributes> subject=C = JP, O = EXAMPLE, CN = SampleRootCA issuer=C = JP, O = EXAMPLE, CN = SampleRootCA -----BEGIN CERTIFICATE----- MIIDdDCCAlygAwIBAgIJAN8HeNbORdmzMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1 c0NBQzZGREI3ODM5QjgzNDhCMTAeFw0yMjA4MDkwNjU5NDZaFw0zMjA4MDYwNjU5 NDZaMEoxHTAbBgNVBAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBB bGxpZWRXYXJlUGx1c0NBQzZGREI3ODM5QjgzNDhCMTCCASIwDQYJKoZIhvcNAQEB ... NI2r2/BsMGFZDm185o1u37AlaKz7Jssj -----END CERTIFICATE-----
表示された内容のうち-----BEGIN CERTIFICATE-----から-----END CERTIFICATE-----の行までをコピーし、クライアント設定ファイル内にペーストします。
ペーストした内容の直前の行には <ca> を、直後の行には </ca> を記述してください。
[クライアント設定ファイル]
<ca> -----BEGIN CERTIFICATE----- MIIDdDCCAlygAwIBAgIJAN8HeNbORdmzMA0GCSqGSIb3DQEBCwUAMEoxHTAbBgNV BAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBBbGxpZWRXYXJlUGx1 c0NBQzZGREI3ODM5QjgzNDhCMTAeFw0yMjA4MDkwNjU5NDZaFw0zMjA4MDYwNjU5 NDZaMEoxHTAbBgNVBAoMFEFsbGllZCBUZWxlc2lzLCBJbmMuMSkwJwYDVQQDDCBB bGxpZWRXYXJlUGx1c0NBQzZGREI3ODM5QjgzNDhCMTCCASIwDQYJKoZIhvcNAQEB ... NI2r2/BsMGFZDm185o1u37AlaKz7Jssj -----END CERTIFICATE----- </ca>
- クライアント秘密鍵(openssl pkcs12サブコマンドの表示)
Bag Attributes friendlyName: userA localKeyID: 5D A7 36 79 DD 9B FF FB A0 36 5C 91 DC 9E B8 BF 08 79 25 71 Key Attributes: <No Attributes> -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDKmvdAxLz+deEs By7uYcIAD4XHJAQp9JnCPts+HEypCT6EbHURuf7Fgq4K+31JFo4vaQwUj/HR13Wb zRXBlBomcj7ClxXZ+40zlkIqK8ktV5CFEh9aZY6rBJIH6Mz/YYdFqv6wko9Z51Tm sRxab0NCREJz+or+GOZZwzi8xMssuazgmzTL05IBGNCf7JxIgMkDfBirJh4UH0hS o4AxDTFpubowMtV66+KNy2rXDXFeXCGcCL8VhCpv+BU61Q+xgQ37uexEvHGPrDDk ... XF+KgN13JEFZbPwoxZYlk/4= -----END PRIVATE KEY-----表示された内容のうち-----BEGIN PRIVATE KEY-----から-----END PRIVATE KEY-----の行までをコピーし、クライアント設定ファイル内にペーストします。
ペーストした内容の直前の行には <key> を、直後の行には </key> を記述してください。
[クライアント設定ファイル]
<key> -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDKmvdAxLz+deEs By7uYcIAD4XHJAQp9JnCPts+HEypCT6EbHURuf7Fgq4K+31JFo4vaQwUj/HR13Wb zRXBlBomcj7ClxXZ+40zlkIqK8ktV5CFEh9aZY6rBJIH6Mz/YYdFqv6wko9Z51Tm sRxab0NCREJz+or+GOZZwzi8xMssuazgmzTL05IBGNCf7JxIgMkDfBirJh4UH0hS o4AxDTFpubowMtV66+KNy2rXDXFeXCGcCL8VhCpv+BU61Q+xgQ37uexEvHGPrDDk ... XF+KgN13JEFZbPwoxZYlk/4= -----END PRIVATE KEY----- </key>
- クライアント証明書(openssl pkcs12サブコマンドの表示)
- 上記手順により作成したクライアント設定ファイルを、任意の方法でOpenVPNクライアントのユーザーに配布します。
iOS版クライアントを使用する場合
iOS版のOpenVPNクライアントを使用する場合は、クライアント設定ファイルを次のように記述してください。クライアント設定ファイルの変更
iOS版クライアントで経路情報の設定を行うには、クライアント設定ファイル(.ovpnファイル)を下記のとおり変更してください。- 削除
# 経路情報等をサーバーから取得する pull # TLSクライアントを有効にする tls-client
- 追加
# TLSクライアントを有効にする client # クライアント証明書 setenv CLIENT_CERT 0 # 経路情報 route 192.168.10.0 255.255.255.0
エンティティー定義にもとづく経路通知
OpenVPNクライアントに対し、VPN経由で到達可能なネットワークやホストへの経路を通知する方法には次のものがあります。- (a) RADIUS属性Framed-Route
- (b) DHCPオプション121(Classless Static Route Option)(Tap(L2)の場合)
- (c) クライアント設定ファイルのrouteディレクティブ(iOS版クライアントの場合)
- (d) エンティティー定義
エンティティー定義は、本製品においてサブネットやホストの集合を定義する設定要素です。
おもにファイアウォール、QoS、ポリシーベースルーティングなどの各機能において、制御・適用対象のトラフィック(送信元、宛先)を指定するために使用しますが、OpenVPNサーバー機能においては、接続してきたクライアントに通知する経路の集合を定義するために使用できます。
エンティティー定義方式では、他の形式と異なり、完全ホスト名(FQDN)でホスト経路を指定できる点が特徴的です。
設定方法
接続してきたOpenVPNクライアントに対し、エンティティー定義にもとづいて経路情報を通知するには次の設定を行います。- FQDNでホスト経路を指定する場合は、エンティティー定義解説ページのFQDNによる指定を参照の上、FQDNホスト定義を使用するために必要なDNS関連の設定を行ってください。FQDN指定のホスト経路を通知しない場合、本設定は不要です。
- エンティティーを作成して通知する経路を定義します。
具体的にはVPN経由で通信させたいサブネットやホストを定義します。
たとえばクライアントに対して、プライベートなサブネット「10.25.0.0/16」とクラウドサービス上のサーバーホスト「cloud-server.example.com」宛ての通信をVPN経由で行わせたい場合は、次のようなエンティティーを定義します。
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
- OpenVPNトンネルインターフェースにおいて、接続してきたクライアントに対し、指定したエンティティー定義内のサブネットおよびホスト経路を通知するよう設定します。これにはtunnel openvpn routeコマンドを使います。
awplus(config)# interface tunnel0 awplus(config-if)# tunnel openvpn route ovpn_routes
設定は以上です。
これにより本製品のOpenVPNサーバーは、OpenVPNクライアントが接続してきたときにエンティティー定義内のサブネットとホストへの経路を通知するようになります。
なお、FQDNで指定したホストへの経路(前記の例ではcloud-server.example.comへの経路)は、OpenVPNクライアントの接続時点において、本製品に接続されている他の端末が本製品のDNSリレー機能を通じてcloud-server.example.comのIPアドレスを解決(取得)済みの場合のみ、32ビットマスク経路(ホスト経路)として通知されます。FQDNが未解決の場合、該当ホスト経路は通知されません。
ダウンロードポータル
OpenVPNユーザーにクライアント設定ファイルや接続用ソフトウェアを配布する際、本製品内蔵の認証付きWebサイト「ダウンロードポータル」を使用することもできます。詳しくは「Web GUI」/「ネットワークサービス」をご覧ください。