2013年05月01日

n2n - hamachiライクな Layer-2, P2P VPN ユーティリティでVPNを構築する

n2n は ntop ユーティリティで有名なで有名な ntopチーム が開発しており、レイヤー2で動作するPear-to-Pear型の無料VPNソフトウェアです。n2n の構成・方式は LogMeIn社の提供するHamachiに似ておりインターネット上の仲介・ルーティング・サーバーを経由する事でファイヤーウォール内の端末と仮想ネットワークを作成してくれます。

n2n vpn application

古いバージョンのLinux OSを利用しており旧来のHamachiが動かない、最新版がビルド出来なくて困っている何て方にもお勧めです。


n2n によるLayer 2, P2P VPNの構成・概要


n2nではインターネット上でグローバルIPを持ち、クライアント同士のトラフィックを仲介/ルーティングを行うSuper Nodeと呼ばれるサーバーとこのVPNを利用して通信を行うEdge Nodeと呼ばれるクライアントで構成されます。

n2n vpn network overview

Edge NodeではTUN/TAPと呼ばれる仮想ネットワーク・ドライバを利用することで、まるでローカル・ネットワークのようにピアと通信することが出来ます。 尚、n2nではTUNを使ってL2(ネットワーク層)レベルでネットワークの仮想化を行なっており、殆どの通信データをVPN上でやり取りすることが出来ます。

n2n - p2p network

ファイヤーウォールの内側にいるにも関わらずクライアント同士で直接通信出来る(ように見える・感じる)のは、仮想化されたネットワークの実体部分は常にSuper Nodeを経由してトラフィックをやり取りしているからなんですね。

また、n2nは非常にシンプルで、比較的古いバージョンの Linux OS(Red Hat Linux 4.x以前)でも動作するのも特徴です。

もちろん、Linux版だけでなく、Windows、Mac OS版バイナリもありますよ。

n2n


n2n のインストール - Linux, Windows


まずは、Linuxへのインストール方法から。

次のようにsvnコマンドを使ってn2nファイルプロジェクト一式をダウンロードします。

$ svn co https://svn.ntop.org/svn/ntop/trunk/n2n

この中を見ると n2n_v1, n2n_v2 という2つのバージョンがあります。

$ cd n2n/
n2n $ ls
n2n_v1  n2n_v2

v1とv2の大きな違いは通信の暗号化。暗号化をサポートしているのはバージョン2なんですが、Windows版バイナリはバージョン1しかサポートしておらず、各Edge Node, Super Node間ではバージョンを合わせる必要があるのでどちらを使うかよく考えて決めましょう。

今回はバージョン2を使って make, make install します。

n2n $ cd n2n_v2
n2n/n2n_v2 $ make
n2n/n2n_v2 $ sudo make install
echo "MANDIR=/usr/share/man"
MANDIR=/usr/share/man
mkdir -p /usr/sbin /usr/share/man/man1 /usr/share/man/man7 /usr/share/man/man8
install -m755 supernode /usr/sbin/
install -m755 edge /usr/sbin/
install -m644 edge.8.gz /usr/share/man/man8/
install -m644 supernode.1.gz /usr/share/man/man1/
install -m644 n2n_v2.7.gz /usr/share/man/man7/


これでおしまい。 edge, supernodeコマンドが使えるようになっているはずです。
(n2n を利用する全てのホストにインストールしましょう)

$ edge -h
Welcome to n2n v.2.1.0 for x86_64

$ supernode -h
supernode usage
-l <lport>	Set UDP main listen port to <lport>
-f        	Run in foreground.
-v        	Increase verbosity. Can be used multiple times.
-h        	This help message.

Windowsの場合は、もう少し複雑です。 まずTUN/TAPドライバからインストールする必要があるのですが、最も簡単なのはOpenVPNをインストールする方法。

Downloads

こちらのページにあるWindows版バイナリをダウンロード・実行します。

download - Open VPN

インストール時に TAP Virtual Ethernet Adapter だけ選択しておけばOK。

install - Open VPN


続いて、こちらから n2nWin32 本体のバイナリをダウンロード。

Index of /n2nWin32

n2nWin32 のインストールが終わればWindowsでの準備もおしまい。

install - n2nWin32


インストール手順は割愛しますがMac OS版もありますよ。


n2n によるVPNの作成・接続


