歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix教程 >> 用FreeBSD建立撥號網關 Meaculpa

用FreeBSD建立撥號網關 Meaculpa

日期:2017/2/27 17:43:32   编辑:Unix教程
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 -INTppp來中止當前的連接,否則如果空閒120秒就會自動掛斷了(可以用settimeout參數進行調整)。這樣,簡單的PPP撥號連接配置就完成了。要更多的了解配置PPP方面的內容,可以參考Setting up User PPP(FreeBSD手冊中關於用戶級PPP的設定細節)。
  
  使FreeBSD成為撥號網關
  前面提到在/etc/ppp/ppp.conf中使用nat enableyes可以讓網絡內其它主機共享此PPP撥號連接,當然要達到這樣效果,還必須讓FreeBSD成為網關以允許轉發IP數據包,所以在/etc/rc.conf文件中加入:
  gateway_enable=YES
  然後重新啟動系統使其生效,當然,如果不想重啟,可以用以下命令:
  
  sysctl -w net.inet.ip.forwarding=1
  
  注意:PPP撥號會修改路由表,為使路由穩定,系統不能啟動動態路由守護程序,如routed或gated,因為它們會動態修改路由表。
  
  設置緩沖型DNS
  為了對網內計算機查詢域名進行緩沖,首先修改/etc/resolv.conf,因為PPP的enabledns參數會為系統設定從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目錄:
  
  # /usr/local/sbin/squid -z
  2001/01/01 09:14:32| Creating Swap Directories
  
  這次運行順利!
  
  測試
  在IE的選項->連接選項卡中設好代理服務器的地址和端口(3128),接著用squid的調試/測試模式進行試運行:
  
  # /usr/local/sbin/squid -NCd1
  09:30:54| Starting Squid Cache version 2.1 for i386--freebsd3.2...
  09:30:54| Process ID 1026
  09:30:54| With 1064 file descriptors available
  09:30:54| Performing DNS Tests...
  09:30:54| Successful DNS name lookup tests...
  09:30:54| helperOpenServers: Starting 5 'dnsserver' processes
  09:30:54| Unlinkd pipe opened on FD 13
  09:30:54| Swap maxSize 102400 KB, estimated 7876 objects
  09:30:54| Target number of buckets: 157
  09:30:54| Using 8192 Store buckets, replacement runs every 10 seconds
  09:30:54| Max Mem siz
Copyright © Linux教程網 All Rights Reserved