通知 欢迎关注我的店铺天天软件圆

WireGuard异地组网WireGuard+OpenWrt实现跨城千兆互联(附避坑指南)

2025-03-22
0评论
/
阅读
爱搜啊

对于拥有多地办公点、家庭与机房互联需求的用户来说,异地组网的核心诉求往往可以归结为三个关键词:速度要快、延迟要低、配置要稳。传统的内网穿透方案常受限于带宽和协议性能,而WireGuard凭借其轻量化内核和高效传输协议,成为异地组网的理想选择。本方案通过三台OpenWrt路由器的实战配置,带你实现"伪内网"体验——即使身处不同城市,设备间传输也能跑满带宽。

WireGuard异地组网

要求:
- 异地组网的内网IP段不同。
- 要求路由都能用ssh连接(异地请转发‘22’端口,方便操作,反代没用)。
- 异地组网的路由都需安装‘luci-proto-WireGuard’。
- 至少有一台路由有公网IP。

优点
- 所有异地组网最快的,资源占有最低的,异地传输数据基本可以跑满被传出网络的上行带宽。

缺点
- 没有内网穿透。
- 不支持复杂的协议。

以三台路由异地组网为例

1、规划

1.1、数据端口
WireGuard默认端口:51820
本例规划的端口:63000

1.2、每台路由IP规划
路由A
路由A实际IP段:192.168.1.0/24
路由A虚拟IP段:172.16.1.1/16
路由A虚拟IP:172.16.1.1/32

路由B
路由B实际IP段:192.168.2.0/24
路由B虚拟IP段:172.16.2.1/16
路由B虚拟IP:172.16.2.1/32

路由C
路由C实际IP段:192.168.3.0/24
路由C虚拟IP段:172.16.3.1/16
路由C虚拟IP:172.16.3.1/32

