|
2014/06/18 (水) SSHトンネリングとVPN
家に仕事を持ち帰ったときに感じる一番の不便は、論文が取得できない、研究室ファイルサーバー内の資料にアクセスできない、ということです。前者に関して他所の大学ではVPN接続環境が結構整っており、大学のVPNサーバーにPPTPやIPSecでアクセスして大学リソースにアクセス・・・なんてことが結構当たり前にできるみたいですが、うちにはありません。で、ずっと諦めていたのですが(というかVPNで何ができるかを最近まで知らなかったのですが)、家にいながら研究室LANに接続できる便利さとちょっとした興味からやってみました。
まずは外部から学内への接続手段の確保です。セキュリティーの観点から、外から学内への通信は全て遮断されています。Webサーバーを自前で立てるなど、学外へのサービスが必要な場合だけ申請という形で特定のポートを開けてもらうシステムです。ただ、昨今の大学からの情報漏えい問題があり、なかなか通らないみたいですが(;´Д`)。
いや、わかります。「ポート」なんて概念も知らずに、グローバルアドレスをPCに割り当てて仕事してる先生がいっぱいいますから( ゚Д゚)。このようなアクセス制限を設けていない大学もあるみたいで、昨年の複合機からの情報漏えいなんて愚かな事件が起こるんですよ。だから、むやみやたらにポートを解放してセキュリティホールを作りたくないっていう管理者の言い分はよくわかります。
実はひとつだけ代替手段が用意されていて、それがSSHゲートウェイによるポート転送です。工学研究科の管理しているSSHゲートウェイにいったんアクセスして、そこから学内のサーバーにポートフォワードをかけることで、学外から学内のPCに間接的にアクセスできるわけです。しかしながらSSHはTCP限定。
多くのVPNは通信の素早さから、UDPをメインに使用します。PPTPはTCP1723ですが、同時にGREという特殊なプロトコルも必要です。ついでにセキュリティ的に時代遅れぎみ。L2TP/IPSecは鍵交換にUDP500を使用し、通信にESPという特殊プロトコルを使用します。ただ、NAT-Traversalという機能でESPをUDPでカプセル化し、UDP4500を通信に使用するケースもあるとか。これは安全ですがSSHで使えません。Microsoft独自のSSTPというのは、通信にHTTPS(TCP443)を使用するためかなり接続率がいいというのが売りですが、SSTPサーバーを運用するには公開鍵方式の認証が必要で、誰が年間数万円の証明書代を払うんだっていう話になります。ついでにサーバー認証に厳重な気づかいをする以上、ホスト名=サーバー名でないとつながらない。SSH転送なんかとセットで使用できない。そうですね、VPNサーバーって、「知らないユーザーに接続されること」よりもまず「意図しないサーバーに接続してしまうこと」をブロックする仕組みになってるって知りました。ユーザーが「公開鍵」を、サーバーが「秘密鍵」を持ち、ユーザーが乱数を公開鍵によって暗号化し、サーバーがそれを「秘密鍵」で解き、送り返す。ユーザーはその答えが元の乱数とあっているかどうかで、通信しているサーバーが正しいものであるかどうかを判断する、っていうやつです。
結局残ったのが、筑波大学ベンチャーのSoftEther VPN。非常に高機能のVPNサーバーとクライアントの組み合わせです。これだとSSL暗号化通信がHTTPSで使用されるTCP443ポートで使用できる、公開鍵認証が必須ではない、仮想HUBを介して接続先PCと同じネットワークにブリッジ接続できる(接続先のDHCPよりアドレスをもらえる)なんていうメリットがあり決定。研究室のゲートウェイにHyper-V仮想サーバーをインストールし、そこにSoftEhterを入れてゲートウェイからTCP443をポートフォワーディングです。続いて研究科のサーバー設定ページで、SSH接続用の公開鍵を登録します。公開鍵はPuttyによって作成、秘密鍵は自宅に持ち帰ります。
自宅でPuttyに大学のSSHゲートウェイサーバーを登録し、秘密鍵を読み込ませます。さらにTunnel設定をし、大学のSSHゲートから研究室のゲートウェイにTCP443をフォワードする設定にします。これで、SoftEtherVPNからPuttyが作ったローカル上のSSHの入口ポートに接続すれば、それが自宅PC→大学のSSHゲート→研究室のゲートウェイ→仮想VPNサーバーの順に転送されるというもの。
つ、つながった!!でもまだ色々ありました。接続が安定しない。Route printコマンドで確認すると、どうやらルーティングテーブルが書き変わり、SoftEtherの仮想ネットワークアダプタと物理アダプタの両方がデフォルトゲート(0.0.0.0)が割り当てられてる模様。今回は大学を通じてネットアクセスしたいので、SoftEtherのアダプタのMetricを物理アダプタのメトリックより小さくします(自動にせず両方とも数字で指定します)。また、そのままだとSoftEhterがVPN接続を確立した時点から、PuttyのSSHトンネルもVPN経由でゲートウェイに接続しようとします。これを防ぐために、SSHゲートウェイまでのアクセスは物理アダプタを経由して行うようにスタティックルーティングを施します(Route add -p コマンドで、SSHゲートウェイへの接続には自宅ルーターを経由するように設定します)。
ここまでしてやっと安定なVPN接続が得られました。とても他人には勧められない。「外部からの接続はSSHゲートウェイを使ってください」なんてことになってるけど、ポートもプロトコルもルーティングも公開鍵暗号方式も全部理解してないと無理じゃん(笑)。工学研究科の一体どのくらいの人がこの接続開通させることができるんだろうか(~_~;)
|