通过目标网络将流量路由出不同的网关

通过目标网络将流量路由出不同的网关

我有几个网关,希望根据目的地将一些流量从不同的网关路由出去。我猜我需要结合使用 iproute2 和 iptables 规则,但不知道从哪里开始。
有人可以举个例子吗?

答案1

你也许可以做你想做的事ip route

ip route add 8.8.8.8 via 10.0.0.1 dev enp3s8
ip route add 10.0.0.0/24 dev eth0

第一个ip route add显示单个 IP 地址,将给定的以太网接口 (ep3s8) 发送到下一跳路由器 10.0.0.1

第二条路由针对整个网络 10.xyz,发送给定的以太网卡 eth0。这就是“本地网络”,它没有下一跳路由器,它们都位于同一条逻辑线路上。

不过,在做任何事情之前你都想阅读man ip-route。另外,请做好重新启动的准备,并且不要远程执行此操作。您可以很容易地创建错误的路由来终止您的远程访问。我是最后一条建议中的经验之声。

答案2

你问的是policy-based routingsource-based routing。有一个很好的介绍作者:David Schwartz,在同一网站上。

我想指出的是,还有一个简洁的小程序,可以在这里找到,它允许您将特定应用程序绑定到给定接口。对于像 openssh 这样的应用程序来说,这当然很容易,因为它可以选择绑定到所需的监听地址。但是这个库甚至允许您将没有此类选项的应用程序(例如 Firefox)绑定到给定的 IP 地址。

通过这种方式,您可以选择是否希望为所有应用程序提供单独的路由表,或者根据每个应用程序覆盖这些相同的规范。

答案3

阅读源基础路由的好地方是Linux 高级路由和流量控制
您还可以从命令行阅读手册:

man ip rule
man ip route

注意:在某些系统上,您可能需要执行man ip-ruleman ip-route。或者您可以在线阅读: 规则 和  路线。警告:在线版本可能不完全相同的 到您系统上的版本。

一般来说,您应该添加一条规则。我在示例中指定了一个接口 (eth1)。这是可选的并且可以省略。

# ip rule add dev eth1 to 170.10.0.10 table 2 priority 20000

分解:

  • dev eth1   – 将用于发送数据包的设备
  • to 170.10.0.10– 目的地
  • table 2    – 您应该在其中添加路线的表
  • priority 20000– 规则的优先级

您可以通过运行以下命令来查看您的规则:

# ip ru sh
0:     from all lookup local
20000: from all to 170.10.0.10 iif eth1 lookup 2
32766: from all lookup main
32767: from all lookup default

接下来,您应该添加路由,并指定将添加它们的表。在这种情况下,它将是表 2。

# ip route add table 2 via 170.10.0.1 default

为了查看您的路线,您应该运行:

# ip route show ta 2

相关内容