気の向くままに辿るIT/ICT/IoT
ハードウェア

Raspberry Pi/スマホにSoftEther/OpenVPN互換でVPN

ホーム前へ次へ
Raspberry Piって?

Raspberry Pi/スマホにSoftEther/OpenVPN互換でVPN

Raspberry Pi/スマホにSoftEther/OpenVPN互換でVPN

2021/01/10

 NAS、各種サーバ、メーラー/プリンタ/スキャナ共有マシンとして運用中のRaspberry Pi 2 Model B/Raspbian BusterにVPNサーバとしてSoftEther VPN ServerのOpenVPN互換プロトコル、クライアントとしてAndroidスマホにF-Droid版OpenVPN for AndroidやGoogle Play版OpenVPN Connectをインストール、VPN/Virtual Private Network環境を構築した話。

 WireGuardに続く第2弾、もっと前に試し、記事にはしていないNTT PR-400KI標準VPNも入れると第3弾のVPN。

 ですが、後者は、できていたのが、いつの間にか接続できなくなった、前者は、[接続できました]って言う割に実はつながってなさ気...、何をしてもうまくいかず...。

 というわけで、SoftEther VPNにたどり着き、無事VPN接続及びVPN越しにLANにアクセスすることができました。

 主目的は、常々、やるならIFFFTやBlynkじゃなく、VPNでと思っていたスマホで遠隔地から安全に自宅内LANに入り、自作ホームオートメーション機器を操作すること。

 というのもBlynkだと既に稼働しているESP8266/ESP32のスケッチを書き直さなければならないですし、IFFFTはフリーで使える数が微妙、VPNなら、その辺も柔軟性があるので。

 このようないわゆるリモートVPNをSoftEther VPNで行なう場合の概要は、10.4 一般的なリモートアクセス VPN の構築 に記されています。

 SoftEther VPNは、ドキュメント読破を考えると気が遠くなるほど多機能・高機能、あらゆるプロトコルやOSに対応、また、あらゆるニーズに応える筑波大学発と国産のオープンソースでフリー(ソフトイーサ社の商用版もあり)のVPNソリューション、そう、まさにソリューション、万策尽きたように思えてもこれなら解決策になると思えるほど、万能と呼ぶにふさわしいVPNサーバー、VPNブリッジ、VPNクライアントを備えています。

 ざっと流し読みしたところ、他のVPNで無理なシチュエーションでもSoftEther VPNならいける模様だったので藁をも掴みに行ったら正解でした。

 ちなみに自身は、今日初めて知りましたが、だいぶ前からあったようです。

  1. ラズパイにSoftEther VPN Serverのインストールと設定
  2. ラズパイで仮想ブリッジ/ローカルブリッジとsystemdサービスの設定
  3. SoftEther VPN Serverの設定
  4. ルーターでポートの開放
  5. ルータで静的IPマスカレード設定
  6. ラズパイ上のufwでファイアウォール設定
  7. スマホにOpenVPN for Androidをインストール
  8. スマホからVPN接続
  9. VPN越しにLANに接続

ラズパイにSoftEther VPN Serverのインストールと設定

 インストールと設定については、リンク先が全て物語っていますので紹介に留めます。

 当初、WireGuard用にDebianのunstableリポジトリを追加したからか、softether-common/softether-vpnbridge/softether-vpnclient/softether-vpncmd/softether-vpnserverがあり、softether-vpnserverをapt installしてやってみたところ、vpncmdのチェックでなぜか、ネットワークのみひっかかりました。

 Raspberry Pi 2だからか?と思って検索すると実績は多々ある模様、これは、ソースをmakeすれば、状況が変わるのでは?と思い、やってみると正解でした。

anyuser@raspberrypi~# su -
password:
root@raspberrypi~# sudo tar xzvf softether-vpnserver-v4.34-9745-rtm-2020.04.05-linux-arm_eabi-32bit.tar.gz
root@raspberrypi~# cd /vpnserver
root@raspberrypi/vpnserver~# make
...
1
...
1
...
1
...
root@raspberrypi/vpnserver~# cd
root@raspberrypi~# mv vpnserver /usr/local
root@raspberrypi~# cd /usr/local/vpnserver
root@raspberrypi/usr/local/vpnserver~# chmod 600 *
root@raspberrypi/usr/local/vpnserver~# chmod 700 vpncmd
root@raspberrypi/usr/local/vpnserver~# chmod 700 vpnserver
root@raspberrypi/usr/local/vpnserver~#

 その方法は、7.3 Linux へのインストールと初期設定にバッチリ書いてあります(FreeBSD/Solaris/Mac OS Xなども似てるので同じ節を参照とのこと、他7.2 Windows へのインストールと初期設定)。

 テストについては、別途行なうべく書いてあるものの、make時、最後にやってくれちゃいますが。

 ただ、tarballの場所がよくわからなかったのでSoftEther ダウンロードセンターで各ドロップダウンリストから選択してダウンロード後、/rootに移動しました。

 今回は、Raspberry Pi用なので[SoftEther VPN (Freeware)]、[SoftEther VPN Server]、[Linux]、[ARM EABI(32bit)]を選択、リストアップされた一番上の最新のもの[SoftEther VPN Server (Ver 4.34, Build 9745, rtm)]をダウンロードしました。

 今にして思えば、リンクを右クリックして[リンクのURLをコピー(A)]をすれば、tarballを直接ダウンロードできましたね。

 尚、インストール完了後の説明は、Linuxについては、公式の情報だと古いので僭越ながら、順を追ってこのページと各リンク先を読み進めるのが良いと思います。

