任務:辦公室有10台電腦,組成局域網,其中1台名為gate的機器配有ISDN卡,可撥號上網,另外9台機器也要上網,由gate機器做代理或網關,共享其ISDN設備。原來的方案是:gate機器上的操作系統是Win98,使用的代理軟件是WinGate。現在,gate機器的操作系統換成了Linux,怎麼讓其它9台機器也能上網?
經過嘗試,我使用IPChains的IP偽裝轉發功能成功地做到了這一點。我的配置為:藍點Linux 2.0,Kernel-2.2.16,isdn4linux v3.1pre1,上海貝爾生產的ISDN內置卡,型號為SBT6021。
下面介紹具體做法。介紹順序為:內核->ipchains的配置->其它機器的配置。
0、 前提條件
前提條件當然就是這台配有ISDN卡,安裝了Linux的名為gate的機器,本身必須能夠順利撥號上網。我已做到了,具體操作過程寫在我的另一篇文章《在Linux下使用ISDN撥號上網》中。
1、 內核
這個方案的原理是:由於這台gate機器建立撥號連接後,具有真正的IP地址,能夠正常地訪問Internet,而局域網內其它機器卻沒有真正的IP地址,不能象gate機器那樣正常地訪問Internet,解決辦法就是由gate機器代勞其它機器的Internet訪問請求,假裝是它自己的。把這台gate機器作為局域網的網關,當它收到來自局域網內其它機器的請求數據包時,進行偽裝,然後再轉發出去;相應地,當偽裝後發出去的數據包得到響應返回時,先對該響應數據包進行還原,再轉交給回局域網內真正發出請求的那台機器。這種做法叫做IP Masquerade(IP偽裝)。
要Linux內核支持IP偽裝這種功能,在編譯內核時,必須選中下列選項:
Network firewalls
IP: firewalling
IP: masquerading
IP: ipportfw masq support
IP: ipautofw masquerade support
IP: ip fwmark masq-forwarding support
IP: ICMP masquerading
但我不必急於編譯內核,如果現有的內核已經包含這些選項了,我又何必重復一遍呢。那我怎麼知道現有內核是否已經包含這些選項了呢?看內核編譯配置文件/usr/src/linux/.config(注意:文件名以"."開頭的文件是隱藏文件,要用ls -a才可看到。)我看到其中有下面這7行內容,對應於剛才的7個選項:
CONFIG_FIREWALL=y
CONFIG_IP_FIREWALL=y
CONFIG_IP_MASQUERADE=y
CONFIG_IP_MASQUERADE_ICMP=y
CONFIG_IP_MASQUERADE_IPAUTOFW=m
CONFIG_IP_MASQUERADE_IPPORTFW=m
CONFIG_IP_MASQUERADE_MFW=m
"=y"表示內核直接支持(代碼已鏈入內核中),"=m"表示模塊支持(代碼在另外的內核中,可由內核載入)。於是這就表明,藍點Linux 2.0的原有內核已包含這些選項了,我就不用重新編譯內核啦。
但仍然得做點事情,首先必須命令內核,啟動IP轉發功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
往/proc/sys/net/ipv4/ip_forward裡寫入"1"就行了。
有些功能如ftp, irc等的偽裝,需要相應的模塊支持,這些模塊放在/lib/modules/2.2.16/ipv4目錄中,裝入它們:
depmod -a
modprobe ip_masq_ftp
modprobe ip_masq_irc
modprobe ip_masq_raudio
2、 ipchains的配置
藍點Linux 2.0包含的ipchains軟件已經足夠滿足我的要求了,我就不必安裝新的,只需配置一下即可。Ipchains是一個包過濾器,功能強大,設置也復雜,但我只想使用其IP偽裝轉發功能而已,設置得以簡化。我這台Linux機器在一個局域網上,局域網的域名為thalia.com,地址為210.96.100.0,這台機器的主機名為gate,地址為210.96.100.10。
對ipchains過濾器進行設置,就是設置各種鏈及規則。先看看目前情況如何:
ipchains -L
得到類似下面的信息:
Chain input (policy ACCEPT):
Chain forward (policy ACCEPT):
Chain output (policy ACCEPT):
沒什麼規則,3條鏈的策略都是接受。
由於只是使用偽裝轉發功能,所以只對forward鏈進行操作。
ipchains -P forward DENY
把forward鏈的策略設為DENY,拒絕通過。此後增加可通過的規則,逐漸允許更多的數據包通過,這是一種先緊後松的做法。
ipchains -A forward -s 210.96.100.0/255.255.255.0 -j MASQ
增加1條規則,這條規則說明:對來自210.96.100.0局域網內(網絡掩碼為255.255.255.0)的數據包(-s 210.96.100.0/255.255.255.0),進行偽裝處理(-j MASQ)。
這時候再看一下情況如何:
ipchains -L
得到類似下面的信息:
Chain input (policy ACCEPT):
Chain forward (policy DENY):
target prot opt source destination ports
MASQ all ------ 210.96.100.0/24 anywhere n/a
Chain output (policy ACCEPT):
forward鏈中多了1條MASQ規則。
要簡單地實現共享ISDN上網,這已經足夠了。
3、 其它機器的配置
配置局域網上的其它Win98, Win2000機器,要點是把缺省網關設為那台Linux gate機器,DNS域名服務器也設為那台Linux gate機器。應用軟件如IE,OutlookExpress等不用做任何設置,想象成ISDN裝在本機上就行。
我現在就去設置1台Win98機器試試看。
(1)在“控制面板 | 網絡 | 配置”下,選中“TCP/IP->3Com PCI Ethernet Adapter”(這台機器配的是3Com網卡),點擊“屬性”按鈕,彈出TCP/IP屬性對話框。
(2)到“IP地址”頁中,指定IP地址,IP地址為210.96.100.14,子網掩碼為255.255.255.0;到“網關”頁中,添加新網關210.96.100.10。
(3)機器重啟。
(4)打開IE,浏覽http://168.160.224.103(即新浪網sina.com.cn),看到了新浪的首頁;但是浏覽http://www.sina.com.cn,卻不行。這是域名解析的問題。
(5)重復(1)步驟,彈出TCP/IP屬性對話框,到“DNS配置”頁中,啟用DNS,主機名寫zzh,添加DNS服務器搜索順序210.96.100.10。機器重啟。打開IE,再次浏覽http://www.sina.com.cn,這次好啦。
4、 形成shell文件
上面對內核和ipchains的配置是逐條命令進行的,已經全部成功通過,現在把它們寫成shell文件。
/etc/ppp/ip-masq-start文件內容如下:
# IP masq
echo 1 > /proc/sys/net/ipv4/ip_forward
depmod -a
modprobe ip_masq_ftp
modprobe ip_masq_irc
modprobe ip_masq_raudio
ipchains -P forward DENY
ipchains -A forward -s 210.96.100.0/255.255.255.0 -j MASQ
讓它成為可執行文件:
chmod a+x /etc/ppp/ip-masq-start
以後事情就簡單了。要開啟IP偽裝轉發功能,下命令/etc/ppp/ip-masq-start。
參考資料:
黃志偉,IP Masquerade HOWTO中文版,http://www.linux.org.tw/CLDP/gb/IP-Masquerade-HOWTO.html
張中華([email protected]),2000.12.02,http://zzh-cn.com
--------------------------------------------------------------------------------
相關文件下載
IP偽裝轉發啟動:/etc/ppp/ip-masq-start