群晖(Synology)下N2N的设置方法

Synology N2N 是一个没有外网IP,远程访问群晖机器的一种可能途径。群晖本来有 quickconnect 了,我觉得也很好用。但是某些人还是会觉得他不够好用,毕竟大家都要用他那个带宽去访问,群晖难免会塞车;而且更重要的是,n2n貌似更安全 —— 开源,没有猫腻。而群晖不开源,数据经过群晖在各地建立的服务器又多了一个被监控的可能(其实多半是心理作用,我还是相信群晖的)。所以,Synology N2N 只能是 quickconnect 之外的一个补充、尝试。

首先说说局限性,这里下载的n2n,主要用在群晖较高级别的机器上(例如 DS712+ 可以,而 DS212J 却不行),感兴趣的话可以试一试,大不了不能用,没有后遗症。

下面说说安装方法:

首先,从 这里 去下载群晖上使用的文件,在电脑上解压,如果你的CPU是32位的就用 linux3目录里的,我的机器是群晖DS712+(且支持64位),就用 linux64目录里的(其实都可以试试,哪一个好用用哪一个);

其次,用 winScp 之类的软件,将edge、supernode 上传到 /usr/bin目录下,libcrypto.so.0.9.8 上传到 /lib64 下(32位CPU上传到 /lib 下),其属性全改为 0755

注:以下输入命令,是使用 putty 之类的来进行的,用户名是root,密码是群晖的登录密码(输入密码过程不可见),输完回车即可

然后,如果你要把此机器用作 supernode(超级节点),那么就比较简单,运行下面的命令即可(输入 supernode 或带 -h 参数查看帮助信息;可以两个版本的 supernode 同时运行,只需把另外一个改名即可):

supernode -l 10082 &

如果你照上面的运行好了,针对 supernode,你还需打开大门,让别人可以连进来,此时需要在群晖的防火墙,路由器的端口映射里面把对应的端口打开,即上例中82端口(根据自己的来)。

如果你要把你的群晖机器用作edge(节点),那么运行下面的命令即可(输入 edge 或带 -h 参数查看帮助信息):

insmod /lib/modules/tun.ko
edge -d t1 -f -a 10.0.0.1 -c yonghuming -k mima -l n2n.lucktu.com:10082 -b &

其中,第一句不解释,因为我也不怎么懂呵呵;第二句前面的10.0.0.1,是群晖在 n2n 网络中的内网IP地址,需要自己修改,后面的 n2n.lucktu.com:10082 是有效的超级节点的信息。-f 参数,是让他注入内存工作,不显示。使用不同的 -d 值,可以运行多个 edge。-b 是针对域名型 supernode 的,可以定期检查 IP,变化了就及时更新。

2018-8-15 补充一点,针对群晖 6.1 较新系统,可能会遇到,当你的 edge 起不来,没有与外网连接上(虽然进程里面都有了,防火墙调整也不起作用。如果是你的supernode,上面没有你连接的记录),且用 route 命令却看不到该虚拟网口 t1 时,可以用下面的命令(sleep 行不用,自己等会即可,时间是秒。这里的语句可加于开机启动里:/etc/rc.local,rc.local 没有的话可以自建)

insmod /lib/modules/tun.ko
sleep 30
edge -d t1 -f -a 10.0.0.1 -c yonghuming -k mima -l n2n.lucktu.com:10082 -b &
sleep 10
ifconfig t1 down
sleep 10
ifconfig t1 up

2019-11-20 我的白群也无意当中升级到了最新版本 dsm6.2.2,后来又降级到6.1.7,因为622启动edge以后,居然有一半的edge是ping不通的,即使使用了下面的方法仍然如此,而617全通,没有任何问题,可见617系统的网络功能更好一些。我无意当中发现群晖 dsm6.1、6.2(6.0未知)在启动之后,最开始的时候 n2n 是正常的,n2n的路由表也是有的,但是很快群晖就开始删除 n2n 的路由表了,这就是我们加入开机启动,刚开始 n2n 网络是可以 ping 通的,一会就断开了的原因。下面说说处理方法,2018-8-15 的方法仅做参考。将从 这里下载 (鼠标放上面,按鼠标右键,在弹出的菜单中选择“链接另存为...”)的文件保存为 renew,并加入开机启动 rc.rocal 文件里的 edge 语句后面: /etc/new/renew & (renew 的属性改为 0755)。这样,以后我们即使手动启动 n2n,它也会在 10 秒内给你加上群晖给删除的静态路由。

