Linux NET-2/NET-3 HOWTO Chinese Version v2.7 Linux 中文文件放送組織(play one) Linux Chinese Document Broadcasting Organization (LCDBO) 蘇子哲 Jerry Su, su@linux1.thu.edu.tw (keyin) 吳侑達 Allen Wu, da@linux1.thu.edu.tw (keyin & 校正) Jun 27, 1995 譯序 : 飲酒愛就思源, 吃瓜子就愛拜樹頭。 (以此獻給大學四年) 原著 : Linux NET-2/NET-3 HOWTO Terry Dawson, terryd@extro.ucc.su.oz.au v2.7, 08 Oct 1994 PS.本文現無人 maintain. 請有心者再接再勵. ^_^ □ 綱目 □ 1. 簡介 2. 聲明 3. Questions already ? 4. 相關文件 5. NET-2/NET-3 有支援的功能 6. 取得 NET-2/NET-3 軟體 7. 設定(configuring) kernel 8. 設定網路設備(Network Devices) 9. Routing(強制的) 10. 設定(Configuring) network 的 daemons 11. 高級的 Configurations. 12. 實驗中及發展中的 modules 13. 一些 FAQ 及簡要的答案 14. 已知的 Bugs 15. 著作權聲明 16. 其他 及 Acknowledgements. □ 細目 □ 1. 簡介 1.1. 自上一版以來改變的地方 1.2. Linux 網路的發展簡史 2. 聲明 3. Questions already ? 4. 相關文件 4.1. 這份文件的版本 4.2. 回饋 5. NET-2/NET-3 有支援的功能 5.1. 已支援的 Ethernet cards. 6. 取得 NET-2/NET-3 軟體 6.1. kernel 原始程式 6.2. libraries (函式庫) 6.3. 網路設定(configuration)工具集 6.4. 網路應用程式 6.5. 其他的 drivers 或 packages. 7. 設定(configuring) kernel 8. 設定(configuring)網路設備(Network Devices) 8.1. Configuring /dev 目錄下特殊的 device 檔 8.2. 在我開始之前需要什麼資訊 ? 8.2.1. IP Address. 8.2.2. Network Mask (`netmask'). 8.2.3. Network Address. 8.2.4. Broadcast Address. 8.2.5. Router (`Gateway') Address. 8.2.6. Nameserver Address. 8.2.7. SLIP/PLIP/PPP 使用者請注意 ! 8.3. /etc/rc.d/rc.inet1,2 或 /etc/rc.net 8.3.1. rc.inet1 8.3.1.1. ifconfig 8.3.1.2. route 8.3.2. rc.inet2 8.4. 設定 Loopback device (強制選用)。 8.5. 設定 ethernet device. (選項) 8.6. 設定 SLIP device (選項) 8.6.1. dip 8.6.2. slattach 8.6.3. 什麼時候我要用什麼? 8.6.4. Static slip server with a dialup line and DIP. 8.6.5. Dynamic slip server with a dialup line and DIP. 8.6.6. 使用 DIP. 8.6.7. Permanent slip connection using a leased line and slattach. 8.7. 設定 PLIP device. (選項) 8.7.1. PLIP 接腳圖 9. Routing(強制的) 9.1. Static/Manual(手動的) Routes. 9.2. 內定 Route. 9.3. Proxy ARP. 9.4. gated - the routing daemon. 9.4.1. 取得 gated 9.4.2. 安裝 gated 10. 設定(Configuring) network 的 daemons 10.1. /etc/rc.d/rc.inet2 (rc.net 的後半段) 10.1.1. inetd. 10.1.2. syslogd. 10.2. 一個 rc.inet2 範例檔 10.3. Name Resolution. 10.3.1. /etc/hosts 10.3.2. named - 我需要嗎 ? 10.3.3. /etc/networks 10.3.4. /etc/host.conf 10.3.5. /etc/resolv.conf 10.3.6. 設定自己的 Hostname - /etc/HOSTNAME 10.4. 其他檔案 11. 高級的 Configurations. 11.1. PPP - Point to Point Protocol(點對點通訊協定) 11.1.1. 為何我要使用 PPP 代替 SLIP ? 11.1.2. 何處可取得 PPP 軟體 ? 11.1.3. 安裝 PPP 軟體 11.1.3.1. The kernel driver. 11.1.3.2. pppd 11.1.4. Configuring and using the PPP software. 11.1.4.1. Configuring a PPP client by dial-up modem. 11.1.4.2. Configuring a PPP client via a leased line. 11.1.4.3. Configuring a PPP server. 11.1.5. Where to obtain more information on PPP, or report bugs. 11.2. Configuring Linux as a Slip Server. 11.2.1. Slip Server using sliplogin 11.2.1.1. Where to get sliplogin 11.2.1.2. Configuring /etc/passwd for Slip hosts. 11.2.1.3. Configuring /etc/slip.hosts 11.2.1.4. Configuring the /etc/slip.login file. 11.2.1.5. Configuring the /etc/slip.logout file. 11.2.2. Slip Server using dip. 11.2.2.1. Configuring /etc/net/diphosts 11.3. 使用 Automounter Daemon - AMD. 11.3.1. 什麼是 automounter, 為何我要使用這種東西咧 ? 11.3.2. 何處取得 AMD(AutoMounter Daemon) 11.3.3. An example AMD configuration. 11.4. 把 Linux 當作一個 router 12. 實驗中及發展中的 modules 12.1. AX.25 - 業餘無線電玩家的通訊協定 12.1.1. 何處取得 AX.25 軟體。 12.1.2. 安裝 AX.25 software. 12.1.2.1. The kernel drivers. 12.1.2.2. The user programs. 12.1.3. 設定及使用 AX.25 軟體 12.2. Z8530 SCC driver. 12.3. Ottawa PI/PI2 card driver. 12.4. NIS - Sun Network Information System. 12.5. snmp agent. 12.6. Experimental ARCNet driver 12.7. 實驗性的 Token Ring driver 12.8. V.35 界面板 12.9. Slip 套餐軟體 12.10. tcpdump 工具程式 13. 一些 FAQ 及簡要的答案 13.1. 一般問題 13.2. 錯誤訊息 13.3. Routing 的問題 13.4. 使用網路檔案系統(NFS, Network File System): 13.5. SLIP 的問題: 14. 已知的 Bugs 15. 著作權聲明 16. 其他 及 Acknowledgements. 這份文件主要是在解說如何取得、安裝及設定(configure) Linux NET-2 及 NET-3 網路軟體。也包含了一些 FAQ 的答案。 1. 簡介 這是 Linux NET-2-HOWTO 。 這份文件是早期的 NET-FAQ 完整重寫版, 也是 NET-2-HOWTO versions 1.0+ 的更新版, 是針對 Linux kernels 1.0版以上的 NET-2 及 NET-3 TCP/IP Networking code 而寫。 1.1. 自上一版以來改變的地方 增加: 增加新的 ARCNet driver 的細節 - 感謝 Avery。 增加 tcpdump location 的細節。 修正: 更正 dip 的 symlink 及 chmod 問題 - 感謝 Lamar。 更新 Matt Dillon 的 slip management suite 版本。 1.2. Linux 網路的發展簡史 Ross Biro 撰寫最原始的 Linux 網路核心程式 碼 (Networking kernel code) 的基礎。他使用了: Donald Becker 寫的 ethernet drivers Laurence Culhane 所寫的 slip driver Bj0rn Ekwall 所寫的 D-Link driver 。 Linux 網路程式碼後續發展由 Fred van Kempen 繼續, 他使用 Ross's 的程式碼, 並發表 NET-2 版網路程式碼。 NET-2 直到 NET-2d 版發布時, 才修訂許多地方。 當 Alan Cox 拿到 Fred's NET-2d code 並著手除錯 時,目標在定在出版穩定的工作版本, 為了要併入標準的 kernel 版本 中。 這個版本叫做 NET-2D (ebugged), 在 Linux vers 1.0 發行之前, NET-2D 已經併入標準的 kernel 版本中。 PPP 的支援由 Michael Callahan, 及 Al Longyear, 來加入, 原來只是個 patch, 而且 後來版本只列為選項。 Fred 繼續發展他的 kernel network code, 並發行 NET-2E 。 若你對 Fred的新工作有興趣的話, 可以查查本文後面的列表。 隨著 Linux vers 1.0 的發行, Linus 決定繼續支援 Alan's 網路碼, 並將之列為標準的網路核心碼 (network kernel code) 。 最新的修訂版, NET-3, 出現在 1.1.5 以上的 kernel 版本中, 基本上 是相同的程式碼, 但包含了許多的 bug fixes 、修正及加強。 Alan 加入了 IPX 及 AX.25 modules 的功能。 Florian La Roche, 已經發了一個修訂過的網 路應用程式版本。 除非其他文件有說明, 不然這文件指的是「標準核心版本」所包含的網 路程式碼。在這整個文件上將同時提供 Fred 的程式碼, 但當發展的途 徑的分開時, 兩種版本很可能會有不同的地方。 2. 聲明 Linux networking code 是一個全新的、 以核心為基礎的 (kernel based) TCP/IP 詮釋方式。它由剪貼 ( 拼裝 ) 發展而成, 不是現行市 面上 kernel networking code 的移植版。 因為它是一個新鮮的 implementation, 它可能還有一堆的 bug 或問題 , 及 bug fixes 及 patch 發布出來。如果你擔心這些問題, 你只要維 持在有支援 standard kernel code 及工具程式集的版本上就可以了。 有一些勞心勞力的人組成的 team 在撰寫、測試 networking code, 並 收集、報告相關的 bug及問題。你遭遇的問題「可能」已經有報告出來 , 且也有人在 fix 了, 很快的會修正過來, 所以要有耐心。 假如你幫 得上忙, 不彷提供協助。 我們不會, 也不能, 知道所有 Linux 網路軟體的問題。 這份文件可能 有錯誤的地方, 所提到的軟體, 請再深入讀該軟體的 README檔。 我們將試圖盡量維持這份文件沒有錯誤而且是最新的。 Versions of software are current as at time of writing. 備註: 雖然本文跟 Berkeley Software Distribution NET-2 版本很像 , 但 Linux network code 實際上與 BSD NET-2 並無關連 。不 要搞錯了。 3. Questions already ? `The only stupid question is the unasked one.' `最笨的問題就是那個一直沒問出口的問題` 如果你有一般的設定 (configuration) 問題, 而且在讀了其他的 HOWTO及 FAQ 後, 仍然找不到答案的話, 請貼到 comp.os.linux.help 我們會優先處理, or, 如果你相信自己的問題與 Linux Nerwork code 有關,你可以貼到 NET mailing list. 『請盡量描述清楚相關的資訊』 。 ( 如: 設備、版本、設定... 等 ) 沒有比 " 貼個資訊不足的 bug 或問題 "更煩人的了。 版次及 code 的修訂、所有問題的細部統計、發生狀況的詳情, 是基本 的。 Trace 及 debug messages 可以取得的地方應該也要強制考慮。 如果你有一個與任一版本 linux 的設定有關的問題, 不管誰提供的, 在報告問題給 network code developers 前, 請先與第一個發行的人 聯絡。原因在於一些其他的版本使用了非標準化的目錄結構, 且提供了 非標準的測試與工具。 你不能期待 NET-2 code developers 支援除了 本文件說明的不同格式的版本, (or as per distributed Alpha/Beta test instructions.) 欲參加 mail list server 中的 Linux NET channel, 請寄信到: linux-activists@niksula.hut.fi 內容要加一行: X-Mn-Admin: join NET 在信件的最上面一行(不是 subject 那行) 記住 NET channel 只供討論發展之用。 也注意有個 PPP list 已經建立。 若要加入, 請依照以上程序來加入 NET channel, 但 X-Mn-Admin: 這個欄位要從 NET 改為 PPP 。 同時注意 HAMS list 已經建立, 這個 list 建立來討論程式 ( 關於 Amoteur Radio), 若要加入這個 list, 請模仿加入 NET or PPP channel 的程序並要在 X-Mn-Admin: 這個欄位用 HAMS 取代 NET 。 4. 相關文件 如果你要找這份 HOWTO 文件找不到的 TCP/IP 的資訊, 你可能要 try 以下的來源, 它們提供了不少的資訊。 Olaf Kirch 寫了一堆的文件當作 Linux Documentation Project 的一 部份, 標題是 The Linux Network Administration Guide 。這是一份 很優秀的文件包含了所有設定方面的步驟, 並在 linux 下使用 tcp/ip network,包含 NFS, UUCP, mail, News, nameserver 等等。 Olaf 的書中提供這個 HOWTO, 並在這份文件停止的地方繼下去。 這份 文件涵蓋 NET code 的安裝及設定 (configuration), 也就是說 ` 如 何把你的電腦放到網路上 ' 。如果你是 unix networking 的新手, 那 麼我強烈建議先取得一份拷貝並讀讀看。它將為您解答許多這份 HOWTO 文件中所沒有的問題。 最新的版本可以在下列節點取得: sunsite.unc.edu /pub/Linux/docs/linux-doc-project/network-guide/* 這個目錄下有許多不同版本的文件, 一般的格式都有支援, 如: ascii, Postscript, DVI, Latex 及 groff 。 The Linux Network Administrators Guide is Copyright (c) by Olaf Kirch. 你也應該讀一讀其他有關網路的 Linux HOWTO 文件。 例如: Ethernet-HOWTO (ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/Ethernet-HOWTO) 如果你要在 linux 上使用 ethernet card 的話, 你應該讀一讀它。 它包含了耕多的細節: 如何在 linux 上選擇、安裝、設定(configure) 一個 ethernet card。 Serial-HOWTO (http://sunsite.unc.edu/mdw/HOWTO/Serial-HOWTO.html) 如果你要使用 slip 或 ppp 提供服務的話。 Mail-HOWTO (http://sunsite.unc.edu/mdw/HOWTO/Mail-HOWTO.html) News-HOWTO (http://sunsite.unc.edu/mdw/HOWTO/News-HOWTO.html) 設定 Mail and News 在你的系統上的資訊。 The UUCP-HOWTO (http://sunsite.unc.edu/mdw/HOWTO/UUCP-HOWTO.html) 如果你要透過 UUCP 連到另一個網路的話。 若要得到更多 UNIX 網路設定的一般資訊, 來幫助你設定自己的網路的 話, 可參考: O'Reilly and Associates 的書 "TCP/IP Network Administration" ( 封面有隻螃蟹 ) 記住 Linux Network code 現在 已經支援標準的 TCP/IP 網路。 設定並使用它的方式就如同在其他的 UNIX OS 上一樣。只是有些參數或選項可能會與書上所講的有些出入。 一般來說, 如果你在讀了一些基本的 TCP/IP 網路的資訊, 你還可以看 看以下的文件: athos.rutgers.edu /runet/tcp-ip-admin.doc /runet/tcp-ip-admin.ps /runet/tcp-ip-intro.doc /runet/tcp-ip-intro.ps 如果你已經讀完相關的 TCP/IP 細節資訊, 我推薦你一本書: "Internetworking with TCP/IP" by Douglas E. Comer ISBN 0-13-474321-0 Prentice Hall publications. 4.1. 這份文件的版本 最新的釋放版本可以使用 annoymous ftp 來取得: sunsite.unc.edu /pub/Linux/docs/HOWTO/NET-2-HOWTO /pub/Linux/docs/HOWTO/other-formats/NET-2-HOWTO.{tex,ps,dvi} 透過 World Wide Web 可以從 Linux Documentation Project Web Server取得: (http: //sunsite.unc.edu/mdw/linux.html), 在 NET-2-HOWTO 那一頁: (http: //susnite.unc.edu/mdw/HOWTO/NET-2-HOWTO.html) 或以下 目錄 me, . 它也會定期的貼在: newsgroups: comp.os.linux.announce, comp.os.linux.help, 及 news.answers 。 你可以找 news.answers 的 FAQ postings, 包括這份文件, 亦可由下 列節點取得: rtfm.mit.edu:/pub/usenet. 4.2. 回饋 請寄給我 任何的文件、 更新或建議。 我越快拿到你的來信 ( 回饋 feedback), 我就能越快更新及修正這份 文件。 如果你發現文件中有任何問題, 請寄信給我, 而不要在 newsgroups 上貼布告, 可能我會漏讀了。謝謝! 5. NET-2/NET-3 有支援的功能 NET code 是寫在 Linux kernel 裡面, 且以 TCP/IP 為準。 NET-2 及 NET-3 版本的網路程式碼(network code)支援: Ethernet Cards 大部分普遍的 ethernet cards 都有支援。 SLIP (Serial Line IP) and PPP 在 serial lines(如: telephone, 或兩台電腦間的 cable 線 ) 上透過 modem 提供 tcp/ip networking Van Jacobsen Header Compression 用來壓縮 TCP/IP packet的檔頭, 以在慢速的線上提高 slip 的 performance。 PLIP (Parallel Lines IP) 允許你使用 printer ports 來連接兩台很接近的電腦。 NFS (Networked File System) 允許你 mount 遠端機器的 filesystems。 AX.25 (A protocol used by Amateur Radio Operators) Alan Cox 寫的實驗程式碼, 已經可以取得。 PI Card (An 8530 SCC based card used by Amateur Radio Operators) 這是一個實驗性的 PI Card driver, 已經可以取得。 IPX/SPX (Novell) 允許你寫個人的 SPX / IPX 應用程式 , 或把 Linux 當作 IPX router。 NET-2 and NET-3 network code 還沒支援的: NCP (Novell) support 允許 Linux 提供並 mount Novell network devices。這個部份 還在開發。 Lan types other than ethernet 這是說類似 token ring, arcnet, FDDI, 等等的東西 , 實驗性 的 Token Ring driver 已經開發完成, 實驗性的 ARCNet driver 也開發完成了。(以後會詳述) ISDN Support 正在開發。 5.1. 已支援的 Ethernet cards. 標準的 linux kernel 支援下列形式的 ethernet cards: o NE2000/NE1000 及「相容甲麥哭爸」的卡(close compatibles)。 o WD80*3 and close compatibles. o SMC Ultra o 3c501 (龜速) o 3c503 and close compatibles. o 3c509/3c579 o HP PCLAN (however a newer kernel is required for the HP PCLAN+) o AT1500 and NE2100 (LANCE and PCnet-ISA) and close compatibles. o AT1700 (非相容品) o DEPCA and close compatibles. o D-Link DE600 pocket adaptor and close compatibles. o AT-LAN-TEC/RealTek pocket adaptor and close compatibles. 其他的 drivers 可在較新的 kernel 版本(1.1.*+)中找到。 Ethernet-HOWTO 包含一駝很有用的資訊來支援 ethernet cards: 包括 如何選擇一塊 ethernet card 如果你要買某個規格的產品。 就像以上所說的, Linux 支援其他網路連接工具, 假如你沒有 ethernet card 或其他直接的網路連線。許多大學及世界性的公司提供 許多網路撥接 (Dail up) 的服務。 這些服務可能同時包括 SLIP 或 PPP 。 你需要的只是一個電話線及一台 modem,( 如果你早已經有這些 設備, 那最好不過了 ), 及適當地設定 (configure) 你的 linux 系統 , 以下幾章會說明細部的步驟。 6. 取得 NET-2/NET-3 軟體 在你要設定 (configure) 網路軟體之前, 你必須取得所有的部份。 這 包含了現行的 kernel code, libraries, TCP/IP configuration 程式 及檔案 ( 如: /sbin/ifconfig, etc/hosts 等等 ), 最後要有一個網 路應用程式集 ( 如: telnet, ftp, rlogin 等等 ) 如果你從散佈的節點取得 Linux, 那麼你要的東西應該都已經有了檢查 並確定你所要做的事。 例如: 有些散佈的版本包含了所有網路設定檔, 執行檔, 函式庫, 及 kernel, 所以沒有必要再去抓以下的檔案。 備註: they 可能在某些 "與本 HOWTO 文件所說的不同的" 目錄及檔案 中。 如果你真的有網路軟體了, 可直接跳到 `Configuring the kernel' 那 一節。沒有的話, 就看下一個步驟吧! 6.1. kernel 原始程式 Linux kernel 1.0 是正式的發表的版本。 其他 release 出來的 kernel 是加強或 bug fixed 的版本。 如果你覺得有必要去 patch 及修改 kernel 原始程式的話, 則你應該 跨到這個 release, 因為它可以做你想要做的事。 雖然在這個網路程式碼的情況下, 我強烈建議你跟隨最新版本的腳步, 因為它們有許多改變的地方足以影響網路的運作, 但是當你在 try 新 的版本 kernel 的時候, 你總要確定把系統 backup 完全, 因為在你測 試的時候, 有些東西會出現重大的錯誤。 現在的 kernel 版本可在以下節點取得: ftp.funet.fi /pub/OS/Linux/PEOPLE/Linus/v1.1/v1.1.45.tar.gz 這是一個 gzip 過的檔, 所以你藥用 gzip 把它給解壓出來 速速看以下的作法: # cd /usr/src # mv linux linux.old # gzip -dc v.1.1.45.tar.gz | tar xvf - 你也可以在同一個目錄下, 找到一些 patch 檔 (patch46.gz)... 如果 你有 1.1.45 版的 kernel 表示你有 kernel 1.1.0 版再加上 1 到 45 的 patch 。所以你不必再做其他之前的 patch 。 如果有 patch 是比 你的 kernel 版本還大的話, 你應該取得並 patch 上去。 步驟大概如 下: # cd /usr/src # gzip -dc .../patch1.gz | patch -p0 # gzip -dc .../patch2.gz | patch -p0 # gzip -dc .../patch3.gz | patch -p0 ... 6.2. libraries (函式庫) 你最少要有 4.4.2 版的 libc, 因為早期版本有 subnet masks 的問題 。現行的 libraries (libc-4.5.26) 可在以下節點找到: sunsite.unc.edu /pub/Linux/GCC/ 你至少需要以下的檔案: o image-4.5.26.tar.gz o inc-4.5.26.tar.gz o extra-4.5.26.tar.gz o release.libc-4.5.26 你必須在開始 install 前讀 release.libc-4.5.26 文件。請注意在文 件中的某一行: regrarding deleting the older version of /usr/lib/libgcc.* or else your compiles will not link properly. 備註: 使用 4.5.26 版本你還需要 GCC 版本 2.5.7 以上及 Linux kernel 1.0+ 6.3. 網路設定(configuration)工具集 你需要 utility suite, 它提供 tools 來設定你的網路。 現行的 NET-2 utility suite 可在以下節點找到: sunacm.swan.ac.uk /pub/misc/Linux/Networking/PROGRAMS/NetTools /net-tools-1.1.38.tar.gz 因為 kernel networking code 仍然持續在 kernel release 時, 改變 network tools, 所以你必須選擇適當的版本。 檔案的名字顯示了 tool 可在哪個版次的 kernel 上執行。 請選擇版次與 kernel 相同或小於 kernel 版本的 tool。 <---- ? 建立及安裝工具, try: # cd /usr/src # mkdir net-tools # cd net-tools # gzip -dc net-tools-1.1.38.tar.gz | tar xvf - # make config # make If everything makes ok, then: # make install 如果你使用 kernel version 1.1.26 或更早的版本, 你應該看看: sunacm.swan.ac.uk /pub/misc/Linux/Networking/PROGRAMS/Other/net032/ 在這目錄中你會找到三種版本的網路工具。 以下表格列出 net-032 package name, 及其 kernel 版本。 net-0.32d-net3.tar.gz 1.1.12+ net-0.32b.tar.gz 1.1.4+ net-0.32.old.tar.gz pre 1.1.4 kernels 這些 packages 包含基本的網路設定程式, 例如: ifconfig, route, netstat 等等, 稍後會聊到。 6.4. 網路應用程式 你將會至少需要一駝的網路應用程式, 如: telnet, ftp, finger,網路 daemons... Florian La Roche, 已經收集了 相當完全的網路應用程式 (source code 或 binary), TCP/IP 應用程 式的 binaries 及一些範例的 config 檔可在以下節點找到: ftp.funet.fi /pub/OS/Linux/PEOPLE/Linus/net-source /NetKit/NetKit-A-0.07.bin.tar.gz /pub/OS/Linux/PEOPLE/Linus/net-source /NetKit/NetKit-B-0.06.bin.tar.gz 如果有最新的版本, 就用最新的版本, 請先讀 README 檔, 確定你有必 要的 prerequisites 。 確定要做重要的 config 檔的備份, 如果是新的安裝你就不必這樣做。 解壓的步驟: # cd / # gzip -dc filename.tar.z | tar xpvlf - 非常注意!!! Florian 已經為您的方便, 事先壓縮好了檔案, Florian 已經嘗試盡量使得這些程式包含在 net-tools-n.n.nn releases中, 不 幸的, Florian 選擇的目錄結構與 Alan 不同, 當他在為 net-tools準 備 installation script 時。 也就是說你要特別小心, 尤其在 install的時候。 Florian 以後將會改回來使得這個問題消失, 但是直 到那時候,我建議, 你用下列方式代替: - 在其他安全的地方解包 # cd /usr/src # mkdir NetKit # cd NetKit # gzip -dc NetKit-A-0.07.bin.tar.gz | tar xpvlf - # gzip -dc NetKit-B-0.06.bin.tar.gz | tar xpvlf - - 砍掉 先前講的 Florians 的網路工具拷貝(版本)。 # rm ./bin/hostname ./sbin/route ./sbin/ifconfig ./sbin/netstat # rm ./usr/sbin/arp ./usr/sbin/rarp ./usr/sbin/slattach - 拷貝 Florian's 檔案到新家: # cp -vrpd . / 6.5. 其他的 drivers 或 packages. 如果你要增加一些發展中的或 Alpha/Beta 測試程式碼, 例如: AX.25 的支援, 你需要取得這些 packages 適當的支援軟體, 請檢查相關的章 節做細部瞭解。 7. 設定(configuring) kernel 在你可以使用網路工具前, 或在 config 任何網路 device 前, 你必須 確定你的 kernel 已經內建 ( 建入 ) 網路支援 driver, 最好的方法 就是 compile出自己機器的 kernel, 選擇自己要的及不要的。 若你已經取得並解出 kernel source, 並裝了一些必要的非正式或發展 中的 patch 軟體, 你只需編輯 /usr/src/linux/drivers/net/CONFIG. 這個檔案有許多的內容可以指引你編輯那鍋檔, 通惕 A 不需要改太多 東西, 因為有許多的內定值. 對我來說根本不需要編輯. 如果你的 ethernet 網路卡很特別, 或無法被 ethernet driver 自動偵測出來的 話, 這份文件對你來說會很有用。 它允許你 hard code 網路硬體的一 些 elemets, 例如: 如果你的卡是專屬的卡, 但不是像什麼 WD-8013 之類的卡, 那你就要設定 shared memory address 來確定 driver detects 並且確定適當的驅動這張卡。讀讀 Ethernet-HOWTO 查看更多 這個檔案的定義資訊, 及對網路卡的影響。當然也包含 PLIP  的設定 參數, 雖然內定值跑起來也不會有啥問題, 除非你的機器很慢。 若是 CONFIG 檔很適合你的機器, 那你就可以用來重建 kernel,第一步 是先編輯最上層的 Makefile, 確定會適當地依照你的 VGA 設定來重建 kernel, 然後跑一跑 kernel configuration 程式: # cd /usr/src/linux # make config 執行之後會問你一堆的問題, kernel 中關於網路的部份共有四大選項, 分別是: Gerneral Setup, Networking options, Network device support,及 Filesystems sections. 最困難的是設定 Network device support section, 因為它是你要選擇使用哪種硬體 device 的地方你 可以只用內定值, 跑起來也很安全。以下是一些大概的 idea * * General setup * ... ... Networking support (CONFIG_NET) [y] y ... ... 在這區你只要選擇是否你要網路支援, 通常ㄋㄟ...你只要回 "y" 就 好啦 ... * * Networking options * TCP/IP networking (CONFIG_INET) [y] y IP forwarding/gatewaying (CONFIG_IP_FORWARD) [y] y * * (it is safe to leave these untouched) * PC/TCP compatibility mode (CONFIG_INET_PCTCP) [n] n Reverse ARP (CONFIG_INET_RARP) [n] n Assume subnets are local (CONFIG_INET_SNARL) [y] y Disable NAGLE algorithm (normally enabled) (CONFIG_TCP_NAGLE_OFF) [n] n The IPX protocol (CONFIG_IPX) [n] n 第二部份是允許你啟動或關閉一些 (funky features) 的網路設定或者 接受內定值, 直到你需要改變: * * Network device support * Network device support? (CONFIG_NETDEVICES) [y] Dummy net driver support (CONFIG_DUMMY) [n] SLIP (serial line) support (CONFIG_SLIP) [y] y CSLIP compressed headers (SL_COMPRESSED) [y] y PPP (point-to-point) support (CONFIG_PPP) [y] y Load balancing support (experimental) (CONFIG_SLAVE_BALANCING) [n] n Do you want to be offered ALPHA test drivers (CONFIG_NET_ALPHA) [n ] n Western Digital/SMC cards (CONFIG_NET_VENDOR_SMC) [y] y WD80*3 support (CONFIG_WD80x3) [y] y SMC Ultra support (CONFIG_ULTRA) [n] n 3COM cards (CONFIG_NET_VENDOR_3COM) [n] n Other ISA cards (CONFIG_NET_ISA) [n] n PLIP (parallel port) support (CONFIG_PLIP) [n] n EISA and on board controllers (CONFIG_NET_EISA) [n] n Apricot Xen-II on board ethernet (CONFIG_APRICOT) [n] n Pocket and portable adaptors (CONFIG_NET_POCKET) [n] n * 這部份是最重要的, 也是關係最密切的, 他會讓你選擇你所要支援的網 路 device, 你可以看到我有選支援檔頭壓縮的 SLIP 設定, PPP, 及 WD80*3 driver, 回 "y" 表示安裝, "n" 表示不裝。 * * Filesystems * ... ... /proc filesystem support (CONFIG_PROC_FS) [y] NFS filesystem support (CONFIG_NFS_FS) [y] ... ... 如果你希望跑 NFS client 那你一定要 include NFS filesystem type.你也需要包含 /proc filesystem 因為許多網路工具程式都會使 用到。 在你 config 完全之後, 所有剩下的只是 compile kernel: # make dep # make NOTE: 新的 kernel compiles OK 之後, 不要忘了 make zlilo。 8. 設定(configuring)網路設備(Network Devices) 如果目前為止都還順利的話, 那你將會得到一個支援網路 device 的 kernel , 而且包含了網路工具可以用來 configure.現在就來 play 吧 ! 你將需要設定 (configure) 每個你要使用的 device.設定中通常告 訴你一些 IP address, 及它所要連的網路。 在之前幾版的 NET-2 文件中, 我已經寫了差不多接近完整的版本,包含 許多的設定檔, 及適當地修改刪除的文字。從這個版本中, 我使用了一 些不同的方式, 你會有完整全的 uncluttered configuration that you have built from scratch so you know exactly what is in them, and why. 我將會說明每個檔案、及它們的功能。 8.1. Configuring /dev 目錄下特殊的 device 檔 你不需要設定任何 /dev 目錄下, 所有關於 linux 網路的特殊的 device 檔, Linux 不需要也不使用他們, 不過其他的作業系統可能會 用到。 kernel 會在 memory 中動態地建立 device,而且既然他們只是 一些名字而已, 所以就沒有需要直接出現在你面前。 kernel 提供所有 你需要的 programing hooks 及界面,來更有效地使用這些 device 。 8.2. 在我開始之前需要什麼資訊 ? 在你 configure 網路軟體之前, 你需要知道一些你自己的網路連線 ( 架構 )的資訊, 你的網路「提供者」或「管理者」將可以提供你這些資 訊。 8.2.1. IP Address. 這是每一台機器唯一的位址, 是以十進位加以組合起來。 例如:某個數 128.253.153.54, 你的網路管理者會提供你這些資訊。 你若要使用 slip or plip 的連線, 你可能不需要這些資訊, 所以你可 以略過不讀。 如果你只用 loopback device, ( 也就是說不連乙太網路 (ethernet), slip or plip support), 你將不需要 ip address 當 loopback port 總是使用 127.0.0.1 的時候。 8.2.2. Network Mask (`netmask'). 為了執行效率起見, 需要限制網路上的特定區段的 host 數, 通常網路 管理者把他們的網路分成幾個小網路 (subnets), 然後 assign 每個小 網路一部份的 network addressed, 當 network mask 以 bit 的形式 覆蓋在你自己的網路上的 address 時, 它將告訴你它所在的小網路。 這對 routing 來說很重要, 如果你找到一個可以快樂地在網路外跟人 聊天的例子, 但是不是在你自己的網路上, 那很可能你設錯了 subnet mask. 你的網路管理者在網路被規劃時, 就已選定 netmask 了, 因此他將提 供你正確的 netmask. 大部分 class-C 的小網路, 都使用 255.255.255.0 當作 netmask, 其他大的網路使用 class-B netmask (255.255.0.0). 當你 assign一個 address 給一個 device 的時候, NET-2/NET-3 程式碼將自動地選擇內定的 mask. 內定值假設你的網路 還沒被劃分為小網路, NET-2/NET-3 程式碼會選擇以下的設定作為內定 資料: For addresses with the first byte: 1-127 255.0.0.0 (Class A) 128-191 255.255.0.0 (Class B) 192+ 255.255.255.0 (Class C) 如果以上這些都不能 run, 試試其他的。如果都還不行, 請問問你的網 路管理者, 或 LAN guru (dime a dozen), 你不必擔心 loopback port 的 netmask, 除非你跑 slip/plip 。 8.2.3. Network Address. 這是使用你的 netmask 所作出來的 IP address. netmask 以 bit 對 bit 來做 AND 運算。 例如: If your netmask is: 255.255.255.0 and your IP address is: 128.253.154.32 && --------------- your Network address is: 128.253.154.0 = 8.2.4. Broadcast Address. `A shout is a whisper that everyone hears whether they need to or not' ( 這不需要翻譯了吧?) 這個正常是以你的 network address 與反相的 netmask 來做 OR 運算 。 做的比說的更簡單啦! 對一個 Class-C 的網路來說, network mask 255.255.255.0, 你的 Broadcast Address 就是你的 network address ( 上面所計算的 ), 跟 0.0.0.255( 也就是 netmask 的反相 ) 做邏輯 OR 的運算, 以下是一個簡單的範例: 如果你的 netmask 是: 255.255.255.0 ! netmask 的反相就是: 0. 0. 0.255 = 如果你的 Network address 是: 128.253.154.0 || ---------------- 你的 broadcast address 就是: 128.253.154.255 = 注意一個由來已久的原因: 一些網路使用以 network address 當作 broadcast address. 如果你有疑問請與你的網路管理者聯絡。 如果你能使用 sniffer, 或其他能提供你追蹤網路流量的設備的話, 你 就可以以查看其他 LAN 流量, 來決定 network 及 brodadcast addresses, 眼睛隨時要盯著或過濾每個封包, 除了往 broadcast address ff:ff:ff:ff:ff:ff流去的 ethernet 封包之外。 如果其中有 一個你的區域 router 的 IP source address, 而且 protocol ID 不 是 ARP 的話, 哪你要 check 目的 IP address,因為這個封包可能真的 是個從你的 router 廣播的出去的 RIP, 這種情況下目的 IP address 將是你的 broadcast address. 再次叮嚀您, 如果你不確定, 一定要跟你的網路管理者 check check! 他們的幫助比你用 config 錯的機器來連網路還能幫助你. 8.2.5. Router (`Gateway') Address. `There must be some way out of here.' 這是一個將你的 LAN 連至 Internet 的機器的位址,那是你的電腦連到 外面網路的穿堂, 有許多的先例可用來 allocating addresses 給 routers, 你也可以引用,有兩種: router 使用最低的 address, router 使用最高的數字。 可能最常用的是第一個, router 會擁有一個位址, 大部分會跟你的一 樣。 除了最後一個 byte 是 ".1" 之外。 例如: 假如你的位址是 128.253.154.32,那你的 router 可能是 128.253.154.1. router 實際 上可以使用任何網路上可用的 address (& function properly), 跟 address 絲毫沒有絕對的關係。 你的網路上可能有好幾個 router, 你 可能要跟你的網路管理者詢問看看, 找出一個合適的 router address 。 如果你不使用 loopback 的方式, 你不不需要 router address. 如果 你使用 PPP, 那你也不需要知道你的 router address, 因為 PPP 會自 動替你決定正確的 address 。 如果你使用 SLIP, 你的 router address 將會是你的 SLIP server 的 address. 8.2.6. Nameserver Address. 大部分網路上的機器都有使用 name server, name server 負責翻譯 hostname與 ip address 等等, 你的網管者會告訴你最近的 name server, 你也可跑個 nameserver daemon(named) 在自己的機器上, 而 你的 nameserver 就要設成 127.0.0.1 ( 也就是 loopback port address). 不過, 也並不是很必要在自己的機器上跑 named; 有需要的 話可看 named 那一章。 如果你只使用 loopback, 那你不需要知道 nameserver address, 因為 你只跟你的機器相看兩不厭咧... 8.2.7. SLIP/PLIP/PPP 使用者請注意 ! 事實上, 你很有「可能需要」或「可能不需要」知道任何以上的資訊。 不管你需要或不需要都要看你的網路怎麼連接, 及連線遠端 host 的能 力, 相關的細節在 SLIP/PLIP 及 PPP 的設定中。 8.3. /etc/rc.d/rc.inet1,2 or /etc/rc.net 當你每次自己動手修改網路設備的設定時, 你將可能要把這些東西記在 某個地方, 這樣系統每次啟動上來時, 都會自動設定網路。 這些 `rc' 開頭的檔案是專門設計用來做啟動系統的初始化。對一些非 標準的 unix 系統 (non-unix-wizard): `rc' 系列的檔案是在系統啟 動時用 init program 來執行的。 並執行所有基本的系統程式, 像: syslog, update, 及 cron 。 rc 系列檔案與 MS-DOS 的 autoexec.bat 很類似。 rc 也可能代表 `runtime commands'. 這些檔 案一般是放在 /etc 下面, Linux Filesystem Standard 目前並沒硬性 規定要放在哪裡。依 BSD (/etc/rc.*) 或 System-V (/etc/rc.d/rc*) 的慣例兩者皆可。 Alan, Fred 和我都使用 System-V 的用法。也就是 你現在所看到的狀況。也就是說這些檔案可在 /etc/rc.d 目錄下找到, rc.inet1 及 rc.inet2 開機啟動時第一個被執行的檔案是 /etc/rc,然 後依序呼叫其他的 rc 系列檔案, 如: rc.inet1, rc.inet2, 他們放在 哪裡他們叫時麼、並不很重要, 因為 init 找到們他。 在某些版本 rc 系列關於網路的檔案叫做 rc.net, 且放在 /etc 。 在 linux上則是放在 rc.inet1 和 rc.inet2, 且會接著執行 commands 出 現的地方其實沒什麼重要, 在你執行網路 daemon 及應用程式前, 你要 先 configure interface. 我指的這些檔案是 rc.inet1 或 rc.inet2, 放在 /etc/rc.d 裡, 所以 如果你正在使用的版本中是 rc.net 的話, 你要保留這些檔案在某個地 方, 然後做適當的修正。 我們要做的時候, 會從 scratch 來建立檔案。 8.3.1. rc.inet1 rc.inet1 使用 /sbin/ifconfig 及 /sbin/route 來設定你機器基本的 tcp/ip 界面。 8.3.1.1. ifconfig /sbin/ifconfig 是用來設定你的網路界面, 它使用了一些參數, 如: IP address, netmask, broadcast address. 你可以使用不加參數的 ifconfig命令來顯示網路 device 的設定, 請用 man 來查看 ifconfig 的詳細內容。 8.3.1.2. route /sbin/route 是用來開啟, 修改, 刪除, routing table 中的項目.如 果網路上有個 datagram 要傳的話, 網路會查詢這個 table. routing table 列出目的的位址, 及這個 address 可能使用到的界面.你可以使 用 route 這個命令 ( 不加參數 ) 來顯示 routing table 的內容 check check route 的 man page 就知道啦。 8.3.2. rc.inet2 rc.inet2 會啟動所有網路 daemon, 像 inetd, portmapper 等等.在 rc.inet2 一章中會說的更多。目前我們只著重在 rc.inet1在此我提到 這個檔案, 如果你的檔案名字不同 ( 如: rc.net), 你必須要知道 rc.net 執行過後要執行哪個 rc 檔.在此我只提到著個檔名, 所以如果 你驅動網路的 rc 不叫做 rc.inet1 ( 例如: rc.net)那你要知道網路 的第二部份是啥檔名 ( 或許沒有吧 ) 。在設定完你的網路 device 之 後, 你必須要執行必要的網路 application及 daemon 。 8.4. 設定 Loopback device (強制選用)。 loopback device 並不是一個真實的 hardware device. 他只是一個軟 體但是看起來像一個實體的 interface. 它的功能是讓你更快樂地連到 你自己的機器, 而且可測試軟體, 不需要真的連到網路上。這個東西棒 呆了, 如果你在發展網路軟體的話, 而且你有 slip 的連線的話。你可 在自己單機上撰寫並測試, 如果寫好了就用 slip 連線給他卯起來踹 ... 如果你的軟體亂來的話也不會影響到別人... 依照慣例, loopback device 總是使用 127.0.0.1 這個 IP address, 所以你在設定時將會使用到它。 linux 的 loopback device 叫做 `lo', 你現在就可以把第一個 entry 加入 rc.inet1 中, 以下 shell script 將可以執行: #!/bin/sh # # rc.inet1 -- configures network devices. # # Attach the loopback device. /sbin/ifconfig lo 127.0.0.1 # # Add a route to point to the loopback device. /sbin/route add 127.0.0.1 # End loopback # 在你用 ifconfig 來給定 loopback interface 一個 IP address 及用 route 在 routing table 中增加一個 entry 之後, 所有送往 127.0.0.1 的封包將會送到 loopback port. 這邊有兩點很重要: 第一、 netmask 及 broadcast addresses 已經允許使用內定值, 用在 loopback device ( 先前有在 `Network Mask' 一節討論到 ),用 ifconfig 查看。 # ifconfig lo Link encap Local Loopback inet addr 127.0.0.1 Bcast 127.255.255.255 Mask 255.0.0 .0 UP BROADCAST LOOPBACK RUNNING MTU 2000 Metric 1 RX packets 0 errors 0 dropped 0 overrun 0 TX packets 30 errors 0 dropped 0 overrun 0 # 第二、 route 選擇 loopback device 當作 route 到 127.0.0.1 的原 因不明顯 route 這個指令很聰明的啦, 它知道 127.0.0.1 屬於被 loopback device 支援的網路 , 它會檢查 IP address 及 netmask.你可以使用 route 來列出 routing table: # route Kernel routing table Destination Gateway Genmask Flags Metric Ref Use Iface 127.0.0.0 * 255.0.0.0 U 0 0 30 lo # Note: 你可能需要加 -n 參數, 如果你的 name resolver 還沒正確地 設定的話。加 -n 參數後, route 只會顯示數字 numeric addresses , 而部會麻煩到查詢 domain name. 8.5. 設定 ethernet device. (選項) 如果你希望設定你的 ethernet card 你會對這這節有興趣的。 不然的 話你可以略過, 跳下一節。 設定 ethernet card 有點兒複雜, 比起設定 loopback device 來講。 你現在就可以指定明確的 network mask 及 broadcast address 在 rc.inet1 中了, 除非你確定內定值跑起來也沒問題, 那也可以。 你需要一個網路管理者 assign 給你的 IP address, 自己網路的 network mask, 及 broadcast address. linux 的第一個 ethernet device 叫做 `eth0', 第二個叫做 `eth1', 起餘類推。 你現在可以加入一個新的部份到 rc.inet1 檔中, 以下 shell script 對你來說應該可以跑, 如果你使用真實的位址的話: # # Attach an ethernet device # # configure the IP address, netmask and broadcast address. /sbin/ifconfig eth0 IPA.IPA.IPA.IPA /sbin/ifconfig eth0 netmask NMK.NMK.NMK.NMK /sbin/ifconfig eth0 broadcast BCA.BCA.BCA.BCA # # add a network route to point to it: /sbin/route add -net NWA.NWA.NWA.NWA device eth0 # # End ethernet # 參數說明: IPA.IPA.IPA.IPA 表示你的 IP Address. ^^ ^ NMK.NMK.NMK.NMK 表示你的 netmask. ^ ^ ^ BCA.BCA.BCA.BCA 表示你的 Broadcast address. ^ ^ ^ NWA.NWA.NWA.NWA 表示你的 Network Address. ^ ^ ^ 注意 route 的 -net 參數. 這會叫 route 所加入的 route 是一個對 網路的 route, 不是對某個 host. 有個修改的方法, 你可以不設 -net , 如果你在 /etc/networks 中有網路的列表的話。 在 10.3.3 `/etc/networks' 那節中會講到。 8.6. 設定 SLIP device (選項) SLIP (Serial Line Internet Protocol) 允許你在 serial line 上使 用 tcp/ip, serial line 可以是電話線 +dialup modem, 或是一個專 線 (leased line) 之類的東西。 當然使用 slip 你需要能連到一個 SLIP server 的管道, 許多大學及公司行號都提供 slip 的管道可以連 到全世界。 Slip 使用你機器上的 serial ports 來傳輸 IP 封包 (datagram), 為 了達到效果它會控制 serial device. Slip device 名字叫做 sl0, sl1等等, 這樣的名字如何對應到你的 serial devices 呢? networking code 使用 ioctl() (i/o control) system call 來改變 serial devices成 slip devices 。 這可由 dip 與 slattach 兩個程 式來做到。 8.6.1. dip dip (Dialup IP) 是個很精明的程式, 能設定 serial device 的速度, 也可下指令自動連線到遠端 server, 自動幫你 login 到 server 端, 找尋 server 端送出的訊息, 並分析出它給的 IP address, 並執行必 要的 ioctl 來切換你的 serial port 到 slip mode 下, dip 有一個 很強大的使用 script 的能力, 能讓你的 logon 程序自動化。 dip 放在 net-032/net-tools package 中。 也有許多別的版本的 dip 開發出來, 並提供了許多新的特色。可在以下節點找到: sunsite.unc.edu /pub/Linux/system/Network/serial/dip* dip-uri 這個版本似乎是較普遍的版本, 但是我建議你每個版本都看看 看哪個提供的功能對你比較有用。 8.6.2. slattach slattach 是個很簡單的程式, 容易使用, 但是它沒有 dip 那樣複雜。 slattach 是個使用在你用 permanent connection 連到你的 server 端的理想, 就像一條 physical cable, 或一條 leased line 。 8.6.3. 什麼時候我要用什麼? 你應該使用 dip, 當你使用 modem 連上一台 slip server 時, 或一些 暫時的連線時。你應該使用 slattach, 當你有個專線 (leased line), 可能是 cable, 在你的機器與 server 間, 且沒有需要特別的動作來連 線工作 {?} 。請看! 8.6.7 `Permanent Slip connection' 那節。 設定 slip 跟設定 Ethernet interface ( 讀 8.5 ` 設定 ethernet device'很接近, 只是有些地方不同。 首先, slip links 是 unlink ethernet networks, 只有兩個 host 在這個網路上, 連線兩端各一台 機器, 不像 ethernet 那麼快就連線, slip 要看你用什麼連線, 你必 須要用特殊的方法 initialize 你的 network connection 。 如果你使用 dip, 那在開機時不會正常地跑, 有時是在當你稍後準備好 連線時。它可以自動跑 procedure, 如果你使用 slattach 那你將可能 要增加一些東西在 rc.inet1 檔中 ( <-- 很快就會提到...) slip server 主要有兩種形式: Dynamic IP address servers 及 static IP address servers. 幾乎每個 slip server 會提示你 login 及下 password, 當你撥進來的時候。 dip 可以自動幫你處理 login 及 password 。 8.6.4. Static slip server with a dialup line and DIP. Static slip server 會提供你一個 IP address ( 相異於你自己的 ) , 每次你連上 server 的時候, 它會根據它所提供的 IP address 來設 定你的 slip port 。並因應你的 modem call, 而要求你輸入使用者名 稱與密碼, 之後, 它便會開始為你提供傳送資料的服務了。假使你有個 static server, 你可能就會想在 /etc/hosts 裡為你的 hostname 與 IP address 加入一些 entries 。 那你就必須要設定一些其他的檔案, 如: rc.inet2, host.conf, resolv.conf, rc.local , /etc/HOSTNAME 。 記住! 你不用在 rc.inet1 裡為 slip 的連接增加任何特殊的 commands, 因為那些繁雜的工作會由 dip 為你完成,不過你必須提供 dip 適當的資訊。屆時, dip 就會在你命令 modem建立 the call 之後 為你設定好界面, 並 logging 到你的 slip server 。 如果這就是你 slip server 的工作, 那你就可以跳至 8.6.6 ` 使用 DIP'那一節, 看看如何適當地設定 dip 。 8.6.5. Dynamic slip server with a dialup line and DIP. 每次你 logon 的時候, dynamic slip server 會從一堆 addresses 中 隨機取出一個當作你的 IP address 。 這表示說你每次取得的 IP address 都是不固定的。 通常網路管理者會規劃分配一個範圍的 IP address 給 server 使用, 當有使用者連上 server 的時候, server 就會找出第一個尚未被使用的 address 並分配給使用者, 並在 welcome畫面上知會, 接著使用者就可以用此一 IP address 開始進行 工作了。 對於此類的 server, 設定方法類似 static server, 除了你必須增加 一個步驟 --- 依據 server 指定的 IP address 來設定你的 slip device 。 同樣的, dip 會自動處理一些繁雜困難的工作。 較新版本的 dip 不但 會幫你 login 還會自動讀進顯示在 welcome 畫面上的 IP address並 加以儲存, 以方便你的 slip device 設定工作。 如果這就是你 slip server 的工作, 那你就可以跳至 8.6.6 ` 使用 DIP'那一節, 看看如何適當地設定 dip 。 8.6.6. 使用 DIP. 如同先前談過的, dip 是個威力強大的程式, 可以自動執行 dialin 的 程式 logon 到遠端的 slip server, 幫你連線, 使用 ifconfig & route來幫你設定你的 slip device 。 想使用 dip 就要先寫個 `chat script', 上面寫些基本的 commands list, 讓 dip 依照你的要求來執行 actions 。 下面附上的例子是 net-032 package 的。 dip 是個相當好用的程式, 有相當多參數可使 用 , 有需要的人, 可以查看 man page, README, 或者是 tsx-11 與 net-032 distribution 範例檔案上的說明。 留意下面的例子, 它是假設你所使用的是 static slip server,所以要 先知道你的 IP address 。若是使用 dynamic slip server, 較新版本 的 dip 會有個 command, 可自動讀進 slip device 與 IP address並 加以設定。 下面的範例是由 Paul Mossip 所提供的, 很適合剛開始使 用的人, 可以把它存檔為 /etc/dipscript # # Connection script for SLIP to knoware.nl.mugnet.org # # Fetch the IP address of our target host. main: # Set the desired serial port and speed. port /dev/cua0 speed 38400 # Reset the modem and terminal line. reset # Prepare for dialing. send ATZ1\r wait OK 4 if $errlvl != 0 goto error dial 666-0999 ## Change to your server's number! if $errlvl != 0 goto error wait CONNECT 60 if $errlvl != 0 goto error # We are connected. Login to the system. login: sleep 3 send \r\n\r\n wait gracelands> 20 ## Change to your server's prompt if $errlvl != 0 goto error send login\n wait name: 10 ## Wait username: prompt if $errlvl != 0 goto erro send elvisp\n ## Change to your own! wait ord: 10 ## Wait password prompt if $errlvl != 0 goto error send alive\n ## Change to your own! wait gracelands> 10 if $errlvl != 0 goto error send slip\n ## Change to suit your server wait SLIP 30 ## Wait for SLIP prompt if $errlvl != 0 goto error get $local remote 10 ## Assumes the server sends your IP. . if $errlvl != 0 goto error ## address as soon as you enter slip . get $remote gracelands ## slip server address from /etc/hos ts done: print CONNECTED to $remote with address $rmtip we are $local default mode SLIP goto exit error: print SLIP to $host failed. exit: # # End dip script 上面的 example 假設你呼叫一個 dynamic slip server, 如果你呼叫 static slip server, 把以下兩行刪除 ( 或 comment): get $local remote 10 ## Assumes the server sends your IP.. if $errlvl != 0 goto error ## address as soon as you enter slip. 當 dip 被給予 get $local 的 command, 它會在從遠端讀進的文字檔 中搜尋類似 IP address 的字串, 也就是以 `.' 所分隔的數字字串。 這項更動是為了 dynamic slip servers 而特別加上的,以便自動讀取 server 所分配的 IP address 。 上面的例子會自動建出 default route 來對應你的 slip link 。假使 說這不是你想要的, 而是想以別的當作你的 default route 的話,就將 這項內定的 command 移走就是了。在跑完這個 script 之後,如果你下 ifconfig 這個指令, 就會看到你有個 slip device 叫 s10。當你有需 要的時候, 還可以在 dip 的 command 執行結束之後, 用 ifconfig 和 route 指令, 自行修改它的設定。 dip 允許使用者使用 mode 這個指令選擇一個號碼以使用不同的協定, 一般用到的通常是 cslip 。 不過必須留意的是這個協定必須是連線兩 端所同意的, 所以無論你選的是何種協定, 你都必須確認 server 也是 使用相同的協定。 上面所說的例子是相當簡略的, 可能還有些錯誤存在, 請自行參考 dip 的 man page 。甚至你可以考慮再加上一些功能, 例如: 在等待時間內 未連上 server 後重新撥接, 或是一次指定數個 server 來輪流撥接。 8.6.7. Permanent slip connection using a leased line and slattach. 如果你有條 cable, 或是有 leased line 還是其他 permanent serial connection 來連接你的機器與其他機器, 那你就不必忍受使用 dip 時 所必須遭遇的麻煩, 因為有個好用的公用程式 slattach 可提供你足夠 的功能來做連接的設定。 既然你的連接是屬於固定不變的那一類, 你可能會想要在 rc.inet1中 加入一些設定。 基本上, 你所需要作的就是為 serial device 設定好 正確的速度與切換 serial device 成 slip mode 。 slattach 這個指 令可以幫助你做到上述設定。 把下面這段範例加到你的檔案 rc.inet1 之中: # # Attach a leased line static slip connection # # configure /dev/cua0 for 19.2kbps and cslip /sbin/slattach -p cslip -s 19200 /dev/cua0 & /sbin/ifconfig sl0 IPA.IPA.IPA.IPA pointopoint IPR.IPR.IPR.IPR up # # End static slip. Where: IPA.IPA.IPA.IPA represents your IP address. IPR.IPR.IPR.IPR represents the IP address of the remote end. slattach 會使用第一個尚未被佔用的 slip device 來當作特定的 serial device 。 slattach 會由 s10 開始搜尋, 若 s10 被佔用了, 就會查看 s11 是否可用.. 以此類推, 直到找到可用的 slip device 。 slattach 允許你用 -p 的參數設定使用不同的協定。 可依據你是否需 要壓縮來決定使用 cslip 還是 slip, 不過連線的兩端必須使用同樣的 協定就是了。 8.7. 設定 PLIP device. (選項) plip (Parallel Line IP), 它用來提供在兩台機器間做點對點的連線, 除了使用電腦上的平行埠 (parallel ports) 而不使用串列埠 (serial ports), 它跟 slip 很像。 因為使用 parallel port 可以一次傳輸超 過 1 bit 的資料, 而且 parallel device 可以達到比 serial device 更高的傳輸率。 除此之外, 甚至最簡單的 parallel ports, printer ports 都能使用, in lieu of you having to purchase comparitively expensive 16550AFN UART's for your serial ports. 請注意有些膝上型電腦使用的晶片組不能提供 PLIP 的功能, 因為 PLIP要使用到 combinations of signals, 印表機並不使用這種 combinations of signals 。 Linux plip interface 跟 Crywyr Packet Driver PLIP 相容, 也就是 說你的 linux 可以透過 plip 連到 DOS 機器跑 TCP/IP 軟體。 compile kernel 時, 只有一個 /usr/src/linux/driver/net/CONFIG 這個檔案需要設定, 他包含 plip timers in mS. 內定值在大部分的時 候都沒問題, 你可能需要增加一些 , 如果你有特別「龜速」的電腦的 話, 在這個狀況下, the timers to increase are actually on the other computer 。 你需要增加下列的數行到 rc.inet1: # # Attach a PLIP interface # # configure first parallel port as a plip device /sbin/ifconfig plip0 IPA.IPA.IPA.IPA pointopoint IPR.IPR.IPR.IPR u p # # End plip 說明: IPA.IPA.IPA.IPA 表示你自己機器的 IP address. IPR.IPR.IPR.IPR 表示遠端機器的 IP address. 這個點對點的參數跟 slip 一樣的意思, 它指定 另外一端的 address。 除了它不需要 dip 與 slattach 之外, 其實你可以把 plip interface 看成是 slip interface 。 8.7.1. PLIP 接腳圖 plip 已經設計來使用 cable 跟相同的接腳建立連線。現在普遍的使用 是在 MS-DOS 環境下 pc-pc 的檔案傳輸。 這個接腳圖 ( 在 /usr/src/linux/drivers/net/plip.c 內 )看來是這 鍋樣子的: Pin Name Connect pin - pin --------- ------------------------------- GROUND 25 - 25 D0->ERROR 2 - 15 ERROR->D0 15 - 2 D1->SLCT 3 - 13 SLCT->D1 13 - 3 D2->PAPOUT 4 - 12 PAPOUT->D2 12 - 4 D3->ACK 5 - 10 ACK->D3 10 - 5 D4->BUSY 6 - 11 BUSY->D4 11 - 6 D5 7* D6 8* D7 9* STROBE 1* FEED 14* INIT 16* SLCTIN 17* 注意: 不要去接到標有 `*' 的接腳, 額外的 ground 是 18,19,20,21, 22,23, and 24. 如果你使用的 cable 外層是用金屬包起來的話, 那它應該接到金屬包 外層的 DB-25 (at one end only. {?}) 警告: 亂接 PLIP cable 線可能摧毀你的控制卡, 要非常小心, 每個連 線都要檢查兩次, 以確定你不會讓自己白做工或是造成心絞痛... 雖然你可以使用 PLIP cables 來做長距離的連線, 但你應該盡量避免 。規格中規定只能連大約一公尺, 當你跑長距離的 PLIP  時, 要小心 強烈的電磁場, 閃電, 電源線, 收音機傳送器, 可能會毀損你的控制卡 。 如果你堅持使要長距離連線, 那你應該找到便宜一點的 ethernet card並使用 coaxial cable 。 9. Routing(強制的) 在你設定完所有 network device 之後, 你要想想你的機器要如何繞送 (route) IP datagrams 。 如果你只有設定一個 network device 那你 的選擇很簡單, 因為任何機器的所有封包 (datagrams) 都要經過那個 interface 來出入。如果你有超過一個以上的 network interface, 那 你的選擇就複雜一點, 你可能在家的機器上同時擁有一個 ethernet device 及一個 slip connection, 那你必須將封包都導向家裡的機器, 且其他的則透過 ethernet device 。 Routing 是個很簡單的機制, 但 是不要擔心, 如果剛開始的時候你發現對你來說有點難了解, 每個人都 這樣啦! 你可以顯示你的 routing table 的內容, 使用 route 這個命令 ( 不 加參數 ) 。 unix network 有很多的常用的機制可以設定。我將簡要地逐一介紹。 9.1. Static/Manual(手動的) Routes. Static routing, 也就是 `hard coded' routing, 也就是說, 如果你 的網路掛了的話它不會更動, {?}or if an alternate route becomes available. Static routes 常用於簡單的且沒有 alternate routes available 的網路, where you have a very simple network with no alternate routes available to a destination host, 也就是說,到 目的主機只有唯一的路徑, or where you want to route a particular way to a host regardless of network changes. 在 Linux中 manual routes 有一個特別的用處, 增加一個 route 到 slip 或 plip host, 這些 host 先前已經以 ifconfig 加 pointopint 參數 來設定。如果你有 slip/plip 連線, 且已經以 pointopoint 參數來指 定遠端主機, 那你應該增加一個 static route 到那個節點 address 使得 ip routing 軟體知道如何繞送封包到那個位址。 你可在 tcp/ip 連線上使用 route 指令, 透過專線, 先前的例子像這樣: #/sbin/route add IPR.IPR.IPR.IPR 說明: IPR.IPR.IPR.IPR 表示遠端主機的 IP address 9.2. default Route. default route 的機制對大部份網路上的 end-user workstation/host 最普通也最有用, default route 是一個特別的 static route, 它符 合每個 destination address, 使得如果對一個 datagram 來說已經沒 有其他的 route 可以送了的話, 將會使用 default route 。 {?} 如 果你已設定定義有單一的 ethernet interface, 或者單一的 slip interface device, 那你應該可以透過它指到你的 default route 。 在 ethernet interface 這種狀況下, Linux kernel 就知道要將 datagram 送到網路上的哪一台主機。 它使用 network address 及 network mask 來運作。 這表示那些 kernel 送不到目的地的 datagrams 是那些不存在網路上的人。 為使 default route 能正常運 作, 你要設定 default route 到你的 router address, 因為它是你與 外面聯繫的工具。如果你使用 slip connection, 那你的 slip server 將會變成你的 router, 所以你的 default route 將會透過你的 slip server 來達成。 再來是設定你的 default route, 當你所有的 network device 都設定 好後, 在 rc.inet1 中加入 以下幾行: # # Add a default route. # /sbin/route add default gw RGA.RGA.RGA.RGA # 說明: RGA.RGA.RGA.RGA 表示你的 Router/Gateway 的 Address. 9.3. Proxy ARP. 這是個 ugly, hazard prone 的方法, 而且如果你們之中有些人無論如 何都打算使用它的話, 那就要格外的小心囉。 大部分會用到 proxy arp 的人都是把 Linux machine 設定成一台 slip dial-in server 。 因為這些人會使用到 PPP, 而 PPP daemon為 了使用上的安全會簡化並自動處理這些工作。 自然地, 當一個 ethernet 上的 host 想與你 talk, 它就只知道你的 IP address 而不清楚你的 hardware address, 也就不知該將 datagrams 往哪傳送。 APR mechanism 為此特別提供了一個 mapping function 來處理 network address 與 hardware address 之間的問題 。 假使你想把自己的機器當作 server 來服務其他機器時,當其他的機器 沒有實際連上 enthernet 時,就必須讓你的機器能代表這些機器, 回應 對其 IP address 所提出的 ARP requests 。 例如你的機器有 128.253.154.120-124 這幾個 IP address 來分配給 dial-in 的 slip 使用者, 而你所擁有的 ethernet card 之 hardware address 為 00:00:C0:AD:37:1C ( 可以用 ifconfig 這個指令來找 ) 。 你就要在 Linux server 的 rc.inet1 的最後加上下面這幾條 commands, 以便回 應對這些 addresses 所提出的 arp requests by proxy 。 # # Proxy ARP for those dialin users who will be using this # machine as a server: # /sbin/arp -s 128.263.154.120 00:00:C0:AD:37:1C pub /sbin/arp -s 128.263.154.121 00:00:C0:AD:37:1C pub /sbin/arp -s 128.263.154.122 00:00:C0:AD:37:1C pub /sbin/arp -s 128.263.154.123 00:00:C0:AD:37:1C pub /sbin/arp -s 128.263.154.124 00:00:C0:AD:37:1C pub # # End proxy arps. pub 的參數是表示 `publish', 用來指示你的機器為這些 addresses回 應 requests, 即使那不是你的機器的 addressses, 也會用你機器的 hardware address 機來回應。 當然, 你必須確定在你的 Linux server 的 routes 裡,已經將這些 addresses 與它們要對應連接上的 slip device 都設定好了。 假使你使用了 PPP, 你不必擔心會因人為失誤而搞混了 arp table 。 因為當遠端的機器與 server 是在同一個網路上, 若你使用了 proxyarp 這個參數, pppd 就會為你處理這些 entries 。 不過你也要 在 server's pppd 的 command line 加上 the netmask of network 。 9.4. gated - the routing daemon. gated 在有些狀況下可以用來代替 proxy arp, 手腳也比較俐落, 但是 它最大的功能在於: 如果你要把你的 linux 機器當作網路的 ip router gated 提供支援許多 routing protocols 。 這些 protocols 是 RIP, BGP, EGP, HELLO, and OSPF 。最常使用在有 RIP 的小網路, RIP 代表 `Routing Information Protocol' 。 如果你跑 gated, 為 rip 設定, 你的 linux 機器將定期用特殊的格式廣播 routing table 給你的網路。這樣做的話, 所有在你的網路上的機器都會知道哪個位址 可透過你的 linux 連上。 gated 可以用來代替 proxy arp, 當所有網路上的 hosts 都跑 gated & routed 的時候。如果你有個靠手動及動態的 route 混合的網路, 你 應該把任何手動修改的 route 標為 `passive', 並確定它們不會被 gated 摧毀, 因為它不會 update 。 gated 正常是由你的 rc.inet2 來啟動, (rc.inet2 下一節會講 ), 你 可能已經看到一個叫 routed 的 daemon 正在跑... gated 比 routed 更優越, 因為它更有彈性且功能更強。 所以你應該跑 gated 而不是 routed 。 9.4.1. 取得 gated Gated 可在以下節點取得: sunsite.unc.edu /pub/Linux/system/Network/daemons/gated.linux.bin.tgz /gated.linux.man.tgz /gated.linux.tgz gated.linux.tgz 是原始程式碼, 你可能不需要, 除非你因為某些原因而 希望重新 compile 執行檔。 9.4.2. 安裝 gated gated 的 binary 版包含三個程式及兩個設定檔: 程式: gated 實際上的 gated daemon. gdc gated 的使用者操作界面。 是用來控制 gated daemon(停止、 啟動及取得狀態值)。 ripquery 一個用來查詢 gateway 已知的 route 的 diagnostic tool。 (使用 `rip query' 及 `rip poll') 設定檔: gated.conf gated daemon 的設定檔, 允許你指定 gated 要如何運作。 你可以啟動/取消(enable/disable) 任何的 routing protocols, 並控制 routing protocol 的運作方式。 gated.version 描述版次的文件檔。 gated 的 binary 版, 並不會幫你把檔案 install 到正確的地方,不過 還好不多。所以還很容易解決。 Install binary 的過程如下: # cd /tmp # gzip -dc .../gated.linux.bin.tgz | tar xvf - # install -m 500 bin/gated /usr/etc # install -m 444 bin/gated.conf bin/gated.version /etc # install -m 555 bin/ripquery bin/gdc /sbin # rm -rf /tmp/bin 我保留一個 networking daemons 在 /usr/etc 中, 如果你的在其他的 目錄中你必須要修改 target directory, gated 的範例檔包含模擬舊 的 routed daemon 的設定:安裝 man page, 踹踹下列幾行: # cd /tmp # gzip -dc .../gated.linux.man.tgz | tar xvf - # install -m 444 man/*.8 /usr/man/man8 # install -m 444 man/*.5 /usr/man/man5 # rm -rf /tmp/man man page 檔, 包括了如何設定及使用的細節資訊。 至於如何設定 gated.conf 請參考 gated-config man page 。 10. 設定(Configuring) network 的 daemons 如同前述, 有許多的檔案需要設定才能跑網路, 這些檔案大部分是高階 的網路軟體設定。每個重要的部份都會在下面的一節說明, 但是當你若 摸久了之後, 你會發現, 還有一大堆的設定檔要設定。 10.1. /etc/rc.d/rc.inet2 (rc.net 的後半段) 如果你有照以下文件來做, 你應該就已經正確地設定完 rc 檔中的網路 device 的 address, 並且為你的特定的網路設定完所要加入的 route 了。 你現在需要啟動一些 higher level 網路軟體。 現在天氣正好, 可以讀讀 Olaf's Network Administrators Guide,因 為它是一份本節設定定義的文件。 他將幫助你決定要在檔案中加入什麼東西, 或許更重要的, 哪些不須加 入。 為了安全考量, 它對於你正在跑的網路 service 述說中肯, 很有可能 你的系統有 security hole, 所以只跑需要的 service 就好了。 這裡有一些重要的 daemons ( 背景執行的系統 porcess) 以要知道的, man page 中會談到, 他們是: 10.1.1. inetd. inetd 是一種處理 ineternet connection request 的背景程式 (daemon) 。它很聰明你不需一次跑一大堆沒人連接的 server 。 當它發覺有特定的 request ( 如:telnet, ftp) 進來的時候, 它會檢 查 /etc/services 檔, 找出要執行該 request 的程式, 啟動該程式, 並處理之間的連線, 把它想像成是你所有的的 internet servers 的主人 (master server),它也內建一些簡單的標準 services inbuilt, 如: 秀出, 忽 略及產生 services, 這些 serives 會被許多網路測試使用到。 10.1.2. syslogd. syslogd 是個處理並記錄整個系統的 log(message) 的 daemon.他接受 其他程式產生並輸出到 syslog 的訊息。並會根據規則來分散這些訊息 , 規則定義在 /etc/syslogd.conf 。 例如: 特定的訊息你可能會希望送到 console, 並且送到 log 檔中,或 者只想送到一個檔案中, syslogd 允許你指定訊息要送到的地方。 10.2. 一個 rc.inet2 範例檔 以下是一個 rc.inet2 的範例檔 (Fred 寫的 ). 它會啟動一駝的 server所以你可能要把不需要的弄下來, 只留要跑的就可以了...如何 把它給弄下來呢? 只要把它給直接砍掉砍掉或在 (if 到 fi 的範圍內 的 )該行前加個 '#' 。 加個 echo 上去, 在 boot 的時候提醒自己該 service已經 disable 掉了, 或執行指令確定它在背景快樂地跑... 想 要獲得 daemon更詳細的資料嗎? 對啦! 查查 man page 或 Network Administrators Guide 。 #! /bin/sh # # rc.inet2 這個 shell script 會啟動所有的 INET system. # 注意, 當這個 script 被呼叫到, 也同時會把 NFS 上 # 重要的 disk(eg. /usr) 點一把火(fire up) # 要特別注意線上正在跑的 binaries... # # Version: @(#)/etc/rc.d/rc.inet2 2.18 05/27/93 # # Author: Fred N. van Kempen, # # Constants. NET="/usr/etc" IN_SERV="lpd" LPSPOOL="/var/spool/lpd" # At this point, we are ready to talk to The World... echo -e "\nMounting remote file systems ..." /bin/mount -t nfs -v # This may be our /usr runtime!!! echo -e "\nStarting Network daemons ..." # Start the SYSLOG daemon. This has to be the first server. # This is a MUST HAVE, so leave it in. echo -n "INET: " if [ -f ${NET}/syslogd ] then echo -n "syslogd " ${NET}/syslogd fi # Start the SUN RPC Portmapper. if [ -f ${NET}/rpc.portmap ] then echo -n "portmap " ${NET}/rpc.portmap fi # Start the INET SuperServer # This is a MUST HAVE, so leave it in. if [ -f ${NET}/inetd ] then echo -n "inetd " ${NET}/inetd else echo "no INETD found. INET cancelled!" exit 1 fi # Start the NAMED/BIND name server. if [ ! -f ${NET}/named ] then echo -n "named " ${NET}/named fi # Start the ROUTEd server. # NOTE: routed is now obselete. You should now use gated. #if [ -f ${NET}/routed ] #then # echo -n "routed " # ${NET}/routed -q #-g -s #fi # Start the GATEd server. if [ -f ${NET}/gated ] then echo -n "gated " ${NET}/gated fi # Start the RWHO server. if [ -f ${NET}/rwhod ] then echo -n "rwhod " ${NET}/rwhod -t -s fi # Start the U-MAIL SMTP server. if [ -f XXX/usr/lib/umail/umail ] then echo -n "umail " /usr/lib/umail/umail -d7 -bd /dev/null 2>&1 & fi # Start the various INET servers. for server in ${IN_SERV} do if [ -f ${NET}/${server} ] then echo -n "${server} " ${NET}/${server} fi done # Start the various SUN RPC servers. if [ -f ${NET}/rpc.portmap ] then if [ -f ${NET}/rpc.ugidd ] then echo -n "ugidd " ${NET}/rpc.ugidd -d fi if [ -f ${NET}/rpc.mountd ] then echo -n "mountd " ${NET}/rpc.mountd fi if [ -f ${NET}/rpc.nfsd ] then echo -n "nfsd " ${NET}/rpc.nfsd fi # Fire up the PC-NFS daemon(s). if [ -f ${NET}/rpc.pcnfsd ] then echo -n "pcnfsd " ${NET}/rpc.pcnfsd ${LPSPOOL} fi if [ -f ${NET}/rpc.bwnfsd ] then echo -n "bwnfsd " ${NET}/rpc.bwnfsd ${LPSPOOL} fi fi echo network daemons started. # Done! 10.3. Name Resolution. Name Resolution 是個轉換 hostname(eg. tsx-11.mit.edu) 成 IP address 的 process, 因為網路軟體指認得 IP address.這裡有兩個 install 的工具 (principal mean), 一個較簡單, 一個較複雜 10.3.1. /etc/hosts /etc/hosts 包含了一駝 ip addresses 及相對應的 hostname 的列表 。這樣做的話, 你可以使用 hostname 與網路上的其他機器連線。就跟 使用 ip address 的作用一樣。 使用 nameserver ( 看 10.3.2 `named' 一節 )允許你自動地翻譯 hostname 成 ip address 。 ( 當 然也允許在自己的 linux 機器上跑 nameserver) 這個檔中至少要包含 127.0.0.1 localhost這一行, 如果你不只使用 loopback, 你需要增加 你機器的 ip address 在這個檔案中 ( 全名, 如: loomer.vpizza.com ), 你也可以加入 gateway 及 network address。 例如, 如果 loomer.vpizza.com 的 ip address 是 128.253.154.32, /etc/hosts 檔中要設成: # /etc/hosts # List of hostnames and their ip addresses 127.0.0.1 localhost 128.253.154.32 loomer.vpizza.com loomer # end of hosts 有必要的時候還要再修改這個檔案, 以符合自己的需要。如果你只是在 loopback 狀態下, 在 /etc/hosts 中唯一的一行應該是 127.0.0.1,其 後接著 localhost 及你的 hostname 。 注意: 在上面的第二行 , 128.253.154.32 有兩個名字: loomer.vpizza.com 及 loomer. 第一個是你的系統的全名 ( " Fully Qualified Domain Name " ) , 第二個是別名。 第二個 允許你只打 rlogin loomer 而不用打全名 , 你必須要確定別名 之前的全名。 10.3.2. named - 我需要嗎 ? `I dub thee ..' named 是 UNIX-like 系統的 nameserver daemon. 他允許你機器處理 name lookup 的 request, 不只給自己用, 也給網路上其他的機器使用 , 也就是說, 如果另外一台機器要找 `goober.norelco.com' 的 address,而你的 named database 中有這個資料, 那你可以處理這個 request,然後告訴別台機器 `goobers` 的 address 是什麼。 在舊的 Linuc tcp/ip 版本, 如果你要開個 alias ( 就算你要為自己 的機器開 ), 你必須在自己那一台 linux 跑 named, 才能做 hostname - IP address 的翻譯工作, 這造成一個比較難以設定及維護的問題, 為了解決這個問題, 有個程式 hostcvt.build 於是產生, 會將 /etc/hosts 檔轉成 named database 檔, 不過就算這個問題解決, named 仍然耗掉一些 CPU的成本, 並增加網路流量。 最後一行是: 你不需要在 Linux 上跑 named, SLS 指令將會正確地告 訴你要跑 hostcvt.build 來設定 named, 真的沒必要這樣做, 除非你 要你的 linux 當作別台機器的 name server, 那你才需要讀相關的文 件。 當你查詢 hostname 時, 你的 linux 機器將先檢查 /etc/hosts 檔,然後再問外面的 name server 。 你要跑 named 的原因不外是: o 你正在設定網路, 而且需要一個 nameserver, 在網路外面也沒有 nameserver 的話。 o 你的網路管理者因為種原因要你跑 Linux system 當作 nameserver。 o 你有個很慢的 slip connection, 且希望跑個小的 cache-only nameserver 在你的 Linux 機器上, 就不用再跑道外面查詢。 如果 你只連接只有少數機器的網路, 你也知道他們的 ip address, 你可 以把它們的 ip address 放到 /etc/hosts 中, 一點也不必做 nameserver 的 lookup 的動作。 一搬來說, namelookup 也不慢, 也應該可以在 slip 連線下跑的很順。 o 閒閒沒事做, 想跑跑 nameserver 玩玩, 刺激嘛! 總比「抓蝨母相 咬」好多了吧! 反正沒代誌我負責, 有代誌就當給他看! 一般來說, 你不需要跑 named: 這表示你可以將 rc.inet2 檔的那行標 為註解, 也不用跑 hostcvt.build 了, 如果你要做 host 的 alias,例 如: 如果你要把 loomer.vpizza.com 縮為 loomer, 那你只要加在 /etc/hosts 就可以啦, 實在沒有理由跑 named 除非你有特別的需求。 如果你有個 nameserver, ( 而且你的網路管理者也告訴該台的 IP address), 那就不必跑 named 。 如果你只跑 loopback, 你可以跑 named 並設定 nameserver address 為 127.0.0.1, 但是既然你只使用你自己的機器, 那你跑 named 幹嘛? 10.3.3. /etc/networks /etc/networks 列出你自己的 hostnames, addresses, 及 networks. 這個檔案會被 route 使用到, 讓你只定自己網路的名字, should you so desire. 每個你想要加入 routing table 中的 network 要在 /etc/netork 中 佔有一行, 除非你也指定 -net 這個參數在 route 命令行。 格式跟 /etc/hosts 很像, 以下是個例子: # # /etc/networks: list all networks that you wish to add route commands # for in here # default 0.0.0.0 # default route - recommended loopnet 127.0.0.0 # loopback network - recommended mynet 128.253.154.0 # Example network CHANGE to YOURS # # end of networks 10.3.4. /etc/host.conf Linux 系統中有包含 resolver library, 這個檔案說明你的系統會如 何查詢 host name, 它應該包含至少以下兩行: order hosts,bind multi on 這兩行告訴 resolve libraries 先檢查 /etc/hosts 檔, 然後再去問 nameserver ( 如果有的話 ), 多重 retry 允許在 /etc/hosts 中的 host有好幾個 IP address 。 這個檔案從 Linux 的 resolv+ bind library 發展而來, 你可以在 man page resolv+(8) 找到更多的文件, 如果你沒有 man page 的話, 請到以下節點抓取: sunsite.doc.ic.ac.uk /computing/comms/tcpip/nameserver/resolv+/resolv+2.1.1.tar.Z 這個檔案包括這個 resolver library 的 resolv+.8 man page。 10.3.5. /etc/resolv.conf 這個檔案實際上是設定系統的 name resolver, 包含兩種 entry: nameservers 的 address ( 如果有的話 ), 及自己網路 domain( 如果 有的話 ), 如果你跑自己的 nameserver( 也就是: 在自己的 linux 機 器上跑 named ), 那你的 nameserver 就是 127.0.0.1, loopback address 。 你的 domain name 就是你的 F.Q.D.N 的 hostname ( 如果你的機器在 Internet 上有註冊的話。 ), 去掉 hostname 就是了, 例如: 你的全 名是: loomer.vpizza.com, 那你的 domain name 就是 vpizza.com, 去掉 hostname 'loomer' 。 例如: 如果你的機器是 goober.norelco.com, 而且有一個 address 是 128.253.154.5 的 nameserver, 那你的 /etc/resolv.conf 檔如下: domain norelco.com nameserver 127.253.154.5 你可以指定超過一個 nameserver, 每個都在 resolv.conf 檔中有一行。 記痣: 你如果只跑 loopback, 你不需要 nameserver。 10.3.6. 設定自己的 Hostname - /etc/HOSTNAME 在你設定完其的設定之後, 還有一件工作要做, 你需要設定你自己機器 的名字。 設定 hostname 之後, AP( 如: sendmail) 才能認得你是誰, 而且你自己的機器才能被台機器辨識出來。 有兩個檔案需要設定這類的資訊, 常常被錯用。hostname 及 domainname。 如果你使用 1.1.38- 之前版本的 net-tool 那你可以在 /etc/rc 中加 入: /bin/hostname -S 這樣會促使 hostname 命令去讀取 /etc/HOSTNAME, 檔中會包含全名。 也就是說, 你的 hostname 包含 domainname, 他將會把 F.Q.D.N. 轉 成 DNS hostname 及 domainname 兩個部份, 幫你適當地設定。 例如: 以上的機器 /etc/HOSTNAME 檔案中有: goober.norelco.com 如果你使用 net-tools-1.1.38+ 版本的 hostname, 那你要在 /etc/rc.d/rc.inet1 加上一行: /bin/hostname goober.norelco.com 否則, 如果你是從早期的版本升級過來的, 你要改為: /bin/hostname -F /etc/HOSTNAME 它會照早期版本的作法來做。 /bin/domainname 這個命令是用來設定 "N.I.S. domain name" 而『不 是』 "D.N.S. domain name", 你不需要設定這個東西, 除非你跑 NIS, NIS 稍後我們會好好地聊聊... 10.4. 其他檔案 當然還有需東檔案在 /etc 目錄下, 你可能以後會 dabble 到。我將提 供一些基本的概念讓你了解網路, 而不直接在此深入討論。詳細的資訊 可在 Olaf's Network Administration Guide 中找到。 它會接著這個 HOWTO 繼續講下去。 ( 因為有些東西可能以後才會在這個 HOWTO 文件 中慢慢加進來。 ) 一旦你設定好所有的檔案, 狀況也一直正常, 你應該 reboot 你的系統 並 net away 到 your hearts content.不過我建議你保留一份舊的開 機片, 甚至修復磁片, 至少頭突發狀況時會用得到。 你可以試試 HJLu 的 `single disk boot disk', 或 SLS 版本的 `disk1' 。 11. 介高尚的設定(Advanced Configurations) 之前介紹的設定僅是針對一個正常的 ( 沒事不會亂抓電腦或啃鍵盤的 ) end-user 來說明, 只是講述大概的設定。 有些人覺得是小 case 不 屑看超過一分鐘, 想要來些刺激的... 以下就素啦! ( 本章包括: PPP, SLIP, AMD, router) 11.1. PPP - Point to Point Protocol(點對點通訊協定) PPP 對 conveying multiple protocols( 例如:tcp/ip) 來說, 是一個 現代的也很有效率的 protocol, ,, 許多人使用 PPP 透過 serial links 取代 slip 。它提供更強的功能, 錯誤偵測, 額外的資料安全。 它修正一些 SLIP 的 deficiencies, 且適合做同步的傳輸或非同步的 傳輸。 (asynchronous links and synchronous links) PPP 運作上的特性是 dynamic address allocation, 這個特性也幾乎 會由你的 PPP server 來做 (exploited), 允許 PPP client 使用特別 的格式化的封包, 來回應 server 的要求。在這種情況下, 比 SLIP 更 簡化設定。因為回傳 address 的能力必須發生在 protocol 之外。 Linux port 作者是 Michael Callahan, 及 Al Longyear, 。大部分的資訊都來自 PPP 軟體所附的文件中。那些文件也已經十分完整, 會比現在我所講的更深 入。 Linux PPP code 已經經過 Alpha 測試, 現在也以公開發行可以取得。 1.0.0 Linux PPP code 基本上市架構在 Paul Mackerras 的 free PPP for BSD-derivative operating systems 之上。 1.0.0 版是架構在 2.1.1 版的 free PPP code 上。 PPP code 分成兩個部份。第一個部份是 kernel module, 負責 handle frame 的 assembly 及 disassembly 。第二個部份是叫做 LCP, IPCP, UPAP 及 CHAP 的 protocol set, 負責協調連線。並把連線導入可以運 作的狀態中以便認證 (authentication) 。 11.1.1. 為何我要使用 PPP 代替 SLIP ? 使用 PPP 代替 SLIP 通常的原因有: 提供你連 Internet 的設備只支援 PPP 你會使用 PPP 而不使用 SLIP 最明顯的原因 , 主要在於提供連 線的單位僅提供 PPP, 而沒有 SLIP。 Ok, I said it is obvious. 你有一個「飽受摧殘」的 serial line PPP 對每個傳輸的 frame 都會做 frame check, SLIP 不會。 如果你的線路容易受干擾,而且你使用 SLIP, error correction 將會在連線兩端(自己的機器與目的機器, end to end)來做, 而 PPP 卻在自己的一端做 error detection , 在你的機器與 PPP server。這樣允許快速的修復 errors。 你需要用到 PPP 提供的其他功能 PPP 提供許多需 SLIP 不提供的功能。 例如在同一條 serial link, 你可能不只要傳 IP, 也同時要傳 DECNET 或 AppleTalk 的封包, PPP 允許你做這樣的事情。 11.1.2. 何處可取得 PPP 軟體 ? ppp 軟體可在下列節點取得: sunsite.unc.edu /pub/Linux/system/Networking/serial/ppp-2.1.2a.tar.gz 這個檔案包含 kernel source, 及 pppd source 及 binary 。 Version 1.0.0 可與 kernels 1.0.x and 1.1.x. 配合使用。現在並不 支援 Fred's Net-2E 的 kernel 。 11.1.3. 安裝 PPP 軟體 PPP 的安裝是很直接的。( <---唉...我竟然在翻譯廢話 ) 11.1.3.1. The kernel driver. 有些支援 ppp 的部份已經建入 kernel 了。 設定 kernel 是很簡單的 啦, 以下步驟絕對 OK! 不會隨便當給你看... # cd /usr/src # gzip -dc ppp-2.1.2a.tar.gz | tar xvf - # cp /usr/src/ppp-2.1.2a/linux/ppp.c /usr/src/linux/drivers/net # cp /usr/src/ppp-2.1.2a/pppd/ppp.h /usr/src/linux/include/linux 你將需要把 CONFIG_PPP define 上來, 在 /usr/src/linux/config.in 中。如果你正在跑的 kernel 是 1.1.4+ 的, 那擬就還要把 NET02D 標 為註解!!!在 /usr/src/linux/drivers/net/ppp.c 中, 如果你跑的是 最新的版本,好膽你就賣踩小伊。 然後你可以 make config, 選擇 PPP support, 然後再下 make dep;make.打個蛋花就好啦! 當你 reboot 新 kernel 時, 你會在畫面上看到類似下列訊息: PPP: version 2.1.1 (4 channels) TCP compression code copyright 1989 Regents of the University of C alifornia PPP line discipline registered. 現在呢, 來看看 /proc/net/dev 的內容, 看起來似乎是這鍋樣子地... Inter-| Receive | Transmit face |packets errs drop fifo frame|packets errs drop fifo colls carrier lo: 0 0 0 0 0 0 0 0 0 0 0 ppp0: 0 0 0 0 0 0 0 0 0 0 0 ppp1: 0 0 0 0 0 0 0 0 0 0 0 ppp2: 0 0 0 0 0 0 0 0 0 0 0 ppp3: 0 0 0 0 0 0 0 0 0 0 0 能看到這些東西就是說你不必再重頭來過啦... 唉... 累啊... 11.1.3.2. pppd 如果你要重新 compile pppd, 在 pppd Install 的子目錄中打 make, 在 compile lcp.c, upap.c, 及 chap.c 時會有警告發生 (warning), 不過沒關係的。 如果你要 recompile chat, 現了解 chat 目錄中的 README.linux. Install 時, 在 chat 及 pppd 目錄中打 make install, 將會把 chat 及 pppd 的二進位檔放到 /usr/etc 中, pppd.8 的 man page 會放在 /usr/man/man0 。 pppd 需要用 root 來執行。 你可以用 suid 到 root 或直接以 root 的身分來執行。 make install 時會嘗試 suid 到 root, 所以如果你 已是 root , 那應該沒問題。 11.1.4. 設定並使用 PPP 軟體 就像 slip, 你可把 PPP 設定成 server 端或 client 端, chat 的功 能跟 dip 很類似。 會自動的撥號及 login 到遠端的機器中有一點跟 dip 不像的地方, 他不會執行 ioctl 把 serial line 轉換成 PPP line 。 這個動作會由 pppd 來執行, pppd 可以當作 client 或 server 來跑。當作 client 時, 它會呼叫 chat 來建立連線及 login, 然後它執行 ioctl 把連線轉成 ppp, 而後讓你使用。 請參考 pppd 及 chat 的 man pages 查看更詳盡的內容。 也順便看看 PPP 軟體中所附的 README 檔。它會介紹一些執行檔如何運作, 比我在 這口沫橫飛所講得還多。 11.1.4.1. Configuring a PPP client by dial-up modem. 這可能是大部分人想做的事, 所以先講。你會使用到這個設定, 當你透 過 dialup modem 連上有支援 ppp 的網路。 當你要建立你的連線時, 你只要啟動 pppd 程式, 並加上必要的參數。 以下的例子可能起初看起來會搞不清楚況, 但是你若把 ' ' 內的那段 文字看成是 pppd 的第二個參數, 把 " " 內的文字看成是, chat 的參 數, 那就容易得多了。 pppd connect 'chat -v "" ATDT5551212 CONNECT "" ogin: ppp word: passwor d'\ /dev/cua1 38400 debug crtscts modem defaultroute 192.1.1.17: 這一行是在說: o 用以下這一行來呼叫 chat: chat -v "" ATDT5551212 CONNECT "" ogin: ppp word: password 那就是說: 撥 5551212, 等待 `CONNECT' 字串送初一個 CR(carriage return), 等待 `ogin:', 送出 `ppp' 字串, 等待 `word' 然後送出 `password', 然後跳出。 o 使用 serial device /dev/cua1 o 設定速度到 38400 bps. o debug 代表 log(動詞) status messages 到 syslog o crtscts 表示對 modem 使用 hardware handshaking - 強烈建議。. o modem 表示 pppd 將會在撥號前後, 嘗試掛斷(hang up)。 o defaultroute 會指示 pppd 增加一個產生 default route 的 routing entry。大部分的狀況下將會是你要的。 o 192.1.1.17: 表示把 ppp interfaces address 設成 192.1.1.17。 這個參數正常的時候, 看來應該像: x.x.x.x:y.y.y.y , x.x.x.x 是 你的 IP address, y.y.y.y 是 server 的 IP address, 如果你省略 server 端的 IP address, pppd 將會 ask for it, x.x.x.x 將會被 設成你的 ip address. 請參考 pppd 及 chat 的 man pages....... (這一段請參考 11.1.4 最後一段) 11.1.4.2. 以專線(leased line) 來設定 PP client 以專線 (leaseed line) 來設定 PPP client 跟用 slattach 來設定 slip 來得更直接。你還是會用到 pppd, 但是因為你不需要建立 modem 的連線, 所以會較減單。 例如: 我在此假設 ppp server 不用特別的 login procedure.我這樣 做是因為每次的 login 都會不一樣。如果你只跑區域的連線,你可能要 這樣設定: pppd connect 'echo connecting...' defaultroute noipdefault debug \ kdebug 2 /dev/cua0 9600 上一行會在螢幕上秀出訊息, 並設定 ppp interface 的 default route "noipdefault" 這個參數會叫 pppd 從 server 端取得這個 device 的 address, 除錯的訊息會送到 syslog 中。 "kdebug 2" 這 個參數會把除錯訊息設成 level 2, 這樣做會給你更多的資訊來了解到 底出了什麼狀況。它會使用到 /dev/cua0 (9600bps 的速率 ) 。 如果你的 ppp server 不需要 login procedure 之類的東西, 在這個 例子中, 你可以使用 chat 。 請參考 pppd 及 chat 的 man pages....... (這一段請參考 11.1.4 最後一段) 11.1.4.3. Configuring a PPP server. 設定 PPP server 的程序跟架個 slip server 類似。 你可以開個特別 的 `ppp' 帳號, 這個帳號使用一個可執行的 script來當作 login shell 。 /etc/passwd 檔中的該行看起來像這樣: ppp:EncPasswd:102:50:PPP client login:/tmp:/etc/ppp/ppplogin 那鍋 /etc/ppp/ppplogin shell script 看起來向這鍋樣子: #!/bin/sh exec /usr/etc/pppd passive :192.1.2.23 你提供的 address 將是呼叫的機器會被 assign 的。 當然, 如果你要允許許多 user 同時 access, 你必須開許多的 startup scripts 及各人的 accounts, 因為你只能在一個 script 中 使用一個 IP address 。 11.1.5. 哪兒可以取得更詳盡的 PPP 或 bug 報告 的資訊呢 ? 大部分linux PPP 的討論都在 PPP mailing list 上面。 若想要加入mail list server 中的 PPP channel, send mail 到: linux-activists@niksula.hut.fi with the line: X-Mn-Admin: join PPP at the top of the message body (not the subject line). 記得若是你要報告 bug 或問題上去, 你應該盡可能地詳細描述你的問 題那會幫助你了解你的問題, 也使別人能更清楚地了解你的問題。 你也可以查查: RFCS 1548, 1331, 1332, 1333, and 1334. 這些是 PPP 定義的文件。 W. Richard Stevens 也在 `TCP/IP Illustrated Volume 1', (Addison- Wessley, 1994, ISBN 0-201-63346-9) 一書中討論到 PPP. 11.2. 把 Linux 設定成 Slip Server 如果你有一台連網路的機器, 你可能會想要提供一些像 dial in 的網 路服務, 那擬就需要把你的機器設成一個 server, 如果你要使用 slip 當作 serial line protcocol, 那你有兩條路可以走...我會兩個都說 明。 11.2.1. Slip Server using sliplogin sliplogin 是一個程式, 可用來代替一般 slip user 的 login shell 會將 terminal line 轉成 slip line 。 caller 會 login 成標準的 login process, 輸入 username 及 password, 在 login 之後, sliplogin 會被執行, 去找 /etc/slip.hosts 查詢跟 caller match 的 entry, 而不跑 shell 。 如果它 locate 成功一個 login, 它就把 連線設成 8bit 的線, 並使用 ioctl call 把連線轉成 slip 。當這個 process 完成之後, 最後一個步驟就完成了。 這時 sliplogin 會呼叫 一個 shell script, 把設定 slip interface 相關的 ip address, netmask 及適合的 routing 。 這個 script 通常叫做 /etc/slip.login, 但是跟 getty 的相同的規則。 如果你有特定的 caller 要求使用特別的 initialisation, 你可以寫個設定的 script 叫做 /etc/slip.login.loginnmae, 會取代內定的 script 。 11.2.1.1. 何處取得 sliplogin sliplogin 可在下列節點取得: sunsite.unc.edu /pub/Linux/system/Network/serial/sliplogin.tar.gz tar 檔中同時包括 source code, precompiled binary, 及 man page 。 把它 (binary) 給 install 到 /sbin 目錄中, man page 就給他灌 到 section 8, 做看看: # cd /usr/src # gzip -dc .../sliplogin.tar.gz | tar xvf - # cd src # make install 如果你要重新 compile 出 binaries, 在 make install 之前, 下個 make clean 指令, 如果你要安裝 binary 到其他的所在, 那你就要修 改 Makefile 內的規則囉... 11.2.1.2. 設定 slip host 的 /etc/passwd 你需要在 /etc/passwd 中為 caller 開一些特別的 login user 。 依 照慣例, 我們將使用 calling host 的 hostname 當作 login name,前 面再加個大寫的 S, 所以, 例如: 如果 calling host 叫做 radio,那 你可在 /etc/passwd 中開個 login name: Sradio:FvKurok73:1427:1:radio slip login:/tmp:/sbin/sliplogin 備註: caller 不需要任何的 home directory, 因為它們不會跑 shell.所以 /tmp 是個不錯的選擇。 也要注意 sliplogin 是使用來代 替一般的 login shell 。 11.2.1.3. 設定 /etc/slip.hosts /etc/slip.hosts 是用來給 sliplogin 找尋相對應的 login name, 以 取得 caller 的設定內容。 它也是你指定 caller 的 ip address 及 netmask 的地方, 一個簡單的 user name 為 `radio' 的例子如下: Sradio `hostname` radio /etc/slip.hosts 的內容為: 1. caller 的 login name 2. server 的 ip address, 也就是本身這一台。 3. 設定給 caller 的 ip address 4. the netmask assigned to the calling machine in hexadecimal notation eg 0xffffff00 for a Class C network mask. 5. optional parameters to enable/disable compression and other features. 備註: 你可以在第二欄及第三欄使用 hostnames 或 IP addresses, 如 果你使用 hostnames 那這些 host 就必須要先翻譯成 ip address,也就是說, 你的機器必須對這些機器做 ip address 的 定址 ( <- 很玄嗎? ), 不然 script 被呼叫後會失敗。 你可以 先 telnet 到那台主機看看, 如果你看到 `Trying nnn.nnn.nnn...' 的訊息, 那你的機器就可找到相對應的 ip address, 如果你看到的是 `Unknown host', 那表示無法找到該 台主機, 如果不行, 直接用 ip address來連。或修改 resolver 的設定 ( 通常是 /etc/resolv.conf) 。 opt1 opt2 最普通的參數是: normal 啟動(enable) normal uncompressed slip. compress 啟動(enable) van Jacobsen header compression (cslip) 當然, 這些是互斥的 (mutually exclusive)( 有一就不能有二 ), 你 只能使用其中的一種, 其他參數請看 man page. 11.2.1.4. 設定 /etc/slip.login 檔 在 sliplogin 搜尋 /etc/slip.hosts 檔, 並且在找到之後, 它會去執 行 /etc/slip.login 檔, 用 ip address 及 netmask 來設定 slip interface 。 使用 sliplogin package 的 /etc/slip.login 範例檔如下: #!/bin/sh - # # @(#)slip.login 5.1 (Berkeley) 7/1/90 # # generic login file for a slip line. sliplogin invokes this with # the parameters: # 1 2 3 4 5 6 7-n # slipunit ttyspeed loginname local-addr remote-addr mask opt-args # /sbin/ifconfig $1 $4 pointopoint $5 mtu 1500 -trailers up /sbin/route add $5 exit 0 要注意這個 script 只使用 ifconfig 及 route 指令來設定 slip device 。 ( 設定: ip address, remote, ip address and netmask), 透過 slip device 為 remote address 開一個 route 。就跟你喜歡如 果你使用 slattach指令。 11.2.1.5. Configuring the /etc/slip.logout file. 當一個 connect close 後, 你要確定 serial device 回復原來的狀態 。以使未來的使用者能正確的 login, 這要使用 /etc/slip.logout 檔 來達成, 很簡單的啦, script sample 如下: #!/bin/sh - # # slip.logout # /sbin/ifconfig $1 down /sbin/route del $5 exit 0 它所做的是把 interface `down' 下並刪除先前開設的 route。 11.2.2. 使用 dip 的 Slip Server 現在我所要講的, 有一部份來自 dip 的 man page, man page 內已經 包含了簡要的設定。 設定 Linux 成 slip server, 你需要為使用者開設特別的 slip accounts,在 slave mode 的 dip 被當作 user account 的 login shell 。 Fred 建議使用慣例, 在 account 前面加上大寫 S, 他的 slip accounts以 `S' 開頭, 如: `Sfredm' 。 因為 login 程式不接受 login shell 的參數, 所以你要寫個小的程式: /* dip-i.c - from a mail message of Karl kkeyte@esoc.bitnet */ int main() { execlp("dip", "dip", "-i", (char *) 0); } 請用 gcc -O dip-i.c -o dip-i 來編譯(compile)。 設定 permissions 為 555. 我建議把他叫做 /usr/bin/dip-i, /etc/passwd 檔內給 slip user 看起來像這個樣子: Sfredm:ij/SMxiTlGVCo:1004:10:UUNET:/tmp:/usr/bin/dip-i ^^ ^^ ^^ ^^ ^^ ^^ ^^ | | | | | | \__ 要執行的 shell progra m | | | | | | dip -i as login shel l | | | | | \_______ Home directory | | | | \_____________ User 全名 | | | \__________________ User Group ID | | \______________________ User ID | \________________________________ 加密後的密碼 \___________________________________________ Slip User Login Name (大寫 S 開頭) 在 user log in 之後, 如果確認 user 正確的話, login(1) 這個程式 會執行 shell dip-i, 而 dip-i 會執行 dip -i, 之後, dip 會掃描 /etc/net/diphosts 檔, 找尋 login user name, 因此, 每個 slip user 比需都要在 /etc/net/diphosts 中有一行。 你要重新讀 9.3 `Proxy Arp' 哪一節, 重新為 slip user 安排 proxy arp, 如果你要讓他們使用到 slip server 所連到的網路的話。 11.2.2.1. Configuring /etc/net/diphosts dip 會使用到 /etc/net/diphosts 來查詢遠端主機現在的設定, 遠端 主機可能是撥進你的 linux 主機的 user, 或是你撥進去的主機。 /etc/net/diphosts 的一般格式如下: Suwalt::145.71.34.1:SLIP uwalt:CSLIP,1006 ^ ^ ^ ^ ^ ^ | | | | | \___ MTU | | | | \_________ protocol (SLIP, CSLIP, | | | | KISS) | | | \___________________ 註解欄 | | \________________________________ 對方的 IP address | | 或 host.domain.name | \___________________________________ unused (compat. with passwd) \________________________________________ login name (as returned by getpwuid(getuid())) /etc/net/diphosts 中的一個例子: Sfredm::145.71.34.1:SLIP uwalt:SLIP,296 以上是說以 296 MTU 建立 slip 的連線。 Sfredm::145.71.34.1:SLIP uwalt:CSLIP,1006 以上指定 以 1006 MTU 建立 cslip 的連線。 當一個 user logs in 的時候, 他們會覺得像是平常的 login 及 password 的提示, 不過他們要輸入他們的 slip-login userid 及密碼 ,如果通過檢查, user 不會看到特別的訊息, 他們要在自己的一端切換 成 slip 的模式, 之後, 就連線成功啦, 系統會在 diphosts 檔案中設 定。 11.3. 使用 Automounter Daemon - AMD. 這個部份由 Mitch DSouza 來供應, 我已經用最少的修改包含進來,感 謝 Mitch. 11.3.1. 什麼是 automounter, 為何我要使用這種東西咧 ? automounter 提供一個方便的隨需要 (ie. 當有要求時 ) 才 mount FS 的工具。這將會同時減少 server 端及 client 端的負載, 且提供一個 更具據彈性的處理, 甚至在沒有 NFS mount 上來的時候。 {?} 它也提供一個過多的機制(redundency mechanism) 憑什麼一個 mount point 會自動地切換到 第二個 server 要是 主要的 server 無法讀取 時。 { It also offers a redundancy mechanism whereby a mount point will automatically switch to a secondary server should a primary one be unavailable. } 一個更有用的 mount 叫做 union mount 賦予 automounter 合併多個 目錄到單一的目錄中的能力, 這份文件必須完全讀透以便完全使用延伸 的功能。 有幾點要跟您好好地建議建議的: (沒有特別的順序) o amd maps 與 Sun maps 並不相容, 也不與 HP maps ad infintum. 不過這點在此素這鍋樣煮的: amd 可以免費獲得, 而且與所有以上 提到的系統相容, 這讓你可以 share maps 如果 amd 在網路上到處 安裝的話, Mitch 把他拿來跟 Linux/Dec/NeXt/Sun 機器混和使用 。 o Sun automount maps 可以使用在 contrib directory 中的 automount2amd.pl perl script 轉成 amd 形式的 maps 。 o 在執行 amd 之前要先跑 portmapper。 o UFS mounts 不會 timeout. o UFS mounts, 僅能使用於 Linux, 已經可以延伸處理所有的 natice FS ( 如: minix, ext, ext2, xiafs...) 內定是 minix. 沒有文件 說明的特色可加像以下的選項: ..., opts:=type=msdos,conv=auto o 不要 mount 已經存在的目錄除非你使用一個直接 automount 選項, 不然, 他會把你的 disk mount 在 /home 下, 當有些 user diectory是 /home/fred 時。 o 總是開啟 full logging,( 加 `-x all' 參數到 amd) 如果你有任 何困擾查察下列命令是什麼: % amq -ms reports, 當他發生問題時它將會只出問題。 o GNU getopt() 有時對自己很聰明, 可在 非選項前加 '--', 例如: # /etc/amd -x all -l syslog -a /amd -- /net /etc/amd.net 11.3.2. 何處取得 AMD(AutoMounter Daemon) amd 可在下列節點取得: sunsite.unc.edu /pub/Linux/system/Misc/mount/amd920824upl67.tar.gz 這包含可執行的 binaries, 完整的 sources 及 texinfo 格式的文件。 11.3.3. 一個設定 AMD 的例子 你不可以從 /etc/fstab 檔案來設定 AMD, 你將已經使用了來包含資訊 關於檔案系統, 而使用 command line 啟動方式。 使用 /etc/fstab 來 mount 兩個 nfs FS, 你可能會使用兩個類似以下 兩個 entries: server-1:/export/disk /nfs/server-1 nfs defaults server-2:/export/disk /nfs/server-2 nfs defaults i.e. 你會把 server-1 and server-2 的目錄 mount 到你的機器上的 /nfs/server-1 及 /nfs/server-2 目錄。 在把它標為註解之後, 或從 /etc/fstab 中刪除以上的兩行那你只能用 以下語法來達到相同的工作: /etc/amd -x all -l syslog -a /amd -- /nfs /etc/amd.server | | | | | | | | | | | | | | | | | | | | | | | | | | `------' `----' `-------' `-----' -' `--' `-------------' | | | | | | | (1) (2) (3) (4) (5) (6) (7) 參數說明: 1. The full amd binary path (obviously optional) 端看你的 $PATH 環境變數如何設定, 所以只有 `amd' 可以在此被指定。 2. `-x all' 會開啟 full loggon. 請讀讀其他 login level 的文件。 3. `-l syslog' 會透過 syslogd 來記錄訊息, 也可把它輸出到一個檔 案, dump 出來, 或 pass 過去, 到沒被使用到的 tty console.這 個 syslog 可以改為一個檔名, i.e. `-l foo' 將會把訊息轉到一 個叫做 foo 的檔案。 4. `-a /amd' 使用 /amd 目錄作為暫時的 automount point這個目錄 會自動地被 amd 開出, 也應該會在開始 amd 之前砍掉。 (amd 放 在 rc 中 ) 5. `--' 表示告訴 getopt() 停止處理 (parse) 其他的 command line 參數, 這對直接在 command line 下 `type:=' 參數特別有用。 不 然 getopt() 會不正確地將他解碼。 6. `/nfs' 是真的 nfs mount point. 這也會自動開出此目錄, 且不應 該在其下再包含有子目錄, 除非使用 `type:=direct' 參數。 7. amd map (也就是 一個檔案) 叫做 `amd.server' 包含以下這些行: # /etc/amd.server /defaults opts:=rw;type:=nfs server-1 rhost:=server-1;rfs:=/export/disk server-2 rhost:=server-2;rfs:=/export/disk 一旦啟動而且成功地跑起來, 你可以用下列命令查詢 mount 的狀況: % amq -ms 如果你用: % ls /nfs 應該看不到任何檔案。 不過以下的命令: % ls /nfs/server-1 將會自動地 mount `server-1' 那台 host 。挖咧靠邀! amd 跑起來了 ! (voila! amd is running.)在內定的 timeout 到期後, 這會自動地 unmount 下來。 你的 /etc/password 檔 ( 譯註一 ) 可能包含下列的 項目: ... linus:EncPass:10:0:God:/nfs/server-1/home/linus:/bin/sh mitch:EncPass:20:10:Mitch DSouza:/nfs/server-1/home/mitch:/bin/tcsh matt:EncPass:20:10:Matt Welsh:/nfs/server-1/home/matt:/bin/csh 意思就是說當 Linus, Matt, or Mitch login 進來時, home directory將會跑到特定的 remote 目錄中, 而在 user logout 的時候 會自動地 unmount 下來。 譯註一: 應該是 /etc/passwd 吧, 或許有些系統不一樣 ? 11.4. 把 Linux 當作一個 router 把 linux 檔做 router 是沒問題的啦! 你跑個像 gated 的 routing daemon 就可以啦, 如果你只有簡單的 routing 要求只要用 hard coded routes 就可以啦。 如果你使用的是較新的版本 (1.1.*), 那你 應該要確定在 make kernel 的時候, 你有回 'y': IP forwarding/gatewaying (CONFIG_IP_FORWARD) [y] y Olaf Kirch's Network Administrators Guide 討論網路設計及 routing項目, 你可以讀看看, 有更多的資料, 參考書目在文件的 "Releated Documentation" 那一節。 12. 實驗中及發展中的 modules 現在有許多人為 linux 網路程式碼在發展新的特色及 modules 。之中 有些還很先進, 這些也是我想要包含到這節的, 直到變成標準版程式碼 。他們將會被往前搬移。 12.1. AX.25 - 業餘無線電玩家的通訊協定 AX.25 protocol 是用在全球業餘無線電玩家。 它同時提供 connected 及 connectionless 的運作模式, 並且可使用來做點對點的連線, 或用 來運送 TCP/IP 的封包。 這跟 X.25 level 2 在結構上很類似。更可延伸到業餘無線電環境, 使 它更有用。 Alan Cox 也發展了一些以 AX.25 軟體為基礎的 kernel, 支援 linux, 這些也可在 ALPHA form 取得, Alan's code 支援 KISS based TNC's (Terminal Node Controllers), 及 the Z8530 SCC driver. User programs 包含一個 P.M.S. (Personal Message System), 一個 信號燈機構 (facility), 一個 line mode connect program, 及 `listen'如何去擷取所有在 RAW 界面層的 AX.25 封包例子 確定要去讀 /usr/local/ax25/README 這個檔, 內容包含更多、更完整 的資訊。 12.1.1. 何處取得 AX.25 軟體。 ftp 至: sunacm.swan.ac.uk /pub/misc/Linux/Radio/* 你會發現有許多的目錄, 每個包含不同版本的程式碼, 因為它與 kernel code 相互的關係很密切, 所以你要選擇一個與你的 kernel 較 適合的版本,互相的對應大概是這樣: AX25007 Prehistoric AX25010 Obsolete AX25012 for release 1.0.* kernels and higher AX25016 for release 1.1.5 kernels AX25017 for release 1.1.6 kernels AX25018 AX25021 AX25022 for release 1.1.28 kernels 每個目錄中你會發現只少兩個檔案, 一個叫做 krnl022.tgz 之類的,另 一個叫做 user022.tgz 。 這些是 kernel 軟體, 及相對應的 user program. 12.1.2. 安裝 AX.25 軟體 這討軟體包含兩大部分, kernel drivers, 及 user programs. 12.1.2.1. The kernel drivers. 安裝 kernel drivers, 請打: # cd /usr/src # gzip -dc krnl022.tgz | tar xvf - 有需要也可 uncomment( 定義上去 ) /usr/src/linux/config.in CONFIG_AX25 這個 define 。 然後: # cd /usr/src/linux # make config # make dep;make 備註: 如果你應該包含 AX.25 support, 在 make config 被問到的時候, 記得回 `yes', 如果你要 AX.25 code 支援 KISS TNC, 也要回 'yes' 12.1.2.2. The user programs. 安裝 user programs 請下: # cd / # gzip -dc user022.tgz | tar xvvof - 然後: # cd /usr/local/ax25/src # make install 12.1.3. 設定及使用 AX.25 軟體 設定 AX.25 port 跟設定 slip device 很像。 AX.25 軟體已被設計, 用來在 kiss mode 下與 TNC 一起運作, 你需要事先設定 TNC 並連線 。 使用 axattach 就像在使用 slattach, 例如: # /usr/local/ax25/bin/axattach -s 4800 /dev/cua1 VK2KTJ & 上面這一行會把你的 /dev/cua1 serial device 設定成 4800 bps 的 kiss interface, 使用 hardware address VK2KTJ. 你可以使用 ifconfig 來設定 ip address and netmask 就像對 ethernet device 一樣: # /sbin/ifconfig sl0 44.136.8.5 # /sbin/ifconfig sl0 netmask 255.255.255.0 # /sbin/ifconfig sl0 broadcast 44.136.8.255 # /sbin/ifconfig sl0 arp mtu 257 up 以下列命令來測試: /usr/local/ax25/bin/call VK2DAY via VK2RVT call program 是個 linemode terminal program 用來產生 ax.25 call.以空白開頭來表示命令列 ` ', `.' 來結束連線: 你也需要設定一些項目, 例如: 使用的視窗。 這只需要修改一個檔案, 編輯 /usr/local/ax25/etc/ports 檔, 這是一個 ascii 檔, 每個 AX.25 port 一行。 檔案中必須要有這幾行, 與你設定的 AX.25 interface 一樣的順序。 格式為: callsign baudrate window frequency 在這個地方並沒用到許多資訊, 它將會在以後的發展中被用到。 我沒機會親自來 try 這個程式, 請參考在 /usr/local/ax25/man 的 man page 及在 /usr/local/ax25 中的 README 檔, 查詢更多的資訊。 12.2. Z8530 SCC driver. Zilog Z8530 SCC 提供 Synchronous/Asynchronous, HDLC, NRZI編碼 及其他功能。 有許多的卡也使用 Z850 當作設計的基礎。這個 driver 已由 Joerg Reuter, ,可在下 列節點取得: ftp.ucsd.edu /hamradio/packet/tcpip/incoming/sccdrv-1.4a.dl1bke.tar.gz 詳情請看 README。 12.3. Ottawa PI/PI2 card driver. Ottawa PI card 是一個在 IBM PC 機器上, 以 Z8530 SCC 為基礎的卡 。 通常用在全球業餘無線電的工作者 (Amateur Radio operators worldwide).在它被無線電業餘者廣泛的使用的同時, 他也能提供別的 領域的服務這些領域需要 Z8530 的特性。 它支援一個高速的半雙工 (half duplex) port (single DMA channel),及一個慢速的全雙工 (full duplex) port ( 小於 19.2kbps interrupt driven) 。 PI2 是個較新版本的卡支援母版內建 radio modem, 並改善硬體設計。 這張卡的 driver 已由 David Perry 撰寫 完成。可在以下節點取得: hydra.carleton.ca /pub/hamradio/packet/tcpip/linux/pi2-0.5ALPHA.tgz 詳情請讀 README 檔。 12.4. NIS - Sun Network Information System. 事實上有兩個版本的 NIS 已經分散出來。首先有個使用標準的 libc的 雛型版本, 不過 libc 要求在使用前先透過 ypbind 做一些對 servers 的 binding 工作。 更乾淨的版本趨向於 NIS+ 的撰寫方式,叫做 NYS, 由 Peter Eriksson, 撰寫, 可在以下節點取得 : ftp.funet.fi /pub/OS/Linux/BETA/NYS/nys-0.26.tar.gz NIS 型態的 server 可在以下節取得點: ftp.funet.fi /pub/OS/Linux/BETA/NYS/ypserv-0.5.tar.gz 確定那裡沒有更新的版本, 因為這個資訊現在可能已經有點兒舊了。 這兩個都功能強大, 而且與 Sun NIS information servers 也相安無 事, 如: passwd/hosts/group 等等。 也不要求對任意 server 的 binding 。 事實上它們允許以指定提供 services 的 server, 並可以 選擇 yp/dns/file 選項來做指定 name/passwd/etc 的 resolution工 作。 這些都很容易設定起來 (set up), 而且強烈建議需要整合進大網路的 client 機器。 明顯地, 你的網路 daemons 及 clients 需要重新 compile 來與 shared library libnsl.so 以便使用 YP 功能。這些都 是很稀鬆平常的事, 所有網路 NYS package 的 clients & daemon都 compile 過了。 如果你有更詳細的 NIS 資訊, 請寄給我(給原作者, 不是譯者哦)。 12.5. snmp agent. linux 有個實驗的 snmp agent, 由 Erik Schoenfelder, 做系統轉移。 可在以細節點取得: ftp.ibr.cs.tu-bs.de /pub/local/cmu-snmp2.1.2l2.tar.gz 請先讀 cmu-snmp2.1.2l2.README, 因為它包含了你需要的資訊, 可以 幫助你了解這個 packge 。 這個 package 提供一個近似完全的 MIB-II variable set. 在現在的 狀況下, 你只能讀這些變數, 不能設定它們。 nstat.tar.gz 包含一個 /proc/net/snmp 輸出的 formatter, 叫做 nstat 。 你需要跑新的 kernel 並對 kernel 做 patch, 詳情請看明日各大報! 啊! 不! 不! 請看 README 檔。 12.6. Experimental ARCNet driver 許多人在尋找 ARCNet 網路卡的 driver 。 ARCNet 只提供約 2Mbps 的傳輸率, 但可提供比 10base2(thinnet) LAN 更長的連線距離。 而 ARCNet cards 也較便宜, 也因為這樣許多公司用 ARCNet 取代別的網 路卡。 Avery Pennarun 已經撰寫了一 個 linux 的 ARCNet driver, 但是還在做 ALPHA 測試, 當然這中間還 會有許多 error 也可能會造成 kernel 掛住... source code 及 kernel patch 可在以下節點取得: sunsite.unc.edu /pub/Linux/system/Network/drivers/arcnet-0.12.tar.gz 備註: 為了簡化 patching 的工作, 用 kernel version 1.1.51 因為 driver 就是針對這個版本的來做 patch 的, 不過也可在 1.1.45+ 來跑。 有一些已知的虫虫, 你可以讀 arcnet.c 檔獲得細節的說明。 Avery他 現在需要人來幫他抓臭蟲, 或還沒發現的問題, 並 guage 在其他環境 下跑的情形。 Avery 將會很高興接受任何透過網路的報告, 或 e-mail 到: Avery 在 News 方面有問題, 所以透過任何 newsrroups 可能無法讓他 收到... Avery 不只想要知道你是否有問題, 也想知道你是否有試成功 。 12.7. 實驗中的 Token Ring driver 實驗中的 Token Ring driver 由 Peter De Schrijver 所發展, 最新的版本可在以下節點取得: sunsite.unc.edu /pub/Linux/Incoming/linux-1.1.44-TR.tar.gz 12.8. V.35 界面板(interface board) V.35 是一個 C.C.I.T.T. 的標準界面, 用來提供高速平衡的串列界面, 可高達 2 Mbps 。 使用 differential pair balanced transmission 允許 V.35 界面支援較長的線, 與 V.24/RS232C 相類似, 但提供更高 的傳輸率。 Pete Kruckenberg 開了一家公司供應 ISA bus 機器的 V.35 界面硬體, 這家公司亦為這個卡開發 Linux driver, 也進入了 Beta 測試。 這個允許你直接用 leased line 連到 Linux machine, 速度可達 48/56kbps synchronous 的同步的傳輸.這 張卡支援多種 protocols 並允許速度達到 12 Mbps 。 更多的資訊可在以下節點取得: ftp.std.com pub/sdl/n2 不然你可以 mail 給 Dale Dhillon 12.9. S