ラズパイで仮想ブリッジ/ローカルブリッジとsystemdサービスの設定

anyuser@raspberrypi~$ sudo apt install bridge-utils
anyuser@raspberrypi~$ sudo vi /etc/network/interfaces.d/eth0_br0
auto eth0
iface eth0 inet manual
 
auto br0
iface br0 inet manual
bridge_ports eth0
bridge_maxwait 10
anyuser@raspberrypi~$ sudo vi /etc/dhcpcd.conf
denyinterfaces eth0
interface br0
static ip_address=192.168.0.55/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1
anyuser@raspberrypi~$ sudo reboot

 他方、7.3.8 スタートアップスクリプトへの登録では、init.dを使う例が書いてあるので現時点では、systemdの方がよいでしょう。

 また、SoftEther VPNでは、別個に有線LANカード増設が推奨されますが、Linuxに関しては、これに替えて仮想ブリッジを実装することができるとドキュメントにあります。

 よってRaspberry PiでRaspbianなどのLinuxディストロを使っている場合、仮想ブリッジを使えることになり、別途、物理的なLANカードを用意する必要はなくなります。

 これに伴い、ラズパイのIPアドレスを固定化する必要があります。

 mDNSのおかげなどでDHCPによる動的割り当てで済んでいて固定化していない場合は、192.168.0.1や192.168.1.1、NTTのルータならntt.setupなどをブラウザのURL入力欄に入力、ログインして管理画面に入り、[DHCPv4サーバ設定]で[開始IPアドレス]や[割当て個数]などで調整して予め固定分を確保しておきます。

 後述のリンク先の通り、bridge-utilsパッケージをインストール、/etc/network/interfacesとありますが、/etc/network/interfaces.d/に任意のファイルeth0_br0を作成し、ブリッジを定義、/etc/dhcpcd.confを編集し、固定アドレス他を設定して再起動。

anyuser@raspberrypi~$ sudo vi /etc/systemd/system/vpnserver.service
[Unit]
Description=SoftEther VPN Server
After=network.target network-online.target
[Service]
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
WorkingDirectory=/usr/local/vpnserver/
#ExecStartPost=/bin/sleep 10 ; brctl addif br0 tap_softether
Type=forking
RestartSec=3s
[Install]
WantedBy=multi-user.target
anyuser@raspberrypi~$ sudo chmod 755 /etc/systemd/system/vpnserver.service
anyuser@raspberrypi~$ sudo systemctl daemon-reload
anyuser@raspberrypi~$ sudo systemctl enable vpnserver.service
anyuser@raspberrypi~$ sudo systemctl start vpnserver.service

 tap_softethertap_の後は、後述のWindowsやmacOS用GUI管理ツールをダウンロード・インストール、ローカルブリッジ設定時の[新しいtapデバイス名(V)](11文字以内)と名称と一致させる必要があります。

 systemdのサービスファイルの作成、構成ファイル読み込み、サービス有効化と開始。

 尚、この後、tap_softetherを設定後、サービスファイルのコメント行のコメントを外して改めてvpnserver.serviceを再起動します。

2023/01/02

 げっ、vpnserver.serviceファイル最終行にコピペ時の残骸[iface eth0 inet manual]という余計な行が入っていたので削除...。

 新年早々、改めてインストールから行なっていて、startさせてstatusを確認すると、その前行を指して[Missing '=', ignoring line]となっており、しばらく悩みましたが、これが原因でした...。

2021/02/10

 VPNはこれでうまくいったのですが、今日、ここで同じラズパイに設定してあったMediaTomb(UPnP/DLNAメディアサーバ)とネットワークインタフェースがバッティングすることが判明...。

 何気なく何はともなく検索していた時にVPN越しにUPnP、DLNAが機能しないみたいな情報を見かけて試してみようと思ったら、ハマった次第。

 なぜか、順調だったはずのmediatombが起動せず、結構悩みましたが、/etc/defaults/mediatombで[MT_INTERFACE="eth0"]を[MT_INTERFACE="br0"]にして再起動するとmediatombサーバが機能し、VPNが通らない、元に戻して再起動するとVPNは通るが、mediatombが起動に失敗することがわかりました。

 これもsystemctl status mediatombやjournalctl -xeからFailed to start UPnP MediaServerを、これをキーに探すとヒットしたのは僅か数件...、内、mediatomb starts before network comes onlineで、この設定ができることを知りました、これがなかったら迷宮入りしていたかも...。

 ちなみに同じくラズパイに設定してあったminiDLNAはネットワークインタフェースを指定しなくても通常のローカルネットワーク上では視聴できますが、やはり、VPNを介すと検出されなくなり、原因は同じかと思います。

 現在、両立できないものか、調査中...。

 というか、VPN越しにNAS上の動画や音楽視聴することはないから、いっか...と逃げてみたり。

