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

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すれば、状況が変わるのでは?と思い、やってみると正解でした。

 その方法は、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サービスの設定

 他方、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アドレス]や[割当て個数]などで調整して予め固定分を確保しておきます。

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

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

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

 後者の場合は、SoftEther VPN ServerをインストールしたマシンにSoftEther VPN Clientもインストールし、インターネット越しにSoftEther VPN Serverにアクセスすれば済むとのこと。

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

SoftEther VPN Serverの設定

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

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

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

 生成されたファイルは、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]してパスワードを入力、[サーバー管理モード]に入り、[OpenVpnMakeConfig]と入力して[OpenVPN 互換サーバー機能に接続可能なサンプルのOpenVPN 設定ファイルの生成]します。

スマホから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接続した場合、認証は、ユーザー名/パスワード認証のみです。

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

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

備考

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

ウェブ造ホーム前へ次へ