背景
物联网设备使用5G流量,无公网IP,需要将这些设备通过虚拟组网形成VLAN的效果,虚拟局域网内互联互通。
Pole介绍
不仔细开展,大致作用是多个不同网络的客户端通过一个公网服务端连接,利用KCP/UDP协议,使客户端可以通过虚拟ip访问,非常符合我的要求,详细地址:https://github.com/polevpn/polevpn_router,放上一张官方架构参考。
?环境准备
- ?router服务端:临时租用阿里云ECS服务器,自带公网ip
- gateway客户端:模拟两个相互不通的客户端
- 笔记本1:Centos7虚拟机,接入办公wifi,192.168.110.x网段
- 笔记本2:Centos7虚拟机,连手机热点,192.168.56.x网段
安装步骤
服务端安装
- (可选)安装git、go环境
- git clone?https://github.com/polevpn/polevpn_router.git并进入
- go build编译并启动
- 阿里云安全组开放443udp端口,注意是udp
- config配置调整
{
"kcp":{
"listen":"0.0.0.0:443",
"enable":true
},
"wss":{
"listen":"0.0.0.0:443",
"enable":false,
"cert_file":"./keys/server.crt",
"key_file":"./keys/server.key"
},
"shared_key":"!@#dFXemc$%*%^0K"
}
客户端安装
- (可选)安装git、go环境
-
git clone?https://github.com/polevpn/polevpn_gateway.git并进入 -
go build编译 -
两个客户端允许ip路由转发 echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 169.254.0.0/16 -j MASQUERADE -
192.168.110.235配置调整 {
"route_server":"kcp://120.25.237.107:443",
"shared_key":"!@#dFXemc$%*%^0K",
"gateway":"169.254.0.2", // 虚拟IP,用该IP相互访问
"local_networks":["192.168.110.0/24"], // 本地网络段
"acls":["0.0.0.0/0"], // 允许访问的网络段
"route_networks":["169.254.0.0/16"] // 虚拟路由网络段
} -
192.168.56.101配置调整 {
"route_server":"kcp://120.25.237.107:443",
"shared_key":"!@#dFXemc$%*%^0K",
"gateway":"169.254.0.3", // 虚拟IP,用该IP相互访问
"local_networks":["192.168.56.0/24"], // 本地网络段
"acls":["0.0.0.0/0"], // 允许访问的网络段
"route_networks":["169.254.0.0/16"] // 虚拟路由网络段
}
go build问题处理
- unknown revision问题:由于go mod需要自行git下载其他模块,需改成ssh连接模式
git config --global url."git@github.com:".insteadOf "https://github.com/"
# 若改后使用git会提示pubkey问题,需要查看ls /root/.ssh是否有密钥对,无则自行生成
ssh-keygen -t rsa -b 2048 -C "你自己的邮箱地址"
# 查看最新公钥并复制到github账户中
cat /root/.ssh/id_rsa.pub
- ?unrecognized import path "golang.org/x/crypto"问题:加入代理后再build
# 加入go代理
export GOPROXY=https://goproxy.io
联调测试
启动后可在服务端日志查看到,两个客户端均已上线,使用的是不同的互联网出口
进行ping及ssh测试,均能使用
|