老伙计们,今天咱们唠个实在嗑。你们公司是不是也遇到过这种事:老板一拍脑袋,让全国几个办事处用蒲公英盒子组网,说是“零配置、傻瓜级”,结果用了半年,出差在分公司的同事天天骂“连个ERP都卡得打转”。你打开蒲公英后台一看,“咦,延迟怎么200多毫秒?公司明明拉的是电信专线啊!”
别慌,这事儿我踩过坑。蒲公英本质上是把流量先丢到它的云服务器上做中转,相当于你从上海分公司访问北京总部的服务器,数据包先飞到广州(蒲公英节点),再折回北京,这能不慢吗?而且免费版带宽才2M,连传个Excel都转圈。后来我们全切了WireGuard,延迟直接降到20ms,传文件跟本地一样。今天就把那套“说人话版”的切换和路由优化方案抖出来。
先说说WireGuard是什么“鬼”
WireGuard就是一个轻量级VPN,它不像OpenVPN那样搞一大堆证书、配置,也不像蒲公英那样强制走云端。你可以把它想象成一条“直连电话线”——只要两头的机器都能上网,它们之间就建立一条加密通道,数据直奔目的地,绝不绕路。而且它极简,Linux内核自带,跑起来比蒲公英省CPU十倍。
但很多人说“WireGuard配置难”——其实难就难在路由规划,很多人抄网上的配置,结果流量全走到中转服务器上,反而更慢。今天咱们专治“路由瞎绕”的毛病。
动手:从蒲公英切换到WireGuard
我们公司有三个点:总部(北京,电信固定IP)、分公司A(上海,电信动态IP)、分公司B(深圳,移动宽带)。原来蒲公英方案是每地插个盒子,自动组网。现在我们要废掉它,用WireGuard。
第一步:选“搭桥人”
因为上海和深圳没有固定IP,它们没法直接互连,得有个公网服务器做“联络员”。正好北京总部有固定IP,就用它做WireGuard的“节点”。(注意:如果总部也没有公网IP,你需要一台轻量云服务器做中转,比如阿里云99块一年的丐版ECS,别心疼这点钱,比蒲公英盒子靠谱。)
第二步:装 WireGuard 并生成密钥
各点的Linux服务器(或者路由器刷了OpenWrt)上分别安装WireGuard。生成一对公钥私钥,就像配一把锁和一把钥匙。这一步网上一搜一大把,不赘述。
第三步:写配置文件——关键在于 AllowedIPs
这是整个优化的灵魂。很多人被“AllowedIPs”坑了:
- 错误写法:
AllowedIPs = 0.0.0.0/0—— 这会把所有互联网流量都走VPN,你远程办公时连百度都要绕一圈,不卡才怪。 - 正确做法:只把公司内网IP段放进去。比如我们内网是
10.0.0.0/16,总部服务器地址10.0.0.1,上海分公司内网10.0.1.0/24。那么上海分公司的客户端配置里,只写AllowedIPs = 10.0.0.0/16,不写0.0.0.0/0。这样访问分公司自己的网关还是走本地,只有去总部内网才走VPN。
第四步:路由优化——别让流量“跨省旅游”
举个例子:上海分公司的同事要访问深圳分公司的文件服务器(内网地址 10.0.2.10)。如果按默认WireGuard配置,数据会先由上海客户端加密发给总部(北京),总部解密后再发给深圳,深圳再返回给总部,总部再回上海——这比蒲公英还绕!怎么办?
解决方案:在总部的WireGuard配置里,开启“IP转发”并写一条规则:当收到目的地址为 10.0.2.0/24 的数据包时,直接转给深圳节点。或者更简单的,让上海和深圳之间直接建立WireGuard隧道,绕过总部。但上海和深圳都没有公网IP,怎么直连?可以借助“打洞”功能:WireGuard支持UDP打洞,只要两边都主动连接过总部,就会在总部服务器上留下对方的公网端口信息,然后你可以手动写一条Peer让上海和深圳互相配置对方为“Endpoint”,启用PersistentKeepalive。这样一旦打洞成功,数据就走直连了,延迟从50ms降到5ms。
不过打洞不一定成功(比如对称NAT),这时另一个优化方案:在总部服务器上做“转发”,但别让数据包在应用层绕。具体说,在总部上开启IP转发(net.ipv4.ip_forward=1),并用iptables做SNAT,而不是把WireGuard当成路由器。这样上海到深圳的流量经过总部时只走内核转发,不经过用户态,速度损失极小。实测比蒲公英那种“代理转发”快10倍以上。
避坑指南
- MTU一定要调 蒲公英默认MTU 1500,但WireGuard封装后有加密头,最好设成1420,否则大包会分片,反而变慢。
- 善用Keepalive 动态IP的分支要设为
PersistentKeepalive = 25,每25秒发个心跳,防止NAT映射超时断连。 - 优先级问题 如果公司既有蒲公英又有WireGuard,记得关掉蒲公英的DHCP分配,否则路由会打架。最好先把蒲公英盒子拔了,测试稳定再回收。
最后说两句
切完WireGuard已经半年,再没人抱怨慢了。唯一要吐槽的是纯命令行对操作工不太友好,所以我做了一批启动脚本,让分公司网管双击就能配好。当然,如果你的网络更复杂(比如云上多VPC、海外分支),或者想实现自动故障切换,还是得请教专业方案。
更多实际落地的配置模板、脚本工具和案例,可以去 itfangan.com 看看,那里有现成的“多分支WireGuard优化路由”方案,直接抄作业就行。老司机都知道,别重复造轮子,省下时间喝杯咖啡不香吗?