This is an archive of past FreeBSD releases; it's part of the FreeBSD Documentation Archive.

網路設定

Chapter 9. 網路設定

Q: 我應該到哪邊找有關無磁碟開機 (diskless booting) 的資料?
Q: FreeBSD 的主機可以當作某個網路上的路由器 (router) 嗎 ?
Q: 我可以透過 FreeBSD 將我的 Win95 機器連上 Internet 嗎?
Q: 為什麼我在 compile ISC 最新版的 BIND 程式時老是失敗?
Q: FreeBSD 支援 SLIP 和 PPP 嗎?
Q: FreeBSD 支援 NAT 或 Masquerading 嗎?
Q: 我沒有辦法建立 /dev/ed0 這個 device!
Q: 我如何建立 Ethernet aliases?
Q: 我如何指定我的 3C503 使用其他不同的的 network port?
Q: 我在連上/輸出 FreeBSD 的 NFS 時出現問題.
Q: 為什麼我不能 NFS-mount Linux 的機器?
Q: 為什麼我不能 NFS-mount Sun 的機器?
Q: 我在使用 PPP 連線到 NeXTStep 機器時有問題.
Q: 我要怎樣才能把 IP multicast support 打開?
Q: 哪些網路卡是使用 DEC PCI chipset?
Q: 為什麼要用 FQDN 才能連到其他機器?
Q: 所有網路動作都會出現 ``Permission denied'' 錯誤訊息
Q: IPFW 會造成多大的網路延遲?
Q: 要如何把對某台機器的網路服務要求(service request)轉向到另一台?
Q: 那裡可以找到管理頻寬的工具?
Q: 怎麼會跑出 ``/dev/bpf0: device not configured'' 這個訊息?

Q: 我應該到哪邊找有關無磁碟開機 (diskless booting) 的資料?

A: 無磁碟開機就是讓 FreeBSD 主機從網路上開機,並且從網路上的 server 上讀取 其他必要的檔案,而非由主機的硬碟上取得這些檔案。詳細的資料可以參考 FreeBSD 手冊的無磁碟開機篇

Q: FreeBSD 的主機可以當作某個網路上的路由器 (router) 嗎 ?

A: 由於網際網路的標準化和程式設計的充分經驗之賜,我們 能夠在 FreeBSD 系統內建封包轉傳 (packet fowarding) 的功能。你可以 將這個功能打開,只要將這個變數設定為 YES rc.conf 這個檔案中

        gateway_enable=YES          # Set to YES if this host will be a gateway
      



這個選項會將 sysctl 變數設定 net.inet.ip.forwarding 1.