2021/11/17

 ふと、第329回 VPSとLXCとOpenVPNで仮想プライベートネットワークを構築するの次の記述を発見しました。

「メディアサーバーとしてDLNAを使う場合は,ブリッジモード(tapデバイスを使う接続方法)の方が望ましいのですが,Android側でブリッジモードを使うためにはrootを取る必要があるため除外しました。DLNAを使いたいのであれば,L2TP/IPsecを使えるソフトウェア,たとえばSoftEther VPNを使うと良い」

 確かにAndroidでrootは頂けません。

 一方、「DLNAを使いたいのであれば,L2TP/IPsecを使えるソフトウェア,たとえばSoftEther VPNを使うと良い」ということであれば心強いですね。

 が、自身の場合、当初、光ルーターのVPNサーバ+L2TP/IPsec(Android)でVPNデビューしたのですが、WireguardやSoftEtherを使ってみている間に、何をしでかしたか、L2TP/IPsecでアクセスできなくなり、Wireguardは、鍵マークも出て、つながったかと思いきや実はつながってなかたりで、今は、SoftEther Server+OpenVPN一択となっています...。

 そんな自身にも朗報?

 以前、クライアントとしては一瞬使ったことがあったBubbleUPnP for DLNA / Chromecast / Smart TVには、UPnP/DLNAメディアサーバではないものの、実はWindows/macOS/Linuxとマルチプラットフォーム対応のサーバ版BubbleUPnP Serverもあって、随分前からサーバ・クライアント共に使い、miniDLNA/ReadyMediaやMediaTombなどと併用すればVPN越しでも?VPNとは別ルートで?別だと意味ないけど...UPnP/DLNAサーバの再生が可能だったっぽい。

 喫緊、使うわけではないので今は入れませんが、自身のような状況でも、とりあえずソリューションとなり得そうなものはあったということで一安心。

 更にその仮想ブリッジと接続するローカルブリッジ設定については、LinuxユーザーとなってWindowsやmacOSの物理マシンがない自身も[新しいtapデバイス]については、CLIツールvpncmdでの方法がわからず、微かな敗北感が漂いつつもパソコン新調時に物理マシンで使わずに仮想化しておくことにした付属のWindows 10でGUI操作せざるを得ませんでした。

 これらについては、Raspberry PiでVPNサーバ構築が簡潔明瞭です。

2023/01/02

 本家ドキュメント3.6 ローカルブリッジに[「vpncmd」では、「BridgeDeviceList」コマンドおよび「BridgeCreate」コマンドで 、同様の操作が可能です。]と明記されていました...。

 仮想マシンでは仰々しいので、その後、ラズパイ400パソコン+wineでWindows用のSoftEther VPN Server Managerをインストールしたりもしましたが、その必要すらありませんでした。

 新年早々、改めてインストールから行なっていて、やってみたらLinuxのvpncmdコマンドだけでもローカルブリッジ用のtapデバイスを作成、設定できました。

 ちなみに10.10 個人としてのリモートアクセス用途の使用(の10.10.6 ローカルブリッジ機能の使用の有無)によれば、ローカルブリッジ接続は、LAN内の複数のマシンとアクセスしたい場合のみ必要で、LAN内の特定の1台のマシンとだけファイル共有、特定の1台のマシンとVNC(≒リモートデスクトップ)接続したい場合は、ローカルブリッジ接続は不要とのこと。

 後者の場合は、SoftEther VPN ServerをインストールしたマシンにSoftEther VPN Clientもインストールし、インターネット越しにSoftEther VPN Serverにアクセスすれば済むとのこと。 => [2021/02/10]?自分で書いておいて意味不明...サーバとクライアントを同じマシンにインストール!?

 自身は、前者なのでローカルブリッジの設定も行ないました。

anyuser@raspberrypi~$ sudo vi /etc/systemd/system/vpnserver.service
...
ExecStartPost=/bin/sleep 10 ; brctl addif br0 tap_softether
...
anyuser@raspberrypi~$ sudo systemctl stop vpnserver.service
anyuser@raspberrypi~$ sudo systemctl daemon-reload
anyuser@raspberrypi~$ sudo systemctl start vpnserver.service

 ローカルブリッジの設定が終わったら、先のsystemdサービスファイルのtapデバイス指定行を有効に(コメントを外)して構成ファイルを再読込み、サービスを再起動しておきます。

SoftEther VPN Serverの設定

anyuser@raspberrypi~$ sudo /usr/local/vpnserver/vpncmd
vpncmd command - SoftEther VPN Command Line Management Utility
SoftEther VPN Command Line Management Utility (vpncmd command)
Copyright (c) SoftEther VPN Project. All Rights Reserved.
 
By using vpncmd program, the following can be achieved.
 
1. Management of VPN Server or VPN Bridge
2. Management of VPN Client
3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)
 
