如何使用 iptables/route 通过其自己的网关路由从一个本地网络设备的流量?

如何使用 iptables/route 通过其自己的网关路由从一个本地网络设备的流量?

在我的 Linux 服务器(Ubuntu)上,如何配置来自我的一个网络接口(我的 VPN 设备 - ppp0)的流量以通过其自己的网关地址进行路由?

注意事项:

  • 我无法将其设置为服务器上的默认路由,因为通过它路由所有流量的成本很高
  • 没有与 VPN 链接的特定子网 - 它可能是到任何公共 IP 或端口的流量(VPN 充当代理)

最终目标是能够配置单个本地应用程序以绑定到 VPN IP 并仅通过 VPN 进行通信,但其他服务器流量不应通过它进行路由。我已经这样设置了,但我似乎需要某种额外的路由规则才能使其正常工作。

答案1

如果 VPN 实际上充当代理,则应将源地址重写到 ppp 会话的远端(除非它是无编号接口,但我在 VPN 上没有看到这种情况)。如果它实际上路由正常,并且目的地可能在任何地方,那么它就会成为一个更有趣的问题。

LARTC 中概述了基本解决方案——您需要创建第二个路由表,将 VPN 隧道指定为默认路由,然后添加过滤器以引导某些流量查看辅助路由表而不是默认路由表。如果您只需要一个应用程序使用隧道,并且该应用程序可以绑定到隧道接口的 IP,那么来自源 IP 的基于策略的路由应该可以解决问题——请参阅此处的示例:http://lartc.org/howto/lartc.rpdb.html

答案2

您可以使用该dev参数将路由分类到指定的设备。

route add -net 0.0.0.0 gw ENTER-GATEWAY-HERE dev ppp0

相关内容