在大部分的狀況下,你還必須再跑一個處理 routing 的程式,告訴網路上的其他 主機關於你的 router 設定的資料;FreeBSD 出廠時便內附一個標準的 BSD routing 程式 routed,如果你的網路設定更為複雜,你可以試試看 GaTeD (可以由 http://www.gated.org/ 下載) 這個程式自 3_5Alpha7 後支援 FreeBSD。

我們有必要告訴你,就算是 FreeBSD 以這種方式設定完成 ,它還是無法完全滿足 Internet 對 router 的標準定義 ,不過,就日常使用而言它已經足夠應付使用者的需求了。

Q: 我可以透過 FreeBSD 將我的 Win95 機器連上 Internet 嗎?

A: 基本上,會問這種問題的人在家裡至少有兩台電腦,一台跑 FreeBSD 另外一台跑 Win95;這個主意是將 FreeBSD 主機連上 Internet,然後透過這台 FreeBSD 主機,讓跑 Win95 的電腦能夠上網。 這個問題算是前一個問題的一個特例。

這邊有重要的文件。教你怎麼把 FreeBSD 的主機設定成 PPP Dialup Router

注意: 在這種狀況下你至少要有兩個以上的固定 IP addresses, 有時是三個以上或更多組 IP 同時使用,視你的需求而定。 如果你沒有固定的 IP 可以使用,你可以考慮使用 private IP 子網路,並安裝 proxies 例如 SQUID 或是 the TIS firewall toolkit 在你的 FreeBSD 主機上。

另外可以參考 natd

Q: 為什麼我在 compile ISC 最新版的 BIND 程式時老是失敗?

A: 在 ``cdefs.h'' 檔案中的定義與 FreeBSD 系統中內附 的檔案定義有所衝突。直接把 compat/include/sys/cdefs.h 砍掉就可以了。

Q: FreeBSD 支援 SLIP 和 PPP 嗎?

A: 是的。 你可以查查 man pages 中關於 slattachsliploginpppd 以及 ppp 的說明。 pppd ppp 都提供撥進及撥出的功能。 Sliplogin 專門處理有關撥入的功能,而 slattach 處理有關撥出的功能。

這些程式有詳細的說明,你可以在 handbook中找到:



如果你只能藉由"shell account"的方式上網的話, 你可能會想看看 slirp 這個軟體。它可以讓你的電腦直接連上 (某些) 服務, 例如 ftp 和 http 等等。

Q: FreeBSD 支援 NAT 或 Masquerading 嗎?

A: 如果你有一個近端的子網路(有一台以上的機器),但是你的 Internet provider 卻只分配一個 IP number 給你 (或者你只分配到一個動態的 IP number),你可以參考 natd 這個程式。 Natd 讓你可以透過這一個 IP number 讓整個子網路的電腦都能 連上 internet 。

ppp 這個程式也提供類似的功能,如果你下 -alias 這個選項的話。 alias library 在這兩個處理方式中都會被使用到。

Q: 我沒有辦法建立 /dev/ed0 這個 device!

A: 在 Berkeley 網路架構中,只有 kernel 程式碼可以直接存取網路界面卡。 請參考 /etc/rc.network 這個檔案和 manual pages 取得與其他不同網路程式 更進一步的資訊。如果你覺得你完全搞混了的話,您應該找一本與其他 BSD 相關 作業系統網路管理有關書來參考;除了少數顯著的不同外,FreeBSD 的網路管理 基本上和 SunOS 4.0 和 Ultrix 是一樣的。

Q: 我如何建立 Ethernet aliases?

A: 把 ``netmask 0xffffffff'' 加到你的 ifconfig 命令列中,例如:

        ifconfig ed0 alias 204.141.95.2 netmask 0xffffffff
      



Q: 我如何指定我的 3C503 使用其他不同的的 network port?

A: 如果您想使用其他的 port,你必須在 ifconfig 的命令中指定額外的參數. 內定的 port 是 ``link0''。要使用 AUI port 代替 BNC port 的話,改用 ``link2''。這些 flags 應該改變 ifconfig_* 的變數來指定,你可以在這個檔案裡面找到 /etc/rc.conf.

Q: 我在連上/輸出 FreeBSD 的 NFS 時出現問題.

A: 某些 PC 的網路卡比其他的好(含蓄的說來) 這種狀況在造成 NFS 這種對網路敏感的程式有時會出現問題.

參考 the Handbook entry on NFS 以獲得這個主題的更多資訊.

Q: 為什麼我不能 NFS-mount Linux 的機器?

A: 某些版本的 Linux NFS 程式碼只接受 privileged port 的 mount request ; 試用這行指令看看

        mount -o -P linuxbox:/blah /mnt
      



Q: 為什麼我不能 NFS-mount Sun 的機器?

A: 跑 SunOS 4.X 的 Sun 工作站只接受來自 privileged port 的 mount request ; 試用這行指令看看

        mount -o -P sunbox:/blah /mnt
      



Q: 我在使用 PPP 連線到 NeXTStep 機器時有問題.

A: 把 TCP extensions 取消,這個設定在 /etc/rc.conf 裡面. 把以下這個值設成 NO:

        tcp_extensions=NO
      



Xylogic 的 Annex 主機也有相同的問題,您要做相同的修改才能連上 這些主機。

Q: 我要怎樣才能把 IP multicast support 打開?

A: FreeBSD 2.0 以後的版本內定都有 支援 Multicast host 操作。如果您想將您的主機設定成 multicast router 的話,您必須重新 compile 您的 kernel,加入 MROUTING 的選項,並且執行 mrouted。如果您的/etc/rc.conf 裡面的 mrouted_enable 這個參數是設定成"YES" 的話.FreeBSD 2.2 及之後的 版本會在開機時執行 mrouted

MBONE 的各種工具可以在他們 ports 下所屬叫做 mbone目錄中找到。 如果您在找視訊會議的工具如 vicvat 的話, 到那邊找找!

如果需要更進一部的訊息,可到 Mbone Information Web尋找。

Q: 哪些網路卡是使用 DEC PCI chipset?

A: 以下是 Glen Foster提供的清單:

        Vendor          Model
        ----------------------------------------------
        ASUS            PCI-L101-TB
        Accton          ENI1203
        Cogent          EM960PCI
        Compex          ENET32-PCI
        D-Link          DE-530
        Dayna           DP1203, DP2100
        DEC             DE435, DE450
        Danpex          EN-9400P3
        JCIS            Condor JC1260
        Linksys         EtherPCI
        Mylex           LNP101
        SMC             EtherPower 10/100 (Model 9332)
        SMC             EtherPower (Model 8432)
        TopWare         TE-3500P
        Zynx            ZX342
      



Q: 為什麼要用 FQDN 才能連到其他機器?

A: 你也許會發現要連的機器其實是在另一個網域。舉個例子,假設你是在 foo.bar.edu 這個網域中,想要連到在 bar.edu 裡一台叫 ``mumble'' 的 機器,則必須用 Fully-Qualified Domain Name,也就是 ``mumble.bar.edu'',而不是只用 ``mumble'' 來指向它。

傳統的 BSD BIND resolver 允許用這種方式解出機器的位址,但是 FreeBSD 內附 bind 版本 的內定方式,則是除了你所在的網域以外,不支援其他非 FQDN 的縮寫。 所以如 mumble 這種不合格的機器名稱,必須在 mumble.foo.bar.edu,否則就會從網域的最底層開始找。

這和先前的做法不同,也就是不用 mumble.bar.edu mumble.edu 繼續搜尋。看一下 RFC 1535,裡面有提到為什麼之 前的做法不好,甚至算是個安全漏洞。

這裡有個不錯的解法,把 /etc/resolv.conf 裡的這一行:

        domain foo.bar.edu
      



換成這一行:

        search foo.bar.edu bar.edu
      



但是要確定搜尋順序不會違反 RFC 2535 所謂的 ``boundary between local and public administration''。

Q: 所有網路動作都會出現 ``Permission denied'' 錯誤訊息

A: 如果在編譯 kernel 時加了 IPFIREWALL 這個選項,要曉得 2.1.7R 內定是拒絕所有未經核准的網路封包(但在開發 2.1-STABLE 時改掉了)。

如果不小心弄錯了 firewall 的設定,以 root 身份執行這個命令,接著 網路功能就會正常:

        ipfw add 65534 allow all from any to any
      



也可以在 /etc/rc.conf 設 "firewall_type='open'" 這個選項。

如果想知道如何設定 FreeBSD firewall,請看 Handbook 相關部份

Q: IPFW 會造成多大的網路延遲?

A: 這個問題的答案大多要看你怎麼訂 firewall 規則、還有 CPU 速度。對大 多數在 ethernet 上的程式及規則不多的情況下,延遲小到可以忽略。但如果 你想要精確數字來滿足好奇心,繼續往下讀。

下面是在 486-66 2.2.5-STABLE 上所作的測量,我們修改了 IPFW 原始碼 來測量在 ip_fw_chk 函式上所花的時間,每處理 1000 個封包後就會在 console 上顯示結果。

測試了兩組,每組各有 1000 個規則。第一組重複下面規則,故意設計成 最糟的情況:

        ipfw add deny tcp from any to any 55555
      



藉由檢查 port number,這樣會使 IPFW 在決定某個封包不符合條件前執 行大部份的檢查程式,因此造成最差的狀況。在重複這個規則 999 次後,接 著是 allow ip from any to any

第二組設計成以極快的速度跳過檢查規則:

        ipfw add deny ip from 1.2.3.4 to 1.2.3.4
      



一碰到封包的來源不符合規則所述,會很快跳過檢查讓封包通過。和上面 一樣,第 1000 個規則是 allow ip from any to any

在第一種情況中,處理每一個封包所造成的延遲大約是 2.703 ms,所以每 個規則大概會造成 2.7 microsecond 的延遲。所以在這些規則之下,理論上每 秒最多可以處理 370 個封包。在 10Mbps ethernet 和一個封包大概 1500 byte 的假設下,大概只會用到 55.5% 的網路頻寬。

第二種情況,每個封包花了大約 1.172ms,所以每條規則大約用了 1.2 microsecond。理論上每秒最多可以處理 853 個封包,耗盡 10Mbps 的頻寬。

上面測試用到的大量規則、及這些規則本身並不代表真實世界的情況,他們 只是用來產生所表示的數據。若想要訂出一套有效率的規則,記得這幾件事:

  • 在最前面放一個專門處理大量 TCP 流量的可用規則,在這條前面不 要放任何 allow tcp 的相關敘述。

  • 把常常觸發的規則放在前面,不常用到的則丟到後面(當然在不 影響 firewall 出入允許設定的前提下)。執行 ipfw -a l 就可看到封包的統計數目,來看最常用到哪些規則。



Q: 要如何把對某台機器的網路服務要求(service request)轉向到另一台?

A: 在 ports 目錄的 sysutils 種類中有個叫 'socket' 的 package,可以幫 你轉向 FTP 或其他類似的網路服務。只要把該網路服務的命令改成呼叫 socket 即可,如下(在 /etc/inetd.conf 裡):

ftp stream tcp nowait nobody /usr/local/bin/socket socket ftp.foo.com ftp



其中 'ftp.foo.com' 和 'ftp' 分別是被轉到的機器和 port 名稱。

Q: 那裡可以找到管理頻寬的工具?

A: FreeBSD 上有兩套頻寬管理工具: ALTQ 可以免費使用, Emerging Technologies 出的 Bandwidth Manager 則是商用軟體。

Q: 怎麼會跑出 ``/dev/bpf0: device not configured'' 這個訊息?

A: 柏克萊封包過濾器(Berkeley Packet Filter) (bpf) 在程式使用前必須在 kernel 打開它的驅動程式,把下面這一行加入 kernel 設定檔中,編個新的 kernel:

 pseudo-device bpfilter # Berkeley Packet Filter+       



在重新開機之後,還要做出 device node,在 /dev 下執行:

           # sh MAKEDEV bpf0       


如果想要更進一步知道如何做出各種 device node,請看 handbook 中有關 device node 的說明