根據源地址選擇下一跳
我正在嘗試在客戶端和核心路由器之間建立一個基於 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 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
這應該這樣做。請注意,您可以繼續向這兩個表添加目標路由,並且只有來自關聯源的流量才會到達這些條目 - 這些條目足夠多,您可以選擇刪除每個表上的預設路由。