Ubuntu

根據源地址選擇下一跳

  • May 15, 2020

我正在嘗試在客戶端和核心路由器之間建立一個基於 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.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

很簡單,特別是因為您已經在使用多個路由表:

(抱歉,沒有將我的範例轉換為 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

這應該這樣做。請注意,您可以繼續向這兩個表添加目標路由,並且只有來自關聯源的流量才會到達這些條目 - 這些條目足夠多,您可以選擇刪除每個表上的預設路由。

引用自:https://serverfault.com/questions/1016814