家里有一台 NAS,公司在另一座城市,手机在地铁上,你想让这三处访问彼此的内网服务,又不想把端口一个个暴露到公网。传统 VPN 方案(OpenVPN、IPsec)都要维护证书中心、隧道配置又重又慢。WireGuard 把"两端各持一对密钥 + 一条 UDP 隧道"的设计精简到极致,配置只有几十行,内核支持,性能接近裸装。这篇讲清楚怎么用一台 VPS 把家里、公司、手机揉进同一个"虚拟内网",并说明最容易翻车的那几个参数。
一、它到底在干什么:自己有一条加密隧道
WireGuard 的模型很简单:每个节点是一套接口(interface),每个对端(peer)持有一把公钥。配置本质上就是一张"我认谁、我该把哪些流量发给他"的表。它工作在 IP 层之上、用一个 UDP 端口承载所有流量,所以不会像 OpenVPN 那样开一堆 TCP 端口。加密是内置的(Curve25519 + ChaCha20-Poly1305),没有额外 TLS 握手,新建连接通常几十毫秒内完成,远比传统方案快。
理解整个系统只差一个关键概念:AllowedIPs。它有两个作用,一是"路由"——告诉内核哪些目的地址的包要送进这条隧道;二是"接收过滤"——只接受来自该 peer、且源地址命中 AllowedIPs 的包,防止对端冒充。同一套字段同时发路由和收过滤,这是 WireGuard 设计精妙也最容易被误解的地方。
二、先生成密钥对:服务器端(VPS)
在 VPS 上装内核模块与工具:apt install wireguard,然后生成服务器公钥私钥:
wg genkey | tee /etc/wireguard/server.key | wg pubkey > /etc/wireguard/server.pub
把服务器隧道地址定为一个内网段,比如每个节点分配 10.10.0.1(服务器)、10.10.0.2(家里)、10.10.0.3(手机)。先写服务器端 /etc/wireguard/wg0.conf:
[Interface]
Address = 10.10.0.1/24
ListenPort = 51820
PrivateKey = <服务器私钥>
# 家里 NAS
[Peer]
PublicKey = <家里公钥>
AllowedIPs = 10.10.0.2/32
# 手机
[Peer]
PublicKey = <手机公钥>
AllowedIPs = 10.10.0.3/32
家庭与手机等客户端只分配 /32 单地址,不让他们中转他人流量。用 wg-quick up wg0 启动,必要时用 systemctl enable wg-quick@wg0 开机自启。VPS 默认不开 IP 转发,站点到家这样的跨子网互通前,必须先开启 net.ipv4.ip_forward=1(写入 /etc/sysctl.conf),否则包进来了却出不去。
三、配客户端:家庭 NAT 背后的节点
家庭节点同样生成一对密钥,配置里指向服务器即可。这段配置最值得逐字段看:
[Interface]
Address = 10.10.0.2/24
PrivateKey = <家里私钥>
[Peer]
PublicKey = <服务器公钥>
Endpoint = vpn.example.com:51820
AllowedIPs = 10.10.0.0/24
PersistentKeepalive = 25
两个字段决定了它能不能稳定连上:Endpoint 是服务器可达的公网地址,家里在 NAT 后面,靠它主动发握手包建立隧道;PersistentKeepalive = 25 让节点每 25 秒发一个保活包,防止 NAT 映射因长时间无流量被清掉——不写这一行,常常出现"连了一早能用,中午突然中断"。这里 AllowedIPs 是 10.10.0.0/24,意思是家里只想访问 VPS 上的虚拟内网,不把 N 主机流量都导入隧道。
四、全流量模式与"只能这么用的一种越野"
如果你想让手机无论在哪都通过 VPS 出去(隐私代理、绕过区域限制),把客户端 AllowedIPs 从 10.10.0.0/24 改成 0.0.0.0/0。这会让所有流量都走 VPS 出口,也就是把 VPS 当默认网关。这时候排障的思路要变:先分清"隧道是否建立"与"流量是否真的走到 VPS",前者看 wg show 的 latest handshake,后者在 VPS 上用 tcpdump 抓 eth0 是否出现来自客户端的源地址流量。全流量模式最常见的问题不是连不上,而是 DNS 泄出一半、或者某家运营商封了常见端口导致握手超时。
五、手机上怎么配:iOS/Android 一次导入
手机客户端不需要会写配置,把一份 qr 码导入即可。WireGuard 官方的 wg setconf 不支持二维码,但社区客户端(WireGuard iOS / Android)可以导入一个由 wg genkey 生成的 profile。导出的配置就一行 [Interface] + [Peer],跟你手写的文件内容一致,只是 Endpoint 换成 VPS 公网地址,AllowedIPs 按上面第三、四节取舍。二维码导入本质是 base64 的 Profile 文本,注意私钥不要截图发去聊天软件——那等于把钥匙贴到门牌上。
六、Site-to-Site:两台机器互连而不是"一台中枢 + 一堆终端"
当你有两个都不在同地点、都要互相访问的内网(比如公司 A 和托管机房 B),不要让它们都只连 VPS,而是让彼此加速互联。同样在两端各放一个节点,在两边 peer 的 AllowedIPs 里写对方的内网段(如 A 端写 B 的内网段/24),并确保两端的 ip_forward 都开、路由表正确。Site-to-Site 排障要记住:WireGuard 只保证 A-B 这一段通,它是"虚拟链路",至于 A 的内网主机能否路由到 B,取决于两端各自的内网路由与防火墙放行,这是隧道之外另一层容易漏的地方。
七、性能与安全细节别忽略
MTU 值得单独说:WireGuard 默认 MTU 1420,是从 1500 减去 80 字节封装开销。跨境或走某些运营商链路过小时,若出现"能握手、一传大文件就死"的现象,试着把 MTU 降到 1300 左右测一下,往往能救活一条看着正常的隧道。安全上做两件事:VPS 的防火墙只对 51820/UDP 白名单放行,并对该端口做 UFW 的 rate-limit;同时确保服务器端私钥只 root 可读(chmod 600)。WireGuard 内核模块快是快,但管理和审计要靠明确的端点清单——保持自己对每台 peer 公钥的来源有记录,别图省事从不可信渠道导入。
结语
WireGuard 的价值在于它把"加一条虚拟链路"从一件沉重的操作变成十几行配置。用一台 VPS 做汇聚点,把家里、公司、手机和后续任何新节点揉进同一个 /24 内网,再辅以 AllowedIPs 的精确路由和 NAT 穿透,你就同时拥有了"内网可达"和"出口可控"两件事。它不替代完整的零信任方案,但作为自托管场景里性价比最高的组网底座,足够让七成需要"异地互通"的运维彻底摆脱笨重的传统 VPN。



