グローバルIPアドレスがない環境でのVPN構築

SoftEther VPN Serverを使ってVPNを構築する方法を説明した記事を公開しております。

記事内の前提条件にも記載があります通り、グローバルIPアドレスが割り当てられていてポートの開放が可能な環境を想定した記事になっています。

しかし、上記に該当しない環境でもSoftEtherの機能を使えばVPNを構築できる場合がありますので紹介したいと思います。

前述の記事をご覧になりたい方はこちらからどうぞ。

関連記事

「外出先から自宅のLAN内にあるNASのデータを取り出したい」と思ったことはありませんか。 VPNを構築することでそれが可能になります。 構築にあたってはいくつかクリアしなくてはならない条件がありますが、意外と簡単に構築できますので挑戦[…]

関連記事

SoftEther VPN Server(以下、SoftEtherと表記)を使ってVPNを構築してみます。 SoftEtherのインストールについてはこちらの記事をご覧ください。 [sitecard subtitle=関連記事 […]

想定している環境

いわゆる「マンションタイプ」のネット回線です。
LAN内のルーターのWAN側にプライベートIPアドレスが割り当てられている場合はこれに該当するかと思います。
(うちはこのタイプです)

用意するもの

  • グローバルIPアドレスが割り当てられたVPS
  • LAN内で常時起動させておけるPC
  • SoftEtherの管理ツールを動かすためのWindows機

概要

結局のところ、グローバルIPアドレスは必須です。
大抵のVPSサービスにはグローバルIPアドレスがついてくるのでそれを使ってしまおうというわけです。

また、外からLAN内に入ってこられないのなら予めLAN内から経路を作っておきます。
そのために常時起動させておくPCが必要になります。
その常時起動PCから仮想的なLANケーブルをVPSに繋ぐイメージです。
これによりVPSで動いているVPN Serverと常時起動PCは同一LAN上に存在することになり、そのLAN上に存在する他のPCやNASとも繋がることになります。

構築手順(VPS側)

「SoftEther VPN Server」をインストールして設定を行います。
詳細な手順は「SoftEther VPN Serverをインストールしてみた」と「SoftEther VPN ServerによるVPNの構築」を参考にしてください。

  1. 管理ツールでVPN Serverに接続し、「仮想HUBの管理」をクリックします。
    仮想HUBの管理
  2. 「ユーザーの管理」をクリックします。
    ユーザーの管理
  3. 「新規作成」をクリックして「ユーザー名」と「パスワード」を入力して常時起動PCをVPSで動いているVPN Serverに接続する際に使用するユーザーを作成します。
    ユーザーの作成

以上でVPS側の設定は完了です。
上記記事との相違点はVPNに接続する際に使用するユーザーとは別に「VPSで動いているVPN Serverに接続するユーザー」が存在することです。

構築手順(常時起動PC側)

今回は常時起動PCとして「Raspberry Pi 3 Model B」を使用しました。

  1. SoftEtherダウンロードセンター」から最新のインストール用パッケージファイルをダウンロードします。
    コンポーネントは「SoftEther VPN Bridge」を選択し、プラットフォームとCPUは常時起動PCに合ったものを選択します。

    ダウンロード
  2. インストールから動作チェックまで行います。
    SoftEther VPN Serverをインストールしてみた」と同様の作業になります。
    「vpnserver」が「vpnbridge」に変わる点だけご注意ください。
  3. 「すべてのチェックに合格しました」と表示されたらスクリプトの作成を行います。
    init.dを使うように設定していきます。
    /etc/init.dディレクトリの中に「vpnbridge」というファイルを下記の内容で作成します。
    尚、このファイルには実行属性を付与してください。

    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides: vpnbridge
    # Required-Start: $local_fs $network
    # Required-Stop: $local_fs $network
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Description: SoftEther VPN Bridge
    ### END INIT INFO
    
    DAEMON=/usr/local/vpnbridge/vpnbridge
    LOCK=/var/lock/vpnbridge
    
    vpn_start() {
    ${DAEMON} start
    # sleep 2
    # tap=`/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}'` tap=`/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}'`
    # brctl addif br0 ${tap}
    }
    
    vpn_stop() {
    ${DAEMON} stop
    }
    
    test -x ${DAEMON} || exit 0
    
    case "$1" in
    start)
    vpn_start
    touch ${LOCK}
    ;;
    stop)
    vpn_stop
    rm ${LOCK}
    ;;
    restart)
    vpn_stop
    sleep 3
    vpn_start
    ;;
    *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
    esac
    
    exit 0
  4. vpnbridgeサービスを起動します。
    sudo systemctl daemon-reload
    sudo systemctl start vpnbridge
  5. 動作状況を確認します。
    systemctl status vpnbridge
  6. 動作に問題ないようだったらサーバー起動時にvpnbridgeサービスも起動するように設定します。
    sudo systemctl enable vpnbridge
  7. 管理ツールで常時起動PCのVPN Bridgeに接続します。
    SoftEther VPN ServerによるVPNの構築」の10番まで進めます。
  8. 「仮想HUBの管理」をクリックします。
    仮想HUBの管理
  9. 「カスケード接続の管理」をクリックします。
    カスケード接続の管理
  10. 「新規作成」をクリックします。
    新規作成
  11. 「接続設定名」には管理ツール上で判別するための名称、「ホスト名」にはVPSのグローバルIPアドレス(もしくはホスト名)、ポート番号には「5555」、仮想HUB名は前述のVPSで動いているVPN Serverの仮想HUB名(ホスト名を入力した段階で自動的に出てくると思います)を入力します。
    「ユーザー名」と「パスワード」には構築手順(VPS側)の3番で作成したユーザーの情報を入力します。

    新しい接続設定
  12. 「オンライン」をクリックします。
    オンライン

以上で完了です。

接続してみる

SoftEther VPN ServerによるVPNの構築」の「各種デバイスでの設定」で接続できると思います。
もしうまく接続できない場合は常時起動PCで動いているVPN BridgeのSecure NAT機能(仮想NAT)を有効にしてみてください。


まとめ

いかがでしたでしょうか。
SoftEtherのおかげで様々な制限がある環境でも柔軟にVPNが構築できることが分かっていただけたかと思います。

この記事がグローバルIPアドレスの付与されない環境でのVPN構築の参考になれば幸いです。

VPSの通信量にはご注意ください。
従量課金になっている場合は想定外の請求額になる可能性があります。
また、常時起動PCの発熱にもご注意ください。