図解！UbuntuでOpenVPNを使う：3. 設定

# はじめに
[図解！UbuntuでOpenVPNを使う：2. 証明書と認証鍵の作成](http://qiita.com/MoriKen/items/50d226e8c6395487c0a6)の続きです．

前回までで接続に必要な証明書と認証鍵の作成が完了しました．

![01_review.png](https://qiita-image-store.s3.amazonaws.com/0/110138/dc3c12e0-1240-984b-babc-edcbd54912f6.png)

今回は，実際に接続するための設定について説明します．サーバ側とクライアント側それぞれについて設定を行います．

# 図解！UbuntuでOpenVPNを使う：目次
1. [準備](http://qiita.com/MoriKen/items/7fe17fda8442adb599d9)
  2. VPNの接続方式
  1. `OpenVPN` のインストール
  2. ファイアウォール設定
  2. VPNサーバ側のルータのグローバルIP確認
  3. ルータからVPNサーバへのポートフォワード設定
2. [証明書と認証鍵の作成](http://qiita.com/MoriKen/items/50d226e8c6395487c0a6)
  1. 簡易認証局(`easy-rsa`)関連
  2. VPNサーバ関連
  3. VPNクライアント関連
3. ***設定　←　イマココ***
  2. `OpenVPN` サーバ設定  
  3. `OpenVPN` クライアント設定
4. [接続確認](http://qiita.com/MoriKen/items/682d31496fd0d2476af7)
  5. `OpenVPN`の起動
  6. 仮想`tun`デバイスの確認
  6. `ping` 確認
  7. `netcat` 確認

# 環境
- OS: VPNサーバ/クライアント共に Ubuntu 14.04
- VPNアプリケーション：OpenVPN 2.3.2 

# 0. システム構成のおさらい

目標となるシステム構成をおさらいしておきましょう．

![01_システム構成.png](https://qiita-image-store.s3.amazonaws.com/0/110138/9ebfb457-309c-e657-1fa2-4d278c77e11a.png)

この構成を目指して設定ファイルを編集していくことになります.

なお，本エントリで掲載した設定ファイルのサンプルは[こちらのGitHubリポジトリ](https://github.com/MoriKen254/OpenVPN-Setting-Smple)に格納しました.
> - [MoriKen254/OpenVPN-Setting-Smple](https://github.com/MoriKen254/OpenVPN-Setting-Smple)

# 1. `OpenVPN` VPNサーバ設定
自身の環境でOpenVPNが動作するように設定ファイルを編集する必要があります．

`/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz`にサンプルがあるので，`/etc/openvpn/server.conf`に展開します．

```bash:(command)
$ gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
```

![02_server_conf.png](https://qiita-image-store.s3.amazonaws.com/0/110138/f5f830ed-8f9b-8f8c-f5df-39ae19525878.png)


また，`server.conf`ではサーバ側の実ドメインを入力する必要があるので，確認しておきましょう.

![06_port_forward.png](https://qiita-image-store.s3.amazonaws.com/0/110138/ee3d796b-4f51-6f87-73a9-3044b489900a.png)

```bash:(command)
$ ifconfig
```

```bash:(output)
wlan0     Link encap:イーサネット  ハードウェアアドレス hogehoge  
          inetアドレス:192.168.179.7  ブロードキャスト:192.168.179.255  マスク:255.255.255.0

```

では，実際に編集をします.

```bash:(command)
vim server.conf
```

```bash:server.conf
# OpenVPNのポート番号．
port 1194
# 通信プロトコル: UDP．
proto udp
# VPNプロトコル：ルーティング方式．
dev tun
# 認証局証明書/サーバ証明書・認証鍵/DHパラメータ．/etc/openvpn からのパス．
ca ca.crt
cert mysrv.crt
key mysrv.key
dh dh2048.pem
# VPN接続時のネットワークセグメント．他と衝突しないようにうする．
server 10.8.0.0 255.255.255.0
# 再接続用のテーブル．
ifconfig-pool-persist ipp.txt
# サーバ側のLANのセグメント．ifconfigで認識されるLANに接続させる．
push "route 192.168.179.0 255.255.255.0"
# セッション継続頻度．
keepalive 10 120
# 再起動後の処理．
persist-key
persist-tun
# ステータスログ．
status openvpn-status.log
# ログファイル．
log         openvpn.log
# LZO圧縮を有効に
comp-lzo
# ログレベル．
verb 3
```

- `push "route 192.168.179.0 255.255.255.0"`の部分に，先ほど確認した実LANのドメインが入ります.

# 2. `OpenVPN` VPNクライアント設定
クライアント側でも同様に設定ファイルを編集する必要があります．`/usr/share/doc/openvpn/examples/sample-config-files/client.conf`にサンプルがあるので，`/etc/openvpn/client.conf`にコピーします．

```bash:(command)
$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/client.conf
```

![03_client_config.png](https://qiita-image-store.s3.amazonaws.com/0/110138/209e7a4c-3554-f0f5-35a8-abd0203e27cf.png)

[図解 UbuntuでOpenVPNを使う：1. 準備](http://qiita.com/MoriKen/items/7fe17fda8442adb599d9#4-vpn%E3%82%B5%E3%83%BC%E3%83%90%E5%81%B4%E3%81%AE%E3%83%AB%E3%83%BC%E3%82%BF%E3%81%AE%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%ABip%E7%A2%BA%E8%AA%8D)でVPNサーバ側に接続されたルータのグローバルIPを調べことは記憶に新しいと思います.このIPの入力がここで必要となるので，控えを取り出してください.

![03_globalip_check.png](https://qiita-image-store.s3.amazonaws.com/0/110138/52c2723a-6471-0232-a993-3af635cd072b.png)

設定ファイルを編集します．

```bash:(command)
$ vim client.conf
```

```bash:client.conf
# クライアントモードであることを宣言
client
# VPNプロトコル：ルーティング方式．
dev tun
# 通信プロトコル: UDP．
proto udp
# グローバルIPアドレスを指定する．「1. 準備」で調べたIP.
remote 101.102.103.xxx 1194
# 接続の継続．
resolv-retry infinite
# ポート番号をバインドしない．ほとんどの場合はこうらしい．
nobind
# 切断後の動作指定
persist-key
persist-tun
# 認証局証明書/クライアント証明書・認証鍵．/etc/openvpn からのパス．
ca ca.crt
cert mycli.crt
key mycli.key
# LZO圧縮を有効に
comp-lzo
# ログレベル
verb 3
```

- `remote 101.102.103.xxx 1194`の部分がVPNサーバ側に接続されたルータのグローバルIPとなります.ネットワークの再接続等でサーバのグローバルIPが変わったら変更が必要なので要注意です．

- `comp-lzo`の有効無効は，サーバとクライアントで合わせる必要があります．

# おわりに
これで設定は完了です．

![11_all_files_with_conf.png](https://qiita-image-store.s3.amazonaws.com/0/110138/2fc47bcc-69d2-2741-0361-84812f00815b.png)

次回[図解！UbuntuでOpenVPNを使う：4. 接続確認](http://qiita.com/MoriKen/items/682d31496fd0d2476af7)ではいよいよ実際にVPNで繋ぎます^^　楽しみですね♪

# 参考文献
- [ケイズプロダクション，OpenVPNで構築する超簡単VPN入門，ラトルズ，2006.](http://www.amazon.co.jp/OpenVPN%E3%81%A7%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B%E8%B6%85%E7%B0%A1%E5%8D%98VPN%E5%85%A5%E9%96%80%E2%80%95Windows-Mac-OS-X-Linux%E5%AF%BE%E5%BF%9C/dp/4899771673)
- [BLOG EX MACHINA, Ubuntu 14.04 で OpenVPN](http://felis-silvestris-catus.hatenablog.com/entry/2015/05/27/222434)
- [Blog on fuketch, OpenVPNの設定（その4：トンネルモードサーバー設定）](https://fuketch.wordpress.com/2013/09/10/openvpn%E3%81%AE%E8%A8%AD%E5%AE%9A%EF%BC%88%E3%81%9D%E3%81%AE4%EF%BC%9A%E3%83%88%E3%83%B3%E3%83%8D%E3%83%AB%E3%83%A2%E3%83%BC%E3%83%89%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E8%A8%AD%E5%AE%9A%EF%BC%89/)
- [Blog on fuketch, OpenVPNの設定（その5：トンネルモードクライアント設定）](https://fuketch.wordpress.com/2013/09/10/openvpn%E3%81%AE%E8%A8%AD%E5%AE%9A%EF%BC%88%E3%81%9D%E3%81%AE5%EF%BC%9A%E3%83%88%E3%83%B3%E3%83%8D%E3%83%AB%E3%83%A2%E3%83%BC%E3%83%89%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E8%A8%AD/)