search
LoginSignup
23

More than 3 years have passed since last update.

posted at

updated at

Raspberry PiにSoftEther VPN Bridgeをインストールして常時VPN接続されたネットワークを作成する

【注意】今のところ実用性はかなり低いです…(遅いため)
もしかしたら国内同士だと速いかも?

作りたいネットワーク

VPN.png

用意したもの

サーバー側(日本)

すでに構築済みになりますが、SoftEther VPN Serverが入っているマシンと、インターネット環境を用意しました。

  • インターネット回線(NTTフレッツ光、固定IPがもらえる某プロバイダ)
  • ルーター(中古のRTX1100
  • 自作PC(Linux)

ブリッジ側(海外)

しばらく使われずに眠ってたものを集めました。

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で使用するファイルを作成します。
nanoviなどで以下のファイルを作成します。

/etc/systemd/system/vpnbridge.service
[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の管理用ポートを開放するための設定を追加します。

元のファイル

/etc/iptables/rules.v4
# 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

変更後のファイル

/etc/iptables/rules.v4
# 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用を使いました。

image.png

接続設定の作成

「新しい接続設定」から、Raspberry Piに接続する設定を作成します。

image.png

「OK」をクリックすると、追加されます。

image.png

「接続」をクリックすると、まずはパスワードを設定する画面になりますので、好みのパスワードを設定します。
設定が完了すると、接続後に以下のダイアログが表示されます。

image.png

今回はVPN Bridgeをセットアップしたので、選択肢は一つだけです。
そのまま「次へ」をクリックします。

image.png

VPN Serverへの接続

「接続先のVPN Serverへの接続設定を行う」から、あらかじめ用意しているVPN Serverへの接続を行います。

image.png

設定が完了して、一覧画面で「オンライン」になっていれば成功です。

image.png

ローカルブリッジ設定

簡易セットアップ画面に戻って、「ローカルブリッジの設定」欄から、VPN接続が有効となるLANインターフェイスを選択します。

今回は、増設したUSB-LANアダプタ(eth1)を指定しました。
Windowsだとデバイス名が表示されたりしますが、Linuxではそうでもないので、間違えないように選択します。

image.png

完了したら「閉じる」をクリックします。

有線での接続確認

USB-LANアダプタ側に、適当なノートPC(Surface)を接続してみました。

image.png

IPアドレスがVPN Server側になっています。

遅いです

遅い。
ダウンロードがかなり遅いです。
20年前のダイアルアップ接続も真っ青のレベルです。

無線でつないだAndroid端末の速度がこちらです。

Android 9 - Xperia XZ Premium G8142、タイ版Dual SIMモデル

android9.png

Android 8 - Xperia XA1 Ultra Dual G3226、香港版Dual SIMモデル

Screenshot_20190303-202024.png

Android 7 - Xperia X Compact SO-02J、日本docomo版Single SIMモデル

android7.png

【参考】OpenVPNでの結果(Android 9 - Xperia XZ Premium G8142、タイ版Dual SIMモデル)

最上部の図のオレンジ色のルートでの結果もひどいものでした。

Screenshot_20190303-210825.png

これを見ると、Raspberry Piのところはあまりネックになってなさそうです。

しかし、これはちょっと耐え難いので、どうやったら下りが早くなるかは考えないとです。

【参考】通常の回線では以下の速度がちゃんと出ます。

私は下り50M/上り20Mの契約ですが、ほぼ公称どおりの速度が出てます

422.jpg

遅い原因の考察

遅い要因として考えられそうなものとしては、

日本側ネットワークの問題

  • 上りが異様に遅い image.png 速いです。

国をまたいでいることでの問題

  • 物理的に遠い

海外側ネットワークの問題

  • Raspberry Piがそもそもネック image.png 速いです。
  • 国外への接続容量が少ない (ベトナム・ホーチミンシティにいた時は実際こういう問題ありました。法人向け回線でどれだけ高額な料金を払っても、ベトナム国外への通信は遅いままだそうで…)
    というわけで、VPNを通さずに Raspberry Piから速度を測ってみました。
    対象国はベトナム、日本、シンガポール、香港、台湾。
    image.png 日本への速度は問題なさそう(下りはベトナムを除く周りのIT先進諸国よりちょっと遅いけど、これはタイミングなのか地理的な問題なのか…)
  • 誰かがVPNに速度規制している(下りだけ規制するものかな?)
    • …あまり書くとアレなので…。
    • 一時的なものだとしたら、直近の総選挙(ニュース)の影響とか?

要・追加検証

ちょっと切り分けポイントが多いので、時間があるときにインフラが整っているアジア圏のどこか(香港、台湾、シンガポールあたりがいいのかな?)と、日本でいろいろ試してみます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
23