2014年2月2日日曜日

SoftEther VPNでLinux上にVPNサーバ立てて遠隔地と手元のMacで画面共有

Mac OS X にはデフォルトで画面共有の機能がついていて、これがなかなかに使いやすくていい。この画面共有は同じネットワーク内にある Mac にはアカウント名とパスワードさえ分かれば接続することができる。

一方、遠隔地にある Mac に対しては同一の Apple ID を設定して「どこでも My Mac」機能を利用すれば接続はできるけれども、ちょっと事情があって同一の Apple ID を設定していない Mac にも画面共有で接続したかった。

で、以前は LogMeIn の Free 版を使っていたんだけど、なんと有料化されるとのこと。(参照: リモートアクセス「LogMeIn」無料版が突如終了、完全有料制に - ITmedia ニュース)うーむ、これは困った。

実はこの件とは別に自分用にパブリッククラウドサービスを契約してて、仮想サーバを立てて CentOS を入れて運用している。そこにはグローバルIPも割り当ててある。じゃあそれを VPN サーバにしてしまおうと思いついた。それなら新たに費用が発生することもないし。

てことでフリーの VPN サーバを探したら、SoftEther VPN ってのがあるそうで。OpenVPN よりも速いという謳い文句つきだ。これをインストールして使ってみることにした。

SoftEther VPN  Server のダウンロード

SoftEther VPN  のダウンロードページから VPS サーバをダウンロード。コンポーネントは「SoftEther VPN  Server」を選ぶ。

SoftEther VPN  Server のインストール

インストール方法は公式ドキュメントの「7.3 Linux へのインストールと初期設定 - SoftEther VPN プロジェクト」に従えば OK 。

管理者パスワードの設定

管理者パスワードを設定します。サーバ付属の vpncmd で「ServerPasswordSet」コマンドを実行する。マニュアル通りにインストールしたのなら vpncmd のパスは  /usr/local/vpnserver/vpncmd になる。

仮想ハブの作成

仮想ハブを作成するか、最初に「DEFAULT」という名前の仮想ハブができているので、それも使える。今回は「DEFAULT」を使うことにするので、新たに作成はしない。

ユーザの作成

仮想ハブにユーザを作成する。vpncmd で「Hub DEFAULT」コマンドを実行して「DEFAULT」仮想ハブを管理対象とした後「UserCreate」コマンドを実行する。

IPSec 機能の有効化

L2TP over IPsec を使えるようにする。vpncmd で「IPSecEnable」コマンドを実行する。有効にするのは L2TP over IPsec だけでいい(暗号化なしの L2TP と EtherIP / L2TPv3 over IPSec はいらない)。

SecureNAT 機能の有効化

SecureNAT 機能は、簡易 DHCP サーバ機能と仮想 NAT 機能の2つからなる機能。vpncmd で「SecureNatEnable」コマンドを実行する。なお、このコマンド実行後に簡易 DHCP サーバ機能と仮想 NAT 機能は両方とも自動的に有効化される。

簡易 DHCP サーバ機能の設定

SecureNAT 機能のうち、簡易 DHCP サーバ機能を使うので設定を確認する。今回はデフォルトのまま使うので設定変更しないけれど、確認はしておく。vpncmd で「DhcpGet」コマンドを実行する。デフォルトでは 192.168.30.10〜192.168.30.200 の範囲のIPアドレスが配布される設定なっている。

仮想 NAT 機能の無効化

今回は仮想 NAT 機能は使わないので無効化しておく。vpncmd で「NatDisable」コマンドを実行する。

VPN サーバのファイアウォールで必要なポートを開ける

Mac 側からは L2TP over IPSec で接続するので、UDP 500 番と UDP 4500 番のポートの通信が VPN サーバのファイアウォールを通過できるようにしておく。

Mac の VPN 接続設定及び接続実行

ここまでできたら、Mac から VPN に接続できる。この操作は接続元である手元の Mac と接続したい遠隔地の Mac の両方で行う必要がある。もちろん遠隔地の Mac は VPN に接続したままの状態にしておく。公式ドキュメントの「Mac OS X からの接続方法 - SoftEther VPN プロジェクト」に従えば OK 。
なお公式ドキュメントでは「すべてのトラフィックを VPN 接続経由で送信」オプションにチェックを入れるよう書いてあるが、VPN 経由でインターネットに出る経路がない場合はこれにチェックを入れるとインターネットにつながらなくなる。画面共有が用途の場合は画面共有したいマシンとしか VPN 経由で通信しないのでチェックを入れなくてもいいだろう。
ちなみに遠隔地の Mac で VPN 接続が切れたら自動的に再接続させる方法はこちら

DHCP テーブルを確認

ここからは、遠隔地の Mac へ手元の Mac から接続する時の手順になる。あらかじめ両方の Mac が VPN に接続されていること。まず VPN サーバにログインして DHCP テーブルを確認する。vpncmd で「DhcpTable」コマンドを実行する。割り当てられた IP アドレスとクライアントホスト名の対応が分かるので、接続したい遠隔地の Mac に割り当てられた IP を把握しておく。

画面共有を実行

接続元の Mac で Finder を起動して、メニューからの「移動>サーバへ接続...」を選択する。「サーバへ接続」ダイアログが表示されたら「サーバアドレス」欄に「vnc://(遠隔地の Mac の IP アドレス)」を入力して「接続」ボタンをクリック。

これで接続できるはず!僕の環境では、LogMeIn を使っていた時よりもはるかに快適に画面をリモートから操作できた。予想以上に反応速度が改善されてびっくり。スクロールとかもスムーズにできるし。

「グローバル IP の付与された Linux サーバを持っいてなおかつ root  権限を使える」という条件があるけれども、もし当てはまる方はぜ SoftEther VPN による VPN サーバ構築をぜひ試してみては。

※2014/02/03 VPNサーバのファイアウォールのポート開けについて追記。
※2014/02/05 VPNサーバの IPSec 機能有効化について追記。
※2014/02/07 MacのVPN接続設定部分に追記。

※この記事について指摘・意見・提案・感想などありましたら下のコメント欄にどうそ。

0 件のコメント:

コメントを投稿