二重ルーター構成の環境にOpenVPNを設定する

#1. 概要
　必要に迫られて、職場の環境にVPNの導入が必要になり、想像以上に手こずったためメモとして残します。
　外部につながるルーター（VPN機能なし）の配下にWifiルーター(VPN機能あり)を置き、その下のサーバー（mac mini）に外部からアクセスできるように構成します。クライアントの端末として、iPhone,iPad,WindowsPCで外部からアクセスします。

#2. システム構成
　ルーター1はPPPoeで外部に接続され、固定のグローバルIPが設定されているものとします。この配下にHUBを介して会社の様々な端末が接続されています。

　このルーター1の下に、ルーター2としてOpenVPNに対応したWifiルーターを設置し、その配下にサーバーとしてMac miniを置いています。
<img width="500"  src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260594/52096e72-7fb4-1415-070e-56507773a970.png">

#3. ルーター1の設定
ルーター1はNet Genesis社の[GL2000](https://www.mrl.co.jp/support/gl2000/index.html)で、前述した通りVPNの機能を備えていません。このルーターのグローバルIPアドレスはxxx.xxx.xxx.xxxとします。（実際の運用はDDNSを設定しています。）プライベートIPアドレスは192.168.1.1とします。

##3.1 ポートの開放
OpenVPNで使用するポートは12973と12974なので、このポートを開放します。

##3.2 ルーティングの設定
ルーティングテーブルに以下の設定をすることで、デフォルトゲートウェイ(192.168.1.200)を経由して、192.168.10.***のアドレスにTCP/IPパケットが送られます。

IPアドレス:192.168.10.101/24
デフォルトゲートウェイ:192.168.1.200
サブネットマスク:255.255.255.0
メトリック 1

#4. ルーター2の設定
ルーター2はNetGear社の[AX3000](https://www.jp.netgear.com/home/products/networking/wifi-routers/rax40.aspx)で、OpenVPNが使用可能です。

##4.1 IPアドレスの設定
ルーター2のWANに以下の設定をします。
IPアドレス：192.168.1.200
サブネットマスク：255.255.255.0
DNSサーバー：192.168.1.1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260594/6fd66f48-cba4-1205-5ff0-08202519b1a4.png)

ルーター2のLANに以下の設定をします。
IPアドレス：192.168.10.1
サブネットマスク：255.255.255.0
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260594/614ac7cb-76d6-10f0-ee18-92621c979162.png)

##4.2 OpenVPNの設定
OpenVPNを有効にします。
TUNとTAPのポートは標準のものをそのまま設定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260594/6279d012-1239-1267-d7da-737c3a449dac.png)

OpenVPN設定パッケージのダウンロードをします。
Windows用は「Windows」のボタンから、iOS用は「スマートフォン用」ボタンからダウンロードします。それぞれ、windows.zip、smartphone.zipファイルがダウンロードされます。
両方とも以下の4つのファイルが格納されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260594/f49ecbc1-72d3-2159-f275-da9c8ac5f96f.png)

通常はこの4つのファイルをクライアントに設定すればよいのですが、二重ルーターとなっているため、ovpnファイルを編集する必要があります。

#5. サーバー（Mac mini）の設定
サーバーには固定IPアドレス(192.168.10.101)を設定します。

#6. クライアントの設定
##6.1 iOS端末の設定
1.　OpenVPN Connectをインストールします。

2.　ovpnファイルの編集

```ovpn:client3.ovpn（iPhone用）
client
dev tun
proto udp
# グローバルIPアドレス（もしくはDDNSドメイン）とtunモードのポートを指定
remote xxx.xxx.xxx.xxx 12973
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
cipher AES-128-CBC
comp-lzo
verb 5
```

3.　設定ファイルの転送
　今回はmac miniとiPhoneをlightningケーブルで接続し、OpenVPNアプリに先ほどの4つのファイルを転送しました。

4.　VPN接続
ファイルを転送した後にOpenVPNアプリを起動すると、自動的に読み込まれ、正しい設定がなされていれば「CONNECTED」と表示され接続されます。

<img width="300"  src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260594/d684a300-5355-cee8-5050-23cc2a3c2813.png">

##6.2 Windows端末の設定
1.　クライアントソフトのインストール
OpenVPNを[https://www.openvpn.jp/download/](https://www.openvpn.jp/download/)からダウンロード、インストールします。

2.　ovpnファイルの編集
先ほどダウンロードしたovpnファイルを一部編集します。
tapモードで動かなかったのでtunモードを変更し、gatewayを設定しています。なぜtapモードで動作しないのかわかっていません。

```ovpn:client1.ovpn（Windows用）
client
#  tapをtunモードに変更
dev tun
proto udp
dev-node NETGEAR-VPN
# グローバルIPアドレス（もしくはDDNSドメイン）とtunモードのポートを指定
remote xxx.xxx.xxx.xxx 12973
# route-gatewayの追加
route-gateway dhcp
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
cipher AES-128-CBC
comp-lzo
verb 5
```

3.　設定ファイルの転送
Program Files/OpenVPN/Configに先ほどの4つのファイルをコピーします。

4.　接続名の変更
コントロールパネル→ネットワークとインターネット→ネットワーク接続
接続名称をNETGEAR-VPNに変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260594/ff37e906-16a1-d63a-b6ef-52c3d120b961.png)

5.　VPN接続
OpenVPNのアイコンを右クリックし、対象のclientを選択、接続します。
<img width="300"  src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260594/eaac638b-dd39-3268-3659-dcd841907e26.png">

接続するとアイコンの画面が緑になります。
<img width="300"  src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260594/b5009501-a322-190f-37aa-2a22f1daebe7.png">


#7. 緊急時の対策について
今回は業務に使用するサーバーで使用頻度が高い用途なので緊急時の対策を行う必要があります。以下のような対応を検討しておこうと考えています。

* ネットワーク回線に不具合が生じた場合<br>
→　回線冗長化
* ルーターに不具合が生じた場合<br>
→　予備のルーターを準備しておき再設定
* サーバーに不具合が生じた場合<br>
→　サーバーのデータは外付けHDDに定期的にバックアップを取るかクラウド上にUPLOADしておく。
使用していない古いmacをセットアップしておき、端末を入れ替えて暫定的に運用する。

#8. 最後に
ルーター1はVPNパススルー機能を備えています。VPNパススルー機能を搭載しないルーターを使った場合、この環境でVPNに接続できるかどうか定かではありません。
時間のある時に試してみようと思います。