Linux

帶單網卡的 Linux 路由器

  • May 5, 2011

假設我有一個小型網路,其 VLAN 數量如下:

VLAN1 10.1.1.0/24

VLAN2 10.1.2.0/24

VLAN3 10.1.3.0/24

VLAN 路由由核心交換機負責,該交換機不執行基於策略的路由 (Dell PowerConnect 6224F),因此它只會為上述 VLAN 之外的所有其他流量採用預設路由。(即 0.0.0.0/0)。

現在假設我有兩個網際網路連接,每個在 VLAN1 上都有一個 NAT DSL 調製解調器(比如 10.1.1.16 和 10.1.1.17),我希望 VLAN2 上的設備使用一個網際網路連接,而 VLAN3 上的設備使用另一個,我在想使用Linux機器來實現這一點。

假設我配置了一個 Linux 機器(10.1.1.8),並將核心交換機上的預設網關配置為指向 10.1.1.8,那麼是否可以在 Linux 機器上配置 IPTables 來滿足我的需要?

大多數設置基於 Linux 的路由器的操作指南都需要兩個兩個網路介面,但我認為在這種情況下不需要這樣做,因為這個 Linux 機器將與 DSL 調製解調器位於相同的 VLAN 上。(另外我目前沒有任何備用網卡可以放入我擁有的伺服器中),所以我的問題是,(假設有可能)任何人都可以為我提供一些指導來創建一些 IP 表規則來解決這個問題嗎?

將來我可能還希望所有 HTTP 連接都被透明代理,理想情況下是通過共享的 squid 實例,但仍將請求路由到適當的 DSL 連接。

編輯:

我不需要在 VLAN 之間路由,因為核心交換機已經做得很好了。我可能沒有正確理解術語,但是如果我將核心交換機上 0.0.0.0/0 的預設路由配置為 10.1.1.8,我是否可以將 Linux 機器配置為將數據包重定向到正確的 DSL 網關,具體取決於數據包的來源?

我正在努力實現的一個例子……

VLAN3 (10.1.3.123) 上的 PC 向 1.2.3.4 發送數據包。PC 上的預設網關是 10.1.3.1(即 VLAN3 上的路由介面),然後交換機將此數據包通過 10.1.1.1 路由到 10.1.1.8(交換機配置為使用此 IP 作為 0.0.0.0 的下一跳/0)。然後,Linux 機器通過 DSL 調製解調器 10.1.1.17 路由/重定向該數據包,因為源 IP 在 VLAN 3 (10.1.3.0/24) 內。如果數據包來自 10.1.2.0/24,那麼 Linux 機器將通過 10.1.1.16 路由/重定向

                     VLAN 1
                  (10.1.1.0/24)
 10.1.1.16 (DSL1) ------+
                        |
 10.1.1.17 (DSL2) ------+
                        |
 10.1.1.8 (Linux) ------+
                        |
                 +-------------+
  VLAN 2  -------| Core Switch |-------  VLAN 3
(10.1.2.0/24)     +-------------+      (10.1.2.0/24)

進一步編輯:

我想我還沒有很好地解釋我在這裡想要實現的目標,但請耐心等待,因為我不是網路專家(以防萬一你還沒有發現這一點!)。

我不想在 linux 盒子上創建多個介面,因為我不希望它在 VLAN 之間進行任何路由,我只想讓盒子位於 VLAN 之一(單個介面)上並轉發(或路由?)通過 DSL1 或 DSL2 的數據包,具體取決於數據包的來源。如果 10.1.1.8 是我們網路上 0.0.0.0/0 的預設路由,那麼肯定可以這樣做嗎?

您提出的建議當然是可能的,事實上這是一種非常常見的網路配置,讓第 3 層交換機完成大部分內部路由並提供一些基本的訪問控制,然後將更複雜的流量解除安裝到邊緣/核心。

您的 Linux 邊緣路由器需要了解交換機後面的所有子網 - 您可以使用靜態路由執行此操作,例如:

route add -net 10.1.1.0/16 gw <switch IP>

或者戴爾交換機(來自快速Google)支持 RIP 和 OSPF,因此如果您使用 Quagga 或類似工具來獲取廣告,您可以讓它自動發佈到 Linux 機器的路由。

您的客戶端只需要配置其預設網關(其 VLAN 上的交換機介面)並在交換機上設置適當的 ACL 以允許其流量傳出到邊緣。

不幸的是,我沒有在 Linux 上做過 PBR,所以不能給你任何神奇的規則,只能真正指出Google發現的一篇文章——雖然看起來很相關。不過不要太糾結於多介面的事情,在 Linux 上通過創建別名 ( ifconfig eth0:25 <ipaddr>) 或 VLAN ( ifconfig eth0.25 <ipaddr>) 很容易將一個介面變成多個介面。

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