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.1和10.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和服务密钥就是之前输入的账号和密码