n2n

 

N2N  is  a  peer-to-peer  VPN  system.

 

n2n openwrt package

    libpthread
    kmod-tun <--  TAP network interface

 

kernel 的設定:

CONFIG_TUN=yes

 

/usr/sbin/edge

/usr/bin/supernode

 


 

supernode

 supernode 負責以下功能

  • registry
  • broadcast conduit
  • packet relay

使用:

supernode -l 1234 -v

-l <UDP port>

當 supernode 被 restart 後, 所有 edge node 的 connection 都會中斷 !!

 

Output:

16/May/2012 22:34:05 [supernode.c: 119] Registered new node [public_ip=(2)14.198.???.???:38875]
[private_ip=0.0.0.0:38875][mac=1E:8E:20:86:44:6C][community=mynetwork]

 


 

Edge node

 

  • creates the TAP

help:

edge -h

 

-f         as a command line option, edge will call daemon

-p <UDP port>

-b       定時更新 supernode 的 ip (當 supernode 是 hostname 時)

-t        use HTTP tunneling instead of the normal UDP mechanism

-r        enable  packet forwarding/routing through the n2n virtual LAN.
          ( 除 -a <addr> 指定的 IP 外, 其他的 IP不能進入 n2n )

 

 -M <MTU>     Default 1400

 -t     use HTTP tunneling instead of the normal UDP mechanism

 

安全:

-u <uid>

-g <gid>

 

使用:

1. create tun device

# tunctl -t tun0

EXAMPLES:

edge  -d  edge0 -c  mynetwork  -k  encryptme  -u  99 -g 99 \

-m DE:AD:BE:EF:01:23 -a 192.168.254.7 -p 50001 -l 123.121.120.119:7654

 

  • TAP device: edge0       <-- default 名稱 (ifconfig edge0)
  • community:  "mynetwork"
  • supernode: 123.121.120.119:7654
  • shared  encryption  key: encryptme
  • MAC Addr: DE:AD:BE:EF:01:23   <-- 可以不填
  • Private IP Addr: 192.168.254.7   <-- /24
  • Port to communicate: 50001     <-- UDP
  • user=99
  • group=99

沒有 -f 時的 output:

16/May/2012 22:28:46 [     edge.c:1136] Using supernode 127.0.0.1:-15535
16/May/2012 22:28:46 [tuntap_linux.c:  38] Interface edge0 has MAC 6E:02:21:98:FC:41
16/May/2012 22:28:46 [     edge.c: 670] Registering with supernode
16/May/2012 22:28:46 [     edge.c:1367]
16/May/2012 22:28:46 [     edge.c:1368] Ready
16/May/2012 22:28:46 [     edge.c:1434] STATUS: pending=0, operational=0
16/May/2012 22:29:55 [     edge.c: 670] Registering with supernode
16/May/2012 22:30:55 [     edge.c: 670] Registering with supernode

 

 


 

官方例子

 

#supernode > supernode -l xyw
#edge node1> edge -a 10.1.2.1 -c mynetwork -k encryptme -l a.b.c.d:xyw
#edge node2> edge -a 10.1.2.2 -c mynetwork -k encryptme -l a.b.c.d:xyw

測試:

#edge node2> ping 10.1.2.1

 


 

OpenWRT 內的設定

 

修改:

/etc/init.d/n2n

service_start /usr/sbin/edge -b -f $args -a $ipaddr -c $community -k $key -l ${supernode}:${port}

 

/etc/config/n2n

config edge
    option ipaddr       '10.1.2.2'   <-- 如果用 DHCP 取 ip, 那要用 "0.0.0.0" 代替
    option supernode    'supernode wan ip'
    option port         '8888' <--- supernode 的 port, default: 8888
    option community    'openwrt'
    option key          '1234'
    option route        '1'

 

如果要結合 Network

    ifconfig edge0 mtu 1300
    brctl addif br-lan edge0
   
/etc/init.d/n2n  start
/etc/init.d/n2n  enable

/etc/config/firewall

config zone
        option name             lan
        option network          'lan vpn'
        option input            ACCEPT
        option output           ACCEPT
        option forward          REJECT

 

/etc/config/network <-- ifconfig edge0 時見到的 ip

config interface 'vpn'
        option ifname 'edge0'
        option proto 'static'
        option ipaddr '10.1.2.2'
        option netmask '255.255.255.0'

 

-r 參數

 

當有多個 Network 存在時(沒有在 -a 時登記), 那 -r 參數會很有用

亦即是 openwrt 的 option route '1'

option route        '1'

 


 

詳見:

http://www.ntop.org/products/n2n/

 

man 8 edge

man 1 supernode

 

Window Client 下載:

http://luca.ntop.org/n2nWin32/