【注意】今のところ実用性はかなり低いです…(遅いため)
もしかしたら国内同士だと速いかも?
作りたいネットワーク
用意したもの
サーバー側(日本)
すでに構築済みになりますが、SoftEther VPN Serverが入っているマシンと、インターネット環境を用意しました。
- インターネット回線(NTTフレッツ光、固定IPがもらえる某プロバイダ)
- ルーター(中古のRTX1100)
- 自作PC(Linux)
ブリッジ側(海外)
しばらく使われずに眠ってたものを集めました。
- インターネット回線(AIS Fibre HomeBOADBAND 50/20Mbps ※英語ページ)599THB/month(2,000円強/月)
- Raspberry Pi (余ってたModel 2B)
- USB-LANアダプタ(余ってたLogitec LAN-GTJU3)
- スイッチングハブ(余ってたNETGEAR ProSAFE GS108E)
- 無線LAN中継器(余ってたTP-Link RE450)
SoftEther VPN Bridgeのセットアップ
まずは、Raspberry Piを普通にLANに接続します。
(本体のLANポートに、普段使用中のルーターやハブからのケーブルを挿します)
今回はIPアドレスが 192.168.1.105
になりました。
ビルド
ダウンロードするファイルのURLはここからコピーしました。
SSHでRaspberry Piにログインしてから、
cd Downloads/
wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.28-9669-beta/softether-vpnbridge-v4.28-9669-beta-2018.09.11-linux-arm_eabi-32bit.tar.gz
tar zxvf softether-vpnbridge-v4.28-9669-beta-2018.09.11-linux-arm_eabi-32bit.tar.gz
cd vpnbridge/
make
使用許諾契約書に同意したら、ビルドが開始されます。
私の場合、何かしらソフトウェアが古かったらしく、
make[1]: Entering directory '/home/pi/Downloads/vpnbridge'
Preparing SoftEther VPN Bridge...
ranlib lib/libcharset.a
ranlib lib/libcrypto.a
ranlib lib/libedit.a
ranlib lib/libiconv.a
ranlib lib/libncurses.a
ranlib lib/libssl.a
ranlib lib/libz.a
ranlib code/vpnbridge.a
gcc code/vpnbridge.a -O2 -fsigned-char -pthread -lm -ldl -lrt -lpthread -L./ lib/libssl.a lib/libcrypto.a lib/libiconv.a lib/libcharset.a lib/libedit.a lib/libncurses.a lib/libz.a -o vpnbridge || gcc -no-pie code/vpnbridge.a -O2 -fsigned-char -pthread -lm -ldl -lrt -lpthread -L./ lib/libssl.a lib/libcrypto.a lib/libiconv.a lib/libcharset.a lib/libedit.a lib/libncurses.a lib/libz.a -o vpnbridge
/usr/lib/arm-linux-gnueabihf/libpthread_nonshared.a: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status
/usr/lib/arm-linux-gnueabihf/libpthread_nonshared.a: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status
Makefile:18: recipe for target 'i_read_and_agree_the_license_agreement' failed
make[1]: *** [i_read_and_agree_the_license_agreement] Error 1
make[1]: Leaving directory '/home/pi/Downloads/vpnbridge'
というエラーが出てしまいました。
これを解決するためにlibc6-dev
を再インストールしました。
sudo apt-get --reinstall install libc6-dev
自動起動の設定
ビルドが完了したら、ビルドで使用したディレクトリごと、移動させます。
cd ~/Downloads/
sudo mv vpnbridge /opt/
systemdで使用するファイルを作成します。
nano
やvi
などで以下のファイルを作成します。
[Unit]
Description=SoftEther VPN Bridge
After=network.target
[Service]
Type=forking
User=root
ExecStartPre=/sbin/ip link set dev eth0 promisc on
ExecStart=/opt/vpnbridge/vpnbridge start
ExecStop=/opt/vpnbridge/vpnbridge stop
Restart=on-abort
WorkingDirectory=/opt/vpnbridge
[Install]
WantedBy=multi-user.target
作成ができたら、自動起動の設定をしてから、起動します。
sudo chmod 0755 /etc/systemd/system/vpnbridge.service
sudo systemctl daemon-reload
sudo systemctl enable vpnbridge
sudo systemctl start vpnbridge
管理用ポートの開放
制御のためのiptables
をインストールします。
sudo apt-get install iptables-persistent
途中、質問にはYesで答えます。
インストールができたら、ルールファイルにVPN Bridgeの管理用ポートを開放するための設定を追加します。
元のファイル
# Generated by iptables-save v1.6.0 on Tue Feb 19 17:45:45 2019
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Tue Feb 19 17:45:45 2019
変更後のファイル
# Generated by iptables-save v1.6.0 on Tue Feb 19 17:45:45 2019
*filter
:INPUT ACCEPT [0:0]
-A INPUT -m tcp -p tcp --dport 5555 -j ACCEPT
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Tue Feb 19 17:45:45 2019
以下のコマンドで反映させます。
sudo netfilter-persistent reload
以下のコマンドで確認します。
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:5555
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
管理ツールの起動
SoftEtherのサイトから、Windows用とMac用の管理ツールがダウンロードできるので、インストールします。
今回はWindows用を使いました。
接続設定の作成
「新しい接続設定」から、Raspberry Piに接続する設定を作成します。
「OK」をクリックすると、追加されます。
「接続」をクリックすると、まずはパスワードを設定する画面になりますので、好みのパスワードを設定します。
設定が完了すると、接続後に以下のダイアログが表示されます。
今回はVPN Bridgeをセットアップしたので、選択肢は一つだけです。
そのまま「次へ」をクリックします。
VPN Serverへの接続
「接続先のVPN Serverへの接続設定を行う」から、あらかじめ用意しているVPN Serverへの接続を行います。
設定が完了して、一覧画面で「オンライン」になっていれば成功です。
ローカルブリッジ設定
簡易セットアップ画面に戻って、「ローカルブリッジの設定」欄から、VPN接続が有効となるLANインターフェイスを選択します。
今回は、増設したUSB-LANアダプタ(eth1)を指定しました。
Windowsだとデバイス名が表示されたりしますが、Linuxではそうでもないので、間違えないように選択します。
完了したら「閉じる」をクリックします。
有線での接続確認
USB-LANアダプタ側に、適当なノートPC(Surface)を接続してみました。
IPアドレスがVPN Server側になっています。
遅いです
遅い。
ダウンロードがかなり遅いです。
20年前のダイアルアップ接続も真っ青のレベルです。
無線でつないだAndroid端末の速度がこちらです。
Android 9 - Xperia XZ Premium G8142、タイ版Dual SIMモデル
Android 8 - Xperia XA1 Ultra Dual G3226、香港版Dual SIMモデル
Android 7 - Xperia X Compact SO-02J、日本docomo版Single SIMモデル
【参考】OpenVPNでの結果(Android 9 - Xperia XZ Premium G8142、タイ版Dual SIMモデル)
最上部の図のオレンジ色のルートでの結果もひどいものでした。
これを見ると、Raspberry Piのところはあまりネックになってなさそうです。
しかし、これはちょっと耐え難いので、どうやったら下りが早くなるかは考えないとです。
【参考】通常の回線では以下の速度がちゃんと出ます。
私は下り50M/上り20Mの契約ですが、ほぼ公称どおりの速度が出てます
遅い原因の考察
遅い要因として考えられそうなものとしては、
日本側ネットワークの問題
国をまたいでいることでの問題
- 物理的に遠い
海外側ネットワークの問題
-
Raspberry Piがそもそもネック
速いです。 - 国外への接続容量が少ない
(ベトナム・ホーチミンシティにいた時は実際こういう問題ありました。法人向け回線でどれだけ高額な料金を払っても、ベトナム国外への通信は遅いままだそうで…)
というわけで、VPNを通さずに Raspberry Piから速度を測ってみました。
対象国はベトナム、日本、シンガポール、香港、台湾。
日本への速度は問題なさそう(下りはベトナムを除く周りのIT先進諸国よりちょっと遅いけど、これはタイミングなのか地理的な問題なのか…) - 誰かがVPNに速度規制している(下りだけ規制するものかな?)
- …あまり書くとアレなので…。
- 一時的なものだとしたら、直近の総選挙(ニュース)の影響とか?
要・追加検証
ちょっと切り分けポイントが多いので、時間があるときにインフラが整っているアジア圏のどこか(香港、台湾、シンガポールあたりがいいのかな?)と、日本でいろいろ試してみます。