Select 1, 2 or 3: 1
 
Specify the host name or IP address of the computer that the destination VPN Server or VPN Bridge is operating on.
By specifying according to the format 'host name:port number', you can also specify the port number.
(When the port number is unspecified, 443 is used.)
If nothing is input and the Enter key is pressed, the connection will be made to the port number 8888 of localhost (this computer).
Hostname of IP Address of Destination: localhost
 
If connecting to the server by Virtual Hub Admin Mode, please input the Virtual Hub name.
If connecting by server admin mode, please press Enter without inputting anything.
Specify Virtual Hub Name:
Connection has been established with VPN Server "localhost" (port 443).
 
You have administrator privileges for the entire VPN Server.
 
VPN Server>ServerPasswordSet
ServerPasswordSet command - Set VPN Server Administrator Password
Please enter the password. To cancel press the Ctrl+D key.
 
Password: *******************
Confirm input: *******************
 
 
The command completed successfully.
 
VPN Server>Hub DEFAULT
Hub command - Select Virtual Hub to Manage
The Virtual Hub "DEFAULT" has been selected.
The command completed successfully.
 
VPN Server/DEFAULT>GroupCreate
GroupCreate command - Create Group
Group Name: default
 
Group Full Name: default
 
Group Description: default
 
The command completed successfully.
 
VPN Server/DEFAULT>UserCreate
UserCreate command - Create User
User Name: ユーザ名
 
Assigned Group Name: default
 
User Full Name: ユーザ名
 
User Description: ユーザ名
 
The command completed successfully.
 
VPN Server/DEFAULT>UserPasswordSet
UserPasswordSet command - Set Password Authentication for User Auth Type and Set Password
User Name: ユーザ名
 
Please enter the password. To cancel press the Ctrl+D key.
 
Password: *******************
Confirm input: *******************
 
 
The command completed successfully.
 
VPN Server/DEFAULT>IPsecEnable
IPsecEnable command - Enable or Disable IPsec VPN Server Function
Enable L2TP over IPsec Server Function (yes / no): yes
 
Enable Raw L2TP Server Function (yes / no): no
 
Enable EtherIP / L2TPv3 over IPsec Server Function (yes / no): no
 
Pre Shared Key for IPsec (Recommended: 9 letters at maximum): ********
 
Default Virtual HUB in a case of omitting the HUB on the Username: DEFAULT
 
The command completed successfully.
 
VPN Server/DEFAULT>SecureNatEnable
SecureNatEnable command - Enable the Virtual NAT and DHCP Server Function (SecureNat Function)
The command completed successfully.
VPN Server/DEFAULT>NatEnable
NatEnable command - Enable Virtual NAT Function of SecureNAT Function
The command completed successfully.
 
VPN Server/DEFAULT>DHCPEnable
DhcpEnable command - Enable Virtual DHCP Server Function of SecureNAT Function
The command completed successfully.
 
VPN Server/DEFAULT> OpenVpnEnable
OpenVpnEnable command - Enable / Disable OpenVPN Clone Server Function
Enables OpenVPN Clone Server Function (yes / no): yes
 
UDP Ports to Listen for OpenVPN (Default: 1194 / Multiple Accepted): 1194
 
The command completed successfully.

 vpncmdによるSoftEther VPN Serverの設定については、自分だけのVPNサーバを作る!Ubuntu 18.04 に SoftEther VPN Serverをインストールを参照させて頂きました。

 ここで[IPsec / L2TP]とSSL-VPNも使える[OpenVPN]の設定もしてくれています。

2021/04/16

 自身の場合、SecureNAT(/仮想DHCPサーバー)機能は要らない模様でした。

 というか、SecureNATというより、これがある前提で機能する模様の仮想NATと仮想DHCPサーバーの内、デフォルトで192.168.30.xのIPを配布する仮想DHCPサーバーを設定と併せてローカルブリッジを設定したことに起因するようで本来違うネットワークアドレスであるパソコンやラズパイ、ESPモジュールなどにも192.168.30.xのIPアドレスが割り振られ、任意の一部の端末にアクセスできなくなるという事象に遭遇...。

 再確認してみるとSecureNATをSecureNATEnableで有効にすると仮想NATが有効、仮想DHCPサーバーは無効な状態で設定されるのがデフォルトのようですが、その状態にしておくか、これら2つが依存するSecureNAT自体をSecureNATDisableし、無効化しておくことで、こうした事象は起きなくなりました。

 で、systemctl stop vpnserver/systemctl daemon-reload/systemctl start vpnserver。

 が、今度は、VPN越しだと同じネットワークアドレス内でたどり着けるIPアドレスとたどり着けないIPアドレスがあるという新たな問題が...、と思ったら、VPN越しに少なくとも1度は全てアクセスできることもあったので、これは、SoftEther側に起因するものではないということでVPNについては以上。

 が、自身の取得したバージョンでは?[OpenVpnEnable]というコマンドは見当たらなかったので[HELP]を確認後、唯一のOpenVPN系コマンドと思われる[OpenVpnMakeConfig]を実行してクライアント用の「OpenVPN 設定ファイルの生成」をしましたが、改めて見たら[OpenVpnEnable]や[OpenVpnGet]コマンドもあり、[OpenVpnGet]してみると[OpenVpnEnable]は[はい]でUDPポート共に有効になっていました

 生成されたファイルは、SoftEther VPN Serverを配置したパス/usr/local/vpnserver下にあるはずです。

 また、いくつかのファイルが同梱されてzipファイルとして出力されるので伸長(≒解凍)してからスマホなど端末に転送すると良いでしょう。

 ラズパイで出力したからでしょうrpiと付いていますが、リモートVPNの場合、クライアントに必要なのは、[rpi_openvpn_remote_access_l3.ovpn]だけです。

 尚、コマンド説明にはサンプルという表記もありますが、後述のクライアントでは、そのまま使えました。

