Orange Pi PCでVPNルーターを作ってみた

#まえがき

ROKUを入手したので、OrangePiでVPNルーターを作ってみた。

今回のネットワークの構成は、ブロードバンドルーターの下にVPNルーター（OrangePi）を有線接続し、その下にROKUをwifi接続する。

LEDE/OpenWRTにはOrange Pi用のファームウエアイメージがあるが、Wifiが実装された基板のイメージファイルのみで、OrangePi PCのようにWifiが実装されていない基板のイメージファイルは提供されていない。

しかしながら、Wifi付きのOrangePiは技適未認証のため、これをWirelessルーターに使うことは電波法上の問題がある。

今回はOrangePi PCにUSB Wifiドングルを装着してVPNルーターを作る。国内販売されているUSB Wifiドングルを使えば電波法上の問題は回避できる。


#１．OpenWRTイメージの作成（Armbianの準備）

OrangePi PC用のイメージは提供されていないため、カーネルとドライバはArmbianのものを使い、その上にOpenWRT（LEDE）環境を載せる。
詳細は下記リンクを参照のこと。

https://gist.github.com/praveenbm5/3c81692e6b2b651bb450fb7fc45dff4d

OpenWRT環境の構築に先立ってArmbianを実行させ、手持ちのUSB Wifiドングルが使えること、そのときにカーネルにロードされるカーネルモジュールを確認しておくとよい。

今回は
Armbian_5.35_Orangepipc_Ubuntu_xenial_default_3.4.113_desktop.img
を用いた。

https://dl.armbian.com/orangepipc/Ubuntu_xenial_default_desktop.7z

また、USBドングルはLogitecのLAN-W150N/U2を使った。LinuxでもUSBポートに挿すだけで使えるもので、lsmodで見るとrt2800ドライバを使っていることがわかる。

lsusb出力：
Bus 001 Device 008: ID 0789:0168 Logitec Corp. LAN-W150N/U2 Wireless LAN Adapter

lsmod出力：
Module                  Size  Used by
rt2800usb              28672  0
rt2x00usb              20480  1 rt2800usb
rt2800lib             114688  1 rt2800usb
rt2x00lib              53248  3 rt2800lib,rt2800usb,rt2x00usb

ArmbianイメージをMicroSDカードに書き込んで、
/boot、/lib/module、/lib/firmware以外のフォルダをすべて削除する。

#２．OpenWRT環境の構築

OrangePi PCにはH3プロセッサが搭載されているので、OrangePi用のOpenWRTイメージから、H3用のイメージを入手する。今回は開発版の
openwrt-sunxi-cortexa7-sun8i-h3-orangepi-plus-ext4-sdcard.img
を使った。安定版は動かなかった。

https://downloads.lede-project.org/snapshots/targets/sunxi/cortexa7/openwrt-sunxi-cortexa7-sun8i-h3-orangepi-plus-ext4-sdcard.img.gz

OpenWRTイメージを別のSDカードに書き込み、その中身をすべて１.で作ったSDカードにコピーする。
/libのコピー時に重複するものは、フォルダはマージ、ファイルはスキップしてコピーする。

この状態でSDカードをOrangePi PCに差し込み、OpenWRTが起動するか確認する。HDMIポートをディスプレイに繋いでいるなら、まずArmbianの起動画面が出て、次にOpenWRTの画面に切り替わるはずである。（Enterキーを一度押す必要がある）

この状態ではGUI設定（Luci）、wifiが動作しないので、必要なパッケージをダウンロードする。

OrangePiにrootでログイン（初期設定ではパスワードは設定されていない）し、/etc/config/networkを自宅のネット接続環境に合わせて書き換える。

デフォルトのOrangePi（OpenWRT）のIPアドレスは192.168.1.1である。

まずディスプレイとキーボードをOrangePiに繋ぎ、さらにOrangePiとブロードバンドルーターをLANケーブルで直接繋ぐ。
この状態で追加パッケージがダウンロードできるはずだが、繋がらなかった。
このため、OrangePiに固定IP（192.168.0.175）を割り当て、OrangePiの/etc/config/networkを次のように書き換え、パッケージリストをダウンロードした。

