通过OpenVPN(基于PiVPN)连接本地网络:连接不稳定问题
解决PiVPN跨网络访问家里设备的子网冲突问题
这种子网冲突的问题我帮不少人排查过,核心原因很明确:你当前身处的外部网络,和家里PiVPN所在的局域网用了一模一样的子网段(都是192.168.1.0/24)。系统的路由表会优先把同子网的请求发往本地网卡,而不是VPN隧道,所以你访问192.168.1.1时才会跳到当前网络的路由器,根本没走VPN。下面给你几个从彻底到临时的解决办法:
1. 修改家里局域网的子网段(最彻底的方案)
这是一劳永逸的办法,避开常见的冲突网段:
- 登录家里的路由器管理后台(比如192.168.1.1),找到LAN设置,把子网段改成不常见的,比如
192.168.3.0/24(避开192.168.1.x、192.168.0.x这类大众网段) - 重启路由器后,登录PiVPN服务器,重新生成客户端配置文件:运行
sudo pivpn add创建新的配置,或者sudo pivpn update更新现有配置 - 把新的配置文件导入TunnelBlick,之后不管连接什么外部网络,都不会再出现子网冲突的问题
2. 手动修改TunnelBlick的路由规则(临时应急方案)
如果不想改动家里的网络,可以给TunnelBlick添加强制路由规则:
- 打开TunnelBlick,右键点击菜单栏里的VPN连接,选择「Edit Configurations」
- 在打开的配置文件中,找到
route相关的配置块,添加一条精准路由:
这条规则会强制把访问家里路由器(192.168.1.1)的请求发往VPN隧道;如果要访问家里所有设备,改成:route 192.168.1.1 255.255.255.255route 192.168.1.0 255.255.255.0 - 保存配置后重新连接VPN,测试是否能正常访问家里的设备
3. 强制所有流量走VPN(快速但有副作用)
适合只需要访问家里网络,不需要当前外部网络本地资源的场景:
- 打开TunnelBlick的配置界面,进入「Settings」选项卡
- 勾选「Send all traffic over VPN connection」选项
- 重新连接VPN后,所有网络请求都会走VPN隧道,自然就能访问家里的设备,但当前网络的本地资源(比如办公室打印机)就无法访问了
额外排查技巧
连接VPN后,可以在Mac终端里做这些验证:
- 运行
netstat -rn查看路由表,找192.168.1.0的条目,如果网关指向本地网卡(比如en0),说明路由冲突;如果指向VPN网卡(比如utun0),就没问题 - 运行
ping 192.168.1.1,同时开另一个终端运行tcpdump -i utun0 icmp,如果能看到ICMP数据包,说明请求走了VPN;如果看不到,就是路由没生效
内容的提问来源于stack exchange,提问作者Shewbox
相关产品推荐
相关产品推荐

