グローバル IP がたくさんある環境への VPN 構築 (UT-VPN)

世の中はGW(ゴールデンウィーク)で充実してるみたいですが、暇です。
ということで、趣味の中から一つ出してみます。


 グローバル IP だけで構成されたネットワークに VPN して samba 接続したい

一応僕は、会社の外とかで活動することが多いので、VPN が大好きです。特に、L2VPN が大好きです。samba でファイル共有できますからね。

良くみかける解説記事なんかだと、次のようなネットワーク構成が紹介されたりしています。

キャプチャ

良く見かけるネットワーク構成図

良く見かけるネットワーク構成図

この場合、NIC2 にはグローバルIPが振られていて、NIC1 は NAT で構成されたローカル IP が振られているかと思います。こういう構成は、規模の小さな会社や自宅にちょっとしたサーバマシンを設置している場合によく発生するケースなので、紹介記事も多いです。

ただ、僕が今回接続したいのは、こんな感じです。

今回の対象ネットワーク構成

今回の対象ネットワーク構成

マシンの置いてあるネットワークが、いまどき珍しくグローバル IP を全てのホストに振ってくれます。DNS も完備です。今回は、このネットワークに設置されているホストに「samba」で接続したいのです。


 VPN 実装の選択

ちょっと話がそれて、VPN の選択ですが、僕は UT-VPN (今は、softether に変わってるかもです。)が好きです。ぱっと使えるものとしては、

  • PPTP/L2TP 実装
  • OpenVPN
  • UT-VPN (Softether/Packetix)

などが挙げられます。昔は、PPTP を使っていました。FreeBSD だと mpd という実装がありました。PPTP は iPhone とかでも搭載されているくらいメジャーだし、簡易なプロトコルだったので VPN を張ったとしても結構高速な通信が可能でした。ただし、PPTP はセキュリティ問題が発生したはずなので、もう使いたくありません。

OpenVPN はオープンソースな VPN 実装で、色々な暗号化も使えたり高機能です。一時期これを利用しようとしたのですが、速度が出ません。真面目に実装されすぎているくせに多機能すぎて遅いのですよね。

UT-VPN/Softether は、筑波大学出身の登大遊さんが作成された VPN ソフトウェアです。専用クライアントが必要という部分が多少不便ですが、通信は高速です。肝は、TCP の fairness なんか無視した複数のセッションの利用です。ネットワーク関係の学会では多少叩かれたこともあるそうですが、利用者からしたら関係ないですよね☆

ということで、僕は UT-VPN/Softether を利用したいと思います。


samba 接続時の問題点

UT-VPN 固有ではないと思うのですが、上記構成の場合、VPN サーバと samba サーバが同居していると、アクセスできなかったりします。VPN サーバに対してはアクセスできないのですよね。詳しくは以下を参照してください。(ローカルブリッジ接続機能

Linux オペレーティングシステム内部での制限事項により、VPN 側 (仮想 HUB 側) からローカルブリッジしている LAN カードに割り当てられる IP アドレスに対して通信を行うことはできません。この制限は PacketiX VPN が原因ではなく、Linux の内部構造に原因があります。

これでは使えないっす!VPNサーバ上では余計な他のサービスを動かすな、ってことなんすね!でも僕はグローバルネットワーク内のホストに samba で接続したいんです。とはいえ、物理マシンを大量に設置するのも面倒です。

ということで、しゃーないので流行の仮想化をして、VPN 専用仮想マシンを作成することにします。


 ネットワーク構成

苦肉の策ですが、以下の図のような構成にしてやろうと思います。

最終的なネットワーク構成

最終的なネットワーク構成

こうしておくと、仮想ホストを専用 VPN サーバにできるので、物理ホスト上で動作する samba にもアクセスできるはずです。

物理サーバのホストは、FreeBSD です。FreeBSD で現状安定して稼働しそうな仮想マシンは、VirtualBox な気がしています。噂では KVM もかなーーーり安定しているらしいのですが、もし他の方で安定して動作しているようなら教えてください。

VirtualBox 上にも FreeBSD を入れます。一点気を付けなければならないのは、VirtualBox で作成する VM の仮想 NIC は promiscuous mode で作成しなければならないところです。VirtualBox は XML で VM のマシン構成を記述するのですが、XML ではこんな感じで書かれているべきです。

<Adapter slot="0" enabled="true" MACAddress="XXXXXXXXX" \
cable="true" speed="0" promiscuousModePolicy="AllowAll" \
type="82540EM">

すでに VM が存在している場合は、以下のコマンドで変更できます。

% VBoxManage modifyvm <uuid|name> --nicpromisc<1-N> allow-all

後は、仮想マシン上に bridge として UT-VPN サーバを構築していけばOKです。

FreeBSD で UT-VPN をコンパイルする際は、Makefile の書き換えが必要だったりしますが、それは別のサイトを調べてみてください。(どうせ少し古いソフトウェアなので、新しく書く必要はないですよね)

それと、多分他のサイトにも書いてあると思いますが、ip forward が行われるように mib 情報の書き換えも忘れがちなので変更しておいた方が良いです。

# sysctl -w net.inet.ip.forwarding=1

 

最後の方で、多少説明をはしょっているのですが、もし知りたいものがある人がいれば、コメントなどいただければ追記いたします。

 

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

榊原 寛

1980 年埼玉県生まれ。BPS COO。慶應義塾志木高校からそのまま慶應義塾大学湘南藤沢キャンパスへ。コンピュータの勉強がしたかったので、学部1年より徳田英幸研究室へ。無線ネットワークに関する研究、ユビキタスネットワークに関する研究、センサネットワークに関する研究、仮想ネットワークに関する研究等を行い、2010年慶應義塾大学政策・メディア研究科後記博士課程単位取得退学。 IPA 未踏事業 2006年度、2007年度開発責任者。日本学術振興会特別研究員(DC2) 2008年度。技術が実際に役に立つ現場に行きたく、BPSへ。BPSでは、主に電子書籍に関する事業に従事。マンガEPUBビューアや WebKit を利用した EPUB3 の日本語縦書きビューアプロジェクトを推進。全国中小企業団体中央会によるグローバル技術連携・創業支援補助金(創業枠)及び東京都中小企業振興公社「新製品・新技術助成事業 助成金」を MangaReborn 事業にて申請・獲得。電子書籍に関する次なるソリューションについて日々試行錯誤。慶應義塾大学環境情報学部非常勤講師兼任中。慶應義塾大学 SFC 研究所所員。W3C AC Representative。 http://techracho/bpsinc.jp/skk/ , http://www.ht.sfc.keio.ac.jp/~skk/

榊原 寛の書いた記事

開発
W3C/IDPF の統合に関して

2016年05月15日

週刊Railsウォッチ

インフラ

Rubyスタイルガイドを読む

BigBinary記事より

ActiveSupport探訪シリーズ