図解！UbuntuでOpenVPNを使う：4. 接続確認

# はじめに
[図解！UbuntuでOpenVPNを使う：3. 設定](http://qiita.com/MoriKen/items/75587fd862b3ce93e4eb)の続きです．

前回まででVPN接続に必要な設定はすべて完了しています．いよいよVPNでの接続確認です^^

# 図解！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. [設定](http://qiita.com/MoriKen/items/75587fd862b3ce93e4eb)
  2. `OpenVPN` サーバ設定  
  3. `OpenVPN` クライアント設定
4. ***接続確認　←　イマココ***
  5. `OpenVPN`の起動
  6. 仮想`tun`デバイスの確認
  6. `ping` 確認
  7. `netcat` 確認

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

# 1. `OpenVPN` 接続確認
仮想`tun`デバイスの確認，`ping`と`netcat`による双方からの接続確認を行います．

## `OpenVPN`の起動
VPNサーバ/クライアント共に，下記コマンドを実行して下さい.

```bash:(command)
$ service openvpn start
```

サーバ側のログの最後に次のような表示が出れば，接続成功です.

```bash:(command)
$ cat /etc/openvpn/openvpn.log
```

```bash:(output)
(日付) mycli/210.150.14.177:58485 SENT CONTROL [mycli]: 'PUSH_REPLY,route 192.168.179.0 255.255.255.0,redirect-gateway def1 bypass-dhcp,dhcp-option DNS 192.168.179.1,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5' (status=1)
```

# 2. 仮想`tun`デバイスの確認
![04_vpn_tun_check.png](https://qiita-image-store.s3.amazonaws.com/0/110138/4f0a22fc-ab74-0693-c969-c89f8b8746ad.png)

## VPNサーバ
仮想`tun`デバイスで接続できたことを確認します．

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

```bash:(output)
tun0      Link encap:不明なネット  ハードウェアアドレス 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inetアドレス:10.8.0.1  P-t-P:10.8.0.2  マスク:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  メトリック:1
          RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:12 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:100 
          RXバイト:0 (0.0 B)  TXバイト:1284 (1.2 KB)
```

## VPNクライアント

こちらのネットワークでも仮想`tun`デバイスで接続できたことを確認します．

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

```bash:(output)
tun0      Link encap:不明なネット  ハードウェアアドレス 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inetアドレス:10.8.0.6  P-t-P:10.8.0.5  マスク:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  メトリック:1
          RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:12 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:100 
          RXバイト:2892 (2.8 KB)  TXバイト:504 (504.0 KB)
```

# 3. `ping` 確認
## VPNクライアント→VPNサーバ
仮想`tun`ゲートウェイへの接続を確認します．

![05_ping_cli_to_srv.png](https://qiita-image-store.s3.amazonaws.com/0/110138/152567c6-2ebc-3de1-473a-84aec004b675.png)

```bash:(command)
$ ping 10.8.0.1
```

```bash:(output)
PING 10.8.0.6 (10.8.0.6) 56(84) bytes of data.
64 bytes from 10.8.0.6: icmp_seq=1 ttl=64 time=188 ms
...
```

VPNサーバの実アドレスのゲートウェイへの接続も確認します．

![06_ping_cli_to_srv2.png](https://qiita-image-store.s3.amazonaws.com/0/110138/b0d2fc92-93ed-06cd-2af2-dc364a385436.png)

```bash:(command)
$ ping 192.168.179.7
```

```bash:(output)
PING 10.8.0.6 (10.8.0.6) 56(84) bytes of data.
64 bytes from 10.8.0.6: icmp_seq=1 ttl=64 time=188 ms
...
```

## VPNサーバ→VPNクライアント
こちらは仮想`tun`デバイスの接続のみ確認です.実アドレスが確認できるのは，VPNサーバのゲートウェイである`192.168.179.7`のみのようです.

![07_ping_srv_to_cli.png](https://qiita-image-store.s3.amazonaws.com/0/110138/c42f9ca5-6aa4-1b71-b6f6-cb580b95ea45.png)

```bash:(command)
$ ping 10.8.0.6
```

```bash:(output)
PING 192.168.179.7 (192.168.179.7) 56(84) bytes of data.
64 bytes from 192.168.179.7: icmp_seq=1 ttl=64 time=200 ms
...
```

# 4. `netcat` 確認
簡易チャットツール`netcat`を使って，VPN経由での相互のデータ授受を確認します．

## VPNサーバ側を`netcat`サーバとした場合
![08_netcat_vpnserver1.png](https://qiita-image-store.s3.amazonaws.com/0/110138/5cc15c81-f28b-4752-65c4-868190bea5d6.png)

VPNサーバ(`netcat`サーバ)で下記コマンドを実行します．

```bash:(command)
$ nc -l 1194
```

VPNクライアント(`netcat`クライアント)で下記コマンド実行します．

```bash:(command)
$ nc 10.8.0.1 1194
```

- VPNクライアントから適当に文字を打ち込んでENTERしたら，VPNサーバ側に同じ文字列が表示されるはずです．
- VPNサーバからも同様に適当に文字を打ち込めば，VPNクライアントに同じ文字列が表示されます．

ついでに，実アドレスびゲートウェイにも打っておきましょう．

![09_netcat_vpnserve2r.png](https://qiita-image-store.s3.amazonaws.com/0/110138/234fc604-7424-359b-a3bf-99c185d97dc0.png)

VPNクライアント(`netcat`クライアント)で下記コマンド実行し，再度チャットをしてみます．タイプされた文字列が送受信できることを確認します.

```bash:(command)
$ nc 192.168.179.7 1194
```

## VPNクライアント側を`netcat`サーバとした場合

![10_netcat_vpncli.png](https://qiita-image-store.s3.amazonaws.com/0/110138/6d1e23c4-db66-2e4b-a3db-97fbfce8d418.png)

VPNクライアント(`netcat`サーバ)で下記コマンドを実行します．

```bash:(command)
$ nc -l 1194
```

- VPNサーバ(`netcat`クライアント)で下記コマンド実行します．

```bash:(command)
$ nc 10.8.0.6 1194
```

あとは同様に文字を打ち込んで，相手側で表示されれば成功です．

お疲れ様でした！

# おわりに
ようやく`OpenVPN`を利用したルーティング方式による接続ができました．

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

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

いかがでしたでしょうか？初見だと結構壮大な設定のように思えます^^;

ただ，今回はサーバとクライアントが1対1で接続するという極めてシンプルな構成での設定です．ここからクライアントの数を増やそうと思うとOS側でルーティング設定を追加する必要があります ^^;

当方ではとりあえず1対1通信ができればいいので，今回はコレにてお開きといたします^^

最後までお読み頂いた方，本当にありがとうございます.

# 参考文献
- [ケイズプロダクション，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/)