我正在尝试在客户端和核心路由器之间建立一个基于 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) -> 互联网
ClientGroup 3 (10.0.2.0/24) -> Ubuntu 网关 (10.0.2.2) -> 核心路由器 (10.0.2.1) -> 互联网
客户使用 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
很简单,特别是因为您已经在使用多个路由表:
(抱歉,没有将我的示例转换为 netplan;但是由于您喜欢使用常规 ip 路由规则,因此应该足够了 - 此示例假设您从头开始)
因此,您的网络计划已经创建了三个路由表,所以我们将使用您拥有的第一个路由表:
您拥有的第三个路由表:
然后创建两条规则,根据流量的源 IP 地址将流量发送到每个表:
这应该这样做。请注意,您可以继续向这两个表添加目标路由,并且只有来自关联源的流量才会到达这些条目 - 这些条目足够多,您可以选择删除每个表上的默认路由。