墙上打个洞,nat后面的福音 N2N

最近在家搭建了基于linux的nas 系统,平时上传些照片,视频,文件啥的!
由于家里是nat 环境,又碰到动态公网ip(没有任何端口映射权限)也就是到我的路由器就是一个私网地址!!! 苦逼! 谁让用不起电信宽带呢!!~
一开始的想法是通过 openvpn组建隧道,通过明细路由搞定访问家庭nas!但太复杂,以后排故麻烦搞不好哪天就被墙了~~
search 网半天发现 这个N2N 挺靠谱,也十分简单,排故也异常简单方便~~~~ 秉着 keep simple 的原则~~就选它了~~~ 🙂

先介绍下 什么是N2N (不是某 知名男士内裤品牌哦!!!!baidu google 一搜都是内裤!!! 🙁 )

 

n2n

摘自网上的介绍####

“n2n 是一个开源(GPLv3)软件,它允许你在用户间构建一个加密的 2/3 层点对点 VPN。由 n2n 构建的 VPN 是“对 NAT 友好”的,也就是说,不同 NAT 路由器后方的两个用户可以通过 VPN 直接与对方通信。n2n 支持对称的 NAT 类型,这是 NAT 中限制最多的一种。因此,n2n 的 VPN 数据流量是用 UDP 封装的。

一个 n2n VPN 由两类节点组成:边缘(edge)节点和超级(super)节点。一个边缘节点是一台连接到 VPN 的电脑,它可能在一个 NAT 路由器后方。一个超级节点则是拥有一个可以公共访问的 IP 地址的电脑,它将会帮助 NAT 后方的边缘节点进行初始通信。想要在用户中创建一个 P2P VPN 的话,我们需要至少一个超级节点。”

也就是说 当edge-node通过 super-node  双方建立好通信信道后 ,就在edge-node 之间传输通信了 与super-node 无关了!这就是去中心化的思想,提高了安全也保证了速度!!!

安装也很简单,再此记录:

1)ubuntu/debian

    $ sudo apt-get install subversion build-essential libssl-dev
    $ svn co https://svn.ntop.org/svn/ntop/trunk/n2n
    $ cd n2n/n2n_v2
    $ make
    $ sudo make install 

2)centos/rhel

    $ sudo yum install subversion gcc-c++ openssl-devel
    $ svn co https://svn.ntop.org/svn/ntop/trunk/n2n
    $ cd n2n/n2n_v2
    $ make
    $ sudo make install 

# 需要找一台有公网ip的主机进行 端口映射 (必须) 这台主机也就是 super-node ,其余的都是 edge-node
#且 super-node 并不需要 root 权限 ,默认运行在后台,你也可 -f 运行在前台 🙂

$ supernode -l 27108 

#edge-node 上 运行如下: 假设 A 与 B 需要 通信

1)edge-node A

$ sudo edge -d edge0 -a 10.10.10.10 -c myvpn -u 2000 -g 2000 -k password -l 2.2.2.2:27108 -m ce:f0:3f:e7:43:5d

2)edge-node B

$ sudo edge -d edge0 -a 10.10.10.11 -c myvpn -u 2000 -g 2000 -k password -l 2.2.2.2:27108 -m ce:f0:3f:e7:43:3c

#以上参数解释如下 (摘自网上)

===>>

“-d <接口名>”选项指定了由 edge 命令创建的 TAP 接口的名字。
“-a <IP地址>”选项(静态地)指定了分配给 TAP 接口的 VPN 的 IP 地址。如果你想要使用 DHCP,你需要在其中一台边缘节点上配置一台 DHCP 服务器,然后使用“-a dhcp:0.0.0.0”选

项来代替。
“-c <组名>”选项指定了 VPN 组的名字(最大长度为 16 个字节)。这个选项可以被用来在同样一组节点中创建多个 VPN。
“-u”和“-g”选项被用来在创建一个 TAP 接口后降权放弃 root 权限。edge 守护进程将会作为指定的用户/组 ID 运行。
“-k <密钥>”选项指定了一个由 twofish 加密的密钥来使用。如果你想要将密钥从命令行中隐藏,你可以使用 N2N_KEY 环境变量。
“-l <IP地址:端口>”选项指定了超级节点的监听 IP 地址和端口号。为了冗余,你可以指定最多两个不同的超级节点(比如 -l <超级节点 A> -l <超级节点 B>)。
“-m ”给 TAP 接口分配了一个静态的 MAC 地址。不使用这个参数的话,edge 命令将会随机生成一个 MAC 地址。事实上,为一个 VPN 接口强制指定一个静态的 MAC 地址是被强烈推荐的

做法。否则,比如当你在一个节点上重启了 edge 守护程序的时候,其它节点的 ARP 缓存将会由于新生成的 MAC 地址而遭到污染,它们将不能向这个节点发送数据,直到被污染的 ARP 记录

被消除。

#故障排除

在调用 edge 守护程序的时候得到了如下错误。

n2n[4405]: ERROR: ioctl() [Operation not permitted][-1]

注意 edge 守护进程需要超级用户权限来创建一个 TAP 接口。因此需要确定用 root 权限来执行,或者对 edge 命令设置 SUID。之后你总是可以使用“-u”和“-g”选项来降权放弃 root 权限。

=====>>

发表评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.