1分でVPNサーバを構築する
2017/08/312020/03/05
IT docker

git cloneして、docker-compose upを実行するだけ

Docker on AWS EC2で、

1
2
3
4
$ git clone https://github.com/eidera/softethervpn-docker
$ cd softethervpn-docker
$ vi docker-compose.yml
ユーザー名やパスワードなどを好きな値に編集

とやっておいた上で、

1
$ docker-compose up

するだけで、ユーザー認証としてパスワード認証を用いたL2TP over IPSecなVPNサーバが立ち上がります。

docker-compose upからの所要時間は約1分。あっという間ですね。

dockerのホストマシンで、下記のポートが使えるようになっていればOKです。

ユーザー名やパスワード、共有シークレットなどは、以下のものをお好みのものに変更して下さい。

Argument Default value
SOFTETHER_URL ※長いので表外に記載
HUB_NAME MyHub
HUB_PASSWD hogehoge
USER_NAME MyVpnUser
USER_PASSWD fugafuga
COMMON_SECRET hogefuga

ディレクトリ構成

1
2
3
4
.
├── build
│   └── Dockerfile
└── docker-compose.yml

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: '3'
services:
  vpn:
    container_name: vpn
    build:
      context: .
      dockerfile: ./build/Dockerfile
      args:
        SOFTETHER_URL: "https://jp.softether-download.com/files/softether/v4.22-9634-beta-2016.11.27-tree/Source_Code/softether-src-v4.22-9634-beta.tar.gz"
        HUB_NAME: MyHub
        HUB_PASSWD: hogehoge
        USER_NAME: MyVpnUser
        USER_PASSWD: fugafuga
        COMMON_SECRET: hogefuga
    volumes:
      - vpn_data:/usr/vpnserver
    ports:
      - '500:500/udp'
      - '4500:4500/udp'
volumes:
  vpn_data:

Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
FROM amazonlinux:2017.03

RUN yum install -y gcc make ncurses-devel openssl-devel readline-devel wget

ARG SOFTETHER_URL="https://jp.softether-download.com/files/softether/v4.22-9634-beta-2016.11.27-tree/Source_Code/softether-src-v4.22-9634-beta.tar.gz"
ARG HUB_NAME="DefaultHub"
ARG HUB_PASSWD="DefaultHubPassword"
ARG USER_NAME="DefaultUser"
ARG USER_PASSWD="DefaultUserPassword"
ARG COMMON_SECRET="commonsec"

RUN cd / && \
    mkdir -p softether_vpn && \
    cd softether_vpn && \
    wget ${SOFTETHER_URL} && \
    tar zxvf *.tar.gz && \
    cd $(tar ztvf *.tar.gz| head -n1 | awk '{print $NF}') && \
    cp -f src/makefiles/linux_64bit.mak Makefile && \
    make && \
    make install && \
    make clean && \
    rm -rf /softether_vpn

RUN /usr/vpnserver/vpnserver start && \
    sleep 5 && \
    vpncmd /SERVER localhost /ADMINHUB:DEFAULT /CMD HubCreate ${HUB_NAME} /PASSWORD:${HUB_PASSWD} && \
    vpncmd /SERVER localhost /ADMINHUB:${HUB_NAME} /CMD UserCreate ${USER_NAME} /GROUP:none /REALNAME:none /NOTE:none && \
    vpncmd /SERVER localhost /ADMINHUB:${HUB_NAME} /CMD UserPasswordSet ${USER_NAME} /PASSWORD:${USER_PASSWD} && \
    vpncmd /SERVER localhost /ADMINHUB:${HUB_NAME} /CMD IPsecEnable /L2TP:yes /L2TPRAW:no /ETHERIP:no /PSK:${COMMON_SECRET} /DEFAULTHUB:${HUB_NAME} && \
    vpncmd /SERVER localhost /ADMINHUB:${HUB_NAME} /CMD SecureNatEnable && \
    vpncmd /SERVER localhost /ADMINHUB:${HUB_NAME} /CMD NatEnable && \
    vpncmd /SERVER localhost /ADMINHUB:${HUB_NAME} /CMD DHCPEnable && \
    /usr/vpnserver/vpnserver stop

CMD /usr/vpnserver/vpnserver execsvc

EXPOSE 500/udp 4500/udp

vpnの設定内容を他のものに変更したい場合には、vpncmdのコマンドに渡せるオプションなどの詳細を以下で確認できます。

EC2インスタンスを作成したばかりの状態からの手順

ec2-userで実行するときの手順になってます。ユーザー名を変更する場合は読み替えて下さい。

1
2
3
4
5
6
7
sudo yum -y install docker git
wget -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname -s`-`uname -m`
sudo mv docker-compose-`uname -s`-`uname -m` /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo chown root:root /usr/local/bin/docker-compose

sudo usermod -a -G docker ec2-user

※ここで一旦ログアウト

1
2
3
4
sudo /etc/init.d/docker start
git clone https://github.com/eidera/softethervpn-docker
cd softethervpn-docker
docker-compose up

以上。

EC2インスタンスには、インバウンドに下記のポートを開けたセキュリティグループを付与するのを忘れずに。

Macから接続する場合、VPNの設定をした後、詳細すべてのトラフィックをVPN接続経由で送信にチェックを入れると、IPアドレスがVPNサーバーのものに変わります。