OpenVPN(サーバ・クライアント)機能を用いた接続

動作確認バージョン:Brocade 5600vRouter Version4.2R1S1
OpenVPNは、SSL/TSL技術を利用したSSL VPN技術になります。 Brocade 5600vRouter では、OpenVPNがサポートされています。
ここでは、OpenVPNを利用して、リモートアクセスを受けるサーバと要求元になるクライアントの設定を紹介します。
サーバ・クライアントモードにすることで、OpenVPNクライアントが動作するファイアウォールをはじめ、PC端末などがOpenVPNサーバに対して仮想的に直接接続するネットワークを構築することが可能です。

注釈

サービス提供上の理由により、Open VPN設定時はポート番号80及び443は指定されないようお願い致します。

OpenVPN(Server・Clientモード)設定

OpenVPNのサーバモードを使ってOpenVPNクライアントからのリモートアクセスを接続させる設定を紹介します。
OpenVPNクライアントが動作するPCやファイアウォールを利用しVPN接続をさせることが可能です。
OpenVPNサーバは、接続するクライアントがトンネルインタフェースを通して仮想的に直接接続するように経路設定されます。

サンプル設定のシナリオ

  • VPN接続の方式は、OpenVPN機能を利用したい
  • 将来的にインターネットアクセスできるPCからファイアウォールにVPN接続をさせたいためサーバ・クライアントモードにしたい
  • クライアントの認証には、証明書を使った認証を行いたい
構成図
openvpn_tunnel_fig1

注釈

OpenVPN設定前に、サーバ・クライアント間の通信は確立できているものとします。

シナリオにおける設定の流れ

  • ファイアウォール(OpenVPNサーバモード ホスト名:FW80)設定
1.インタフェースにvtun0というトンネルのインタフェースを作成
2.vtun0のインタフェースは、OpenVPNのサーバモードを設定
3.OpenVPNのトンネルが利用するIPアドレスに、192.168.110.0/24を設定
4.OpenVPN接続後に、サーバからクライアントにルート注入する経路として192.168.60.0/24を設定
5.CA証明書を/config/auth/ca.crtを指定
6.サーバ証明書を/config/auth/server.crtを指定
7.サーバの秘密鍵を /config/auth/server.keyを指定
8.DHファイルを/config/auth/dh.pemを指定

  • ファイアウォール(OpenVPNクライアントモード ホスト名:FW70)
1.インタフェースにvtun0というトンネルのインタフェースを作成
2.vtun0のインタフェースは、OpenVPNのクライアントモードを設定
3.VPNトンネルを接続するためのサーバ側のアドレス172.16.210.80を設定
4.CA証明書を/config/auth/ca.crtを指定
5.クライアント証明書を/config/auth/client1.crtを指定
6.クライアントの秘密鍵を /config/auth/client1.keyを指定

証明書の準備

OpenVPNのサーバ接続に関しては、証明書を使った方法での認証を実行しております。
証明書ファイルについては、必要に応じて利用者が信頼できる認証期間から発行された証明書などをご利用ください。
必要な証明書ファイルは以下のとおりです。
ファイル名(例) 証明書や鍵ファイル種別 保存する装置
ca.crt CA証明書 サーバ・クライアントで共通で保存
server.crt CA局から発行されたサーバ証明書 接続するサーバモードの機器へ保存
server.key サーバ秘密鍵 接続するサーバモードの機器へ保存
dh.pem DHファイル 接続するサーバモードの機器へ保存
client.crt CA局から発行されたクライアント証明書 接続するクライアントモードの機器へ保存
client.key クライアント秘密鍵 接続するクライアントモードの機器へ保存
ファイアウォールに鍵ファイルをコピーする方法はSCPがご利用いただけます。
[root@vserver7 openvpn]# scp /etc/openvpn/server.key user-admin@10.0.0.80:/config/auth/
Welcome to Brocade vRouter

user-admin@10.0.0.80's password:
server.key                                      0%    0     0.0KB/s   --:-- ETAserver.key                                    100% 1704     1.7KB/s   00:00
[root@vserver7 openvpn]#

CLIにて入力するコマンド

  • OpenVPNサーバモード 設定
set interfaces openvpn vtun0 mode 'server'
set interfaces openvpn vtun0 server push-route '192.168.60.0/24'
set interfaces openvpn vtun0 server subnet '192.168.110.0/24'
set interfaces openvpn vtun0 tls ca-cert-file '/config/auth/ca.crt'
set interfaces openvpn vtun0 tls cert-file '/config/auth/server.crt'
set interfaces openvpn vtun0 tls dh-file '/config/auth/dh.pem'
set interfaces openvpn vtun0 tls key-file '/config/auth/server.key'
  • OpenVPNクライアントモード 設定
