背景

物联网设备使用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网段

安装步骤

服务端安装

  1. (可选)安装git、go环境
  2. git clone https://github.com/polevpn/polevpn_router.git并进入
  3. go build编译并启动
  4. 阿里云安全组开放443udp端口,注意是udp
  5. 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"
}

客户端安装

  1. (可选)安装git、go环境
  2. git clone https://github.com/polevpn/polevpn_gateway.git并进入

  3. go build编译

  4. 两个客户端允许ip路由转发

    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 169.254.0.0/16 -j MASQUERADE
  5. 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"] // 虚拟路由网络段
    }
  6. 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测试,均能使用

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