帶單網卡的 Linux 路由器
假設我有一個小型網路,其 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>
) 很容易將一個介面變成多個介面。