日別アーカイブ: 2014/04/02

FreeBSD で VPN サーバ環境

以前より自室に BSD で常時運転サーバを立てていたものの,外からアクセスするのにサービス毎に firewall に穴を開けるか,Web で操作するかをしてたのですが,いい加減面倒になってきたところで何か手段がないか探してたタイミングで SoftEther が Open 化されたということで(VPNとは何かを頭に叩き込んで)導入してみました.

SoftEther のインストール

SoftEther のビルドは実に簡単で,download ページGitHub からソースコードを取得して,configure,gmake install で終わりです.実に簡単.iconv が無くて make が通らない場合は,Makefile に -I/usr/local/include とか -L/usr/local/lib とかつければよいです.

インストール先が /usr/vpnserver とか /usr/vpnclient に設定されているのでやや違和感があります./usr/local/vpn/vpnserver 辺りに直しています.

自室サーバでは VPN サーバ機能だけを root で起動し,自室内 LAN とはローカルブリッジで接続することで外にいる端末をローカル LAN に接続できるようになります(ローカルブリッジなどの設定は後述).

# vpnserver start

VPN サーバの設定

室内 LAN は ルータ・終端装置(ONU)を介して WAN と接続していて,ルータ内はローカル LAN を構成して NAT で運用されているものとします.VPN サーバの FreeBSD はローカルLAN内に接続しています.

基本設定

VPN サーバの設定は vpncmd でも出来ますが,LAN 内のWindows PC から「サーバ管理マネージャ」をインストールすれば GUI で設定できます.

  • 新しい接続設定→ホスト名(サーバIP),ポート番号(どれか一つ),サーバ管理モード,管理パスワード
  • 接続
  • 仮想HUBの作成→仮想HUB名,パスワード
  • 仮想HUBの管理→ユーザの管理→新規作成→ユーザ名,パスワード認証,パスワード

ローカルブリッジの設定

ローカルブリッジとは,VPN を通して外部の仮想ネットワークと内部の物理ネットワークを接続する手段です.これを使えば仮想ネットワークをLAN内PCに参加させる手間が省けます.

  • ローカルブリッジ設定→仮想HUB(先に作成した仮想HUB名),LANカード(I/F名)→ローカルブリッジの作成

なお,「仮想 HUB とローカルブリッジを組んだ」 I/F は VPN からアクセスできないという OS 上の制約があるようです.そのため,VPN サーバがローカル LAN 内にある場合でも I/F は2つ用意しないといけないようです.自室では VPN 専用に USB-Ethernet 変換で I/F を増設しました.

L2TPの設定 

最近はスマートフォンが VPN 経由のリモートアクセス(L2TP)に対応しているので,利用できるようにその設定を行います.

  • IPsec/L2TP 設定→L2TPサーバー機能を有効にする,IPsec事前共有鍵(任意文字列)

ファイアウォールの設定

室内 LAN はルータを介して WAN(ONU) に接続しているので,外部から VPN サーバにアクセスするポート制御が必要です.構成によりますが,以下のポートを IP マスカレードに設定する必要があります.

  • UDP port 500 (IKE)
  • UDP port 4500 (IPSec NAT-Traversal)
  • UDP port 1701 (L2TP)
  • ESP port (Encapsulated Security Payload) … VPNスルー機能

VPN クライアントの設定

クライアントは OS に合わせて VPN クライアントを用意し,仮想 LAN カードを作成して VPN サーバ(WAN から見える IP または FQDN) の 仮想 HUB,ユーザ名,パスワードを設定して接続します.接続が完了すると ローカル LAN で DHCP が動いていればその IP アドレスが仮想 LAN カードに設定されます.

iPhone や Android の場合は,VPN メニューから VPN サーバ(WAN から見える IP または FQDN),ユーザ名(@仮想HUB名),パスワード,シークレット文字列(IPsec事前共有鍵で設定した文字列) を設定して接続します.

これで,外にいながら自室のローカル LAN と同じ条件で端末を扱うことができます(たぶん).速度は圧縮などの技術でかなり使えるレベルになってきています(とはいえペイロードにカプセル化したパケット載せてるんだから過剰に期待するのも酷というもの…).