ITエンジニアのコツコツ日記

ITエンジニアの雑記です

SoftetherVPNをDockerで動かす(docker-compose)

DockerでSoftetherを動かす

f:id:itkotsukotsu:20201031225033p:plain

SoftetherVPNOSSVPNソフトウェアだ。

WindowsLinuxにインストールして使うが、Dockerで動かす例が少なかった。

SoftetherはL2VPNを提供するアプリケーションであるが、Dockerは動作ホスト内で仮想ネットワークを形成する。

このため、Dockerコンテナでの動作と相性が良くない。

しかし、Dockerのネットワークドライバをhostsにすることで動いたので手順をまとめる。

Softetherが動作するdocker-compose.yml

SoftetherをDockerで動作させるために必要なこと

SoftetherVPNサーバ機能を使うためには基本的にはローカルブリッジ機能が必要になる。

Dockerで標準状態でSoftetherコンテナを動作させるとDockerホストが持つIP帯ではなく、内部仮想ネットワークの172.17.0.0/24等がコンテナに割り当たるはずだ。

このLANをL2VPNの接続先として公開することはできるが、やりたいのはDockerホストのNICが所属するLANだ。

このためDockerホストのNICが所属するLANにコンテナが接続できる必要があり、Dockerのネットワークドライバのhostを利用する。

これにより、コンテナはDockerホストのNICを介してネットワーク接続が可能だ。

以下のdocker-compose.ymlを動作されればとりあえずSoftetherが動作する。

version: "3"

services:
  app:
    image: siomiz/softethervpn
    #environment:
      #- USERS=user1:password1;user2:password2
      #- PSK=test
      #- HPW=test
    volumes:
      - ./vpn_server.config:/usr/vpnserver/vpn_server.config:z
    cap_add:
      - NET_ADMIN
    network_mode: "host"
    privileged: true
    ports:
      - 500:500/udp
      - 4500:4500/udp
      - 1701:1701/tcp
      - 1194:1194/udp
      - 5555:5555/tcp

portsで各softetherのポートを指定しているが、hostネットワークに割り当てているので、不要かもしれない。

この設定で起動したSoftetherコンテナはDockerホストのローカルブリッジが動作する。