Chapter 12. Networking

Biing Jong Lin
12.1. 我應該到哪邊找有關無磁碟開機 "diskless booting" 的資料?
12.2. FreeBSD 的主機可以當作某個網路上的路由器(router)嗎?
12.3. 我可以透過 FreeBSD 將我的 Win95 機器連上 Internet 嗎?
12.4. FreeBSD 支援 SLIP 和 PPP 嗎?
12.5. FreeBSD 支援 NAT 或 Masquerading 嗎?
12.6. 我如何將兩台 FreeBSD 主機用平行埠 (parallel line) 透過 PLIP 連線?
12.7. 我沒有辦法建立 /dev/ed0 這個 device, 為什麼?
12.8. 我如何建立 Ethernet aliases?
12.9. 我如何指定我的 3C503 使用其他不同的的 network port?
12.10. 為什麼我在使用 FreeBSD 的 NFS 時出現問題?
12.11. 為什麼我不能 NFS-mount Linux 的機器?
12.12. 為什麼我不能 NFS-mount Sun 的機器?
12.13. 為什麼 mountd 一直鬼叫說 ``can't change attributes'' 而且我一直看到 ``bad exports list'' 這個訊息在我的 FreeBSD NFS 伺服器上?
12.14. 為什麼我在使用 PPP 連線到 NeXTStep 機器時有問題?
12.15. 我要怎樣才能把 IP multicast support 打開?
12.16. 哪些網路卡是使用 DEC PCI chipset?
12.17. 為什麼要用 FQDN 才能連到其他機器?
12.18. 為什麼我在連線時一直出現 ``Permission denied'' 的錯誤訊息?
12.19. IPFW 會造成多大的網路延遲?
12.20. 為什麼我的 ipfw "fwd" redirect 規則將服務轉向其他機器時無法正常運作?
12.21. 要如何把對某台機器的網路服務要求(service request)轉向到另一台?
12.22. 那裡可以找到管理頻寬的工具?
12.23. 怎麼會跑出 ``/dev/bpf0: device not configured''這個訊息?
12.24. 我要怎樣才能將 Windows 機器中的磁碟掛入系統, 就像 Linux 提供 的 smbmount 那樣?
12.25. 我在系統日誌中發現以下訊息: "icmp-response bandwidth limit 300/200 pps",這是 蝦米碗糕?
12.26. 這個錯誤訊息 ``arp: unknown hardware address format'' 是什麼意思?
12.27. 我剛剛裝好 CVSup 套件,但是在嘗試執行時發生了錯誤,要怎麼辦?

12.1. 我應該到哪邊找有關無磁碟開機 "diskless booting" 的資料?

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

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

是的。請參考 FreeBSD 手冊的網路進階篇 advanced networking,尤其是路由與閘道器 routing and gateways的部分。

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

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

... 答案是:可以的!在 FreeBSD 3.x 版中,使用者模式(user-mode)的 ppp(8) 包含了 -nat 選項。如果你在 /etc/rc.conf 使用-nat選項並 設定 gateway_enableYES ,以這種設定啟動 ppp(8) ,並且正確的設定你的 Windows 主機的 話,這個做法應該是可以正常使用的。

關於本主題更詳細的資料可以參考 Steve Sims 所撰寫的 Pedantic PPP Primer 一文。

如果你使用的是核心模式 (kernel-mode) PPP,或者你有區域連線 (Ethernet connection) 可通達 Internet 的話,你將需要使用 natd(8)。請查閱 FAQ 中關於 natd 的部分。

12.4. FreeBSD 支援 SLIP 和 PPP 嗎?

是的。你可以查查 man pages 中關於 slattach(8)sliplogin(8)ppp(8),以及 pppd(8) 的部分。 ppp(8)pppd(8) 提供進出雙向連線的支援,另外 sliplogin(8) 專門提供進入連線的支援,而 slattach(8) 專門提供向外連線的支援。

如果你需要更進一步的資料的話,請查閱 FreeBSD 手冊中關於 PPP 與 SLIP 的說明

如果你只能夠過 "shell account" 連線到 Internet 的話,你也許可以試試 net/slirp 這個套件程式。這個套件程式可以提供你的電腦直接連上某些(限定的)服務 連線,如 ftp 及 http 等等。

12.5. FreeBSD 支援 NAT 或 Masquerading 嗎?

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

ppp(8) 這個程式也提供類似的功能,如果你指定 -nat 選項。alias library (libalias(3)) 在這兩個處理方式中都會被使用到。

12.6. 我如何將兩台 FreeBSD 主機用平行埠 (parallel line) 透過 PLIP 連線?

請參考手冊中關於 PLIP section 的部分。

12.7. 我沒有辦法建立 /dev/ed0 這個 device, 為什麼?

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

