我正在尝试在客户端和核心路由器之间建立一个基于 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/0
)10.0.0.0/24
都应路由到 ,10.0.0.1
而10.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
这应该可以。请注意,您可以继续向这两个表添加目标路由,并且只有来自相关源的流量才会到达这些条目 - 这些条目足够多,您可以选择删除每个表上的默认路由。