VPN
openwrt
LEDE
orangepi

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ドングルを使えば電波法上の問題は回避できる。

1.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以外のフォルダをすべて削除する。

2.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カードに書き込み、その中身をすべて1.で作った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を設定する。

3.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の画面から指定してインストールすれば使える可能性がある。

4.OpenVPNの設定

3.で準備したワイヤレスルーターに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でおこなうこと。