书接上回:计划:基于IPv6实现IPv4应用层组网我意识到n2n可以满足我的实际需求,并且它是完全自由和免费的!
什么是n2n?
Github ntop/n2n :Peer-to-peer VPN
n2n is a light VPN software which makes it easy to create virtual networks bypassing intermediate firewalls.
简单来说n2n是一个C语言编写的轻量级VPN软件,可以轻松的创建一个通过防火墙的虚拟网络。正如项目简介所言,n2n主要依赖点对点完成通信,对于无法穿透的NAT环境将自动使用超级节点进行failback。
搭建n2n 超级节点
首先需要安装n2n,过于简单,请参见项目仓库。(不要使用apt安装,一定要选择github的最新稳定版代码自行编译或使用编译好的release。
官方文档描述已经足够详尽,你只需要注意开放选定的tcp+udp端口,我选择了8080.
此外,还需要开放udp端口,53/5645 (或者,如果你的服务器没什么有价值的udp服务的话,干脆在防火墙把udp全放行了。)
我的节点:xfox.fun:8080
(4Mbps
小水管,你就别指望我这节点能拿来转发你的流量了,最多帮你打通p2p,转发还不如你自己开个或者用免费的frp/NPS服务器。
运行普通节点
过于简单,不过多描述
basic usage: edge <config file> (see edge.conf)
or edge -c <community name>
-l <supernode host>:<port>
[-a <tap IP address>]
[-d <tap device name>]
[-k <encryption key>]
-h shows a quick reference including all available options
--help gives a detailed parameter description
man files for n2n, edge, and superndode contain in-depth information
较为复杂的配置,自己看/etc/n2n/的example文件
两种节点都支持systemd持久化运行,文件会在安装后自动释放,你只需要参考example编辑新的配置文件:edge.conf/supernode.conf
编写一个跨平台n2n GUI客户端
n2n提供了udp信息展示接口,已有第三方编写的Windows、Android客户端,但是我用的是Gnu/Linux,而我的大部分非自由软件爱好者朋友玩游戏往往使用Windows,所以我需要一个跨平台的n2n客户端提供尽可能一致的用户体验,Python显然是个不错的选择。
设计界面布局
基于n2n的参数需求,需要以下几个必须元素
输入框
- 服务器地址
- 社区名称(community)
- 认证密钥(非必须)
- 自定义地址(非必须)
选择框
标签
按钮
开发难点
编译n2n(Windows),这一个就难到我了,因为我压根就不想下载Visual Studio,并且MinGW构建失败(我还为此购买了Windows10 Pro的激活码,但是还是很遗憾没有成功)。不过,仔细看看了看日志,貌似是因为choco安装MingGW时没有给予足够权限造成的,所以干脆卸载了MingGW,git,make重新安装了一遍。
第二次编译,卡在了make test:
...
cp src/example_sn_embed example_sn_embed
scripts/test_harness.sh tests/tests_integration.list
tests/../scripts/test_integration_supernode.sh >tests/test_integration_supernode.sh.out
这就很糟糕。
不过查看目录发现似乎已经编译成功了。确定可以编译通过后修改了一下编译包版本名称和目标系统名称,Windows10下的编译问题算是解决了。
在WIndows上运行前需要安装TAP驱动下载地址,搜索tap-windows如无其他异常就尽可能使用新版本。比如tap-windows-9.24.7-I601-Win10.exe 至于9.24.8,暂时没有一键安装的二进制应用....
GUI-n2n使用说明
本程序设计使用理念:由了解n2n相关配置方法的开发者/用户为其他用户(你的任何不了解计算机技术的朋友,同学,家人)提前编写好配置文件后直接打包交给用户。
GUI-n2n是使用Python3+tkinter编写的跨平台程序理论支持Linux,Mac,Windows,不考虑兼容Python2的任何版本。对于Windows7用户,请使用Python3.8编译运行。
Windows用户使用前应安装TAP驱动,服务器地址应包含端口,加密密钥可以为空,默认AES-CBC加密(密钥必须为ASCII字符),默认启动后使用当前程序所在目录下的配置文件(GUI-n2n.config)设置,如果你不理解我在说什么则不要修改任何配置。