是否可以为每个应用程序设置不同的默认网关?

是否可以为每个应用程序设置不同的默认网关?

假设我的网络上有一台机器,有两个不同的有效的工作网关。我们将其称为10.0.0.1互联网的“正常”网关,由 ISP 和10.0.0.2独立 VPN 设备提供,该设备将所有内容在更广阔的互联网世界之前路由到公司网络。这样做的一个副作用是它们从不同的地理位置出现在网上。

在此网络上,用户(或其管理员)可以根据 DHCP 服务器告诉他们的内容或他们决定设置的内容来选择要使用的网关。这对许多人来说很方便——您可以通过网关更快、更低延迟地访问本国的互联网A,并通过网关访问内部资源(和美国互联网)B

对于在此网络上运行 linux 的机器,是否可以更改网络上的路由每个应用程序基础?我知道我们可以在每个主机如果ip route我们事先知道要将数据包发送到哪里,但是如果我们想打开一个应用程序(例如 firefox)将其所有数据包发送到网关,A而另一个应用程序(例如 Chromium)发送到网关,该怎么办B

对于 VLAN、虚拟机(或容器)和虚拟网络适配器来说,这显然是可能的,但我很想知道是否有“裸机”答案。

答案1

如果您愿意使用不同的用户,那么这可以通过小型 Linux 策略路由配置来完成。

假设您将使用 uid 1001 的用户,作为应用程序使用 VPN 设备网关的用户。我们还假设您的基本路由配置非常简单,不会干扰我们即将添加的策略路由配置。

添加特殊路由以使用 VPN 应用程序:

ip route add default via 10.0.0.2 table 110

使用策略路由为 uid 1001 的用户应用该特殊路由:

ip rule add uidrange 1001-1001 lookup 110 pref 29000

注意:您仍将使用相同的 DNS 服务器。尽管也有一些方法可以改变这一点,但使用 Linux 命名空间可能会更好。

注意:某些应用程序(例如traceroute)在二进制文件上设置了setuid 标志。这将导致该应用程序的网络流量与上述策略路由规则不匹配。

相关内容