禁用默认路由推送,避免覆盖所有流量

在单网卡环境下配置VPN并访问外网,需要解决路由冲突和流量转发问题,以下是分步解决方案:


基础网络拓扑

  • 环境:单物理网卡(如eth0),需同时处理VPN流量和普通外网访问。
  • 问题:VPN默认会覆盖所有流量,导致外网访问被路由到VPN隧道。

解决方案:策略路由(Policy-Based Routing)

通过Linux策略路由,将VPN流量和外网流量分离。

步骤1:配置VPN客户端

假设使用OpenVPN,编辑配置文件(如client.ovpn):

dev tun
remote your.vpn.server.comroute-noexec

步骤2:添加VPN特定路由

连接VPN后,手动添加路由:

# 添加VPN服务器的路由(通过原网关)
ip route add your.vpn.server.com via 原网关 dev eth0
# 仅将特定流量(如内网)通过VPN隧道
ip route add 10.0.0.0/8 via $VPN_GATEWAY dev tun0

步骤3:配置策略路由

# 创建自定义路由表
echo "200 vpn" >> /etc/iproute2/rt_tables
# 添加规则:标记来自VPN的流量
iptables -t mangle -A OUTPUT -o tun0 -j MARK --set-mark 1
# 使用标记的路由表
ip rule add fwmark 1 table vpn
ip route add default via $VPN_GATEWAY dev tun0 table vpn
# 主路由表保持原外网网关
ip route add default via 原网关 dev eth0

步骤4:启用IP转发(如需NAT)

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

验证与测试

  • 检查路由表ip route show table mainip route show table vpn
  • 测试分流
    curl ifconfig.me           # 应显示原外网IP
    curl --interface tun0 ifconfig.me  # 应显示VPN IP

可选优化

  • DNS泄漏防护:配置/etc/resolv.conf使用VPN的DNS或dnsmasq
  • 持久化配置:将路由和iptables规则写入/etc/network/interfacessystemd脚本。

常见问题

  • VPN断开恢复:添加脚本自动重连并恢复路由。
  • 性能瓶颈:单网卡需处理双倍流量,确保带宽足够。

通过策略路由,可实现单网卡环境下VPN与外网流量的共存,根据实际需求调整路由规则和子网范围。

禁用默认路由推送,避免覆盖所有流量

扫码下载旋风加速器

扫码下载旋风加速器

025-8675-4321
扫码下载旋风加速器

扫码下载旋风加速器