ルーターでポートの開放

 次にルータのポートを開放するわけですが、これにあたっては、当然、ルーターの管理画面に入っておきます(ルーターにもよりますが、192.168.0.1や192.168.1.1などが多いかと)。

 SoftEther VPN Server用に開放したルータのポートは、IPv4パケットフィルタにおいて向きは、[WAN=>LAN]方向、(デフォルト)ポートは[1194]、プロトコルは、[UDP]と[TCP]の2種類を[許可]するだけ。

 もちろん、IPv6も併せて設定しても構いませんが。

 ルータによるとは言え、VPN関連に限ってはなのか、ルータ上のポート開放の情報ってあまりに少ないですよね...。

ルータで静的IPマスカレード設定

 これも管理画面に入って行ないます。

 自身が最後までピンとこなかったのが、ルータ上で、この静的IPマスカレード(IPポートマッピング)設定をする必要があることでした。

 SoftEther VPN Serverにおいて必要なのは、1件だけで、有効な[接続インタフェース]、[宛先IPアドレス]に[ラズパイの固定IPアドレス]を、[変換対象IPアドレス]にローカルネットワークの外側の[WAN側アドレス](パブリックIPアドレス自体ではなくそれに当たる文言)、[宛先ポート]/[変換先ポート]は(デフォルトでは)[1194]で、ルータにもよるでしょうが、後は、デフォルトやanyなどとなるかと思います。

 ルータによるとは言え、VPN関連に限っては?IPマスカレードの情報、とても少ないですよね...。

ラズパイ上のufwでファイアウォール設定

 SoftEther VPN Server用に必要なラズパイ上のファイアウォール設定は、[443][992]のTCPポート、[5555]、[1194]のTCPとUDPポートを許可するだけです。

 ヘッドレスのラズパイの場合、SSHは必須、それ以外にもSamba、CUPS、WWW等々、必要に応じて許可します。

 ちなみに自身は、[ufw default deny]で許可するポートのみを開ける運用をしています。

 尚、3.3 VPN Server 管理(3.3.6 リスナーポート)にあるようにSSL(HTTPS)で使われる[443]、telnetで使われる[992]、SoftEther独自の[5555]ポートは、多くの場合、せいぜい2つあればよく、ポート制限が厳しいか否かなど状況に応じて使い分けるのが良いとのことでvpncmd(WindowsやmacOSならGUI管理画面)で有効/無効を設定可能とのこと。

 マシン上のファイアウォールの設定についても、VPN以外の話はともかく、VPN関連については、なんだか情報少ないですよね...。

スマホにOpenVPN for Androidをインストール

 あらゆるプロトコルに対応しているSoftEther VPNですが、自身は、OpenVPN互換プロトコルを使うことにしたのでクライアントには、OpenVPNを使います。

 自身は、F-Droid優先派なので若干チープ感はあるもOpenVPN for Androidを常用するつもりですが、Google Play版のOpenVPN ConnectでもVPN接続自体はできました、が、なぜか動作が不安定、ストレージデータも使用量が多いのが気になります、改善に期待といったところでしょうか。

 何れも前述の通り出力した.conf/.ovpnファイルをスマホに転送しておき、前者は、インストール後、[+]アイコンをタップして.conf/.ovpnファイルを読み込み、後者も手順は若干違いますが、同ファイルを読み込むのが楽でしょう。

 当該ファイルは、前述及びリンク先の通り、サーバ側となる今回は、Raspberry Piでvpncmdを実行、[1. VPN Server または VPN Bridge の管理]を選択、[接続先のホスト名または IP アドレス]、[接続先の仮想 HUB 名を入力:]は、入力せず、それぞれ[Enter]してパスワードを入力、[サーバー管理モード]に入り、[Hub DEFAULT]とし、[OpenVpnMakeConfig]と入力して[OpenVPN 互換サーバー機能に接続可能なサンプルのOpenVPN 設定ファイルの生成]します。

 ありがたいことにSoftEtherで標準で使わせてくれるDDNS/Dinamic Domain Name Systemのサービス名は、当該ファイルに書かれています。

