企業(yè)網(wǎng)中用Linux作為路由器
使用Linux路由器作為一個現(xiàn)有的、已經(jīng)成熟的網(wǎng)絡的一個部分,將會有一個比較特殊的問題。如果我們使用Linux服務器作為DSL或者線纜連接的NAT(網(wǎng)絡地址轉換)服務器,那么我們將可通過Linux路由器對外提供服務。但是,對于大多數(shù)已經(jīng)成熟的企業(yè)網(wǎng)絡基礎構架,這種方式卻不一定實用,也不一定可行。比如,如果你的公司在現(xiàn)有的內(nèi)部HTTP和SMTP服務上已經(jīng)投入了可觀的資金,或者在一個HTTP服務器上使用了負載平衡以支持電腦商務交易,那么你的公司將不太可能把這些服務移植到Linux服務器上。但是,如果公司想尋找一種經(jīng)濟的途徑來同時控制一些Internet服務,那么基于Linux的路由器將是一個很好的選擇。
NAT的使用
讓我們來看一看公司的DSL/線纜連接只有一個IP地址的情況。我們?nèi)绾尾拍馨堰@個只有一個IP地址的流入數(shù)據(jù)包映射到內(nèi)部主機呢?事實上,Linux已經(jīng)把這一功能內(nèi)建到了自己的內(nèi)核中,所以我們只需幾個免費的軟件工具就可以來管理這個功能。
在數(shù)據(jù)包流出內(nèi)部網(wǎng)時,我們使用一個叫做IP偽裝的功能來提供NAT解決辦法,它可以讓眾多的內(nèi)部網(wǎng)主機共享一個IP地址。而對于外部連接來說,似乎所有的得到的信息都來自同一個IP地址。在Linux里,具有NAT功能的組件是一個比較容易搞混的功能,它可以在端口級別執(zhí)行入站數(shù)據(jù)包的翻譯(有進也叫反向NAT或者解除偽裝)。Linux路由器會監(jiān)聽端口80(HTTP服務使用的默認端口)的所有連接請求,并且當檢測到一個連接請求時,它會自動地把數(shù)據(jù)包轉發(fā)到內(nèi)部網(wǎng)對應的主機上。
事實上,之所以我們對反向NAT功能不太了解,是因為在主流的Linux發(fā)行版本中,一般沒有包括對該功能的配置工具。一個最一般的,也是用得最廣泛的用于管理這一功能的應用程序是“ipmasqadm”。要檢查你是否安裝了這一應用程序,你可以以系統(tǒng)管理員的身份登錄,并在shell提示符下輸入“ipmasqadm”,如果得到“Command not found”的錯誤信息,那么你可以從網(wǎng)上下載最新的RPM安裝包(比如:rpmfind.net就有)。
典型的網(wǎng)絡配置
下圖描述的是一個線纜連接中使用Linux作為路由器的典型的網(wǎng)絡結構圖。其中一個以太網(wǎng)端口(eth0)為線纜調(diào)制解調(diào)器提供了物理連接,另外一個端口(eth1)把路由器連接到LAN。此外,我們還可以使用第三個以太網(wǎng)端口eth2,雖然這不是必需的,但是使用它來提供一個獨立的DMZ (demilitarized zone,即非軍事區(qū))。DMZ是放置公共信息的最佳位置,這樣用戶、潛在用戶和外部訪問者都可以直接獲得他們所需的關于公司的一些信息,而不用通過內(nèi)網(wǎng)。你公司中的機密的和私人的信息可以安全地存放在內(nèi)網(wǎng)中,即DMZ的后面。DMZ服務器上的破壞最多只可能造成在你恢復服務器時的一段中斷服務。這樣通過使用獨立的NIC(網(wǎng)卡)把服務器隔離,我們就把他們所有的活動和企業(yè)局域網(wǎng)其它的部分分開。一般來說,我們使用DMZ來提供更好的防火墻保護,但是不管有無DMZ,在Linux服務器上的端口轉發(fā)都不會受到影響。
圖1 典型的網(wǎng)絡結構圖
端口轉發(fā)的配置
端口轉發(fā)的功能很簡單:與Sendmail、Apache響應SMTP和HTTP信息不同,我們使用“ipmasqadm portfw”來轉發(fā)所有的信息。
在激活端口轉發(fā)之前,要確保所有相關的內(nèi)核都已加載。和端口轉發(fā)服務相關的有三個模塊,具體命令是(以root身分執(zhí)行):
# insmod ip_masq_autofw.o
# insmod ip_masq_portfw.o
# insmod ip_masq_mfw.o
一旦運行了這些命令,Linux路由器就開始準備處理端口轉發(fā)請求。來看下面的指令:
# ipmasqadm portfw -f
其中-f選項告訴Linux路由器刷新端口轉發(fā)規(guī)則表。執(zhí)行這個命令不是必需的,只不過如果當前的表有多余或者錯誤條目時,這是一個好辦法。
接下來的一系列命令將建立起Linux路由器轉發(fā)信息的規(guī)則。語法如下所示:
# ipmasqadm portfw -a -P PROTO -L LADDR LPORT -R RADDR RPORT [-p PREF]
其中-a參數(shù)指示這條規(guī)則應該被加入規(guī)則表中;-P PROTO參數(shù)告訴Linux路由器轉發(fā)到哪一個IP地址(該選項只對TCP和UDP有效);-L參數(shù)指示要監(jiān)控的IP地址和端口(默認的IP地址和Internet網(wǎng)卡端口);-R參數(shù)告訴路由器把數(shù)據(jù)包送到哪兒(IP地址和端口)。
在上述例子中,要路由流入的SMTP和HTTP的信息,我們使用如下指令:
# ipmasqadm portfw -a -P tcp -L 172.16.1.1 25 -R 192.168.1.1 25
# ipmasqadm portfw -a -P tcp -L 172.16.1.1 80 -R 192.168.1.2 80
第一行設置一個規(guī)則,告訴Linux路由器監(jiān)聽對IP地址為172.16.1.1,端口為25的連接請求。并且把這些請求路由到內(nèi)部網(wǎng)中IP地址為192.168.1.1的電子郵件服務器的25端口上。同樣,第二條規(guī)則告訴路由器監(jiān)聽端口80的連接請求,并將其路由到IP地址為192.168.1.2的HTTP服務器的端口80上。
好了,現(xiàn)在所有在端口25和80的連接請求,都會被自動地轉發(fā)到應的內(nèi)部網(wǎng)主機上了。并且,任何時候,我們都可以使用“ipmasqadm portfw -l”命令來查看正在起作用的端口轉發(fā)規(guī)則:
prot localaddr rediraddr lport rport pcnt pref
TCP 172.16.1.1 192.168.1.2 80 80 10 10
TCP 172.16.1.1 192.168.1.1 25 25 10 10
-n標記告訴命令不要執(zhí)行DNS查找IP地址,并且只打印出所指定數(shù)量的IP地址。
非默認端口的連接
當然,我們也可以使用Linux的端口轉發(fā)能力來轉發(fā)非默認的端口到默認的端口,反之亦然。比如下例:
# ipmasqadm portfw -a -P tcp -L 172.16.1.1 11011 -R 192.168.1.1 110
# ipmasqadm portfw -a -P tcp -L 172.16.1.1 80 -R 192.168.1.2 25044
以上所示的第一行告訴Linux路由器把端口11011的連接請求,轉發(fā)到內(nèi)部主機192.168.1.1的端口110(POP3端口)。如果內(nèi)部主機是一個POP3服務器,那么這個命令將可以讓遠程用戶使用非默認的端口連接到他們的POP3信箱。這可以阻止一些網(wǎng)絡黑客試圖使用公共端口入侵POP郵件系統(tǒng)。
以上所示的第二行把Linux路由器上HTTP服務器標準端口80上的請求轉發(fā)到非標準端口25044上。這種情況主要是用于已經(jīng)在默認端口上運行了Web服務器,但是又想讓其能夠響應其它非默認的端口。
負載平衡
如果公司有一個高層的電子商務站點,而同時又運行著一些Web服務器,那么就可以使用ipmasqadm portfw的 -p PREF參數(shù)來實現(xiàn)在這些服務器中的負載平衡。
-p的值雖然被稱為首選項,事實上它實現(xiàn)的是一個計數(shù)器的功能。一旦Linux路由器建立起了規(guī)則所指定的相應數(shù)目的連接,它就會跳到下一個入口。
比如,現(xiàn)在我們來創(chuàng)建如下所示的端口轉發(fā)規(guī)則:
# ipmasqadm portfw -a -P tcp -L 172.16.1.1 80 -R 192.168.1.2 80 -p 5
# ipmasqadm portfw -a -P tcp -L 172.16.1.1 80 -R 192.168.1.3 80 -p 25
# ipmasqadm portfw -a -P tcp -L 172.16.1.1 80 -R 192.168.1.4 80 -p 10
# ipmasqadm portfw -a -P tcp -L 172.16.1.1 80 -R 192.168.1.5 80 -p 30
上面的指令說明,首先和Linux路由器連接的5個請求,將被送到IP地址為192.18.1.2的HTTP服務器;接下去的25個連接將被送到地址為192.168.1.3的HTTP服務器;接下去的10個連接送到192.168.1.4;下30個連接送到192.168.1.5。一旦30個連接都被送到192.168.1.5以后,整個過程重新開始。
這個轉發(fā)順序的規(guī)則說明192.168.1.3 和192.168.1.5兩個服務器處理連接的能力要強于192.168.1.2 和192.168.1.4。通過監(jiān)測這些機器的服務器負載,網(wǎng)絡管理員就可以調(diào)整服務器的映射參數(shù),以使整個站點保持最佳的響應時間。
總結
在Linux里,端口轉發(fā)是一個強大的功能,但是相關的文檔較少。不過通過以上的學習,我們發(fā)現(xiàn),其實這個功能并不難實現(xiàn)?,F(xiàn)在,你不僅可以把所有流入的Internet信息轉發(fā)到內(nèi)部網(wǎng)中的對應主機上了,而且還可以使你的整個網(wǎng)絡在信息流入和流出時共享一個IP地址,這將可以大增強內(nèi)部網(wǎng)絡的安全性。
相關文章
MPLS經(jīng)典問題利用MPLS解決和避免bgp路由黑洞問題
MPLS經(jīng)典問題利用MPLS解決和避免bgp路由黑洞問題...2007-09-09