1.3、掩码释义(组网时很重要)
/16:表示子网掩码为`255.255.0.0,表示这个网络包含从*.*.0.0 到 ..255.255 的所有 IP 地址。上面的虚拟IP段就是把3个网络组建在一个虚拟网络里。
/32:表示子网掩码为`255.255.255.255,这个网络只包含一个 IP 地址,即前面的IP。
/24:表示子网掩码为`255.255.255.0,表示这个网络包含从 ...0 到 ...255 的所有 IP 地址

1.4、以上配置逻辑(这是我的个人理解)
- 虚拟组了一个‘/16’的网络,通过虚拟的路由IP‘/32’把该局域网的‘/24’网络通过广域网连接在一起。
- 虚拟的网络IP不能与实际的IP冲突,例如你内网用的‘172’开头的内网IP,请改用‘10’的虚拟IP段。

2、修改防火墙

2.1 编辑firewall

nano /etc/config/firewall

添加如下部分(记的删除注释)

# 新建防火墙区域wg(可自己命名,把下面的引号中的wg全部修改为自己的命名的防火墙区域,尽量用英文小写)
config forwarding
        option src 'wg'
        option dest 'lan'
config zone
        option name 'wg'
        option input 'ACCEPT'
        option output 'ACCEPT'
        option forward 'ACCEPT'
        option mtu_fix '1'
config forwarding
        option src 'lan'
        option dest 'wg'
        
# 给防火墙开放端口
config rule
        option name 'WireGuard'
        option src 'wan'
        option dest_port '63000'#开放给wireguard的端口
        option proto 'udp'
        option target 'ACCEPT'
EOF

2.2、重启防火墙

/etc/init.d/firewall restart

3、创建密钥对并记录

3.1、每台路由运行下面的命令创建私钥和公钥

wg genkey | tee privatekey | wg pubkey > publickey

## 查看私钥
cat privatekey

## 查看公钥
cat publickey

3.2、打开记事本记录每台路由的公钥和私钥

A路由密钥

私钥        *******
公钥        *******

B路由密钥
私钥        *******
公钥        *******

B路由密钥
私钥        *******
公钥        *******


4、新建记事本整理配置

4.1、路由A(DDNS不要前面的‘http://'或‘https://')

# 路由A的本机配置
config interface 'wg0'#路由A接口名字(支持英文大小写)
    option proto 'wireguard'
    option private_key '路由A的私钥'
    option listen_port '63000'
    list addresses '172.16.1.1/16'
    option mtu '1500'
    
# 路由A在客户端的配置
config wireguard_wg0
    option public_key '路由A的公钥'
    option description '给路由A取一个名字(支持英文大小写)'
    option endpoint_host '路由A的DDNS或固定IP'
    option endpoint_port '63000'
    list allowed_ips '192.168.1.0/24'
    list allowed_ips '172.16.1.1/32'
    option route_allowed_ips '1'

4.2、路由B

# 路由B的本机配置
config interface 'wg0'#路由B接口名字(支持英文大小写)
    option proto 'wireguard'
    option private_key '路由B私钥'
    option listen_port '63000'
    list addresses '172.16.2.1/16'
    option mtu '1500'
    
# 路由B在客户端的配置
config wireguard_wg0
    option public_key '路由B的公钥'
    option description '给路由B取一个名字(支持英文大小写)'
    option endpoint_host '路由B的DDNS或固定IP'
    option endpoint_port '63000'
    list allowed_ips '192.168.2.0/24'
    list allowed_ips '172.16.2.1/32'
    option route_allowed_ips '1'


4.3、路由C

# 路由C的本机配置
config interface 'wg0'#路由C接口名字(支持英文大小写)
    option proto 'wireguard'
    option private_key '路由C私钥'
    option listen_port '63000'
    list addresses '172.16.3.1/16'
    option mtu '1500'
# 路由C在客户端的配置
config wireguard_wg0
    option public_key '路由C的公钥'
    option description '路由C取一个名字(支持英文大小写)'
    option endpoint_host '路由C的DDNS或固定IP'
    option endpoint_port '63000'
    list allowed_ips '192.168.3.0/24'
    list allowed_ips '172.16.3.1/32'
    option route_allowed_ips '1'

5、新建记事本整理每台路由的配置

5.1 路由A的配置
路由A的本机配置

路由B在客户端的配置

路由C在客户端的配置

5.2 路由B的配置
路由B的本机配置

路由A在客户端的配置

路由C在客户端的配置

5.3 以此类推,以路由A为实例并修改

config interface 'wg0'
    option proto 'wireguard'
    option private_key '路由A的私钥'
    option listen_port '63000'
    list addresses '172.16.1.1/16'
    option mtu '1500'
config wireguard_wg0    # 小心小心小心,如果每台路由接口名字不一样,这里要和上面的‘config interface’引号中的一致
    option public_key '路由B的公钥'
    option description '给路由B取一个名字(支持英文大小写)'
    option endpoint_host '路由B的DDNS或固定IP'
    option endpoint_port '63000'
    list allowed_ips '192.168.2.0/24'
    list allowed_ips '172.16.2.1/32'
    option route_allowed_ips '1'
config wireguard_wg0    # 小心小心小心,如果每台路由接口名字不一样,这里要和上面的‘config interface’引号中的一致
    option public_key '路由C的公钥'
    option description '路由C取一个名字(支持英文大小写)'
    option endpoint_host '路由C的DDNS或固定IP'
    option endpoint_port '63000'
    list allowed_ips '192.168.3.0/24'
    list allowed_ips '172.16.3.1/32'
    option route_allowed_ips '1'

6、在每台路由修改network文件

nano /etc/config/network

- 把对应的配置拷贝进去,保存
- 打开luci界面---网络---接口---在接口子界面找到新建的‘WireGuard’后点击‘编辑’
- 在打开的子界面---防火墙设置,把该接口添加到新创建的防火墙区域(本例为‘wg’。
- 保存---保存并应用


7、其他说明

7.1 在上面的配置中,‘option endpoint_host’如果没有‘DDNS或固定IP’请留空,只是该路由的内网不能被访问。

7.2 如果异地访问比较慢

- 请重启路由。

- 如果重启后还是慢,需要配置‘MTU'。用‘ping -f -l 1472 异地路由IP’,如果提示‘需要拆分数据包’的字样,请设小。如果‘ping’正常,请逐渐加大数字,找到最大值。然后在luci界面---网络---接口---在接口子界面找到新建的‘WireGuard’后点击‘编辑’打开的子界面---高级设置,MTU设置成‘找到的最大值+28’。这个异地组网都相当于内网,‘MTU’值应该都是‘1500’
- 如果还是慢,看被访的网络上行带宽。

7.3 密钥对不会因为你更换了固件或恢复设置后失效,所以上面的配置文件可以保存以后使用,按照上面再操作一下就好了。

7.4 只有一个公网的,请用‘Watchcat’插件‘重启接口’策略监控。


点击链接加入群聊四群:722808830
点击链接加入群聊三群:751529538(已满)
点击链接加入群聊二群:376877156(已满)
点击链接加入群聊一群:622891808(已满)

饿了么红包
饿了么红包


本站附件分享,如果附件失效,可以去找找看

诚通网盘附件百度网盘附件

于2025-03-22发布