set interfaces openvpn vtun0 mode 'client'
set interfaces openvpn vtun0 remote-host '172.16.210.80'
set interfaces openvpn vtun0 tls ca-cert-file '/config/auth/ca.crt'
set interfaces openvpn vtun0 tls cert-file '/config/auth/client1.crt'
set interfaces openvpn vtun0 tls key-file '/config/auth/client1.key'

注釈

サーバ秘密鍵やクライアント秘密鍵を指定してコミットすると、Warningが表示されますが、接続や通信には問題ありません。 「Warning: Specified key-file /config/auth/server.key does not have expected header and may not be valid」

正しく設定が完了したときのコンフィグレーションは次のとおりです。
  • OpenVPNサーバモード 設定
interfaces {
       dataplane dp0s4 {
               address 192.168.60.80/24
       }
       dataplane dp0s5 {
               address 172.16.210.80/24
       }
       dataplane dp0s6
       dataplane dp0s7 {
               address 10.0.0.80/24
       }
       loopback lo
       openvpn vtun0 {
               mode server
               server {
                       push-route 192.168.60.0/24
                       subnet 192.168.110.0/24
               }
               tls {
                       ca-cert-file /config/auth/ca.crt
                       cert-file /config/auth/server.crt
                       dh-file /config/auth/dh.pem
                       key-file /config/auth/server.key
               }
       }
}
  • OpenVPNクライアントモード 設定
interfaces {
        dataplane dp0s4 {
                address 192.168.50.70/24
        }
        dataplane dp0s5 {
                address 172.16.110.70/24
        }
        dataplane dp0s6 {
        }
        dataplane dp0s7 {
                address 10.0.0.70/24
        }
        loopback lo
        openvpn vtun0 {
                mode client
                remote-host 172.16.210.80
                tls {
                        ca-cert-file /config/auth/ca.crt
                        cert-file /config/auth/client1.crt
                        key-file /config/auth/client1.key
                }
        }
}

動作確認結果

2台のファイアウォールがそれぞれOpenVPNのサーバ・クライアントとして動作することを確認できました。
OpenVPNクライアントからサーバへOpenVPNトンネルが接続されており、経路情報も表示されていることが確認できます。
通信確認結果も、サーバ・クライアント間でPING通信が可能であることが確認できました。
  • OpenVPNの接続状態
      #OpenVPNサーバ  OpenVPN状態確認  → 接続OK

      uesr-admin@FW80:~$ show openvpn server status
      OpenVPN server status on vtun0

      Client CN       Remote IP       Tunnel IP       TX byte RX byte Connected Since
      --------------- --------------- --------------- ------- ------- ------------------------
      client1         172.16.110.70   192.168.110.2     69.7K   94.1K Sat Mar 25 09:02:06 2017

      user-admin@FW80:~$
      user-admin@FW80:~$ show int
      Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
      Interface        IP Address                        S/L  Description
      ---------        ----------                        ---  -----------
      dp0s3            100.xx.xx.65/20                   u/u
      dp0s4            192.168.60.80/24                  u/u
      dp0s5            172.16.210.80/24                  u/u
      dp0s6            -                                 A/D
      dp0s7            10.0.0.80/24                      u/u
      vtun0            192.168.110.1/24                  u/u
      user-admin@FW80:~$


#OpenVPNクライアント  OpenVPN状態確認  → 接続OK

      user-admin@FW70:~$ show openvpn client status
      OpenVPN client status on vtun0

      Server CN       Remote IP       Tunnel IP       TX byte RX byte Connected Since
      --------------- --------------- --------------- ------- ------- ------------------------
      N/A             172.16.210.80   N/A              106.9K   99.9K N/A

      user-admin@FW70:~$
      user-admin@FW70:~$ show int
      Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
      Interface        IP Address                        S/L  Description
      ---------        ----------                        ---  -----------
      dp0s3            100.xx.xx.64/20                   u/u
      dp0s4            192.168.50.70/24                  u/u
      dp0s5            172.16.110.70/24                  u/u
      dp0s6            -                                 A/D
      dp0s7            10.0.0.70/24                      u/u
      vtun0            192.168.110.2/24                  u/u
      user-admin@FW70:~$
  • OpenVPN接続時における経路状態(Server/Client)
