n2n实操内网通信

0-前言

​ 本着垃圾佬的原则,准备将家里吃灰的树莓派利用起来,所以准备openmediavault+n2n+frr实现任意地点访问屋里内网设备,但是frr老是学习不到内网设备,所以直接用iptables端口映射实现了。

​ 主要记录n2n以及iptables映射,优点是少量的内网设备无需使用复杂的frr,缺点是无法支持动态的ip映射以及过多的内网设备映射管理程度直线上升,主要是记录搭建的流程,n2n很久远的项目了,快速组网的话建议用easytier或者zeroTier

参考网址:

树莓派4b安装OpenMediaVault通过N2N组网并运行OSPF动态路由n2n开源地址

n2n-windows软件

注:OpenMediaVault安装docker的话需要注意自身网络考虑是否要换源

OMV7.0部署及docker安装 - 哔哩哔哩

建立n2n无需在意它在几层nat,只要能通网就成

1-实操记录

目前运营商一般会有两层nat如下图:

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
                   互联网 (云)

┌───────────────┼───────────────┐
│ │ │
┌───────┴───────┐ ┌───┴───┐ ┌───────┴───────┐
│ 运营商/NAT网关 │ │ │ │ 外网电脑 │
│(分配路由器/光猫) │ │ │ │ (公网IP) │
└───────┬───────┘ │ │ │ 对等网:10.0.0.2│
│ │ │ └───────┬───────┘
│ │ │ │ (互联网访问)
┌───────┴───────┐ │ │ │
│ 路由器 │ │ │ │
│ 192.168.2.1 │ │ │ │
└───────┬───────┘ │ │ │
│ │ │ │
┌───────┴───────┐ │ │ │
│ 树莓派4B │ │ │ │
│192.168.2.x │ │ │ │
│对等网:10.0.0.1 │ │ │ │
└───────────────┘ │ │ │
| │ │ │
┌───────┴───────┴───────┐ │
│ VPN隧道10.0.0.0/24 ├───┘
│ (例如: N2N/openVPN) │
└───────────────────────┘

安装相应依赖(编译安装出错了可以问ai缺乏了什么依赖):

1
2
sudo apt update
sudo apt install -y libcap-dev miniupnpc libssl-dev zlib1g-dev

编译安装(版本为3.0):

1
2
3
4
5
./autogen.sh
./configure
make

make install

一个服务端的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vim /etc/systemd/system/n2n-supernode.service
[Unit]
Description=N2N Supernode Service
After=network.target

[Service]
ExecStart=/usr/sbin/supernode -p 0.0.0.0:{port} -f -v
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

#系统自启
systemctl daemon-reload
systemctl enable n2n-supernode
systemctl start n2n-supernode

两个客户端的系统配置(只需要变化虚拟网卡的ip):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#树莓派
vim /etc/systemd/system/n2n-edge.service

[Unit]
Description=N2N Edge Service
After=network.target

[Service]
ExecStart=/usr/sbin/edge -c {账号} -k {密码} -a {设定的虚拟网卡ip例如10.0.0.110.0.0.2} -f -v -l {公网ip:port}
Restart=on-failure

[Install]
WantedBy=multi-user.target

#系统自启
systemctl daemon-reload
systemctl enable n2n-edge
systemctl start n2n-edge

内网端口映射:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#启用 IP 转发
sudo sysctl -w net.ipv4.ip_forward=1


#将 edge0 上到 10.0.0.1:1010 的流量转发到 192.168.2.1:80
sudo iptables -t nat -A PREROUTING -i {虚拟网卡} -p tcp --dport 1010 -j DNAT --to-destination 192.168.2.1:80

#保证返回流量能正确返回
sudo iptables -t nat -A POSTROUTING -o {内网网卡} -p tcp --dport 80 -d 192.168.2.1 -j MASQUERADE

!确保转发规则允许流量通过
sudo iptables -A FORWARD -i {虚拟网卡} -o {内网网卡} -p tcp --dport 80 -d 192.168.2.1 -j ACCEPT

!确保转发规则允许流量通过
sudo iptables -A FORWARD -i {内网网卡} -o {虚拟网卡} -m state --state ESTABLISHED,RELATED -j ACCEPT

windows可以使用n2n-windows软件进行连接:

! 该方法可以使得所有输入同一服务ID和服务密钥的用户在同一局域网中
服务ID和服务密钥就是之前输入的账号和密码