流量拒绝通过 VPN 接口

流量拒绝通过 VPN 接口

我建立了 VPN 隧道,并遇到了一个有趣的问题。

设置固定路由(例如,到8.8.8.8)后,一切都会正常。数据包通过该接口发送,并收到响应。设置默认网关时也是如此。

当没有设置路由,但应用程序绑定到该接口时,就会出现问题。如果我尝试使用ping -I tun0 8.8.8.8,tcpdump 会显示实际上根本没有通过隧道发送任何数据包。

更重要的是,当我使用时curl --interface tun0 google.com,tcpdump 似乎显示已发送 SYN,并且已收到 SYN-ACK...但随后似乎被丢弃。连接最终超时。

我的目标是让绑定到该接口的应用程序的流量仅通过该接口路由,而所有其他流量则通过默认网关路由。我无法将默认网关设置为 VPN。

我是否遗漏了一些简单的东西?

答案1

您需要为该接口设置一个额外的路由表。

我假设您的隧道具有 IP 地址10.10.0.10、子网255.255.255.0和网关10.10.0.1

  1. 编辑/etc/iproute2/rt_tables并添加新的路由表,并在末尾添加名称rt_tunnel和首选项1

    1  rt_tunnel
    
  2. 配置路由表。我们添加可访问的网络及其默认网关

    ip route add 10.10.0.0/24 dev tun0 src 10.10.0.10 table rt_tunnel
    ip route add default via 10.10.0.1 dev tun0 table rt_tunnel
    
  3. 添加路由规则,以便系统知道何时使用新的路由表

    ip rule add from 10.10.0.10/32 table rt_tunnel
    ip rule add to 10.10.0.10/32 table rt_tunnel
    

相关内容