#OpenVPNサーバ  OpenVPN経路状態

user-admin@FW80:~$ sh ip route
        Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
       O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
       > - selected route, * - FIB route, p - stale info

IP Route Table for VRF "default"
C    *> 10.0.0.0/24 is directly connected, dp0s7
S    *> 100.xx.x.64/26 [210/0] via 100.xx.xx.1, dp0s3
S    *> 100.xx.xx.64/26 [210/0] via 100.xx.xx.1, dp0s3
C    *> 100.xx.xx.0/20 is directly connected, dp0s3
C    *> 127.0.0.0/8 is directly connected, lo
O    *> 172.16.110.0/24 [110/2] via 172.16.210.10, dp0s5, 04:12:10
C    *> 172.16.210.0/24 is directly connected, dp0s5
C    *> 192.168.60.0/24 is directly connected, dp0s4
C    *> 192.168.110.0/24 is directly connected, vtun0
user-admin@FW80:~$

#OpenVPNクライアント  OpenVPN経路状態

user-admin@FW70:~$ show ip route
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
       O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
       > - selected route, * - FIB route, p - stale info

IP Route Table for VRF "default"
C    *> 10.0.0.0/24 is directly connected, dp0s7
S    *> 100.xx.x.64/26 [210/0] via 100.xx.xx.1, dp0s3
S    *> 100.xx.xx.64/26 [210/0] via 100.xx.xx.1, dp0s3
C    *> 100.xx.xx.0/20 is directly connected, dp0s3
C    *> 127.0.0.0/8 is directly connected, lo
C    *> 172.16.110.0/24 is directly connected, dp0s5
O    *> 172.16.210.0/24 [110/2] via 172.16.110.10, dp0s5, 03:52:34
C    *> 192.168.50.0/24 is directly connected, dp0s4
K    *> 192.168.60.0/24 via 192.168.110.1, vtun0
C    *> 192.168.110.0/24 is directly connected, vtun0
user-admin@FW70:~$
  • OpenVPN接続時における通信確認(Server/Client)
#OpenVPNサーバからクライアントへの通信確認 →  OK

user-admin@FW80:~$ ping 192.168.110.2 count 5
PING 192.168.110.2 (192.168.110.2) 56(84) bytes of data.
64 bytes from 192.168.110.2: icmp_seq=1 ttl=64 time=2.36 ms
64 bytes from 192.168.110.2: icmp_seq=2 ttl=64 time=2.57 ms
64 bytes from 192.168.110.2: icmp_seq=3 ttl=64 time=2.32 ms
64 bytes from 192.168.110.2: icmp_seq=4 ttl=64 time=7.79 ms
64 bytes from 192.168.110.2: icmp_seq=5 ttl=64 time=2.55 ms

--- 192.168.110.2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 2.324/3.524/7.799/2.140 ms
user-admin@FW80:~$


#OpenVPNクライアントからOpenVPNサーバへの通信確認 → OK

user-admin@FW70:~$ ping 192.168.110.1 count 5
PING 192.168.110.1 (192.168.110.1) 56(84) bytes of data.
64 bytes from 192.168.110.1: icmp_seq=1 ttl=64 time=2.17 ms
64 bytes from 192.168.110.1: icmp_seq=2 ttl=64 time=3.14 ms
64 bytes from 192.168.110.1: icmp_seq=3 ttl=64 time=2.61 ms
64 bytes from 192.168.110.1: icmp_seq=4 ttl=64 time=3.01 ms
64 bytes from 192.168.110.1: icmp_seq=5 ttl=64 time=2.62 ms

--- 192.168.110.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 2.179/2.712/3.140/0.345 ms
user-admin@FW70:~$

#OpenVPNクライアントから サーバ側ネットワークへの通信確認 → OK

user-admin@FW70:~$ ping 192.168.60.11 count 5
PING 192.168.60.11 (192.168.60.11) 56(84) bytes of data.
64 bytes from 192.168.60.11: icmp_seq=1 ttl=125 time=15.0 ms
64 bytes from 192.168.60.11: icmp_seq=2 ttl=126 time=3.98 ms
64 bytes from 192.168.60.11: icmp_seq=3 ttl=125 time=4.38 ms
64 bytes from 192.168.60.11: icmp_seq=4 ttl=126 time=7.77 ms
d64 bytes from 192.168.60.11: icmp_seq=5 ttl=126 time=4.27 ms

--- 192.168.60.11 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 3.989/7.102/15.094/4.229 ms
user-admin@FW70:~$