スマホからVPN接続

 続いてスマホからVPN接続してみます。

 自宅やオフィス内で確認する場合は、スマホのWi-Fiをオフ、モバイル通信をオンにした状態にしておきます。

 [設定]、[ネットワークとインターネット]、[WiFi]、[詳細設定]、[VPN]をタップすると[OpenVPN]があると思うので、それをONにします。

 または、OpenVPNアプリを起動、F-Droid版OpenVPN for Androidは、登録済みの接続名をタップ、Google Play版OpenVPN Connectは、スライドボタンをタップすることで起動できます。

 接続に成功するとF-Droid版OpenVPN for Androidでは、ログに接続された旨が表示され、Google Play版OpenVPN Connectでは、オレンジ枠のスライドボタンがグリーンに変わり、下部にグラフや各種情報が表示されます。

スマホからVPN越しのLANに接続

 接続に成功したら、Public IPなどのグローバルIP表示アプリでVPN接続前のWiFi接続してLANに参加していた時と同じグローバルIPになるかを確認してみたり、ConnectBotなどでsshしたりできることを確認します。

 これらができれば、コンピュータ間VPNやリモートVPNができている状態です。

 尚、ラズパイ上のファイアウォール(ufwやiptablesなど)で相応のポートが開放されていないと期待する通信ができない点は注意。

 ちなみに、お気づきかとは思いますが、この手順に沿ってVPN接続した場合、認証は、ユーザー名/パスワード認証のみです。

 サーバ側における他のクライアント認証方法については、2.2 ユーザー認証参照。

 SoftEther VPNのOpenVPN互換プロトコルでは、SSL-VPNも可能ですし、認証鍵方式も可能(SSLサーバ認証については、2.3 サーバー認証、SSLサーバ証明書に関しては3.3 VPN Server 管理(3.3.5 SSL 証明書)参照)とのことなのでvpncmdや一部OSではGUI管理画面などからサーバ証明書を発行、クライアントに登録するなど必要に応じて行なうのが賢明です

anyuser@raspberrypi~$ sudo /usr/local/vpnserver/vpncmd
vpncmd command - SoftEther VPN Command Line Management Utility
SoftEther VPN Command Line Management Utility (vpncmd command)
Copyright (c) SoftEther VPN Project. All Rights Reserved.
 
By using vpncmd program, the following can be achieved.
 
1. Management of VPN Server or VPN Bridge
2. Management of VPN Client
3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)
 
Select 1, 2 or 3: 1
 
Specify the host name or IP address of the computer that the destination VPN Server or VPN Bridge is operating on.
By specifying according to the format 'host name:port number', you can also specify the port number.
(When the port number is unspecified, 443 is used.)
If nothing is input and the Enter key is pressed, the connection will be made to the port number 8888 of localhost (this computer).
Hostname of IP Address of Destination: localhost
 
If connecting to the server by Virtual Hub Admin Mode, please input the Virtual Hub name.
If connecting by server admin mode, please press Enter without inputting anything.
Specify Virtual Hub Name:
Connection has been established with VPN Server "localhost" (port 443).
 
...

 前掲の設定においてHub名を入力しなければ、SSLポート443が使用されるとあるので、その後のユーザー設定などで設定したHubの管理権限のあるユーザーであれば、そして以降で設定した内容にも反映されるのでデフォルトでSSL-VPN接続できる状態になるようです。

anyuser@raspberrypi~$ sudo /usr/local/vpnserver/vpncmd
...
接続先の VPN Server または VPN Bridge が動作しているコンピュータの IP アドレスまたはホスト名を指定してください。
'ホスト名:ポート番号' の形式で指定すると、ポート番号も指定できます。
(ポート番号を指定しない場合は 443 が使用されます。)
何も入力せずに Enter を押すと、localhost (このコンピュータ) のポート 443 に接続します。
接続先のホスト名または IP アドレス:
 
サーバーに仮想 HUB 管理モードで接続する場合は、仮想 HUB 名を入力してください。
サーバー管理モードで接続する場合は、何も入力せずに Enter を押してください。
接続先の仮想 HUB 名を入力: DEFAULT
VPN Server "localhost" (ポート 443) に接続しました。
 
VPN Server 内の仮想 HUB 'DEFAULT' に対する管理権限があります。
VPN Server/DEFAULT>
...

 こんな感じ。

備考

 IPマスカレード(IPポートフォーワード)を失念していたことに気づき、SoftEther VPN Server + OpenVPNで無事VPN接続できたわけですが、これをしてもWireGuardでは、接続できず、WireGuardでのVPN接続については、未解決です。

2021/02/07

 今宵、ふとザッピングしていたらTBS『情熱大陸』にソフトイーサ株式会社 代表取締役にして天才プログラマー登 大遊氏が出演していました。

 3年前から山に登るようにしているとか、筑波大学にもNTT東日本にも籍を置いているとか、見た目の華奢な印象とは裏腹に超多忙でパワフルなタフガイ...。

 光ファイバー地下施設の散策が至極の喜びだったり、使えなくなっているファイバー網の活用、そんな環境下で達成できた時の喜びがモチベーションになると提案してみたり、数百件請け負っているという自治体向けVPNとしてラズパイを大量投入したりしていましたが、天才というのは、脳が柔軟なものなんですね。