那么怎么知道我们的 n2n 客户端是否正常工作呢?

对于 N2N_V1,如果你看到这样的开头信息,每分钟一次,那么就表示工作正常了。

Received REGISTER_ACK from remote peer ... ...

对于 N2N_V2,则显示这样的开头信息,每2分钟一次。

Rx REGISTER_SUPER_ACK myMAC= ... ...

如果没有这样的信息,就表示没有成功。特别强调一下,针对 N2N_V2,那个 -f 的参数正好与 V1的含义相反,所以,你反着用就行了:加 -f 表示不注入内存运行,可以看到N2N客户端的运行情况。

同样的,edge之间要能访问,也是需要设置的,请参考在一个路由器下的各个计算机之间的设置方法。

经过上面的操作,你的群晖n2n就算做好了。

如果你要终止上面的进程,可以用这样的格式:

killall -9 supernode
killall -9 edge

调试时,难免使用到 windows 客户端,请参考本站这篇文章吧:http://www.lucktu.com/archives/751.html

远程访问群晖管理页面,我用 Firefox 很难,用 google 的浏览器却较快。访问局域网网上邻居,也是可以的,就像真正的局域网一样。

本篇文章我最初发表在这里,http://www.gebi1.com/thread-245050-1-1.html,我这里是最新的,会有一些修正。


83.33%(5)

16.67%(1)
发表评论?

4 条评论。

  1. windows下使用会让网页打开变慢,不知道怎么回事.版本是https://github.com/lucktu/n2n/blob/master/Windows/n2n_v2_windows_x64_v2.7.0_r525_static_by_heiye.zip,参数-a 10.0.0.12 -c test -l xxx.xxx:10086 -k 123

    • 应该不会吧,你试试其他版本,如果其他正常,就用其他的吧,525主要给打游戏的人准备的,可以自动分配IP,其他也没有多大差别。

  2. 注意,新版的群晖(我测试过 DSM6.1–6.2.2,旧版是指 DSM5.2 以下的)按照这里的方法安装以后,不能直接使用:特别是外面ping不进来,里面可能ping得出去,需要如下设置路由才可以:

    route add -net 172.10.0.0/24 dev n2n1
    其中,127.10.0.X 是你的 n2n 当前的 IP,n2n1 是网卡名(用 -d 来设置的)

    另外,默认情况下,新版的转发也是关闭的,可以这样打开:

    echo “1″ > /proc/sys/net/ipv4/ip_forward

  3. 隐藏运行代码上的密码的方法(修改上面的例句):
    N2N_KEY=mima edge -f -a 10.0.0.1 -c yonghuming -l 180.175.223.217:82

    而关于 -K (大写的)的用法,请参考这篇文章:
    https://linux.die.net/man/8/edge

    ———————-采摘如下————————-

    Key Schedule Files
    (See n2n_v2(7) for more details).

    The -K option reads a key schedule file.

    edge -d n2n0 -c mynetwork -K /path/to/file -u 99 -g 99 -m DE:AD:BE:EF:01:21 -a 192.168.254.5 -p 50001 -l 123.121.120.119:7654

    The key schedule file consists of line, one per key in the schedule. The purpose of key schedules is to encourage regular changing of the encryption keys used by a community. The file structure also allows for full binary keys to be specified as compared to the ASCII keys allowed by the single key injection. Each key line consists of the following:

    and are ASCII decimal values of the UNIX times during which the key is valid. is the index of the transform that applies to. is some text which is parsed by the transform module to derive the key for that line.

    Supported values are:

    2 = TwoFish
    has the form _. eg.

    1252327945 1252328305 2 602_3d7c7769b34b2a4812f8c0e9d87ce9

    This specifies security association number 602 and a 16-octet key of numeric value 0x3d7c7769b34b2a4812f8c0e9d87ce9. is a 32-bit unsigned integer which is used to identify the encryption key to the receiver. The SA number is sent unencrypted so the receiver may find the correct key from the key schedule. is up to 16 octets although shorter keys are allowed.
    3 = AES-CBC
    has the form _. Same rules as TwoFish.

回复给 lucktu ¬
取消回复

*