WP7605はキャリア回線経由でサーバー等に通信できますがセキュリティを強化するという目的でVPNで通信してみます.今回はVPNのオープンソースソフトウェアで知られているOpenVPNを使ってみます.
OpenVPNのクロスコンパイル
OpenVPNをWP7605向けにクロスコンパイルします.
ホームディレクトリ下のworkspaceディレクトリにopenvpnディレクトリを作成して
その中で作業します.
$ mkdir ~/workspace/openvpnprj
$ cd ~/workspace/openvpnprj
$ . /opt/swi/SWI9X07Y_02.28.03.05/environment-setup-armv7a-neon-poky-linux-gnueabi
必要なライブラリとしてlz4とlzo,linux-pamの3つを導入します.
まずはlz4です.
$ cd ~/workspace/openvpnprj
$ git clone https://github.com/lz4/lz4.git
$ cd lz4
$ make
$ sudo su
# . /opt/swi/SWI9X07Y_02.28.03.05/environment-setup-armv7a-neon-poky-linux-gnueabi
# DESTDIR=$SDKTARGETSYSROOT make install
# exit
次にlzo.
$ cd ~/workspace/openvpnprj
$ wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.10.tar.gz
$ tar xvzf lzo-2.10.tar.gz
$ cd lzo-2.10
$ ./configure $CONFIGURE_FLAGS --prefix=$SDKTARGETSYSROOT/usr
$ make
$ sudo su
# . /opt/swi/SWI9X07Y_02.28.03.05/environment-setup-armv7a-neon-poky-linux-gnueabi
# make install
# exit
最後にlinux-pam.
$ cd ~/workspace/openvpnprj
$ wget https://github.com/linux-pam/linux-pam/releases/download/v1.5.2/Linux-PAM-1.5.2.tar.xz
$ tar xvzf Linux-PAM-1.5.2.tar.xz
$ cd Linux-PAM-1.5.2
$ ./configure $CONFIGURE_FLAGS --prefix=$SDKTARGETSYSROOT/usr --enable-db=no --includedir=$SDKTARGETSYSROOT/usr/include/security
$ make
$ sudo su
# . /opt/swi/SWI9X07Y_02.28.03.05/environment-setup-armv7a-neon-poky-linux-gnueabi
# make install
# exit
OpenVPNクライアントをコンパイルします.
$ cd ~/workspace/openvpnprj
$ git clone https://github.com/OpenVPN/openvpn.git
$ cd openvpn
$ autoreconf -i -v -f
$ ./configure $CONFIGURE_FLAGS --with-sysroot=$SDKTARGETSYSROOT --prefix=$SDKTARGETSYSROOT/usr
$ make
実行ファイルはsrc/openvpnディレクトリ下のopenvpnです.
OpenVPNをつないでみる
設定ファイルの準備
今回はUbuntu上にサーバを構築します.
必要に応じてOpenVPNをapt経由で導入し証明書を作成します.
以下のサイトを参考にしました.
Ubuntu 20.04でOpenVPNサーバーをセットアップ・設定する方法
Ubuntu 14.04 で OpenVPN
また適切にルータのポートフォワーディング設定を行います.
作成した証明書を含めたクライアント用の設定ファイルを
~/workspace/openvpnprj/client.ovpnのテキストファイルとして作成します.
remoteにはサーバのグローバルIPアドレスやドメイン名を
cipherにはサーバで指定した暗号化方式を書き込みます.
tls-client
key-direction 1
remote example.com
port 1194
cipher AES-256-CBC
proto udp
dev tun
client
nobind
<ca>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
...
-----END OpenVPN Static key V1-----
</tls-auth>
クライアントの実行ファイルと設定ファイルができたのでWP7605に転送します.
またlz4ライブラリをまとめてコンパイルができなかったのでそれも含めて転送します.
$ scp /opt/swi/SWI9X07Y_02.28.03.05/sysroots/armv7a-neon-poky-linux-gnueabi/usr/local/lib/liblz4.so.1 ~/workspace/openvpnprj/openvpn/src/openvpn/openvpn ~/workspace/openvpnprj/client.ovpn root@192.168.2.2:~/
接続する
Ubuntu側のOpenVPNサーバは事前に起動しておきます.
WP7605ではキャリア回線に接続してからOpenVPNクライアントを起動し接続します.
# cm data connect &
# curl httpbin.org/ip
{
"origin": "203.x.x.x"
}
# LD_LIBRARY_PATH=./ ./openvpn client.ovpn &
# curl httpbin.org/ip
{
"origin": "27.x.x.x"
}
# ping -c 4 192.168.0.1
PING 192.168.0.1 (192.168.0.1): 56 data bytes
64 bytes from 192.168.0.1: seq=0 ttl=63 time=79.537 ms
64 bytes from 192.168.0.1: seq=1 ttl=63 time=50.917 ms
64 bytes from 192.168.0.1: seq=2 ttl=63 time=49.452 ms
64 bytes from 192.168.0.1: seq=3 ttl=63 time=48.009 ms
--- 192.168.0.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 48.009/56.978/79.537 ms
#
接続前後でグローバルIPアドレスが変わりサーバ経由で通信していることがわかります.
またローカルマシンにpingを飛ばすことも可能です.
まとめ
WP7605でOpenVPNを用いたVPNが構築する事ができました.
いろいろな環境で使用できるOpenVPNは便利です.
VPNでつなぐことで孤立したデバイスから接続し活用しやすいデバイスになるかと思います.
WP7605はLinuxが搭載されていることで本当に幅広く応用できるなと感じました.
コメント