Openwrt ルーターからNordVPNに接続して海外で、PS4やFireTV stickから日本のNetflixを見れるようにしてみた。

# 環境
Buffalo WHR-1166DHP にOpenWrt 19.07.2 をインストール済み。
日本語化パッケージインストール済み。
ネット上ではSSH接続を使わない手順を見たことが無いので、恐らく新手順。
SSH接続は一切行わずに、NordVPNに接続可能。

# 必要なソフトウェアのインストール
1. OpenWrt の管理画面からパッケージの更新を行う
1. OpenWrt の管理画面から以下のパッケージをインストールする

```
openvpn-openssl
ip-full
luci-app-openvpn
```

# NordVPN用のOpenVPN 設定ファイルをダウンロード
[★ココ★](https://nordvpn.com/ja/servers/tools/)から 対象国用のOpenVPN UDPの設定ファイルをダウンロードする。
※上記URLは定期的にダウンロードできる設定ファイルが変わる為、何個かダウンロードして保持しておいた方が良い。
何個かダウンロードしておく理由はnetflixで規制された際に、別の接続先に即座に切り替える為。
本手順書ではファイル名「jp221.nordvpn.com.udp.ovpn」を使用して以降の手順書を記述する。

# downloadした設定ファイルをOpenWrt に読み込ませる
1. OpenWrtの管理画面から「VPN」->「OpenVPN」をクリック
1. 「OVPN configuration file upload」の箇所から「ファイルを選択」をクリックする。
1. 「instance Name」には後でわかりやすいように「jp221nordvpnudp」などを入力しておく。
1. アップロードをクリックする。
![config.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185260/78c02e13-c3a9-abd4-301c-cf0da10bc94c.jpeg)

# OpenVPN 設定の編集
1. アップロードが完了したら編集ボタンをクリックする
2. 変更が必要な個所は2箇所
3. 画像内にある①の内容を②の「auth-user-pass」へコピーする。
4. ③の箇所には NordVPNのユーザー名とパスワードを入力しておく。
5. 「保存」をクリックする
6. 保存後、jp221nordvpnudpを有効にし開始しておく
![edit1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185260/5b6d465f-0249-855d-3e77-1e72b2138304.jpeg)

:::note info
保存時に「Insufficient permissions to read UCI configuration.」や
「UCI設定を読み取るための権限がありません。」が表示される場合(openwrt 21 以降？)
エラーメッセージの不具合なので無視して良い。

気になるようであれば以下を参照に「/usr/lib/lua/luci/view/cbi/map.htm」を修正する。
https://github.com/dibdot/luci/commit/d915425c01651f13ab7ba74a72ccbd229433a87b
:::


# tun0 インターフェースの追加
上記手順で一応, NordVPNには繋がっているのだがルーティングとファイヤーウォールの設定ができていない為、
外部に接続できていない。
外部に接続するためにルーティング設定を行う
1. OpenWrtの管理画面から「ネットワーク」->「インターフェイス」をクリックする
2. 「インターフェイスの新規作成」をクリックする
3. 以下の設定を行う

```bash:

名前: tun0
プロトコル： Unmanaged
デバイス or インターフェース：tun0
ブリッジインターフェースにはチェックを入れない
※ここでプルダウンに「tun0」が存在しない場合には
nordvpnとのVPN接続がうまく行っていない。
「作成」をクリック
		    
次画面で
デフォルト起動にチェック
詳細設定でIPv6無効
デバイス設定変更無し
ファイアフォール設定では「wan」を設定する
保存をクリックする
```

# Firewallの設定
1. OpenWrtの管理画面から「ネットワーク」->「ファイヤーウォール」をクリックする
![route.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185260/b8375a8a-af7c-7112-8aff-541f8c14cf06.jpeg)
1. 上記画像のlan -> wanの箇所の「編集」をクリックする
![coverd.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185260/7f11768e-62e4-8010-5adf-870813da5b96.jpeg)
1. 詳細設定 -> Covered Devicesに「tun0」を追加して「保存」をクリックする

# DNSの設定
Netflix では物理的距離が近いIPを返却する、Amazon route 53技術を使用している。
この技術はプロキシなどを検知する為のセキュリティチェックにも使用されている為、
NordVPNのDNSを使用するように設定を変更する。
1. ネットワーク -> インターフェース -> WAN -> 編集 ->詳細設定 画面に遷移する
2. ピアから通知されたDNSサーバーを使用する チェックを外す
3. DNSサーバーを手動で設定の箇所には以下のNordVPNのDNSを設定する

```bash:
103.86.99.100
103.86.96.100 
```

※念の為、ネットワーク -> インターフェース -> LAN -> 編集 -> 一般設定
でも「DNSサーバーを手動で設定」の箇所が未入力になっていることを確認する。
その他、netflixを見たい機器でも、DNSサーバーの手動設定がある場合には削除しておく。

# Openwrt ルーターの再起動と動作確認
再起動とnetflixの動作確認を行う。

以下は動作確認時の注意点である。
１. openvpnが有効になるのは起動後２０秒後くらいである。
挙動としては通常ルーターでの接続完了後、VPN接続が動き出す。
その為、動作確認は再起動後、1分後くらいに行うと良い

```bash:
# 動作確認はこんな感じで pingを打っておくとわかりやすい

> ping 8.8.8.8 -t
ping: 転送に失敗しました。一般エラーです。 # ルーター起動中
～中略
8.8.8.8 からの応答: バイト数 =32 時間 =12ms TTL=110 # VPN起動前。応答が12msと早い
～中略
要求がタイムアウトしました。 # VPN切り替え中
～中略
8.8.8.8 からの応答: バイト数 =32 時間 =46ms TTL=116 # VPN起動後。応答が40ms以上になっている
```

２. 使っていない状態だとNordVPN側から切断されてしまう為、
使う時にルーターのコンセントを抜き差ししてから使用すると良い。