2021/02/10

 あ、IPsecもそうらしいのでOpenVPNプロトコルに限らずのようですが、VPN接続元(接続したい側・クライアント側)からのブロードキャストやマルチキャストはできない(ブリッジ方式なら逆はできる)模様。

 自身の場合、mDNSを解釈できない(解釈できるのにあえてさせていない)Androidにおいて自作ホームオートメーション機器については、個々にホーム画面に配したIPアドレス指定のブラウザショートカットから行っており、普段は問題ないものの、IPを固定していないのでDHCPの気分次第!?でIPが変わってしまうことがあり、この時には、影響があります。

 こうした状況から、通常のローカルネットワーク上においては、本末転倒なことにIPアドレスが変わったと思われる場合には、Google Play版PingTools Network Utilities(精度がバッチリなら、ホントはF-Droid版のNingBonjourBrowserを使いたいところ)でIPが割り当てられたホスト名を参照することでショートカットのアドレスを変更するという、なんともまどろっこしい方法をとっています。

 が、これらツールの情報は、マルチキャスト、ブロードキャストした上で取得する為、前述の通り、少なくともIPsecやOpenVPNを使ったVPN接続するクライアントからだと失敗したり、アプリが落ちたりします。

 よって万一、VPN接続したい状況で、IPアドレスが変わってしまったと思われる場合には、当初、想定していたものの、イマイチなVNCを使う方法をとるか、VPN接続先(サーバ側)のマシンにConnectBotでssh接続することはできるので端末からavahi-browseでIPアドレスとホスト名の組み合わせを特定...するのもマルチキャストできないからダメか...、何れにせよ、なんらかの方法でスマホなどのVPNクライアント側にある既存の機器操作用ブラウザショートカットのIPアドレスを書き換えて再配置する必要があります。

 そもそもIPアドレスを固定してしまえば、この影響を受けることはなく、よいという話もありますが、OTA/On The Air/無線でアップロードできるとはいえ、ESP8266/ESP32で実装している個々のプログラムを書き換える僅かな手間がなんとも面倒に思えて...(どっちが面倒!?)。

 SoftEther VPN Server + OpenVPNクライアントで接続した当初から、PingTools Network Utilitiesでローカルネットワークを参照できなかった為、わかってはいたことですが、具体的な理由は未調査ながら、VPNもしくは、VPNプロトコル、はたまた、その設定との兼ね合いがあるっぽい、やもするとルータの対応・未対応とも関係があるかもしれないことがわかった次第(それって、わかったと言えるのか...、なんともいい加減...)。

2021/02/21

 おっと、現状のRaspbian Jessieで各種サーバと併用すると?SoftEtherだけでも?Raspberry Pi 2BにはCPUが厳しい模様...異様にラズパイの挙動が遅いなと思ってtop見たら、vpnserverがCPU 130%超えてました。

 というわけでsudo systemctl stop vpnserver、sudo systemctl disable vpnserver。

2021/02/25

 Raspberry Pi 3 B+に替えたら、CPU 1〜2%、RAM1.6%程度になりました。

 ラズパイ2 Bのディスクは3 B+で使えないの!?でいろいろあったのでRaspberry Piのモデルの違いによるものではない可能性も。

2021/03/03

 あ、2Bは正常接続できてもCPU負荷は高すぎたわけですが、3B+では正常接続時はCPU使用率は低く安定も、接続不能な次のような時には、CPUの異常な使用率が発生することがわかりました。

 クライアントをOpenVPNではなく、L2TP/IPSECでSoftEther VPN Serverに接続しようとしても、以前はできていたルータが機能としてもつVPNサーバ同様、何をしてもできないのですが、この接続試行の際に、topコマンドを参照するとvpnserverのCPU使用率が130%とか、一瞬300%近くなったりと急増することが判明しました。

 そうなった場合は、一度、systemctl stop vpnserver後、systemctl start vpnserverすれば、当然ながらリセットされます(restartだと失敗するケース多です)が、そうでないと少なくとも数分待っても使用率は120%前後のまま、それ以上は、下がりませんでした。

 他方、OpenVPNなら(というか、正常に接続されれば?)先日の通り、CPU 1〜2%、RAM1.6%程度で安定します。

2021/03/05

 おっと、勘違い&topコマンドを使いこなせていませんでした。

 Raspberry Pi 2 Bはクアッドコア(CPUx4)、topコマンドは、[top] => [1] => [I]で[1]で上部にコア数分の%CPUxが、[I]で[Irix Mode OFF]となり、リスト上のCPU使用率が、使用率/CPUコア数となり、4コアだと1/4の率が表示されるとのこと。

 [1]も[I]も指定しなかったので200%だとしたら、1コアあたり、50%ということですが、ほぼ130%前後だったと思うので30%強、そこそこではあり、さすがにRaspberry Pi 3 B+ほど余裕はありませんが、これならRaspberry Pi 2でも、なんとかいけそうです。