まずは、トラフィックの仲介・ルーティングを行うSuper Nodeを起動しましょう。

$ sudo supernode -l 9898

-lオプションでポート番号(9898)を指定しています。 これでバック・グラウンドでSuper Nodeが起動します(フォア・グラウンド出来道する場合は-fオプション)。

Super Nodeは全てのクライアント(Edge Node)から接続可能、つまりグローバルIPアドレスを持つサーバーである事に注意して下さい。


続いて、edgeコマンドを使ってクライアント(Edge Node)を起動します。 次の例ではLinux上でEdge Nodeを起動しています。

pear1 $ sudo edge -a 10.1.2.1 -c vpnroom1 -k encryptme -l x.x.x.x:9898

10.1.2.1はクライアントの利用するIPアドレス。 DHCPがあれば自動取得も出来ますがここでは手動で指定しています。 -cオプションはコミュニティ名でネットワーク名と理解すれば良いかもしれません。 -kオプションで指定する文字列はトラフィックの暗号化に利用する暗号キーです。 -lオプションではSuper NodeのIPアドレス(x.x.x.x)とポート番号を指定します。

僕はUbuntuを使っていますが、edge0というインタフェースが作成されました。

pear1 $ ifconfig 
edge0     Link encap:イーサネット  ハードウェアアドレス 8e:36:ed:48:ce:7a  
          inetアドレス:10.1.2.1  ブロードキャスト:10.1.2.255  マスク:255.255.255.0
          inet6アドレス: fe80::8c36:edff:fe48:ce7a/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1400  メトリック:1
          RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:45 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:500 
          RXバイト:0 (0.0 B)  TXバイト:9243 (9.2 KB)

さあ、もう一つのピア側でもedgeを起動しましょう。

pear2 $ sudo edge -a 10.1.2.2 -c vpnroom1 -k encryptme -l x.x.x.x:9898


2つのEdge node(10.1.2.1, 10.1.2.2)が仮想ネットワークに参加しました。 pingで疎通を確認してみると・・・。

pear2 $ ping 10.1.2.1
PING 10.1.2.1 (10.1.2.1) 56(84) bytes of data.
64 bytes from 10.1.2.1: icmp_seq=0 ttl=64 time=19.6 ms
64 bytes from 10.1.2.1: icmp_seq=1 ttl=64 time=19.0 ms

--- 10.1.2.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 19.075/19.358/19.641/0.283 ms, pipe 2

無事繋がりましたね!


これで殆ど全てのアプリケーション、プロトコルが n2n VPN 経由で通信出来ます。

Windowsの場合はコマンド・プロンプトを使って、n2nをインストールしたフォルダに移動後、edge.exeを使ってEdge Nodeを起動します。

C:\>cd C:\Program Files\n2n-Win32\bin
C:\Program Files\n2n-Win32\bin>edge.exe -a 10.1.2.3 -c vpnroom1 -k encryptme -l x.x.x.x:9898
10.1.2.3
01/May/2013 20:07:36 [edge.c:1133] Using supernode x.x.x.x:9898
Open device [name={8445B82F-C113-4211-A410-E560D833C036}][ip=10.1.2.3]
[ifName=ローカル エリア接続 4][MTU=1400][mac=:84:45:B8:2F]
Setting ローカル エリア接続 4 device address...OK

Device ローカル エリア接続 4 set to 10.1.2.3/255.255.255.0
01/May/2013 20:07:45 [     edge.c: 670] Registering with supernode
01/May/2013 20:07:45 [     edge.c:1364]
01/May/2013 20:07:45 [     edge.c:1365] Ready

以前に紹介した iodine は古いLinux OSでは動かなかったので嬉しいなあ。

VPN over DNS - DNSプロトコルを利用するiodineでファイヤーウォール越しにVPN環境を構築する

それでは、より良いL2 VPNライフを!


OpenVPNで構築する超簡単VPN入門―Windows/Mac OS X/Linux対応
ケイズプロダクション
ラトルズ
売り上げランキング: 146,953

1枚のフロッピーで作るLinux VPN―floppyfwによるVPN環境構築
竹内 充彦
九天社
売り上げランキング: 1,106,069

Posted by netbuffalo at 21:00│Comments(0)TrackBack(0)ネットワーク | ユーティリティ


この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/netbuffalo/4451855

コメントする

名前
URL
 
  絵文字