```
config interface 'loopback'
	option ifname 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config globals 'globals'
	option ula_prefix 'fd95:0289:2498::/48'

config interface 'lan'
	option type 'bridge'
	option proto 'static'
#	option ifname 'eth0'　(コメントアウト）
	option ipaddr '192.168.0.175'　（192.168.1.1から変更）
	option netmask '255.255.255.0'
	option ip6assign '60'
        option _orig_ifname 'eth0'　（以下追加）
        option _orig_bridge 'true'

config interface 'wan'
        option proto 'dhcp'
        option ifname 'eth0'
```
追加パッケージは次のようにインストールした。

opkg update　（ログイン毎に必要）
opkg install luci　（OpenWRT設定用GUI）
opkg install kmod-rt2800-usb　（USB Wifiドングルドライバ）
opkg install wireless-tools
opkg install wpad　（WPA2認証に必要)
opkg install wpan-tools
opkg iwinfo

ありがたいことにH3用のArmbianとOpenWRTはカーネルモジュールも含めて互換性がある。
このまま再起動して、LuciからOpenWRTを設定する。

#３．Wifiルーターの設定

まず、OrangePiをワイヤレスルーターとして設定する。

あらかじめwifiをupしておく。LEDの点灯状態が変化するはずである。

ifconfig wlan0 up

詳細はここを参照。この手順通りにWANとwlan0を設定する。

http://pslabo.hatenablog.com/entry/2017/05/16/RaspberyPi3%E3%81%A7%E6%90%BA%E5%B8%AF%E7%94%A8%E3%81%AEWiFi%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%9F%E3%82%81%E3%81%ABOpenWRT

WifiでLuciの設定に入れるように設定してからWANとeth0を切り離すこと。もし開かずの箱になったら、SDカードをLinuxPCに差し込んで/etc/config/networkを編集する。

ここまでの設定を済ませたイメージファイルを以下からダウンロードできるようにした。

https://1drv.ms/u/s!Agi0gM6bLD5WoldLZcfktCovGoIn

（350MB/展開後1.5GB）

OrangePi PCにイメージを書き込んだSDカードを挿して、RT2800系のチップが載ったUSB Wifiドングルを挿して起動すればワイヤレスルーターとして機能するはずである。
※ひょっとするとドングルを挿す位置（二つ縦に並んだ下側のUSBポートに挿している）によってはドングルが動かないかもしれない。

Luciの設定画面は、192.168.100.1に接続し、
ID:root,　PASS:passwordでログインできる。
また、無線アクセスポイントはSSID:OpenWRT, PASS:passwordで接続できる。

ssl認証が必要な場合は、ntpclientのインストールが必要なので、追加でおこなうこと。

opke install ntpclient

他のチップが載ったUSB Wifiドングルも、適切なドライバパッケージをLuciの画面から指定してインストールすれば使える可能性がある。

#４．OpenVPNの設定

３．で準備したワイヤレスルーターにOpenVPNパッケージをインストールし、VPNサービスに接続する。VPNサービスにはExpressVPNを使った。30日間無料である。

詳細は下記を参照のこと。

https://enterpriseadmins.blogspot.jp/2017/08/how-to-setup-expressvpn-using-openvpn.html

ExpressVPNにログインすると、左側に各プラットホームでの設定方法が記されたページへのボタンがあるので、クリックしてそこへ進む。
Manual Configを選び、VPNサービスのIDとパスワードを確認し、地域を選んでVPN接続設定が記されたovpnファイルをダウンロードする。

IDとPasswordを二行に分けて入力し、pass.txtとして保存したファイルを作る。
pass.txtとovpnファイルをOrangePiの/etc/openvpn/にコピーする。scpでも、SDカードに直書きでもかまわない。

OrangePiにログインして、/etc/openvpnに降りて
openvpn --config my_expressvpn_*****_udp.ovpn
を実行し、エラーが出なければVPN接続されているはずである。

最後にROKUをこのwifiルーターに接続し、アメリカ内のみで視聴できるチャンネル（CRACKLEなど）が視聴できればOK。
ROKUのアカウントはアメリカ内の住所で登録し、支払いはPaypalでおこなうこと。