目的:現在有一個小局域網,其中有一個linux Box上有modem可以撥號上Internet, 要求局域網上的所有機器可以通過Linux Box上internet. 實施步驟:
1 預備PPP撥號連接,參考撥號上網的問題。
2 網絡的基本配置應該完全正常,保證局域網內網絡的連接沒有問題。
3 預備內核,通常內核沒有編譯進forward/gateway/masquerade等選項,需要重新配置并編譯。在內核配置里加上以下幾項:
Code maturity level option
PRompt for development/or ... (答應打開內核里的某些實驗性代碼選項)
Networking options: Network firewalls
ip: forward/gatewaying
IP: firewalling IP: firewall packet logging
IP: masquerading
IP: ipautofw masquerading (假如你的應用不在已知偽裝支持之列,打開此項)
IP: ICMP masquerading
IP: transparent proxy support (可選)
IP: always defragment (強烈推薦)
IP: accounting Network device support Dummy net driver support
4 重新配置網絡。
a, 分配IP偽裝地址。撥號上網頂多只有一個有效IP地址,所以Linux Box上的網以及其他機器上的網卡上都只能分配偽裝IP地址。好在IETF保留了一大堆偽裝地址可:一個A類網絡地址: 10.0.0.0 (網絡掩碼 255.0.0.0)
十六個B類網絡地址:172.16.0.0 - 172.31.0.0 (網絡掩碼255.255.0.0)
二百五十六個C類網絡地址:192.168.0.0 - 192.168.255.0 (網絡掩碼255.255.255.0)
按照VLSM(可變長子網掩碼),你可以不太在意網絡掩碼,比如可自定義一個10.168.1.0/24、 192.168.1.128/25等等,但192.0.0.0/8肯定是不對的。
配置后的網絡舉例如下:
192.168.10.0/24 192.168.10.2--+ eth0 +---------+ modem+--
192.168.10.1------+linux box+-------ppp to isp +---------+
192.168.10.3--+ ......
需要注重的是,有很多ISP如263,169,col都用到了IP Masquerade技術,它們給撥號上網用戶分配的也是偽裝地址,所以你要避免你的設置與它們的分配重復。 b, 設置網關及DNS。Linux Box上的缺省網關在ppp建立后應該分配在ppp上,參見ppp的配置說明。 局域網上其他機器的缺省網關應指向Linux Box,如為192.168.10.1。這時候Linux Box相當于 一個簡單的靜態路由器,不過融合了IP Masquerade方式。假如你用Proxy代理服務器而且是用集線器(hub)簡單組網的話,這一步不是必須的,因為這時由Proxy來轉發數據包,Linux Box不再需要靜態路由轉發的功能。DNS通常設置為指向ISP的DNS服務器,也可以指向任一個DNS服務器。假如用Proxy的話,在客戶端可以不設DNS。在Linux Box上配置一個Cache Only的DNS也會提升一點點性能。c, 答應Linux的IP轉發功能,編輯/etc/sysconfig/network文件,設置FORWARD_IPV4=yes。整個文件看起來像這樣: NETWORKING=yes
FORWARD_IPV4=yes
HOSTNAME=host.your.domain.name
DOMAINNAME=your.domain.name
GATEWAYDEV=
GATEWAY=
假如用proxy的話,沒有必要打開這個選項(當然打開這個選項對proxy沒有大的影響)。打開這項可以讓局域網上的其他偽裝地址“透明”地訪問Internet,不利之處正如raner 所說,針對具體的應用級協議要有相應的模塊支持,已知的支持有Ping(ICMP),HTTP,FTP, NNTP,traceroute,telnet,IRC,POP&SMTP,VRML,WAIS,Archie,Real Audio Player,Gopher, True Speech Player,Internet Wave Player,Inetrnet Phone,Powwow,CU-SeeMe,VDOLive, PC-anywhere,Socket Watch,Linux net-acct package等。
用Proxy的最大好處是可以緩存以前瀏覽過的內容。兩種方式都用上也許是個好注重(假如要計帳收錢可能不太方便)。另外,這種情況下把GATEWAYDEV/GATEWAY空著好了,千萬別設成eth0,撥號上網后,pppd 的defaulteroute選項會自動通知內核把ppp設成缺省網關的。
5 設置IP包轉發策略/規則 只有打開了FORWARD_IPV4=yes才有效,假如用proxy則設不設沒有關系,原因嘛前面已經講過。 這時候要用到ipfwadm(ip forward administry)工具,用man ipfwadm看看都有什么參數,簡單的應用如下:
ipfwadm -F -p deny <==首先禁止所有轉發
ipfwadm -F -a m -S 192.168.10.0/24 -D 0.0.0.0/0 <==答應子網192.168.10.0到任何地方
查看計帳信息:ipfwadm -A -a -b -S 192.168.10.x
ipfwadm -Aln
提醒一下,設定策略順序很重要。自己用man ipfwadm讀具體信息吧,或去讀HOWTO,理解所以然。
6 設置proxy服務
可以做proxy的軟件很多,主要有squid,socks,FWTK(TIS Firewall Toolkit)以及apach(也可以做 proxy喲).我覺得socks,FWTK更偏重于防火墻的運用,我一般用支持cache的squid,Redhat5.1就帶 它,無須修改配置,缺省的就可以了(看看/etc/squid.conf, http proxy 缺省端口是3128)。客戶端程序要把proxy指向Linux Box(eth0),各種具體的應用對應到squid的端口上。
7 測試
首先網內的其他機器應可以ping到linux box eth0上。然后撥號上網,在Linux Box上ping到外面去應該沒有問題,否則去檢查ppp設置。假如設置了FORWARD_IPV4=yes則在其他計算機上也可以ping到外面去,裝入ftp模塊就可以ftp到外面去(insmod ip_masq_ftp),在/lib/modules/2.x.xx/ipv4下看,看都有那些模塊,http是缺省的;假如你打開了Loadable module support/Kernel module loader,則 內核會自動裝入那些模塊。否則使用支持proxy的軟件如netscape來試試,應該沒有問題。
測試通過后,你可能要考慮把某些配置寫到啟動配置文件中,如把有關ipfwadm的配置寫/etc/rc.d/rc.local里。
8 舉一反三
假如是ISDN終端,配置過程沒什么兩樣;假如是DDN專線,可以變換如下:
<有效IP地址 IP偽裝地址 a.b.c.d ---+ eth0 +---------+ h1+-------+Linux Box+---- 192.168.10.2--+ +Router+--+同步設備+---DDN
用eth1替換上面的ppp0,道理是一樣的,配置也差不多。假如Linux Box上只有一個網卡,可以用 ip alias的方法來做。
9 關于新內核,如2.1.xxx,有很大的變化:假如你不選上IP Firewall就不能選IP Masquerading, 而且內核firewall的代碼有很大的變化,ipfwadm已經不能工作,要換成ipchains,在freesoft里 也可以查找得到。 ipchains的用法大致如下: ipchains -F <==清空轉發規則
ipchains -A forward -j MASQ -s 192.168.10.0/24 <==答應192.168.10.0子網去任何地方
ipchains -L <==列出所有規則
ipchains -M <==查看當前的偽裝連接
另外pppd也要升級到2.3.5以上。
10 假如你想要Linux Box按需撥號上網的話,去下載Diald
(http://home.loonie.net/~eschenk/diald.Html)軟件,我沒用過,無法給出提示信息。可以考慮用webppp(http://www.ajusd.org/~edward/webppp/)讓用戶自己去撥號。還可以考慮在Linux Box上做個DHCP服務,自己去看man dhcpd吧。 Jim 整理