12.8. 我如何建立 Ethernet aliases?

如果你的 alias 位址跟你目前網路介面的位址在同一個子網路下的 話,加入一個 netmask 0xffffffff 在你的 ifconfig(8) command-line,範例如下:

    # ifconfig ed0 alias 192.0.2.2 netmask 0xffffffff

不然的話,就如同加入一個新的網路位址一樣輸入你的網路位址與子 網路遮罩:

    # ifconfig ed0 alias 172.16.141.5 netmask 0xffffff00

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

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

12.10. 為什麼我在使用 FreeBSD 的 NFS 時出現問題?

我們用含蓄一點的說法,某些 PC 的網路卡比其他的好,這種狀況在 造成 NFS 這種對網路敏感的程式有時會出現問題。

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

12.11. 為什麼我不能 NFS-mount Linux 的機器?

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

    # mount -o -P linuxbox:/blah /mnt

12.12. 為什麼我不能 NFS-mount Sun 的機器?

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

    # mount -o -P sunbox:/blah /mnt

12.13. 為什麼 mountd 一直鬼叫說 ``can't change attributes'' 而且我一直看到 ``bad exports list'' 這個訊息在我的 FreeBSD NFS 伺服器上?

這個問題最常發生的原因是在於不了解 /etc/exports 的正確格式。請詳讀 exports(5) 以及手冊中關於 NFS 的部分,特別是configuring NFS這一段。

12.14. 為什麼我在使用 PPP 連線到 NeXTStep 機器時有問題?

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

    tcp_extensions=NO

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

12.15. 我要怎樣才能把 IP multicast support 打開?

FreeBSD 2.0 以後的版本內定都有 支援 Multicast host 操作。如果 您想將您的主機設定成 multicast router 的話,您必須重新 compile 您 的 kernel,加入 MROUTING 的選項,並且執行 mrouted(8) FreeBSD 2.2 及之後的版本會在開機時執行 mrouted(8) 如果在 /etc/rc.confmrouted_enable 設定為 "YES"

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

12.16. 哪些網路卡是使用 DEC PCI chipset?

以下是 Glen Foster 提供的清單:

Table 12-1. Network cards based on the DEC PCI chipset

VendorModel
ASUSPCI-L101-TB
AcctonENI1203
CogentEM960PCI
CompexENET32-PCI
D-LinkDE-530
DaynaDP1203, DP2100
DECDE435, DE450
DanpexEN-9400P3
JCISCondor JC1260
LinksysEtherPCI
MylexLNP101
SMCEtherPower 10/100 (Model 9332)
SMCEtherPower (Model 8432)
TopWareTE-3500P
Znyx (2.2.x)ZX312, ZX314, ZX342, ZX345, ZX346, ZX348
Znyx (3.x)ZX345Q, ZX346Q, ZX348Q, ZX412Q, ZX414, ZX442, ZX444, ZX474, ZX478, ZX212, ZX214 (10mbps/hd)

12.17. 為什麼要用 FQDN 才能連到其他機器?

你也許會發現要連的機器其實是在另一個網域。舉個例子,假設你是在 foo.bar.edu 這個網域中,想要連到在一台叫 mumble 的主機,他在 example.org 網域下, 你必須用 Fully-Qualified Domain Name mumble.example.org,而不是只用 mumble

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

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

這裡有個不錯的解法, 你可以加入一行

    search foo.example.org example.org

instead of the previous

    domain foo.example.org

在你的 /etc/resolv.conf 檔案中 (請參考 resolv.conf(5))。但是要確定搜尋順序不會違反 RFC 1535 所謂的 "boundary between local and public administration"

12.18. 為什麼我在連線時一直出現 ``Permission denied'' 的錯誤訊息?

如果在編譯 kernel 時加入 IPFIREWALL 選項, 請注意 2.1.7R 內定是拒絕所有未經核准的網路封包(但在開發 2.1-STABLE 時改掉了)。

I如果不小心弄錯了 firewall 的設定,你可以以 root 執行以下命令網路功能就會恢復正常:

    # ipfw add 65534 allow all from any to any

也可以在 /etc/rc.conf 加入 firewall_type="open" 的選項。

如果想知道如何設定 FreeBSD firewall,請參考 手冊中相關章節

12.19. IPFW 會造成多大的網路延遲?

請參考手冊中 Firewalls 章節,特別是 IPFW Overhead & Optimization 這一段。

12.20. 為什麼我的 ipfw "fwd" redirect 規則將服務轉向其他機器時無法正常運作?

可能是你除了轉送封包以外還額外想進行位址轉譯 (network address translation, NAT),"fwd" 規則所進 行的動作就如同字面所示;僅轉送封包,它並不會去修改封包中的資料。 假設我們有如下的規則:

    01000 fwd 10.0.0.1 from any to foo 21

