配置WireGuard客户端服务器:仅将VPN用于VPN网络通信,其余流量走eth0接口
配置WireGuard客户端服务器:仅将VPN用于VPN网络通信,其余流量走eth0接口
嘿,我来帮你搞定这个问题!你现在的核心问题出在客户端WireGuard配置里的AllowedIPs参数设置——之前设成了0.0.0.0/0,::/0,这会强制所有流量都走VPN接口(wg0)。只需要调整这个参数,就能实现「仅VPN内网通信走wg0,其余流量走eth0」的需求,具体步骤如下:
1. 修改客户端WireGuard配置
打开你的本地服务器(客户端)的WireGuard配置文件,找到[Peer]段落里的AllowedIPs,把原来的0.0.0.0/0,::/0替换成VPN的私有网段,也就是服务器配置里的10.66.66.0/24(IPv4)和fd42:42:42::/64(IPv6)。
修改后的完整客户端配置如下:
[Interface] PrivateKey = privatekey Address = 10.66.66.3/32,fd42:42:42::3/128 [Peer] PublicKey = pubkey PresharedKey = preshardkey Endpoint = endpoint:60207 AllowedIPs = 10.66.66.0/24,fd42:42:42::/64
为什么要这么改?
AllowedIPs的作用是告诉WireGuard:只有目标IP属于这些网段的流量,才会通过wg0接口发送。改成VPN私有网段后,只有和VPN内其他成员(比如10.66.66.1、其他客户端的10.66.66.x地址)的通信才会走VPN,其余所有公网、本地非VPN流量都会自动走原来的eth0接口,不需要额外添加复杂的路由规则。
2. 重启WireGuard客户端服务
修改完配置后,重启客户端的WireGuard服务让新配置生效:
# 假设你的WireGuard接口名称是wg0 wg-quick down wg0 wg-quick up wg0
3. 验证配置是否生效
你可以通过以下方式确认配置效果:
- 查看路由表,确认只有VPN网段指向wg0:
正常输出应该只有ip route | grep wg010.66.66.0/24 dev wg0 scope link这类条目,不会出现默认路由(default)指向wg0。 - 实际测试流量走向:
- ping VPN内的服务器(比如10.66.66.1),用
tcpdump -i wg0 icmp抓包,能看到流量走wg0; - ping公网IP(比如8.8.8.8),用
tcpdump -i eth0 icmp抓包,能看到流量走eth0。
- ping VPN内的服务器(比如10.66.66.1),用
关于服务器端配置的说明
你的服务器端WireGuard配置是正常的,不需要修改——它的规则是允许VPN与eth0之间的转发,同时做NAT让VPN客户端能访问公网。现在客户端已经限制了只有VPN网段流量走wg0,所以服务器端的NAT规则不会影响客户端的公网流量(因为客户端根本不会把公网流量发往wg0)。
备注:内容来源于stack exchange,提问作者KindFrog




