SoftEther VPNをDockerで構築して、外部からローカルのサーバーにアクセスする

FacebooktwitterredditpinterestlinkedinmailFacebooktwitterredditpinterestlinkedinmail

前回は、Rasperry Pi OS上にDockerをインストール、さらにそれを利用してNextcloudを構築しました。容量の小さいノートPCでも気軽に使えるバックアップ先として使えます。さらに、アプリを導入すれば(標準でも入りますが)、中小企業の安価なグループウェアとしても利用できます。

とはいえ、大きな問題が一つあります。それは、外部からはアクセスできないということです。問題は問題ですが、セキュリティの観点からすると(特にセキュリティ対策に予算や人員を割けない個人や中小企業にとっては)好ましいことでもあります。アクセスする手段がなければ、不正アクセスは難しくなりますから。

とはいえ、イントラネットだけでの運用は、テレワークも普及している現代においては不便すぎます。ということで、アクセスの手段を提供しようと思います。

ラズパイのDocker に Softehter VPNを導入する

注意

VPNは非常に便利な仕組みですが、悪用されると自分のネットワークがセキュリティリスクに晒されるだけではなく、他のネットワークへの攻撃の踏み台に使われることもあります。

導入、運用する場合には充分注意してください。セキュリティに充分気をつけて内容を紹介しますが、くれぐれもご自身で対策を徹底してください。当然ですが、当記事の内容を実行し不利益を被ったとしても、筆者は責任を負いかねます。

のっけから警告となってしまいました。ただ、このSoftEther VPN はそれくらい強力で、サーバーをインストールさえしてしまえば NAT トラバーサル機能によりネットワーク管理者でなくても VPN による外部アクセスが可能にします。

つまりどういうことかというと、ルーターによらず自宅に設置した Nextcloud や WordPress, Redmine それから Wekan などに外部からアクセスできるということです。個別のサーバーは外部ネットワークに公開されず、ルーターに穴を開けるわけではないので、そちらの意味では比較的安全です(違う意味では危険です)。

SoftEther VPN も Docker Image が用意されているので、これを利用してインストールします。

 

Docker のインストール

※まだインストールしていない場合

sudo apt-get install docker.io
sudo usermod docker -aG $USER
sudo apt-get install docker-compose
sudo reboot

SoftEther VPNのインストール

参考

Docker はネットワークを含めて仮想化してしまうので、単に SoftEther VPN を Docker で起動しただけだと、アクセスしても Docker 内の仮想ネットワークになってしまいます。当然、 Docker コンテナごとに独立しているので、他のサーバーにアクセスできません。

 

これでも、公衆Wi-Fiなどを利用するときに通信内容を保護する役には立ちますが、今回の目的は果たせません。

そういった場合は、 network_mode をhost にするといいらしいです。

設定

mkdir softether
cd softether
touch docker-compose.yml
nano docker-compose.yml

SoftEther VPN 用にディレクトリを切って、設定ファイルを作成します。

version: "3"

services:
  app:
    image: siomiz/softethervpn
    #restart: always
    environment:
      #- USERS=user1:password1;
      - SPW=test
      #- PSK=test
      #- HPW=test
    #volumes:
      #- /home/pi/softether/vpn_server.config:/usr/vpnserver/vpn_server.config
    cap_add:
      - NET_ADMIN
    network_mode: "host"
    privileged: true

このままコピペで動作させると、セキュリティ的にとんでもないですが、後で対応します。各種設定は以下のようになります。

  • USERS=VPNを利用するユーザー名とそのパスワードのペアをコロン : で区切って設定する(; でペアごとを更に区切る) name:passwd;name2:passwd; みたいな感じ
  • SPW=VPNサーバーを管理するパスワード。SoftEther VPN のサーバーは管理ツールで設定を行うため、必ず設定する
  • PSK=事前共有キー。IPSecの事前共有キー。
  • HPW=標準の仮想ハブのパスワード。

ここで指定しているのは、SPWだけです。というのも、SoftEther VPN の管理パスワードを再設定する方法が、(GUIからは)設定ファイルで該当行を削除する以外に見当たらず、docker でSPWを省略した場合、デフォルト値が設定されてしまうようで、セキュリティ上よろしくないから(こういうテキストファイルに書くのもよくないのですが)です。

他のユーザーやハブのパスワードなどは、サーバー管理ツールから行います。

※もしかしたら、GUIで管理するよりコマンドラインツールで管理した方が諸々楽かもしれません。

起動

docker-compose up -d

初回起動時は、 Docker イメージを自動でダウンロードするので、起動まで少し時間がかかるので、待ちます。