WindowsServer2019にOpenVPNをインストールする

# OpenVPNとWindows

以前は、OpenVPNをWindowsで運用するというのは、かなり敷居が高かったのだが、今では簡単に使用開始ができるので、そのメモ。

# 参考URL

- [WindowsをOpenVPNサーバーにする](https://aky-sta.jp/2019/02/12/windowsをopenvpnサーバーにする/)
- [OpenVPNでVPNしよう](http://tsuttayo.jpn.org/ssh/openvpn/)
- [OpenVPNの設定（その2：ブリッジモードサーバー設定）](https://fuketch.wordpress.com/2013/02/26/openvpnの設定（その2の1：ブリッジモードでの接続1）/)
- [Openvpn24ManPage](https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage)
- [OpenVPNのtapブリッジングでDHCPを使う場合のTips](https://yudai.arielworks.com/memo/2010/08/12/174249)
- [OpenVPNサーバを立てて、自宅NWへアクセスするまで](http://jimaoka.hatenablog.jp/entry/openvpn-setup)
- [OpenVPN 2.0 Ethernet Bridging 日本語訳](https://freescitech.net/2/ovpn2_ether_ja.html)
- [Openvpn24ManPage](https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage)
- [OpenVPN.JP | OpenVPN日本語情報サイト](https://www.openvpn.jp/)
- [OpenVPN.JP | OpenVPN日本語情報サイト - サブネットの設定](https://www.openvpn.jp/document/how-to/#Subnets)
- [OpenVPNのインストールとセットアップからインターネット接続までのガイドブック](https://qiita.com/noraworld/items/2fe6be489e1d93c748b8)
- [ManagingWindowsTAPDrivers](https://community.openvpn.net/openvpn/wiki/ManagingWindowsTAPDrivers)
- [OpenVPNに必要なTAP-Windowsがインストールできなくて詰んだと思ったけど解決した件](https://qiita.com/YujiTsushima/items/8a4669b1de47415d2069)
- [【実証】第２回：OpenVPNをWindowsサーバーで設定する](https://altus.gmocloud.com/column/20120608.html)
- [WindowsをOpenVPNサーバーにする](https://aky-sta.jp/2019/02/12/windows%E3%82%92openvpn%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AB%E3%81%99%E3%82%8B/)

# インストールと設定

インストール先ディレクトリを「**%InstallDir%**」とする

通常は、「**C:\Program Files\OpenVPN**」だと思う。

## インストール

OpenVPN の本家より、ダウンロードして、インストールする。

インストールは特に問題なくできると思う。

証明書の作成などが必要なら、「**EasyRSA 2 Certificate Management Scrips**」をチェックしてからインストールすること。

![openvpn001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/ab63b255-34ee-16d0-854a-dbb185d93b50.png)

## インストール後に確認すべきこと

ネットワークアダプタの一覧に「**TAP-Windows Adapter V9**」というような OpenVPN 由来の仮想ネットワークアダプタ(仮想NIC)があるかどうか確認すること。

![openvpn002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/795ea841-3466-7b8e-73a8-cfa986f65a88.png)

最近のWindows(64Bit Windows)では、デバイスドライバには正しいデジタル署名が必要であり、デジタル署名の関係でインストールできない場合は(*OpenVPN由来の仮想NICがネットワークアダプタの一覧に表示されない*)、そのWindowsでは使えないかもしれない。

## OpenVPNサーバ側で各種証明書の作成

仮想アダプタの設定の前に(後でもいいけど)、各種証明書や、暗号鍵を作っておく。

インストール時に「**EasyRSA 2 Certificate Management Scrips**」をチェックしていたら、インストールディレクトリ下に「**easy-rsa**」というフォルダがあると思う。
つまり、「**%InstallDir%\easy-rsa**」というディレクトリがあると思う。

### OpenVPNサーバ側で各種証明書の作成(事前準備コマンド)

1. init-config.bat
2. vars.bat
3. clean-all.bat

の順でコマンドを実行する。

```shell-session:
C:\Program Files\OpenVPN\easy-rsa>init-config.bat

C:\Program Files\OpenVPN\easy-rsa>copy vars.bat.sample vars.bat
        1 個のファイルをコピーしました。

C:\Program Files\OpenVPN\easy-rsa>vars.bat

C:\Program Files\OpenVPN\easy-rsa>clean-all.bat
指定されたファイルが見つかりません。
        1 個のファイルをコピーしました。
        1 個のファイルをコピーしました。
```

### OpenVPNサーバ側で各種証明書の作成(認証局の作成)

1. build-ca.bat

で認証局の秘密鍵と公開鍵と証明書が作成される。

```shell-session:
C:\Program Files\OpenVPN\easy-rsa>build-ca.bat
Can't load C:\Program Files\OpenVPN\easy-rsa/.rnd into RNG
5960:error:2406F079:random number generator:RAND_load_file:Cannot open file:crypto/rand/randfile.c:98:Filename=C:\Program Files\OpenVPN\easy-rsa/.rnd
Generating a RSA private key
～～～省略～～～
writing new private key to 'keys\ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [US]:JP
State or Province Name (full name) [CA]:Tokyo
Locality Name (eg, city) [SanFrancisco]:Minatoku
Organization Name (eg, company) [OpenVPN]:Test.Part
Organizational Unit Name (eg, section) [changeme]:test
Common Name (eg, your name or your server's hostname) [changeme]:ca
Name [changeme]:ca
Email Address [mail@host.domain]:ca@example.com
```

「**%InstallDir%\easy-rsa\keys**」以下に「**ca.crt**」と「**ca.key**」が作成される

### OpenVPNサーバ側で各種証明書の作成(サーバ証明書の作成)

1. build-key-server.bat ≪サーバ名≫

でサーバ証明書が作成される

```shell-session:
C:\Program Files\OpenVPN\easy-rsa>build-key-server.bat server
Ignoring -days; not generating a certificate
Generating a RSA private key
～～～省略～～～
writing new private key to 'keys\server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [US]:JP
State or Province Name (full name) [CA]:Tokyo
Locality Name (eg, city) [SanFrancisco]:Minatoku
Organization Name (eg, company) [OpenVPN]:Test.Part
Organizational Unit Name (eg, section) [changeme]:server
Common Name (eg, your name or your server's hostname) [changeme]:server
Name [changeme]:server
Email Address [mail@host.domain]:server@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'JP'
stateOrProvinceName   :PRINTABLE:'Tokyo'
localityName          :PRINTABLE:'Minatoku'
organizationName      :PRINTABLE:'Test.Part'
organizationalUnitName:PRINTABLE:'server'
commonName            :PRINTABLE:'server'
name                  :PRINTABLE:'server'
emailAddress          :IA5STRING:'server@example.com'
Certificate is to be certified until May 30 06:20:26 2030 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

C:\Program Files\OpenVPN\easy-rsa>dir keys\server*
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 70A9-7487 です

 C:\Program Files\OpenVPN\easy-rsa\keys のディレクトリ

2020/06/01  15:20             8,307 server.crt
2020/06/01  15:20             1,798 server.csr
2020/06/01  15:19             3,324 server.key
               3 個のファイル              13,429 バイト
               0 個のディレクトリ  47,287,656,448 バイトの空き領域
```

「**%InstallDir%\easy-rsa\keys**」以下に「**server.crt**」、「**server.csr**」と「**server.key**」が作成される

### OpenVPNサーバ側で各種証明書の作成(クライアント証明書の作成)

1. build-key.bat ≪ユーザ名≫

でユーザ側(クライアント側)の証明書が作成される

```shell-session:
C:\Program Files\OpenVPN\easy-rsa>build-key.bat client
Ignoring -days; not generating a certificate
Generating a RSA private key
～～～省略～～～
writing new private key to 'keys\client.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [US]:JP
State or Province Name (full name) [CA]:Tokyo
Locality Name (eg, city) [SanFrancisco]:Minatoku
Organization Name (eg, company) [OpenVPN]:Test.Part
Organizational Unit Name (eg, section) [changeme]:client
Common Name (eg, your name or your server's hostname) [changeme]:client
Name [changeme]:client
Email Address [mail@host.domain]:client@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'JP'
stateOrProvinceName   :PRINTABLE:'Tokyo'
localityName          :PRINTABLE:'Minatoku'
organizationName      :PRINTABLE:'Test.Part'
organizationalUnitName:PRINTABLE:'client'
commonName            :PRINTABLE:'client'
name                  :PRINTABLE:'client'
emailAddress          :IA5STRING:'client@example.com'
Certificate is to be certified until May 30 06:24:37 2030 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

C:\Program Files\OpenVPN\easy-rsa>dir keys\client*
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 70A9-7487 です

 C:\Program Files\OpenVPN\easy-rsa\keys のディレクトリ

2020/06/01  15:24             8,188 client.crt
2020/06/01  15:24             1,798 client.csr
2020/06/01  15:24             3,324 client.key
               3 個のファイル              13,310 バイト
               0 個のディレクトリ  47,287,492,608 バイトの空き領域
```

「**%InstallDir%\easy-rsa\keys**」以下に「**client.crt**」、「**client.csr**」と「**client.key**」が作成される

### OpenVPNサーバ側で各種証明書の作成(DHパラメータの作成)

1. build-dh.bat

でDHのパラメータファイルが作成される

```shell-session:
C:\Program Files\OpenVPN\easy-rsa>build-dh.bat
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
～～～省略～～～

C:\Program Files\OpenVPN\easy-rsa>dir keys\dh*
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 70A9-7487 です

 C:\Program Files\OpenVPN\easy-rsa\keys のディレクトリ

2020/06/01  15:28               432 dh2048.pem
               1 個のファイル                 432 バイト
               0 個のディレクトリ  47,287,492,608 バイトの空き領域
```

「**%InstallDir%\easy-rsa\keys**」以下に「**dhXXXX.pem**」が作成される


### OpenVPNサーバ側で各種証明書の作成(2回目以降)

一旦、各種証明書を作成しつつ、再度(クライアント)証明書が作成したくなったら、

コマンドプロンプトから

1. vars.bat
2. 目的のコマンドを実行

でよい

### OpenVPNサーバ側で各種証明書の作成(tlsセキュリティキーの作成)

こちらは「**%InstallDir%\bin\openvpn.exe**」コマンドを使う

```shell-session:
C:\Program Files\OpenVPN\bin>openvpn.exe --genkey --secret ta.key

C:\Program Files\OpenVPN\bin>dir ta.key
 Volume in drive C has no label.
 Volume Serial Number is 70A9-7487

 Directory of C:\Program Files\OpenVPN\bin

2020/06/01  15:32               657 ta.key
               1 File(s)            657 bytes
               0 Dir(s)  47,287,492,608 bytes free
```

「**%InstallDir%\bin**」以下に「**ta.key**」が作成される

## 設定(仮想NICの設定)

OpenVPN 由来の仮想NICの名前が、後程設定ファイルに記述するので、適当な名前に変更しておく。
ここでは「**OpenVPNtap**」とした。

![openvpn003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/b5c0728a-78fc-9887-9654-41826613b65f.png)

![openvpn004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/9bdaeadf-9bd9-0bc9-962a-f48414e1531d.png)

## OpenVPN を tap で使用する

![tap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/f25cdc07-6017-c99b-44e0-90a82a3ceeb7.png)

同一ブロードキャストドメインの中にいる、つまりブリッジ接続ということね。

### ブリッジの設定(tapの場合)

tap の場合は、Windowsの標準機能の「**ブリッジ接続**」をしておく。

![openvpn005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/7dd5e2d8-fb97-5a3d-6fd4-f741c8f3ea0b.png)

一般的には、**物理的なNIC**と**OpenVPNの仮想NIC**の二つを選択して、「**ブリッジ接続**」する

![openvpn006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/219c2247-0a07-5852-c27a-2454243e2c03.png)

作成したブリッジに、IPアドレスを付与する

### OpenVPNサーバの設定(tapの場合)

「**%InstallDir%\config**」下に、以下のファイルをコピーする

- **%InstallDir%\bin\ta.key**
- **%InstallDir%\sample-config\server.ovpn**
- **%InstallDir%\easy-rsa\keys\ca.crt**
- **%InstallDir%\easy-rsa\keys\dh2048.pem**
- **%InstallDir%\easy-rsa\keys\server.crt**
- **%InstallDir%\easy-rsa\keys\server.csr**
- **%InstallDir%\easy-rsa\keys\server.key**

![openvpn-config.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/2a0f74a2-9c8a-389c-227f-02ce713fca25.png)

**ca.keyはいらない・・・スクリーンキャプチャ失敗した・・・orz**

server.ovpn ファイルを以下のように修正する

```configuration:
# 特定のIPアドレスでlistenしたいなら設定する
;local a.b.c.d

# OpenVPNのポート番号を設定する
# 任意のポートにするといいと思う
port 1194

# TCP or UDP server?
;proto tcp
proto udp
# TCP か UDP か

dev tap
;dev tun
# 今回は tap なので、dev tap のコメントアウトを外して、dev tun をコメントアウトする

# 今回は Windows 上の OpenVPN なので
# OpenVPN の仮想 NIC の名前を指定する
dev-node OpenVPNtap

# 認証局の公開鍵/証明書を指定する
ca ca.crt
# OpenVPN のサーバとしての公開鍵/秘密鍵/証明書を指定する
cert server.crt
key server.key  # This file should be kept secret

# DH パラメータのファイルを指定する
dh dh2048.pem

# こちらはtunで使うので、コメントアウトする
;server 10.8.0.0 255.255.255.0

# これはそのままにしておく
ifconfig-pool-persist ipp.txt

# tap なので、こちらの設定をする
# OpenVPNサーバ上のLANのデフォルトゲートウェイのIPアドレスが 10.8.0.4 でサブネットが 255.255.255.0
# 接続してきたクライアントへ割り当てるIPアドレスが 10.8.0.50 ～ 100
server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100

# DHCP サーバとして DNSサーバを知らせたいときは、以下のコメントアウトを外す
# サンプルに書かれている二つはOpenVPNSが管理している!? オープンなDNSサーバだけど、
# 内部のDNSサーバを指定したいときはそのアドレスを指定しておく
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"

自ネットワークの情報は書かないといけない
push "route 10.8.0.0 255.255.255.0"

# クライアントの全ての通信を OpenVPN 経由にする場合は、コメントアウトを外す
push "redirect-gateway def1 bypass-dhcp"

# TLS のセキュリティキーを指定する
tls-auth ta.key 0 # This file is secret

# クライアントの設定と合わせる
cipher AES-256-CBC

# クライアントの設定と合わせる
# lzo 圧縮を有効にする
comp-lzo

# TCP の場合は、コメントアウトする。
;explicit-exit-notify 1
# UDPの場合はこのまま有効にしておく
explicit-exit-notify 1
```

#### bypass-dhcpについて

OpenVPNのサーバ設定の「**bypass-dhcp**」は、DHCPパケットはOpenVPNの外部に流すという事。

OpenVPNを繋げている物理NIC側のIPアドレス取得のDHCPパケットまで、OpenVPN内部にしてしまうと、
物理NICのDHCP要求が必要になった場合(例えばISPへの接続とか)、それができなくなり、結果として物理的にネットワークが切断してしまうので、その対策としてDHCPだけはOpenVPNの外部に流したい場合は「**bypass-dhcp**」を設定する。

### OpenVPNサーバを起動する(tapの場合)

サーバなので、Windowsサービスがいいよね。

という事で、コントロールパネルのサービスの一覧から「**OpenVPNService**」を「自動」にしておく、まぁとにかく**実行状態**する

![openvpn5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/cab91f87-21bb-d139-7012-1c995437b234.png)


### クライアントに OpenVPN をインストールする(tapの場合)

サーバ側と同じようにインストールするので省略

### クライアントの設定(tapの場合)

「**%InstallDir%\config**」下に、サーバで作った証明書類と、サンプルの設定ファイルをコピーする

- **ta.key**
- **%InstallDir%\sample-config\client.ovpn**
- **ca.crt**
- **client.crt**
- **client.csr**
- **client.key**

![OpenVPNa1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/6aa1d1bf-ab45-4942-e928-6cde37caf6fd.png)

**ca.keyはいらない・・・むしろクライアントにca.keyを配布してはいけない・・・絶対にしてはいけない・・・スクリーンキャプチャ失敗した・・・orz**

client.ovpn ファイルを以下のように修正する

```configuration:
dev tap
;dev tun
# 今回は tap なので、dev tap のコメントアウトを外して、dev tun をコメントアウトする

# 今回は Windows 上の OpenVPN なので
# サーバと同じように仮想NICを設定したのなら、
# OpenVPN の仮想 NIC の名前を指定する
dev-node OpenVPNtap

# Are we connecting to a TCP or
# UDP server?  Use the same setting as
# on the server.
;proto tcp
proto udp
# TCP か UDP か

# 接続先ホスト名とポート番号を指定する
# これは、接続先ホスト名がovpn.example.comでポートが1194ということ
remote ovpn.example.com 1194
# 複数記述して分散/冗長化も可能

# Choose a random host from the remote
# list for load-balancing.  Otherwise
# try hosts in the order specified.
;remote-random
# 必要ならコメントアウトすればいいと思う

# Keep trying indefinitely to resolve the
# host name of the OpenVPN server.  Very useful
# on machines which are not permanently connected
# to the internet such as laptops.
resolv-retry infinite

# Most clients don't need to bind to
# a specific local port number.
nobind

# Try to preserve some state across restarts.
persist-key
persist-tun

# If you are connecting through an
# HTTP proxy to reach the actual OpenVPN
# server, put the proxy server/IP and
# port number here.  See the man page
# if your proxy server requires
# authentication.
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]
# 必要ならコメントアウトすればいいと思う

# Wireless networks often produce a lot
# of duplicate packets.  Set this flag
# to silence duplicate packet warnings.
;mute-replay-warnings

# 認証局の公開鍵/証明書を指定する
ca ca.crt
# OpenVPN のクライアント/ユーザとしての公開鍵/秘密鍵/証明書を指定する
cert client.crt
key client.key

# Verify server certificate by checking that the
# certicate has the correct key usage set.
# This is an important precaution to protect against
# a potential attack discussed here:
#  http://openvpn.net/howto.html#mitm
#
# To use this feature, you will need to generate
# your server certificates with the keyUsage set to
#   digitalSignature, keyEncipherment
# and the extendedKeyUsage to
#   serverAuth
# EasyRSA can do this for you.
remote-cert-tls server

# If a tls-auth key is used on the server
# then every client must also have the key.
tls-auth ta.key 1

# サーバの設定と合わせる
cipher AES-256-CBC

# サーバの設定と合わせる
# サーバの設定と合わせて、コメントアウトを取る
comp-lzo
```

### クライアントの起動と接続(tapの場合)

GUI ツール(OpenVPN GUI)が用意されているので、タスクトレイから上記の設定ファイルを指定して起動すればよい。

タスクトレイにあるやつ。

![openvpn6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/fe767d18-67c6-32d2-a908-7fcca92bd440.png)

右クリックしたメニューはこんな感じ
「接続」でパスで指定された設定ファイルを読み込んで、接続を開始する。

![OpenVPNa3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/81357024-9956-7310-f8e2-bf0cd5c05a55.png)

右クリックメニューの「設定」を選んだ感じ。
気にするところは、設定ファイルのパスぐらいだと思うけど、デフォルトインストール先が示されるので、まぁ確認しておくぐらいかな

![OpenVPNa2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/e3c72a4a-d7c2-cbb1-c961-cddf25213cd1.png)

## OpenVPN を tun で使用する

![tun.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/42da3ebc-e4f6-fe29-dea9-819b8a0e6796.png)

ブロードキャストドメインではなくて、ルーティングで通信をするという形態ね。

### まずは、Windowsでルーティングの設定をする

レジストリ「\\HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter」を「1」にするなり、RRASを起動/設定するなりして、OpenVPNサーバ(Windows)でルーティング(パケット転送)できるようにしておく。

### OpenVPNクライアントがアクセスする機器のルーティング情報の設定更新

OpenVPNクライアントは、新しい別のネットワークなので、そこからの通信はOpenVPNサーバをゲートウェイとするようにルーティング情報を設定しておかないと、OpenVPNクライアントとサーバ機器は通信ができないよ。

まぁ、Windowsをデフォルトゲートウェイにしていて、そいつにOpenVPN Serverをインストールしているのであれば、不要かもしれんけど、そうでない場合は、ルーティング情報をどうするのか、というのが、tunの場合の悩みどころかと思う。

![tun-route.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/51430c26-5289-d0f8-2466-d03da09be940.png)

### OpenVPNサーバの設定(tunの場合)

tapと同じようにする。

基本的には設定ファイルの記述内容だけ異なる

server.ovpn ファイルを以下のように修正する(tapと異なる部分だけ)

```configuration:
;dev tap
dev tun
# tap と違う部分はまずはここ

# このコメントアウトは外さないと、
# OpenVPN内部に別のサブネットができてしまう
# なんかよく分からんが、下記に少し書いたので参照
topology subnet

# tap と違うのは「server-bridge」を使わずに「server」を使う
# 10.8.0.0/24というネットワークをOpenVPNのサーバとクライアントで構築する
# そして10.8.0.1がOpenVPNサーバ側の仮想NICのアドレスとなる
server 10.8.0.0 255.255.255.0

# tap と違うのは「server-bridge」を使わずに「server」を使う
# なので、コメントアウトする
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100

# tap と違うのは「server-bridge」を使わずに「server」を使う
# なので、コメントアウトする
;server-bridge

# 必要なネットワークのルーティング情報をOpenVPNクライアントに送る必要がある
# OpenVPNクライアントと会話するサーバ側のルーティング情報も更新しておかないと、通信ができないよ。
# (OpenVPNクライアントのアドレスは、ゲートウェイとなっているOpenVPNサーバへ)
# (転送するようにルーティング情報を設定する必要がある)
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
# 一応、OpenVPN間のネットワークのルーティング情報も送っておく
push "route 10.8.0.0 255.255.255.0"
```

### OpenVPNサーバの設定(tunの場合)(「topology subnet」について)

上記のserver.ovpnにて「topology subnet」のコメントアウトを外しているが、これをコメントアウトすると、下記のような 30bit のサブネットとなってしまって、OpenVPNサーバとOpenVPNクライアント間で異なるネットワークとなり、通信ができなくなる。

![topology.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/45b2564b-06d7-ecae-9a9b-c83ab09fddc0.png)

### クライアントの設定(tunの場合)

tapと同じようにする。

設定ファイルの記述内容だけ異なる

client.ovpn ファイルを以下のように修正する

```configuration:
;dev tap
dev tun
# tap と違う部分ってもここぐらい
```

### クライアントの起動と接続(tunの場合)

tapと同じなので略。

# 以上