WireGuard流量路由规则及特定本地服务访问配置咨询
WireGuard流量路由规则及特定本地服务访问配置咨询
嗨,先给你理清楚WireGuard的核心路由逻辑:它的流量走向完全由配置里的AllowedIPs参数决定——
- 如果把
AllowedIPs设成0.0.0.0/0(IPv4)或者::/0(IPv6),客户端所有上网流量都会走VPN服务器转发; - 要是只指定特定IP段(比如你NAS所在的局域网段),那只有访问这些目标的流量才会走VPN,其余流量直接走客户端自己的普通互联网。
接下来重点说你要的「只让本地服务(包括Pi-hole DNS)流量走VPN,其余流量直连外网」的配置方法,步骤很清晰:
1. 先确认关键信息
先搞清楚两个核心地址:
- 你的本地局域网网段(比如常见的
192.168.1.0/24,根据你家实际的网段来); - 你Pi-hole的具体IP(比如
192.168.1.100,就是Docker Swarm里Pi-hole容器绑定的宿主机IP或者容器本身的固定IP)。
2. 调整WireGuard客户端配置
打开你用来连接的WireGuard客户端配置文件(.conf格式),修改两个关键项:
- AllowedIPs:不要用全流量的
0.0.0.0/0,换成你本地网段+Pi-hole的IP,比如:
这样客户端只有访问本地局域网设备和Pi-hole的流量才会走VPN,其他所有上网请求直接走自己的网络。AllowedIPs = 192.168.1.0/24, 192.168.1.100/32 - DNS:把客户端的DNS设置成Pi-hole的IP,比如:
这一步能确保客户端的DNS解析请求会通过VPN发到你的Pi-hole,既用上了Pi-hole的过滤功能,又不会让DNS流量走普通外网。DNS = 192.168.1.100
3. 确认服务器端的转发权限
最后检查下你的NAS(WireGuard服务器)是否开启了IP转发功能——毕竟要让VPN流量能转到本地局域网。在OpenMediaVault里,WireGuard插件一般会自动开启,但你可以手动确认:
- 登录NAS的终端,执行
sysctl net.ipv4.ip_forward,如果返回net.ipv4.ip_forward = 1就是开启状态; - IPv6同理,检查
sysctl net.ipv6.conf.all.forwarding,返回1就没问题。
小提示
如果你的客户端所在的网络和本地局域网网段冲突(比如客户端也在192.168.1.x的网络里),可能会出现访问异常,这时候可以考虑修改WireGuard的虚拟网段,或者调整本地局域网的网段(比如改成192.168.2.0/24)。
备注:内容来源于stack exchange,提问作者Archimedes Trajano




