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


9

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

Answers:


9

您可能可以使用以下方法进行操作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在做任何事情之前先阅读。另外,请准备好重新启动,并且不要远程执行此操作。您可以很容易地创建不正确的路由来终止您的远程访问。我是最后一项建议中的经验之声。


1
请注意,您还可以为整个块指定网关,``ip route通过192.168.0.1添加10.1.0.0/16
jthill 2013年

感谢您的回答,这将帮助我指出正确的方向。我会尝试一下,让您知道。
Walter

5

您要问的是policy-based routingsource-based routing。David Schwartz在同一站点上有出色的介绍

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

这样,您可以选择是希望为所有应用程序提供单独的路由表,还是希望针对每个应用程序覆盖相同的规范。


如果要按目的地进行路由,则不需要策略路由。
Diego Woitasen

嗨,这也是一个好点,嗯,它将提供更大的灵活性,这可能比我现在想要的要先进。绝对是要学习的东西。
Walter

3

了解源基本路由的好地方是Linux Advanced Routing&Traffic Control,
您也可以阅读手册

man ip rule
man ip route

通常,您应该添加规则(我仅出于演示目的添加了接口eth1,可以省略)

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

这里是:
dev eth1-用于将数据包发送
到170.10.0.10的设备 -目标
表2-您应该在其中配置路由的表
优先级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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.