2021/03/11

 改めてRaspberry Pi 2 B上のVPNサーバに接続してみましたが、全体でも1コアでも2桁超えることはありませんでした。

 なんだったんでしょう...。

 ラズパイ2Bと3B+でUSBメモリを入れ替え検証した結果、rpi-updateでブートローダとカーネルのミスマッチが起きたことに起因するものだったのでしょうか...でも、2Bで負荷が高いと気づいた(が勘違いだった)のが2/21、3B+で検証したのが2/25だから関係ないか...。

2021/03/22

 2Bなので妥当かなとも思いますが、気づくと使ってないのに1coreあたり平均40%弱になっていることがありますね...。

 この影響なのか、無縁なのか、sshログインするまでやsu/sudoのパスワード入力までの間、VNCのポートフォーワーディングできるまで、VNC接続後、アプリが起動するまで等に結構なタイムラグが出るんですよね... => リポジトリが複数あったことに起因しており、SoftEtherとは無縁でした。

 systemctl restart vpnserverするとCPUもRAMも1桁にはなることも、変わらず、ならないことも...。

 ただ、restart後も同程度のCPU/RAM消費だったとしても他は改善は見られない一方、VNCの挙動だけは、どれも全て軽快になる...。

 なんだろう...。

2021/03/26

 ラズパイ2Bだと、やはり、微妙に厳しいのか、当初はそんなことなかった気がしますが、結構な頻度でラズパイ起動時に(SoftEtherの)vpnserver.serviceが起動に失敗、ラズパイ起動後に何もいじることなく、systemctl restartすると何事もなく、正常起動するというケースに遭遇するようになりました。

 サービスファイル内で正常終了ステータス以外再実行(Restart=on-failure)とか、ブート時の渋滞を回避すべく、起動タイミングを計れば改善の余地もあるのかもしれませんが、余力があるであろうラズパイ3B/3B+/4Bを使うほうが無難そうですね。

2021/03/31

 まだ、数日ですが、systemdのサービスファイル内でRestart=on-failure(正常終了ステータス以外再実行)してみてから、今のところ、ラズパイ2Bでも起動時にサービスが落ちているということはなくなりました。

 もちろん、修正後、systemctl stop vpnserver、systemctl daemon-restart、systemctl start vpnserver。

2021/08/17

 SoftEther VPNやPacketiX VPNがターゲットにされているわけではないものの、8/15朝からブルートフォース型のサイバー攻撃を確認した筑波大学発のベンチャー企業ソフトイーサが、念の為、公開した新ビルドへの更新・8文字以上のパスワード(事前共有鍵)に変更を勧めているとのこと。

2021/09/01

 しばらくぶりに使ってみようと思った数日前、SoftEther VPN/OpenVPNでVPN接続できなくなっていることに気づきました。

 最初、OpenVPN接続が出来なくなってしまいましたに行き着き、クライアント認証もしないと接続できなくなったのかな?それはそれでセキュアだしと試してみようかと思っていました。

 ただ、今日になってサーバログ(/usr/local/vpnserver/server_log/vpn_20210901.log)を調べてみると次のようなエラーが。

「DHCP サーバーからの IP アドレスの取得に失敗しました。PPP の通信を受諾するためには DHCP サーバーが必要です。仮想 HUB の Ethernet セグメント上で DHCP サーバーが正しく動作しているかどうか確認してください。DHCP サーバーを用意することができない場合は、仮想 HUB の SecureNAT 機能を用いることもできます。」

 このエラーで検索すると結構な数がヒットするも、なかなか、ぴったりしっくりな情報が見つからない中、Debian 10 busterを初代Mac mini (A1176; 2006)にインストールに助けられました。

 結果、/etc/systemd/system/vpnserver.serviceの[#ExecStartPost=/bin/sleep 10 ; /sbin/brctl addif br0 tap_softether]行を追加すればよいとのこと...。

 ん?当初、先人のページを参照させていただき、このページにも書き留めてあるようにその手順でコメントを外してVPN接続していたのに、なぜ今回コメントアウトされていたのか...?原因がさっぱりわかりませんが、なにかやらかしんたんでしょうね...、そう、そうですよね、そこのコメントは外しておかないと...。

 何れにせよ、おかげ様でOpenVPN ConnectではSoftEther VPNに繋がりました、リンク先に感謝。

 他方、OpenVPN for Androidではつながらない...つながるのかもしれませんが、途中で諦めるほど接続中のままつながらない...、自身のはf-droid版で試してみる気はないけどGoogle Play版ならつながるのだろうか?

 そうこうしている間にSoftEther VPN新たなビルドに置き換えましたよっと。

2023/01/02

 あれから、どうにもつながらなくなったことがあったのですが、新年早々、改めてインストールから行なってみたら、無事、SoftEtherVPNでVPN接続できました。

 ただ、以前、両方ともできたものが、今回はなぜか、F-Droid版OpenVPN for Androidだとつながらず、Google Play版OpenVPN Connectでのみ接続できました。

 まぁ、以前も、両方とも原因不明ながら、それぞれ、一時的に、接続できたり、接続できなくなったりしたことがあったので、今回も何もしなくても、その内、前者でもつながるようになるかなと。

ホーム前へ次へ