歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> Unix教程

用FreeBSD建立撥號網關

FreeBSD網關
  家庭網絡結構如下: 
  
  W2K(192.168.0.100) -----以太網-----> FreeBSD(192.168.0.200) -----PPP撥號-----> internet 
  
  實現要求如下: 
  
       在FreeBSD主機上使用調制解調器撥號上網,並對局域網內其它計算機提供該撥號連接的共享。 
       在FreeBSD主機上設置緩沖型的DNS系統以避免對域名的重復查詢,減輕網絡流量。 
       在FreeBSD主機上設置Squid軟件對局域網提供http代理服務並配置ipfw防止用戶繞過代理服務器。 
       在FreeBSD主機上使用Fetchmail及Qpopper為局域網用戶代收外部電子郵件。 
  
  安裝PPP
  眾所周知,在FreeBSD下有兩種類型的PPP,在這裡為簡單起見使用用戶級PPP(User-PPP),因為
  內核級PPP(Kernel-PPP)需要更多設定配置方面的工作。 
  
  當然在開始之前弄清設備所用的硬件資源可使工作事半功倍。為此,需要了解以下內容: 
  
       調制解調器所用端口及速率(我假設為所用端口為串口1、速率為115200) 
       上網的賬號及口令 
       ISP分配的靜態IP地址(如為動態分配則無須知道) 
  
  現在要根據這些資料來配置並編譯新的內核以支持用戶級PPP和防火牆功能,在內核配置文件中加入以下內容:
  
  
  options IPFIREWALL #防火牆功能
  options IPDIVERT #轉移套接字(支持NAT)
  # 串(COM)口
  device sio0 at isa? port "IO_COM1" flags 0x10 tty irq 4
  # 偽設備 - 數字說明分配之單元數
  pseudo-device tun 1 # 分組隧道 
  
  編譯完新內核後,就可以根據需要修改/etc/ppp/ppp.conf文件了(相應的防火牆功能稍後配置),該文件的樣本如下:
  
  
  default: 
  
  set device /dev/cuaa0
  set log Phase Chat LCP IPCP CCP tun command
  set speed 115200
  set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" AT OK-AT-OK ATE1Q0 OK \\dATDT\ \T
  TIMEOUT 40 CONNECT" 
  
  set timeout 120
  set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
  add default HISADDR
  enable dns
  nat enable yes 
  
  163: 
  
  set phone 163
  set authname 163
  set authkey 163 
  
  在此樣本文件中,set device說明使用的端口,在此我用了串口1;set speed說明設備使用的速率,我用的是115200;set ifaddr說明PPP連接所用的IP地址,第一個地址為本地地址及網絡掩碼,而第二個地址為ISP處的撥號服務器地址及掩碼。如果使用ISP動態分配的地址,就可以象我這樣用掩碼為0的地址,它說明可以接受任何地址。否則請指定您的ISP分配的靜態地址。
  nat enable yes說明該PPP撥號連接可以讓局域網絡內的其它計算機共享。它使用NAT技術將網絡內有連接請求的主機本身的本地IP轉換為PPP連接所用的IP,從而可以訪問外部互聯網。 
  
  適當修改後可以用ppp命令來進行撥號測試了: 
  
  #ppp
  ppp > dial 163
  PPP > 
  
  當提示符由小寫變為大寫時說明已經撥號成功了,這時可以ping一下ISP處的DNS服務器地址,看是否能通。另外還可以用netstat命令檢查網絡狀態: 
  
  # netstat -nr
  Routing tables 
  
  Internet:
  
  Destination         Gateway                 Flags     Refs   Use        Netif   Expire
  127.0.0.1            127.0.0.1                UH        10      389        lo0
  192.168               link#1                     UC        0        0            ed0
  192.100.53.23    202.102.141.141    UH        1        0            tun0
  192.168.0.100    52:54:4c:19:6d:d   UHLW   2        3968      ed0    1198
  
  要掛斷退出可以在提示符下打quit命令,當然還可以用killall -INT ppp來中止當前的連接,否則如果空閒120秒就會自動掛斷了(可以用settimeout參數進行調整)。這樣,簡單的PPP撥號連接配置就完成了。要更多的了解配置PPP方面的內容,可以參考Setting up User PPP(FreeBSD手冊中關於用戶級PPP的設定細節)。 
  
  使FreeBSD成為撥號網關
  前面提到在/etc/ppp/ppp.conf中使用nat enable yes可以讓網絡內其它主機共享此PPP撥號連接,當然要達到這樣效果,還必須讓FreeBSD成為網關以允許轉發IP數據包,所以在/etc/rc.conf文件中加入: 
  
  gateway_enable=YES 
  
  然後重新啟動系統使其生效,當然,如果不想重啟,可以用以下命令: 
  
  sysctl -w net.inet.ip.forwarding=1 
  
  注意:PPP撥號會修改路由表,為使路由穩定,系統不能啟動動態路由守護程序,如routed或 gated,因為它們會動態修改路由表。 
  
  設置緩沖型DNS
  為了對網內計算機查詢域名進行緩沖,首先修改/etc/resolv.conf,因為PPP的enable dns參數會為系統設定從ISP處獲得的域名服務器,要使系統優先使用本地域名服務器才能發揮緩沖型DNS的特性,這時可以把其它服務器作為後備: 
  
  domain meaculpa.net
  nameserver 127.0.0.1
  nameserver 202.102.14.141
  nameserver 202.102.15.162 
  
  以上添加127.0.0.1作為首域名服務器。然後用/etc/namedb/make-localhost產生適合本機的localhost.rev文件。注意,make-localhost腳本屬性為644,需以root身份將其改為744才能運行。 
  
  接著修改/etc/namedb/named.conf,以使BIND運行為緩沖方式,樣本如下: 
  
  options {
  directory "/etc/namedb";
  forward only;
  forwarders {
  202.102.14.141;
  };
  }; 
  
  zone "." {
  type hint;
  file "named.root";
  }; 
  
  zone "0.0.127.IN-ADDR.ARPA" {
  type master;
  file "localhost.rev";
  }; 
  
  如使用BIND4則修改named.boot,樣本如下: 
  
  directory /etc/namedb
  primary 0.0.127.IN-ADDR.ARPA localhost.rev
  cache . named.ca
  forwarders 202.102.14.141
  options forward-only 
  
  最後就可以向/etc/rc.conf文件加入以下行使域名服務啟動: 
  
  named_enable="YES" 
  
  這樣重啟後就擁有一個緩沖型的DNS系統了,這時可以設置局域網內其它計算機的TCP/IP屬性,將DNS服務器指向該系統以利用其特性。 
  
  安裝Squid
  為了改善慢速的撥號連接並阻塞內部計算機直接訪問外部網站,可以安裝一套代理/緩沖系統並添加一定的防火牆規則。 
  
  在FreeBSD上我用了Squid這套軟件,當然可以有兩種安裝方法,一是用現成的tgz包,打pkg_add命令就可以方便地裝好了;另外就是到http://squid.nlanr.net/下載合適的版本(這裡用了squid21)到FreeBSD的ports目錄裡自己編譯安裝,如: 
  
  cd /usr/ports/www/squid21;make install 
  
  建立Cache系統
  接下來首先需要建立Cache目錄。缺省會使用100M的磁盤空間,建議專門分一個區給它使用,如/cache。如果您想調整此Cache目錄的大小,可以適當修改/usr/local/etc/squid/squid.conf文件。 
  
  在完成對其配置文件的修改後進行首次運行時,必須以root身份建立Cache目錄: 
  
  # /usr/local/sbin/squid -z 
  
  如果得到“Permission denied”的出錯信息,如: 
  
  09:09:29| Creating Swap Directories FATAL: Failed to make swap directory 
        /usr/local/squid/cache/00: (13) Permission denied
  Squid Cache (Version 2.1):Terminated abnormally. CPU Usage: 0.022 seconds 
        Maximum Resident Size: 1000 KB Page faults with physical i/o: 0 
  
  則可能是以下原因之一: 
  
       磁盤上沒有空間了。
       (對此我無能為力) 
       沒有建立/usr/local/squid/logs/目錄。
       (手工建一個嘛) 
       您的/usr/local/squid/logs/cache.log文件屬於root。
       (可以用這條命令“chown nobody.nogroup
       /usr/local/squid/logs/cache.log”改一下,另外../log和../cache目錄裡的
       所有文件都要有此屬性。) 
  
  於是我查了一下這些目錄中的文件,的確都屬於root,所以我用了這兩條命令: 
  
  # chown nobody.nogroup /usr/local/squid/logs
  # chown nobody.nogroup /usr/local/squid/cache 
  
  然後再試一下建立Cache目錄: 
  
  
Copyright © Linux教程網 All Rights Reserved