インド出張中に、VPNで日本に繋げば「らじる★らじる」のアプリでNHKラジオが聴けることがわかった。 残念ながら「radiko」は GPSや WiFiアクセスポイントで位置を割り出すようで、VPN経由でも NGだった。
VPNサービスは、インターリンクの「マイIP」を申し込んだ(2ヶ月無料)。 「セカイVPN」というのもあって、海外からの利用はそっちの方がいいらしいけど、「マイIP」でも使えているからいいかと。 でも自宅にVPNのサーバーを立てて、そこに繋げるようにすればダーターなので、チャレンジしてみようと思った次第。 ところで一口にVPNと言っても、いろんなやり方(プロトコル)があるらしい。
VPN プロトコルの比較: PPTP vs. L2TP vs. OpenVPN vs. SSTP vs. IKEv2 | vpnMentor
全プラットフォームにサードパーティのソフトウェアのダウンロード・インストールする必要がありますが、OpenVPN があらゆるニーズに最高のVPN であることは議論の余地がありません。高速、安全で信頼性が高い、 セットアップに少し時間がかかりますが、ウェブ利用時の最高のセキュリティとプライバシーを考えればその価値はあります。
目的がラジオや Amazonプライムビデオの視聴なので、機密なんてあまり関係ないですが、こういうのを読むと OpenVPNしかない!と思いますね。 それで「FreeBSD OpenVPN」とかでググって見つけたのが以下の記事。
[自分用メモ] FreeBSDマシンにOpenVPNをインストールしてVPNサーバを構築した ~ サーバ設定編
FreeBSD の自宅サーバへ OpenVPN をインストール(ルーティング方式)
ところが easy-rsaの扱い方がよくわからない。 OpenVPN On FreeBSD 10.3 という記事を見つけて再チャレンジした。
まず portsで OpenVPNをインストールする。
root@www:/ # cd /usr/ports/security/openvpn
root@www:/usr/ports/security/openvpn # make install
続いて設定ファイルの準備。
root@www:/usr/ports/security/openvpn # mkdir /usr/local/etc/openvpn
root@www:/usr/ports/security/openvpn # cp /usr/local/share/examples/openvpn/sample-config-files/server.conf /usr/local/etc/openvpn/openvpn.conf
root@www:/usr/ports/security/openvpn # cp -r /usr/local/share/easy-rsa /usr/local/etc/openvpn/easy-rsa
root@www:/usr/ports/security/openvpn # cd /usr/local/etc/openvpn/easy-rsa
root@www:/usr/local/etc/openvpn/easy-rsa # ls
easyrsa.real openssl-1.0.cnf.example vars.example
openssl-1.0.cnf vars x509-types
root@www:/usr/local/etc/openvpn/easy-rsa # vi vars
/usr/local/etc/openvpn/easy-rsa/varsの抜粋。
set_var EASYRSA_REQ_COUNTRY "JP"
set_var EASYRSA_REQ_PROVINCE "Saitama"
set_var EASYRSA_REQ_CITY "Hidaka"
set_var EASYRSA_REQ_ORG "Home"
set_var EASYRSA_REQ_EMAIL "your_address@gmail.com"
set_var EASYRSA_REQ_OU "My Organizational Unit"
set_var EASYRSA_KEY_SIZE 2048
set_var EASYRSA_CA_EXPIRE 3650
set_var EASYRSA_CERT_EXPIRE 3650
証明書を作成。
root@www:/usr/local/etc/openvpn/easy-rsa # sh
# ./easyrsa.real init-pki
Note: using Easy-RSA configuration from: ./vars
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /usr/local/etc/openvpn/easy-rsa/pki
# ./easyrsa.real build-ca
Note: using Easy-RSA configuration from: ./vars
Generating a 2048 bit RSA private key
...............................................................................................................................+++
...+++
writing new private key to '/usr/local/etc/openvpn/easy-rsa/pki/private/ca.key.AEUNfy3Ktx'
Enter PEM pass phrase: ********
Verifying - Enter PEM pass phrase: ********
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:server
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/usr/local/etc/openvpn/easy-rsa/pki/ca.crt
# ./easyrsa.real build-server-full openvpn-server nopass
Note: using Easy-RSA configuration from: ./vars
Generating a 2048 bit RSA private key
.......................................................+++
........+++
writing new private key to '/usr/local/etc/openvpn/easy-rsa/pki/private/openvpn-server.key.I8ijVyKjDh'
-----
Using configuration from /usr/local/etc/openvpn/easy-rsa/openssl-1.0.cnf
Enter pass phrase for /usr/local/etc/openvpn/easy-rsa/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'openvpn-server'
Certificate is to be certified until Feb 20 10:36:46 2027 GMT (3650 days)
Write out database with 1 new entries
Data Base Updated
# ./easyrsa.real build-client-full client
Note: using Easy-RSA configuration from: ./vars
Generating a 2048 bit RSA private key
.......+++
...........................................+++
writing new private key to '/usr/local/etc/openvpn/easy-rsa/pki/private/client.key.QolyS0vxbc'
Enter PEM pass phrase: ********
Verifying - Enter PEM pass phrase: ********
-----
Using configuration from /usr/local/etc/openvpn/easy-rsa/openssl-1.0.cnf
Enter pass phrase for /usr/local/etc/openvpn/easy-rsa/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'client'
Certificate is to be certified until Feb 20 10:38:26 2027 GMT (3650 days)
Write out database with 1 new entries
Data Base Updated
# ./easyrsa.real gen-dh
Note: using Easy-RSA configuration from: ./vars
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
[中略]
DH parameters of size 2048 created at /usr/local/etc/openvpn/easy-rsa/pki/dh.pem
shから exitして、証明書をコピー。
# exit
root@www:/usr/local/etc/openvpn/easy-rsa # mkdir /usr/local/etc/openvpn/keys
root@www:/usr/local/etc/openvpn/easy-rsa # cp pki/dh.pem pki/ca.crt pki/issued/openvpn-server.crt pki/private/openvpn-server.key /usr/local/etc/openvpn/keys
ta.key を生成する。
root@www:/usr/local/etc/openvpn/easy-rsa # cd ..
root@www:/usr/local/etc/openvpn # openvpn --genkey --secret keys/ta.key
OpenVPNの設定ファイルを編集する。
root@www:/usr/local/etc/openvpn # vi openvpn.conf
/usr/local/etc/openvpn/openvpn.confの中身(コメント抜き)。
注意点は、dh2048.pem ではなくdh.pem であること。
local 192.168.1.32
port 1194
proto udp
dev tun
ca /usr/local/etc/openvpn/keys/ca.crt
cert /usr/local/etc/openvpn/keys/openvpn-server.crt
key /usr/local/etc/openvpn/keys/openvpn-server.key # This file should be kept secret
dh /usr/local/etc/openvpn/keys/dh.pem
topology subnet
server 192.168.2.0 255.255.255.0
ifconfig-pool-persist /usr/local/etc/openvpn/ipp.txt
push "route 192.168.1.0 255.255.255.0"
push "redirect-gateway def1 bypass-dhcp"
push "route-gateway 192.168.2.1"
push "dhcp-option DNS 192.168.1.1"
push "dhcp-option DOMAIN still-laughin.com"
push "tun-mtu 1500"
push "link-mtu 1542"
keepalive 10 120
tls-auth /usr/local/etc/openvpn/keys/ta.key 0 # This file is secret
cipher AES-256-CBC
persist-key
persist-tun
status /var/openvpn/openvpn-status.log
log-append /var/log/openvpn.log
verb 3
tun-mtu 1500
openvpn-status.logを作るディレクトリを作成する。
root@www:/usr/local/etc/openvpn # mkdir /var/openvpn
root@www:/usr/local/etc/openvpn # vi /etc/newsyslog.conf
/etc/newsyslog.conf に以下を追加する。
/var/log/openvpn.log 600 7 100 * JC
/etc/rc.conf を編集する。
root@www:/usr/local/etc/openvpn # vi /etc/rc.conf
以下を追加する。
openvpn_enable="YES"
openvpn_configfile="/usr/local/etc/openvpn/openvpn.conf"
gateway_enable="YES"
openvpnサービスを起動する。
root@www:/usr/local/etc/openvpn # service openvpn start
Starting openvpn.
まだ終わってない。 クライアント用の設定ファイル(client.ovpn)を作成する。
root@www:/usr/local/etc/openvpn # cp /usr/local/share/examples/openvpn/sample-config-files/client.conf client.ovpn
root@www:/usr/local/etc/openvpn # vi client.ovpn
/usr/local/etc/openvpn/client.ovpnの抜粋。
client
dev tun
proto udp
remote aaa.bbb.ccc.ddd 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 3
以下の4つのファイル
/usr/local/etc/openvpn/client.ovpn
/usr/local/etc/openvpn/easy-rsa/pki/ca.crt
/usr/local/etc/openvpn/easy-rsa/pki/issued/client.crt
/usr/local/etc/openvpn/easy-rsa/pki/private/client.key
を取り出して、Androidスマホに送る。
家庭内LANにはDNSを建てていないので、ルーター(PR-500KI)の設定はまず「静的IPマスカレード」で udp の 1194 を VPNサーバーに当て、
「IPv4パケットフィルタ設定」を指定した。
これでサーバー側の準備は整ったので、スマホに Google Playから純正アプリ「OpenVPN Connect」をインストールする。
右上の「その他」を押す。
「import」を選択。
「Import Profile from SD card」を選択。
メールなどからダウンロードしておいた client.ovpn を選択。
秘密鍵のパスフレーズを入力して「Connect」ボタンを押す。
接続成功。
ところでここまで書いてきてなんですが、PR-500KIには VPNサーバー機能がありました。
L2TP/IPSecで接続できるので、結構ちゃんとしたものですが、PR-500KIはたまにハングアップすることがあるので、あまり負荷を掛けたくないんですよね。