n2n
参考:
https://bugxia.com/2396.html
https://www.jianshu.com/p/559c1e582724
https://github.com/LomotHo/n2n-releases
服务器安装
1
2
3
4
| # RPM安装
yum install libzstd -y
wget https://github.com/ntop/n2n/releases/download/3.0/n2n-3.0.0-1038.x86_64.rpm
rpm -i n2n-3.0.0-1038.x86_64.rpm
|
启动服务器
1
2
3
| 启动服务端
#实际使用时,可以去掉 -f 参数,使其后台运行
supernode -p 端口 -f
|
- 服务端(Supernode)附加参数
1
2
3
4
5
6
7
8
9
10
| -p 端口 | Supernode监听端口,默认 7654
-F federation名称 | supernode federation名称,默认为 *Federation
-l 主机:端口 | 和 -F 配合,已知的一台Supernode地址和端口
-M | 关闭非用户名密码认证的群组的MAC和IP地址欺骗保护功能
-V 文本 | 自定义字符串(最长19位),用于在管理输出日志中展示
-c 组名称配置文件路径 | 该配置文件中包含允许使用的组名称
-a IP段 | 用于自动分配IP,格式如 -a 192.168.0.0-192.168.255.0/24
-t 端口 | 用于管理supernode
--management_password 文本 | 管理端的密码
-v | 输出更多日志
|
设置开机启动
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 修改配置文件
sudo vim /etc/n2n/supernode.conf
====
-p=端口
# 服务端没有密码,为了避免被白嫖,添加组名称配置文件,一行一个
-c=/home/n2n/community.list
====
sudo systemctl enable supernode
sudo systemctl start supernode
sudo systemctl status supernode
journalctl -f -u supernode
# journalctl 查看日志
# -f 实时最新
# -u 指定服务
|
服务器端口放行
- 腾讯云的防火墙
- 若服务器开启了如iptables\firewalld\ufw等防火墙,需要放行supernode所设置的端口,否则客户端无法连接
1
2
3
4
5
6
7
8
9
| #firewalld
firewall-cmd --zone=public --add-port=9527/udp --permanent
firewall-cmd --reload
#iptables
iptables -I INPUT -p udp --dport 9527 -j ACCEPT
service iptables save
service iptables restart
#ufw
ufw allow 9527/udp
|
centos7 默认是firewall
1
2
3
4
5
6
7
8
| # 查看状态
systemctl status firewalld
# 或者
firewall-cmd --state
# 查看所有开放端口
firewall-cmd --zone=public --list-ports
# 禁用端口
firewall-cmd --zone=public --remove-port=5672/tcp --permanent #关闭5672端口
|
客户端组建N2N虚拟局域网
1
| sudo edge -a 局域网ip -c n2n组名 -l [公网ip]:公网端口 -f
|
参数说明
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| -a <mode:address> | n2n网卡的ip地址,即本机的n2n的ip。直接填写IP或者使用 DHCP '-r -a dhcp:0.0.0.0'
-c <community> | n2n组,只有相同组的edge之间才能进行通讯
-k <encrypt key> | edge的加密密码
-s <netmask> | 子网掩码 可选 (255.255.255.0).
-l <supernode host:port> | supernode的ip和端口
-i <reg_interval> | 注册时间间隔,用于NAT打洞(默认为20秒)
-L <reg_ttl> | 当通过超级节点UDP NAT打洞时,注册数据包的TTL(默认0不设置)
-p <local port> | 固定本地UDP端口
-u <UID> | 如果不想用root来运行edge,则可指定本机账号的uid,windows下可忽略
-g <GID> | 如果不想用root来运行edge,则可指定本机账号的groupid,windows下可忽略
-f | 带-f时前台运行,不添加-f 参数时作为守护进程运行
-m <MAC address> | n2n虚拟网卡的MAC地址,默认随机设置
| eg. -m 01:02:03:04:05:06
-M <mtu> | MTU 值,默认1290
-r | 启用数据转发功能,当需要访问该设备的局域网时需要设置
-A1 | 禁用载荷加密。不能与key 同时使用(默认为Twofish)。
-A2 ... -A5 or -A | 选择有效载荷加密的密码(和-k一起用),需要一个密钥:-A2 = Twofish(默认),
| -A3 or -A (deprecated) = AES-CBC, -A5 = Speck-CTR.
-H | Enable full header encryption. Requires supernode with fixed community.
-z1 ... -z2 or -z | Enable compression for outgoing data packets: -z1 or -z = lzo1x (default=disabled).
-E | 接受多播MAC地址(默认=drop)
-S | 不要连接P2P ,总是使用超级节点转发数据
-n <cidr:gateway> | 通过gw路由IPv4网络。使用0.0.0.0/0作为默认gw。可多次设置。
-v | 详细日志
-t <port> | 管理UDP端口(用于机器上的多个edges)。
环境变量:
N2N_KEY | 加密密钥(ASCII)
|
安装tuntap
1
2
| brew tap happynclient/taps
brew install tuntap --cask
|
.查看系统信息,您会看到一个名为 tap0的虚拟网卡
sudo ifconfig
macos 设置开机启动项
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| # 在 /Library/LaunchDaemons 新增文件 lomotho.n2n-edge.plist,用于 launchd 控制的开机自启(类似 systemd)
# RunAtLoad 开机时是否运行
# KeepAlive 是否需要一直运行
====
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>Label</key>
<string>lomotho.n2n.edge</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/edge</string>
<string>/usr/local/etc/n2n/edge.conf</string>
</array>
</dict>
</plist>
====
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
| # 客户端配置文件
# /usr/local/etc/n2n/edge.conf
#
# The configuration file is similar to the command line, with one option per line. An equal
# sign '=' should be used between key and value. Example: -c=mynetwork or --community=mynetwork
# This file contains a basic configuration example, please refer to the help (-h) for the full
# list of available options.
#
# -d|--tun-device
# Specifies the name of the TUN interface.
#
# -d=n2n0
#
# -c|--community
# Specifies the n2n community name the edge belongs to.
#
-c=xxx
#
# -k
# Sets the encryption key (ASCII). The environment variable N2N_KEY=<key> can also be used.
#
# -k=mypassword
#
# -m
# Specified the MAC address for the TAP interface (random otherwise).
#
# -m=DE:AD:BE:EF:99:99
#
# -a
# Sets the interface address. For DHCP use '-r -a dhcp:0.0.0.0'.
#
-a=x.x.x.x
#
# -p
# Sets the local UDP port to a fixed port.
#
# -p=50001
#
# -l|--supernode-list
# Specifies the supernode IP and port.
#
-l=x.x.x.x:x
# 访问局域网其他设置
-r
# -Z1为LZO(1x)压缩 -Z2为ZSTD压缩,默认没有
-Z2
#
|
1
2
3
4
5
| # 开启服务
launchctl load /Library/LaunchDaemons/lomotho.n2n.edge.plist
# 关闭服务
launchctl unload /Library/LaunchDaemons/lomotho.n2n.edge.plist
|
linux客户端设置自启动
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| sudo vim /etc/n2n/edge.conf
======
-c=组织名
-a=内网地址
-l=节点公网地址:端口
======
# 设置自启服务
sudo systemctl enable edge
sudo systemctl start edge
sudo systemctl status edge
journalctl -f -u edge
# journalctl 查看日志
# -f 实时最新
# -u 指定服务
|