n2n异地组网(Linux篇)

一些基本概念

研究和使用过一些内网穿透的方案,比如frpautossh等,也用过一些vpn组网,比如openvpnL2TP等。以下是一些对比:

  1. frp和autossh只针对某些端口开放,如果只是需要暴露特定服务,这个方案不错。
  2. vpn的方案,比较依赖中心节点,如果是大公司,出口大也无所谓,使用上很方便,也可以异地三层组网。
  3. n2n比较特殊,中心节点会协助不同节点找到对方,如果能够udp打洞成功,则无需通过中心节点转发数据包,实现真正意义上的点到点网络。而且节点间打通的是局域网环境,二层组网。

n2n组网和vpn组网的区别

由上图可知,我们只需要一台带宽一般的公网服务器作为中心节点,就可以充分利用我们家庭宽带的带宽资源,拿中国移动千兆带宽(上行40M,下行1000M)为例,如果节点A部署在该宽带中,那么就可以实现40M的上行服务,不受中心节点带宽限制。

安装和部署

建议以官网介绍为准。

部署环境

软件支持centos、debian系列、openwrt、windows等,下面我以ubuntu举例。

  • 3台机器,一台作为中心节点(supernode,一般为公网机器),两台作为客户端节点(edge)。
  • 操作系统全部为Ubuntu20.04
  • 下载安装包 --> 链接

supernode节点

  1. 安装软件
sudo dpkg -i n2n_3.0.0-1038_amd64.deb
  1. 修改配置文件
sudo vim /etc/n2n/supernode.conf

修改并填入内容,其中-p是你服务监听的端口,需要防火墙放通该端口(udp),-c是指定community文件路径,当前配置是和配置文件同目录,主要是限制edge必须设置指定的community才可以连接supernode。

-p=27777
-c=community.list
  1. 配置community文件
sudo vim /etc/n2n/community.list

修改并填入内容,其中每行可以填入一个community,配置相同community的edge们才能互相通信。

mynetwork
  1. 启动
sudo systemctl start supernode
  1. 设置开机启动
sudo systemctl enable supernode

edge节点

  1. 安装软件
sudo dpkg -i n2n_3.0.0-1038_amd64.deb
  1. 修改配置文件
sudo vim /etc/n2n/edge.conf

修改并填入内容,其中参数如下

  • d : 绑定网卡名称,启动后会新增一个n2n0的网卡,并绑定。
  • c : 就是服务器的community设置,必须要在服务器的配置文件中,否则无法连接。
  • k : 客户端密码,不同edge的密码要一致才能通信,supernode没有配置该密码,所以也没办法截取数据包,确保不同edge间通信安全。
  • a : 你edge的ip,两个edge配置在同一网段就可以。
  • p : 你的edge进程监听的udp端口,不冲突即可。
  • l : supernode的公网地址和端口。
-d=n2n0
-c=mynetwork
-k=mypassword
-a=192.168.1.1
-p=17777
-l=my_vps_ip:27777
  1. 启动
sudo systemctl start edge
  1. 设置开机启动
sudo systemctl enable edge

扩展配置

一台机器接入不同supernode

其中-t参数是管理API(udp),两个配置不一样才可以查看两个的管理信息,可以继续往下看介绍。

  • 配置一
# /etc/n2n/edge-1.conf
-d=n2n0
-c=mynetwork1
-k=mypassword1
-a=192.168.1.1
-p=17777
-t=56441
-l=my_vps_ip1:27777
  • 配置二
/etc/n2n/edge-2.conf
-d=n2n2
-c=mynetwork2
-k=mypassword2
-a=192.168.2.1
-p=17778
-t=56442
-l=my_vps_ip2:27777

启动命令

sudo systemctl start edge@1
sudo systemctl start edge@2

管理api

  • supernode : 默认是 127.0.0.1:5645(udp)
  • edge : 默认是 127.0.0.1:5644(udp)

比如在edge,可以输入以下命令查看管理信息(包括哪些ip是直连,哪些是中心节点转发等),执行后需要按Enter刷新信息。

nc -u 127.0.0.1:5644

路由

有时候,我们想要edge节点转发自己局域网的访问请求。比如下图,这个访问需求需要edge2转发请求到edge1。一般还有第二个需求,就是

edge局域网转发

访问路径如下:

需求1 - 局域网其他终端访问edge1 :192.168.2.2 --> 192.168.2.1 --> snat --> 192.168.1.10 --> 192.168.1.11
需求2 - edge1访问局域网其他终端 :192.168.1.11 --> 192.168.1.10 --> 192.168.2.1 --> 192.168.2.2

  1. 配置局域网其他终端,新增路由192.168.1.0/24192.168.2.1
  2. edge2配置服务器允许转发,并做好防火墙策略,如下:
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

永久生效方法
修改文件/etc/sysctl.conf,取消注释#net.ipv4.ip_forward=1

  1. 在edge2节点的edge.conf文件增加-r参数

这时候,需求1完成。下面是需求2:

  1. 在edge1节点的edge.conf文件增加以下内容,代表发往192.168.2.0/24网段的数据包,发往192.168.1.10
-n=192.168.2.0/24:192.168.1.10

需求2完成。

文章作者: PercyC
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 percy家园
网络运维 linux 网络
喜欢就支持一下吧