當一個通往特定目標位址 foo 的封包 送達主機時,根據這條規則,封包將被轉送至 10.0.0.1,但是它的目標位址卻仍然是 foo!封包的目標位址並 沒有 更改為 10.0.0.1。大部分的主機會將封包丟棄, 因為他們並不是這個目標位址。因此,使用 "fwd" 規則 時往往不如使用者所預期的那般順利。這種行為是系統特性,而非錯誤。

參考 關於服務轉向的常見問 答集natd(8) 手冊,或者是使用 ports collection 中許 多服務轉向的工具來正確的完成你想進行的工作。

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

在 ports 目錄的"sysutils"分類中有個叫 socket 的套件,可以幫你轉向 FTP 或其他類似的 網路服務。只要把該網路服務的命令改成呼叫 socket 即可,如下所示:

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

其中 ftp.example.comftp 分別是被轉到的機器和 port 名稱。

12.22. 那裡可以找到管理頻寬的工具?

FreeBSD 上有三套頻寬管理工具: dummynet(4) 已經整合進入 FreeBSD 系統(更詳細的用途, ipfw(4)); ALTQ 可以免費使用,Emerging Technologies 推出的 Bandwidth Manager 則是商用軟體。

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

你執行了一個需要柏克萊封包過濾器 (Berkeley Packet Filter) 的 程式 (bpf(4)),但是你在 kernel 中沒有啟動它。把下面這一行加 入 kernel 設定檔中,編譯一個新的 kernel:

    pseudo-device bpf        # Berkeley Packet Filter

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

    # sh MAKEDEV bpf0

如果想要更進一步知道如何做出各種 device node,請參閱 Handbook 關於週邊節點的說明

12.24. 我要怎樣才能將 Windows 機器中的磁碟掛入系統, 就像 Linux 提供 的 smbmount 那樣?

使用 SMBFS 工具組。這套工具組中 包含了一系列的 kernel 修改還有使用者的工具程式(userland programs)。 這些程式和資訊在 ports 收藏中 net/smbfs 下可以找到。在 4.5-RELEASE 之後的版本則是系統中內建。

12.25. 我在系統日誌中發現以下訊息: "icmp-response bandwidth limit 300/200 pps",這是 蝦米碗糕?

這是系統核心告訴你有某些活動引發它送出比它所認為應該送出更 多的 ICMP 或 TCP 重置訊息 (RST)。ICMP 回應訊息常常是因為有人嘗 試連接未被使用的 UDP 通訊埠。TCP 重置訊息則是有人嘗試連接未開 放 TCP 通訊埠造成的結果。以下這些活動可能就是造成這些訊息的原因:

  • 暴力法的服務組絕攻擊(DoS)方式 (相較於針對特殊弱點使用單一封包的攻擊方式)。

  • 大量的通訊埠掃描(相較於僅嘗試少數的常見服務通訊埠)。

出現的數字中第一個代表根據這些流量 kernel 應該送出的封包數, 第二個數字則是 kernel 目前限制最大發送數。你可以利用 sysctl 修改 net.inet.icmp.icmplim 變數值來更改最大值。舉 例來說,如果希望修改限制為 300 packets per second:

    # sysctl -w net.inet.icmp.icmplim=300

如果你不想在系統紀錄中看到這些訊息,但是仍然希望保持回應的限 制的話,你可以利用 sysctl 修改 net.inet.icmp.icmplim_output 變數來取消這些訊 息:

    # sysctl -w net.inet.icmp.icmplim_output=0

最後,如果你想取消這些限制的話,你可以設定 net.inet.icmp.icmplim (如上例所示) 為 0。基於上述理由,我們不建議你取消這些限制。

12.26. 這個錯誤訊息 ``arp: unknown hardware address format'' 是什麼意思?

這代表你的區域網路連線上有一些設備使用 FreeBSD 看不懂得 MAC 格式。這通常是代表有人在你的區域網路上進行實驗,最常見的就是 cable modem 的連線。這訊息無害,而且應該不至於影響到 FreeBSD 主 機的效能。

12.27. 我剛剛裝好 CVSup 套件,但是在嘗試執行時發生了錯誤,要怎麼辦?

首先,看看錯誤的訊息是否如下:

    /usr/libexec/ld-elf.so.1: Shared object "libXaw.so.6" not found

這種錯誤訊息代表你主機上安裝的 net/cvsup 沒有包含 XFree86 套件。如果你想要使用 CVSup 內建的圖形介面 GUI 的話,你需要安裝 XFree86。此外,如果你只想以命令列方 式使用 CVSup 的話,你應該先移除之前 安裝的套件。並安裝 net/cvsup-without-gui 這套 軟體。在 FreeBSD 手冊中 CVSup 段落中有更詳細的說明。