WireGuard异地组网WireGuard+OpenWrt实现跨城千兆互联(附避坑指南)
对于拥有多地办公点、家庭与机房互联需求的用户来说,异地组网的核心诉求往往可以归结为三个关键词:速度要快、延迟要低、配置要稳。传统的内网穿透方案常受限于带宽和协议性能,而WireGuard凭借其轻量化内核和高效传输协议,成为异地组网的理想选择。本方案通过三台OpenWrt路由器的实战配置,带你实现"伪内网"体验——即使身处不同城市,设备间传输也能跑满带宽。
要求:
- 异地组网的内网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(已满)
饿了么红包
本站附件分享,如果附件失效,可以去找找看