要让指定IP地址的流量通过VPN,可以使用路由规则或策略路由(Policy Routing)来实现,以下是不同操作系统下的配置方法:
Linux(使用 ip route 和 iptables/nftables)
方法1:添加静态路由
假设:
- VPN接口名为
tun0,网关为8.0.1。 - 需要走VPN的目标IP为
0.113.45。
# 持久化(根据发行版选择) echo "203.0.113.45 dev tun0 via 10.8.0.1" >> /etc/sysconfig/network-scripts/route-tun0
方法2:策略路由(高级)
如果需基于源IP或复杂条件,使用 ip rule:
# 创建自定义路由表 echo "200 vpn_route" >> /etc/iproute2/rt_tables # 添加路由到自定义表 ip route add default via 10.8.0.1 dev tun0 table vpn_route # 标记目标IP的流量 iptables -t mangle -A PREROUTING -d 203.0.113.45 -j MARK --set-mark 1 # 应用策略路由 ip rule add fwmark 1 table vpn_route
Windows(通过路由表)
-
查找VPN网关:
route print -4
找到VPN连接的接口(如
16.0.1)和接口编号(如11)。 -
添加路由:
route add 203.0.113.45 mask 255.255.255.255 172.16.0.1 if 11
- 持久化:加
-p参数。
- 持久化:加
macOS(使用 route)
# 查看VPN网关(如 utun1) netstat -rn | grep utun # 添加路由 sudo route -n add 203.0.113.45 -interface utun1
路由器(OpenWRT/DD-WRT)
-
通过LuCI界面:
- 进入
Network > Routing,添加静态路由。 - 目标:
0.113.45,网关:VPN接口(如tun0)。
- 进入
-
命令行:
ip route add 203.0.113.45 dev tun0
注意事项
- VPN配置:
确保VPN已连接且路由未被覆盖(如某些VPN客户端会覆盖默认路由)。
- 回滚:
- 删除路由:
ip route del 203.0.113.45(Linux)或route delete 203.0.113.45(Windows)。
- 删除路由:
- 测试:
traceroute 203.0.113.45 # 查看路径是否经VPN curl ifconfig.me # 检查出口IP(需目标IP支持响应)
进阶场景
- 源IP分流:结合
iptables和ip rule实现基于源IP的VPN路由。 - 容器/VPN嵌套:在Docker或虚拟机中通过网络命名空间隔离路由。
如需更具体的配置,请提供操作系统和网络环境细节。



