【VPS1台でインフラ勉強】SoftEtherを使ってVPN構築

執筆日:

更新日:

おつかれさまです。もーすけです。
VPS1台でインフラ勉強シリーズの第3回目でVPN構築を行ったのでその知見を残しておきます。

  • 第1回 サーバ複数台構成、Nginxでリバースプロキシ構築
  • 第2回 HAProxyでロードバランサ構築
  • 第3回 SoftEtherを使ってVPN構築
  • 1. 実施したこと

    VPSのホストサーバをVPSサーバとし、その上で仮想で立ち上げたサーバ(ローカルネットワーク)に外部から接続できるようにすること。

    f:id:mosuke5:20141207200544p:plain

    2. 環境

    ・VPNソフトウェア:SoftEther VPN プロジェクト - SoftEther VPN プロジェクト
    ・メモリ:1GB
    ・CPU:仮想2コア
    ・HDD:100GB
    ・OS:CentOS7
    ・サーバ仮想化:Vagrant(Utuntu13)

    3. SoftEtherのインストール

    インストール手順は公式ドキュメント通りなので簡単にコマンドのみ記述しておく。
    7.3 Linux へのインストールと初期設定 - SoftEther VPN プロジェクト

    【ダウンロードしたもの】
    ここから環境に応じて対象のソフトウェアを選ぶ
    SoftEther ダウンロード センター

    コンポーネントSoftEther VPN Server
    ・プラットフォーム:Linux
    ・CPU:Intel x86 / AMD64(64bit)

    ## ダウンロード
    $ wget ttp://jp.softether-download.com/files/softether/v4.08-9449-rtm-2014.06.08-tree/Linux/SoftEther%20VPN%20Server/64bit%20-%20Intel%20x64%20or%20AMD64/softether-vpnserver-v4.08-9449-rtm-2014.06.08-linux-x64-64bit.tar.gz
    
    ## 解凍
    $ tar zxvf softether-vpnserver-v4.08-9449-rtm-2014.06.08-linux-x64-64bit.tar.gz
    
    ## 実行可能ファイル作成
    $ cd vpnserver/
    $ sudo make
    
    ## /usr/localへ配置
    $ sudo mv vpnserver /usr/local
    
    ## パーミッション変更
    ### 基本的には600。実行ファイルのみ700
    $ cd /usr/local/vpnserver
    $ sudo chown root:root ./*
    $ sudo chmod 600 ./*
    $ sudo chmod 700 ./vpncmd
    $ sudo chmod 700 ./vpnserver
    
    ## 動作チェック
    $ sudo ./vpncmd
    1. VPN Server または VPN Bridge の管理
    2. VPN Client の管理
    3. VPN Tools コマンドの使用 (証明書作成や通信速度測定)
    
    1 - 3 を選択: 3
    
    VPN Tools>
    ##helpとうつと利用可能なコマンドが出る
    VPN Tools> help
    下記の 6 個のコマンドが使用できます:
     About         - バージョン情報の表示
     Check         - SoftEther VPN の動作が可能かどうかチェックする
     MakeCert      - 新しい X.509 証明書と秘密鍵の作成 (1024 bit)
     MakeCert2048  - 新しい X.509 証明書と秘密鍵の作成 (2048 bit)
     TrafficClient - 通信スループット測定ツールクライアントの実行
     TrafficServer - 通信スループット測定ツールサーバーの実行
    VPN Tools> 
    VPN Tools> Check
    (略)
    すべてのチェックに合格しました。
    VPN Tools> 
    VPN Tools> exit
    
    ##起動スクリプトの作成
    $ sudo vim /etc/init.d/vpnserver
    #!/bin/sh
    # chkconfig: 2345 99 01
    # description: SoftEther VPN Server
    DAEMON=/usr/local/vpnserver/vpnserver
    LOCK=/var/lock/subsys/vpnserver
    test -x $DAEMON || exit 0
    case "$1" in
    start)
    $DAEMON start
    touch $LOCK
    ;;
    stop)
    $DAEMON stop
    rm $LOCK
    ;;
    restart)
    $DAEMON stop
    sleep 3
    $DAEMON start
    ;;
    *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
    esac
    exit 0
    
    ##サービス登録
    $ sudo chkconfig --add vpnserver
    $ sudo chkconfig --list vpnserver
    vpnserver      	0:off	1:off	2:on	3:on	4:on	5:on	6:off
    
    ##起動
    $ sudo /etc/init.d/vpnserver start  
    

    4. 設定

    (1)管理者パスワードの設定

    ## vpnserverへ接続
    $ sudo ./vpncmd localhost:443 /SERVER
    
    ## 管理者パスワード設定
    VPN Server> ServerPasswordSet 
    

    (2)仮想HUBの作成

    デフォルトで「default」という仮想がHUBがあるのでそれで構築。
    自分の仮想HUBを作りたければHubCreateでつくれる。

    ``` VPN Server> HubCreate ```

    ※HELPコマンドがだいぶ使えるので使おう。日本語で書かれているのでわかりやすいです。

    VPN Server>HELP
    下記の 205 個のコマンドが使用できます:
     About                      - バージョン情報の表示
     AcAdd                      - 接続元 IP 制限リストにルールを追加 (IPv4)
     AcAdd6                     - 接続元 IP 制限リストにルールを追加 (IPv6)
     AcDel                      - 接続元 IP 制限リスト内のルールの削除
     AcList                     - 接続元 IP 制限リストのルール一覧の取得
    (...以下略) 
    

    (3) IPsec VPN サーバー機能の有効化

    VPNのトンネリングをするにあたって事前共有鍵が必要なので作成する必要がある。

    ``` VPN Server>IPsecEnable IPsecEnable コマンド - IPsec VPN サーバー機能の有効化 / 無効化 L2TP over IPsec サーバー機能を有効 (yes / no): yes Raw L2TP サーバー機能を有効 (yes / no): yes EtherIP / L2TPv3 over IPsec サーバー機能を有効 (yes / no): yes IPsec 事前共有鍵の文字列 (9 文字以下を推奨): ******* VPN 接続時に仮想 HUB 名が省略された場合のデフォルト仮想 HUB 名: Default ```

    (4) グループとユーザの作成

    ユーザを作成するにはグループの作成が必要なので先にグループを作る。
    また、ユーザを作ったでではパスワードが設定されないので忘れずにパスワード設定。

    ``` VPN Server>Hub Default VPN Server/DEFAULT>GroupCreate GroupCreate コマンド - グループの作成 グループ名: mygroup グループの本名: mygroup グループの説明: mygroup

    VPN Server/DEFAULT>UserCreate UserCreate コマンド - ユーザーの作成 ユーザー名: myuser 参加するグループ名: mygroup ユーザーの本名: myuser ユーザーの説明: myuser コマンドは正常に終了しました。

    ユーザを作っただけではパスワードが設定されないので

    VPN Server/DEFAULT> UserPasswordSet

    </div>
    <div class="section">
        <h4>(5) ローカルブリッジの設定</h4>
        <p>次にローカルブリッジの設定をする。<br>
    ローカルブリッジは<a class="keyword" href="http://d.hatena.ne.jp/keyword/VPN">VPN</a>の仮想ネットワークと、LAN の実ネットワーク(ここでは<a class="keyword" href="http://d.hatena.ne.jp/keyword/VPS">VPS</a>ホストサーバと仮想Webサーバ間のローカルネットワーク)をつなげる設定です。<br>
    ローカルブリッジを行うLANカードを指定する必要があるが、ここでは仮想の「vboxnet0」を使用します。</p>
    

    VPN Server/DEFAULT>BridgeCreate BridgeCreate コマンド - ローカルブリッジ接続の作成 ブリッジする仮想 HUB 名: Default ブリッジ先のデバイス名: vboxnet0

    </div>
    <div class="section">
        <h4>(6) <a class="keyword" href="http://d.hatena.ne.jp/keyword/DHCP">DHCP</a>の設定</h4>
        <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/VPN">VPN</a>クライアント側に割り当てる<a class="keyword" href="http://d.hatena.ne.jp/keyword/IP%A5%A2%A5%C9%A5%EC%A5%B9">IPアドレス</a>のレンジを決めてあげます。<br>
    今回は最小限構成で実現するため、ローカルの<a class="keyword" href="http://d.hatena.ne.jp/keyword/IP%A5%A2%A5%C9%A5%EC%A5%B9">IPアドレス</a>は同一セグメントとしました。<br>
    192.168.33.0/24を利用セグメントとした。<br>
    また、サーバ側に割り当てているIPとバッティングしないように192.168.33.20以降を<a class="keyword" href="http://d.hatena.ne.jp/keyword/DHCP">DHCP</a>のIPレンジとした。</p>
    

    ##まずは有効化。これをやらないと「PPPサーバーとの接続が確立ができません」ってなってハマります。 VPN Server/example> SecureNatEnable

    VPN Server/DEFAULT>DhcpSet DhcpSet コマンド - SecureNAT 機能の仮想 DHCP サーバー機能の設定の変更 配布するアドレス帯の開始点: 192.168.33.20 配布するアドレス帯の終了点: 192.168.33.50 サブネットマスク: 255.255.255.0 リース期限 (秒): 7200 デフォルトゲートウェイ (未設定可): DNS サーバー 1 (未設定可): DNS サーバー 2 (未設定可): ドメイン名: ログの保存 (yes / no): yes

    </div>
    </div>
    <div class="section">
        <h2>5. <a class="keyword" href="http://d.hatena.ne.jp/keyword/VPN">VPN</a>接続試験</h2>
        <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/VPN">VPN</a>の設定から以下のように設定をする。<br>
    アカウントの部分は「ユーザ名@仮想Hub名」にすること。<br>
    <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/mosuke5/20141207/20141207212531.jpg" alt="f:id:mosuke5:20141207212531j:plain" title="f:id:mosuke5:20141207212531j:plain" class="hatena-fotolife" itemprop="image"></span></p>
    <br>
    <p>接続すると、ローカルのIPが割り当てられていることを確認。<br>
    途中で切れているが192.168.33.21が割り当てられました。<br>
    <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/mosuke5/20141207/20141207212546.jpg" alt="f:id:mosuke5:20141207212546j:plain" title="f:id:mosuke5:20141207212546j:plain" class="hatena-fotolife" itemprop="image"></span></p>
    <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/VPN">VPN</a>につないだ状態でブラウザから192.168.33.10にアクセスすると”It works!!!”。<br>
    <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/m/mosuke5/20141207/20141207212556.jpg" alt="f:id:mosuke5:20141207212556j:plain" title="f:id:mosuke5:20141207212556j:plain" class="hatena-fotolife" itemprop="image"></span><br>
    </p>
    
    </div>
    <div class="section">
        <h2>6 最後に</h2>
        <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/VPN">VPN</a>の構築そのものはなんとかできるが、やはり奥は深い。<br>
    挙動がまだ不安定な部分もあるので、きちんと仕組みを理解していくことと、<br>
    今回は<a class="keyword" href="http://d.hatena.ne.jp/keyword/VPN">VPN</a>クライアント側とアクセス先サーバを同一セグメントとしたので、L3の設定などをして違うセグメントにもアクセスできるようにしていきたい。</p>
    
    </div>
    </body>
    
    記事の内容に関連した相談、仕事依頼したい New

    記事の内容やクラウドネイティブ技術に関する相談、仕事依頼を開始しました。
    仕事依頼、相談をしてみる

    フィードバック

    本記事に対して、フィードバックあればこちらのフォームからご記入ください。
    記事の内容にフィードバックしてみる

    このエントリーをはてなブックマークに追加