我建立了 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
。
编辑
/etc/iproute2/rt_tables
并添加新的路由表,并在末尾添加名称rt_tunnel
和首选项1
1 rt_tunnel
配置路由表。我们添加可访问的网络及其默认网关
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
添加路由规则,以便系统知道何时使用新的路由表
ip rule add from 10.10.0.10/32 table rt_tunnel ip rule add to 10.10.0.10/32 table rt_tunnel