根据源地址选择下一跳

根据源地址选择下一跳

我正在尝试在客户端和核心路由器之间建立一个基于 Ubuntu 的网关,理想的流量应该是:

ClientGroup 1(10.0.0.0/24)-> Ubuntu 网关(10.0.0.2)-> 核心路由器(10.0.0.1)-> Internet

ClientGroup 2(10.0.1.0/24)-> Ubuntu 网关(10.0.1.2)-> 核心路由器(10.0.1.1)-> Internet

ClientGroup 3(10.0.2.0/24)-> Ubuntu 网关(10.0.2.2)-> 核心路由器(10.0.2.1)-> Internet

客户端使用 Ubuntu 实例作为其网关。

以下netplan配置正确地路由内部流量,但是对于 Internet 流量,eth0.1由于 ,它默认为 (10.0.1.1) gateway4

network:
    version: 2
    ethernets:
        eth0:
            addresses: [10.0.0.2/24]
            routes:
                - to: 10.0.0.0/24
                  via: 10.0.0.1
                  table: 101
            routing-policy:
                - from: 10.0.0.0/24
                  table: 101
            dhcp4: false

    vlans:
        eth0.1:
            id: 1
            link: eth0
            addresses: [10.0.1.2/24]
            gateway4: 10.0.1.1
            routes:
                - to: 10.0.1.0/24
                  via: 10.0.1.1
                  table: 102
            routing-policy:
                - from: 10.0.1.0/24
                  table: 102
            dhcp4: false


        eth0.2:
            id: 2
            link: eth0
            addresses: [10.0.2.2/24]
            routes:
                - to: 10.0.2.0/24
                  via: 10.0.2.1
                  table: 103
            routing-policy:
                - from: 10.0.2.0/24
                  table: 103
            dhcp4: false

关于如何将所有流量路由到核心路由器上相应的下一跳,您有什么想法吗?也就是说,所有来自的流量(0.0.0.0/010.0.0.0/24都应路由到 ,10.0.0.110.0.2.0/24应路由到10.0.2.1

ip route我也很乐意使用简单的规则。

提前致谢!


编辑 13/05/20

我为每个路由添加了一条默认路由routes,路由工作正常,但traceroute输出看起来很奇怪:

routes:
  - to: 0.0.0.0/0
    via: 10.0.0.1
    table: 101

第一次测试:

traceroute to 1.1.1.1 (1.1.1.1), 64 hops max, 52 byte packets
 1  10.0.0.2 (10.0.0.2)  0.896 ms * *
 2  10.0.0.1 (10.0.0.1)  1.361 ms  1.126 ms  0.879 ms

第二次测试:

traceroute to 1.1.1.1 (1.1.1.1), 64 hops max, 52 byte packets
 1  * * *
 2  10.0.0.1 (10.0.0.1)  1.353 ms  1.062 ms  0.825 ms

答案1

非常简单,特别是因为您已经在使用多个路由表:

(抱歉,没有将我的示例转换为 netplan;但既然您愿意使用常规 IP 路由规则,那么它就足够了 - 并且此示例假设您从头开始)

因此,您的 netplan 已经创建了三个路由表,因此我们将使用您拥有的第一个路由表:

ip route flush 101
ip route add table 101 to 10.0.0.0/24 dev eth0
ip route add table 101 to default via 10.0.0.1

第三个路由表如下:

ip route flush 103
ip route add table 103 to 10.0.2.0/24 dev eth0.2
ip route add table 103 to default via 10.0.2.1

然后创建两个规则,根据流量的源 IP 地址将流量发送到每个表:

ip rule add from 10.0.0.0/24 table 101 priority 101
ip rule add from 10.0.2.0/24 table 103 priority 103

这应该可以。请注意,您可以继续向这两个表添加目标路由,并且只有来自相关源的流量才会到达这些条目 - 这些条目足够多,您可以选择删除每个表上的默认路由。

相关内容