DockerでL2TP/IPsecサーバを立ててmacOSから接続

投稿者: | 2019-10-13

DockerL2TP/IPsecのVPNサーバを立て、macOSから接続する。

サーバ側のすること

docker-compose.ymlを作成して、upするだけでサーバは立てられる。 使うイメージはこれ: hwdsl2/docker-ipsec-vpn-server: Docker image to run an IPsec VPN server, with IPsec/L2TP and Cisco IPsec

version: "3"

services:
  l2tp-ipsec:
    image: hwdsl2/ipsec-vpn-server
    privileged: true
    ports:
      - "500:500/udp"
      - "4500:4500/udp"
    # 必要ならenvファイルにVPNの設定を書く。
    env_file:
      - ./vpn.env

VPNに事前にPSKやユーザーを設定しておきたいときは、envファイルなどで書いておく必要がある。 ユーザーは複数登録することも可能。

VPN_IPSEC_PSK=<PRE_SHERED_KEY_HERE>
VPN_USER=<USERNAME_HERE>
VPN_PASSWORD=<USER_PASSWORD_HERE>

#Additional vpn users can be added
#VPN_ADDL_USERS=additional_username_1 additional_username_2
#VPN_ADDL_PASSWORDS=additional_password_1 additional_password_2

作成した後、docker-compose up -dなどで起動すればOK。

なお、docker-compose logsすると、ユーザ名やパスワード、PSKなどを確認することができる。

クライアント側ですること

macOSを使っている前提で解説。上に載せたgithubのページに解説されている: setup-ipsec-vpn/clients.md at master · hwdsl2/setup-ipsec-vpn

画像があると冗長な気もするので、画像なし版も書いておく。

画像なし

  1. システム環境設定-->ネットワークを開き、左下の+ボタンを押す。
  2. L2TP/IPSecを選択。名前はなんでも良い。
  3. サーバアドレスとアカウント名を設定。先ほどのenvファイルを参照。
  4. 認証設定からユーザパスワードとPSKを設定。envファイルを参照。
  5. 詳細ボタンを押し、次の2項目を設定。
    1. オプションタブからすべてのトラフィックをVPN接続経由で送信にチェック
    2. TCP/IPタブでIPv6の設定リンクローカルのみにする
  6. 適用。

画像つき

システム環境設定-->ネットワークを開き、左下の+ボタンを押す。

ネットワーク設定を開き、+ボタンを押す

すると、インターフェイスの選択画面が表示される。ここでは インターフェイスとして、VPNを選択し、VPNタイプとして、L2TP/IPSecを選択する。 サービス名はなんでもいい。

l2tp/ipsecを選択

ここまですると、作成したVPNを左側から選ぶと、VPN向けの設定画面を表示できる。 そこで、サーバアドレスとアカウント名が設定できる。 下図の赤枠を参照。

アカウント名は、先ほどenvファイルで作成したユーザ名でいい。 サーバアドレスは、dockerを動かしているマシンのIPを入力すればいい。docker-machineなら、docker-machine ip <machine-name>で分かる。

サーバIPとアカウント名を指定する

続いて、アカウント名の下部にある認証設定をクリックして、PSKとアカウントのパスワードを入力する。 これもenvファイルで指定したものを入力するだけでいい。 入力が済んだら、右下のOKボタンを押して閉じる。下図を参照。

ユーザパスワードとPSKを設定する

最後に、適用ボタンの上にある詳細…ボタンをクリックして、2つほど設定する。 1つ目は、オプションタブですべてのトラフィックをVPN接続経由で送信にチェックを入れること。 2つ目は、TCP/IPタブでIPv6の設定リンクローカルのみにすること。

2つの設定が済んだら、OKボタンを押し、詳細を閉じる。

トラフィックとIPv6の設定を行う

適用を押したら設定は終了。

接続

ここまで上手く設定できていれば、クライアント側のVPN設定画面で接続を押せば、接続が確立される。

ポート問題は恐らくないと思う。サーバのホスト元によってはポート開放が必要かもしれない。

Dockerは簡単でいいね