Help us understand the problem. What is going on with this article?

Docker + CentOS7 SoftEther VPN構築メモ

概要

自分用にSoftEther VPNをDocker環境で立てたメモ
モバイルエンジニアなのでインフラ周りの知識はあまりないです

立てた目的

  • VPNの勉強の為 + 公共Wifiから安心して繋げられるようなVPN環境が欲しかった
  • 普段カフェで勉強していてwifiのセキュリティが前から不安だった(Wifiって誰でもキャプチャしてhttp通信とか覗けそうだよね、とか)

VPNサーバーを立てると安全?

  • VPNサーバーを立てて、全ての通信をそこを通して暗号化しつつ外部と通信するので、仮にwifiアクセスポイントでパケットをモニタリングしている第三者がいてhttp通信を見ようとしても暗号化がかかる
  • そもそもVPNサーバーにもVPNプロトコルにも脆弱性は起こり得るけど、よりセキュアにはなる

試した環境

  • 自身のPC環境
    • Mac OS Mojave 10.14
    • Docker for Mac 18.0.1-ce
    • docker-compose version 1.22.0, build f46880f
  • VPNサーバー
    • SoftEther VPN v4.28-9669 linux-x64-64bit.tar.gz(2018.09.11)
    • Dockerイメージの centos:7.5.1804 の上に構築
  • 使用したVPNプロトコル
    • L2TP/IPSec
  • 実際にVPN立てたのは某VPSサーバー

動かす手順

Docker for MacとDocker Composeがインストールされていれば、docker-composeするだけでとりあえずVPNサーバーの起動はできる。
適当なディレクトリに

docker-compose.yml
version: '2'
services:
  vpn-test:
    build: .
    ports:
      - '5555:5555'
      - '500:500/udp'
      - '4500:4500/udp'
FROM centos:7.5.1804
ENV APP_ROOT=${APP_ROOT:-/usr/local}
WORKDIR $APP_ROOT
RUN yum -y install gcc make which net-tools
RUN curl -L https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.28-9669-beta/softether-vpnserver-v4.28-9669-beta-2018.09.11-linux-x64-64bit.tar.gz > softether-vpnserver-v4.28-9669-beta-2018.09.11-linux-x64-64bit.tar.gz
RUN tar -xvf softether-vpnserver-v4.28-9669-beta-2018.09.11-linux-x64-64bit.tar.gz
RUN cd vpnserver && make i_read_and_agree_the_license_agreement
RUN cd vpnserver && chmod 600 * && chmod 700 vpncmd && chmod 700 vpnserver
CMD ["/usr/local/vpnserver/vpnserver", "execsvc"]

を用意して docker-compose up 叩く

今回はlinuxを選択したけど、SoftEther自体は Windows / Mac / Linuxそれぞれに対応していて、Windowsがもっとも安定して稼働するらしい
ここら辺を参照 https://ja.softether.org/4-docs/1-manual/7/7.3

起動したVPNサーバーに接続

docker-compose upしたあと、
Dockerコンテナーに接続

$ docker-compose exec vpn-test bash

Dockerコンテナー内からVPNサーバーに接続

$ docker-compose exec vpn-test bash

[root@24ca9b305597 vpnserver]# cd vpnserver
[root@24ca9b305597 vpnserver]# ./vpncmd /SERVER localhost:443
vpncmd command - SoftEther VPN Command Line Management Utility
SoftEther VPN Command Line Management Utility (vpncmd command)
Version 4.28 Build 9669   (English)
Compiled 2018/09/11 12:23:27 by yagi at pc33
Copyright (c) SoftEther VPN Project. All Rights Reserved.

Connection has been established with VPN Server "localhost" (port 443).

You have administrator privileges for the entire VPN Server.

VPN Server>HELP

VPNサーバーに接続後は HELP ? でコマンド一覧がでる

初期設定

今回はただのメモなので省略
VPNサーバー管理パスワード設定、VPNで接続する側のアカウントの設定、仮想HUBの作成などが必要なのでここら辺を参考に
https://qiita.com/showwin/items/92861057a8b62611444d#3%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%AE%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E4%BD%9C%E6%88%90

一度作るとvpn_server.configというファイルに全て情報が書き出されて、次回のVPNサーバー起動時にこれを食わせれば設定は不要でした

クライアント側の接続設定

クライアントからVPNに接続するにはここら辺を参考に(Macの場合。他のデバイスは L2TP 設定 windows とかでググれば出てきます)
https://ja.softether.org/4-docs/2-howto/L2TP%2F%2FIPsec_Setup_Guide_for_SoftEther_VPN_Server/5.Mac_OS_X_L2TP_Client_Setup

ハマったとこメモ

ローカルで構築したVPNサーバーに繋がらない

11.1.2 ローカルブリッジを使用する際に VPN 内部からローカルブリッジに使用している仮想 LAN カードの IP アドレスと通信できない場合

  • https://ja.softether.org/4-docs/1-manual/B/11.1
  • ここら辺によるとLinuxサーバーはローカルマシンに構築したVPNサーバーには通信できない?あまりよくわかってないけど外部に立てたら通信はできた

クライアント側のログ

繋がらない時は「認証できませんでした」とか「L2TP/IPSecサーバーに接続できませんでした」くらいしか言われない。
VPNの詳細オプションから詳細ログを作成すると /var/log/ppp.log にログが出るようになる。
うまくサーバーからレスポンスが来てれば

Sun Oct 28 19:45:17 2018 : IPSec connection started
Sun Oct 28 19:45:17 2018 : IPSec phase 1 client started
Sun Oct 28 19:45:17 2018 : IPSec phase 1 server replied

のような感じでrepliedが返ってくる

ログがでない

  • security_log、server_log、packet_logなどみても特に何も出力されない。SoftEtherはパケットロギングはもともと無効だったりするのでサーバー側のログで接続確認しようとしてもできなかった。
  • Dockerじゃなければ/var/log/messageとかにはなにか出るのかも?systemctlのサービス何も動いてないのでそんなファイル自体なかった
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away