[ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一頁 ]

Debian 參考手冊
第 10 章 - 網路設定


這一章的重點在 Debian 的網路管理。請閱讀Net-HOWTO了解一般 GNU/Linux 的網路設定。

為了讓 Debian 的主機能夠成功連上網路,核心要能夠認得網路卡並設定。

首重就是要確認核心支援的裝置,例如乙太網路卡,無線網路卡和數據機。您可能需要重新編譯核心並加入驅動程式模組Debian下的Linux核心, 第 7 章來支援這些硬體。

以下說明如何設定網路裝置。這一章的內容主要是針對 Debian Sarge。大部分的內容不一定能相容早期的版本。


10.1 IP 網路基礎

一台 Debian主機會有多個 IP 位置。其硬體裝置有許多種,比如:

還有其他不同的網路裝置,包含 SLIP、PLIP(串列和並列 IP)、控制網路流量的"shaper"裝置、frame 傳送、AX.25、X.25、ARCnet 以及 LocalTalk。

每一個連線到網路的裝置(或任何 IP 基礎的網路)將以唯一一個 32 bit 的 IP 位置來辨識。 [53] IP 位置可以分成網域位置和主機位置兩部份。將您的 IP 位置的網域位元全部設成1,而主機位元全部設成0,則您會得到該網路遮罩。

以傳統上來說,IP 網路分成 8、16、24 bits 長度的三個組別。 [54]

               IP addresses                   net mask      length
     Class A   1.0.0.0     - 126.255.255.255  255.0.0.0     =  /8
     Class B   128.0.0.0   - 191.255.255.255  255.255.0.0   = /16
     Class C   192.0.0.0   - 223.255.255.255  255.255.255.0 = /24

IP 位置不在這個範圍之內的是用在特殊環境上。

每一個類別的位置都給保留給本地網路(LANs)。這些位置保證不會影響到網路上的IP位置。(同理,如果主機被分配到這些地址的話,則該主機就無法直接存取網路,除非透過支援 proxy或是 Network Address Translation(NAT)功能才能夠連上網路。)底下的表格列出每個類別的 IP 位置:

               network addresses            length  how many
     Class A   10.x.x.x                     /8      1
     Class B   172.16.x.x -  172.31.x.x     /16     16
     Class C   192.168.0.x - 192.168.255.x  /24     256

IP 網路的第一個位置就是該網路本身,最後一個位置是這個網路的廣播位置。 [55] 其餘的的 IP 位置就可以分配給其他該網域上的主機。通常IP位置的第一個與最後一個是用來當作網路通訊閘。

路由表記載了核心如何傳送 IP 封包到目的端。底下說明一台位於本地端網路(LAN) IP 位置為 192.168.50.x/24 的 Debian 主機的路由表。另一台 192.168.50.1(也在 LAN 裡面) 的主機是 172.20.x.x/16 共用網路的路由器以及 192.168.50.254(也在 LAN 裡面)負責網際網路的路由器。

     # route
     Kernel IP routing table
     Destination   Gateway        Genmask       Flags Metric Ref Use Iface
     127.0.0.0     *              255.0.0.0     U     0      0     2 lo
     192.168.50.0  *              255.255.255.0 U     0      0   137 eth0
     172.20.0.0    192.168.50.1   255.255.0.0   UG    1      0     7 eth0
     default       192.168.50.254 0.0.0.0       UG    1      0    36 eth0

路由表的 IP 位置也以名稱表示,這些名稱由/etc/networks或 resolver C函式來取得。

除了路由支外,核心也能實現 network address translation(NAT)、流量控制以及封包過濾。

請閱讀 Net-HOWTO 以及 other networking HOWTOs 了解背後的運作原理。


10.2 低階網路設定

傳統的 GNU/Linux 系統設定網路的工具是 ifconfig and route,這兩個程式可以從 net-tools 套件取得。目前有新的工具:ip 可以取代這兩個程式的功能,您可以從 iproute 套件取得。ip 程式需搭配 Linux 2.2 或更新的核心且比舊有的程式功能更強。即使如此,這些傳統的設定工具還是相當實用且大家也比較熟悉。


10.2.1 低階網路設定 – 使用 ifconfig 和 route

以下的說明示範如何改變eth0的 IP 從 192.168.0.3 到 192.168.0.111 以及透過192.168.0.1 路由到 10.0.0.0 這個網域。 執行 ifconfig 和 route 時不加入網路裝置會顯示目前的網路裝置和路由表狀態。

     # ifconfig
     eth0 Link encap:Ethernet  HWaddr 08:00:46:7A:02:B0
          inet addr:192.168.0.3  Bcast:192.168.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:23363 errors:0 dropped:0 overruns:0 frame:0
          TX packets:21798 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:13479541 (12.8 MiB)  TX bytes:20262643 (19.3 MiB)
          Interrupt:9
     
     lo   Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:230172 errors:0 dropped:0 overruns:0 frame:0
          TX packets:230172 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:22685256 (21.6 MiB)  TX bytes:22685256 (21.6 MiB)
     # route
     Kernel IP routing table
     Destination  Gateway      Genmask          Flags Metric Ref Use Iface
     192.168.0.0  *            255.255.0.0      U     0      0     0 eth0
     default      192.168.0.1  255.255.255.255  UG    0      0     0 eth0

首先,我們先關閉 eth0。

     # ifconfig eth0 inet down
     # ifconfig
     lo   Link encap:Local Loopback
       ... (no more eth0 entry)
     # route
       ... (no more routing table entries)

接下來我們啟動 eth0 並給予新 IP 位置和路由。

     # ifconfig eth0 inet up 192.168.0.111 \
                netmask 255.255.255.0 broadcast 192.168.0.255
     # route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.1 dev eth0

結果是:

     # ifconfig
     eth0 Link encap:Ethernet  HWaddr 08:00:46:7A:02:B0
          inet addr:192.168.0.111  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          ...
     
     lo   Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          ...
     # route
     Kernel IP routing table
     Destination  Gateway      Genmask        Flags Metric Ref Use Iface
     192.168.0.0  *            255.255.255.0  U     0      0     0 eth0
     10.0.0.0     192.168.0.1  255.0.0.0      UG    0      0     0 eth0

請參閱 ifconfig(8) 和 route(8) 取得更多資訊。


10.2.2 低階網路設定 – ip

ip 與 ifconfig和 route 有同樣功能的指令如下:

執行 ip 指令時加入 help 參數會顯示指令的用法。 例如,ip link help 代表:

     Usage: ip link set DEVICE { up | down | arp { on | off } |
                          dynamic { on | off } |
                          multicast { on | off } | txqueuelen PACKETS |
                          name NEWNAME |
                          address LLADDR | broadcast LLADDR |
                          mtu MTU }
            ip link show [ DEVICE ]

請參閱 ip(8)。


10.2.3 設定 Wi-Fi 裝置

想要設定 Wi-Fi 裝置,除了ifconfig 或 ip之外,您還需要安裝wireless-tools並使用內附的iwconfig程式。

請參閱 iwconfig(8)。


10.2.4 設定 PPP 裝置

如果您透過 modem 來撥接上網的話,這樣的連線被稱為 Point-to-Point (PPP) 協定。 這樣連線作業的網路裝置為 ppp0, ppp1 等等。

一個 PPP 裝置是由 pppd 這個 PPP 服務所管理,您可以在 ppp 套件中找到該程式。 因此,設定 PPP 裝置也就是設定 pppd 的意思。


10.2.4.1 手動設定 pppd

一個網路連線的建立需要完成以下一連串的手續:開啟通訊埠(通常是串列埠),透過通訊裝置送出指令(通常是數據機),撥出電話號碼,發送端的身分必須給外界的 PPP 服務認證,建立 PPP 裝置並設定路由表,使得資料可以透過該線路傳遞。pppd 能完成以上所有的動作,所以會有一堆設定參數。關於參數的說明請參閱 pppd(8)。

在Debian系統中,全域選項是設定在/etc/ppp/options。使用者格式選項是設定在~/.ppprc。必需依賴通訊埠來使用的選項放置在/etc/ppp/options.portname。舉例來說,假設你有兩台數據機 —一固定式的 Lucent LT modem 從/dev/LT-modem來存取資料和一外部的 modem 從/dev/ttyS0來存取資料。建立下列這兩個選項檔案。

     # cat > /etc/ppp/options.LT-modem <<EOF
     115200
     init "/usr/sbin/chat -f /etc/chatscripts/setup-LT-modem"
     EOF
     # cat > /etc/ppp/options.ttyS0 <<EOF
     115200
     init "/usr/sbin/chat -f /etc/chatscripts/setup-ttyS0"
     EOF

這些涉及到下列多人線上交談系統的指令碼。首先,/etc/chatscripts/setup-LT-modem.

     ABORT ERROR
     '' ATZ
     OK 'ATW2X2 S7=70 S11=55'
     OK AT

第二,/etc/chatscripts/setup-ttyS0.

     ABORT ERROR
     '' ATZ
     OK 'ATL1M1Q0V1W2X4&C1&D2 S6=4 S7=70 S11=55 S95=63 S109=1 +FCLASS=0'
     OK AT

當然,這一些檔案的內容必需依賴你的硬體。

選項也可以跟參數一樣傳遞給 pppd。

在Debian pppd 通常使用pon此命令來啟動。當 pon 被它的第一個參數名字來使用時,在 /etc/ppp/peers/ 的一個選項檔案也同時被pppd讀取。 [56] 該檔是您針對特定的網點服務所設定的地方,舉例來說,一個特定的網路服務提供者(ISP).

假設,舉例來說你從Amsterdam和Den Haag之間來溝通。在每一個城市你使用了兩個 ISP services—Planet 和 KPN.首先對每一個ISP建立一個基本的設定檔案。

     # cat > /etc/ppp/peers/KPN <<EOF
     remotename KPN
     noauth
     user kpn
     noipdefault
     ipparam KPN
     EOF
     # cat > /etc/ppp/peers/Planet <<EOF
     remotename Planet
     auth
     user user3579@planet.nl
     noipdefault 
     mru 1000
     mtu 1000
     ipparam Planet
     EOF

這一些檔案從兩個不同的ISP來設定選項。對這兩個ISP來說常見的選項可以被放置在/etc/ppp/options 或當一種特殊介面的選項檔案被佔用時。

現在對每一個城市的ISP建立選項文件。在我們的例子中連結到不同地區ISP的差別只在於對話script是否需要。(對話script的不同,因為區域接收資料的電話號碼是不同的。)

     # cat > /etc/ppp/peers/KPN-Amsterdam <<EOF
     connect "/usr/sbin/chat -v -f /etc/chatscripts/KPN-Amsterdam"
     file /etc/ppp/peers/KPN
     EOF
     # cat > /etc/ppp/peers/KPN-DenHaag <<EOF
     connect "/usr/sbin/chat -v -f /etc/chatscripts/KPN-DenHaag"
     file /etc/ppp/peers/KPN
     EOF
     # cat > /etc/ppp/peers/Planet-Amsterdam <<EOF
     connect "/usr/sbin/chat -v -f /etc/chatscripts/Planet-Amsterdam"
     file /etc/ppp/peers/Planet
     EOF
     # cat > /etc/ppp/peers/Planet-DenHaag <<EOF
     connect "/usr/sbin/chat -v -f /etc/chatscripts/Planet-DenHaag"
     file /etc/ppp/peers/Planet
     EOF

file 指令顯示之前各包含了一個選項檔案。connect 指令詳細地說明了用來建立連線的pppd 命令。通常使用這一個 chat 程式來做,使對話script來適應ISP。這裡是給Den Haag的對話script;和給Amsterdam的對話script除了電話號碼以外可能極為相似或者當ISP從一個公司到另外一個公司所提供的服務有可能是不同的。

     # cat > /etc/chatscripts/KPN-DenHaag <<EOF
     ABORT BUSY
     ABORT 'NO CARRIER'
     ABORT VOICE
     ABORT 'NO DIALTONE'
     ABORT 'NO DIAL TONE'
     ABORT 'NO ANSWER'
     ABORT ERROR
     OK-AT-OK ATDT 0676012321
     CONNECT \d\c
     EOF
     # cat > /etc/chatscripts/Planet-DenHaag <<EOF
     ABORT BUSY
     ABORT 'NO CARRIER'
     ABORT VOICE
     ABORT 'NO DIALTONE'
     ABORT 'NO DIAL TONE'
     ABORT 'NO ANSWER'
     ABORT ERROR
     OK-AT-OK ATDT 0676002505
     CONNECT \d\c
     EOF

為了能連接上這些 ISP,你需要的用戶名稱和密碼在被要求時以便讓 pppd 可以提供資料。這一資訊不是被儲存在/etc/ppp/pap-secrets (假使 PAP 規則使用中) 就是在 /etc/ppp/chap-secrets (假使 CHAP 規則使用中)。雖然 CHAP 是相當安全的, PAP 依然是相當廣泛地被使用。因為這一些檔案包含了"secret",所以群組和其他用戶並不被允許讀取或是寫入。這些檔案的格式請參閱pppd(8) 的說明。"secret"(第三格)是由用戶端名稱(第一格)和/或伺服器名稱(第二格)來搜尋。當連線到一個ISP時通常是不知道那一個伺服器的名稱,所以提供一個用戶端名稱來取代;這在 peers/KPN 和 peers/Planet 檔案中的 user 行就能完成。

     # client name       server name  secret
     kpn                 *            kpn
     user3579@planet.nl  *            myfavoritepet

See /usr/share/doc/ppp/README.Debian.gz for more information.


10.2.4.2 使用 pppconfig 來設定 pppd

一個快速的方法來設定 pppd 是使用pppconfig 這一個用相同名稱的套件。pppconfig 會透過選單介面來詢問用戶問題,之後設定檔案的方式就如同上述。


10.2.4.3 使用wvdial來設定 PPP 裝置介面

另一個使用 pppd 不同的方式是從wvdial 來執行它,wvdial包裝在 wvdial 套件裡。取代了 pppd 用 chat 來撥接和協調連線的動作,wvdial完成了撥接和初始協調的動作,剩下的就交給pppd。只要給予電話號碼,使用者名稱和密碼,wvdial 大部份都能成功地完成連線動作。


10.3 對主機命名


10.3.1 主機名稱

Debian 系統有時需要依靠名稱來確認。為了這一目的,hostname 是依靠核心來維護。

初始的script /etc/init.d/hostname.sh 會在開機時設定主機名稱(使用 hostname 這個命令),名稱儲存在 /etc/hostname。這個檔案應該 只 包含主機名稱,不是一個FQDN。

執行 hostname (不帶任何參數)來顯示目前的主機名稱。


10.3.2 郵件名稱

一個主機的郵件名稱是郵件相關的程式用來確認主機的。 /etc/mailname 包含了該名稱並以新空行結尾。郵件名稱通常是主機的FQDN之一。參閱 mailname(5)。

電郵的收件者發現郵件標頭的 From: 時,它的值是依據您的 Debian 主機的郵件用戶代理(MUA)和郵件傳送代理(MTA)的設定。假設一本地端用戶 foo 從郵件名稱為 myhost.dom 的主機傳送郵件時。送出的電郵標頭 From: 會變成:

就算 MUA 有 From: 標頭,MTA 還是會加入 "Sender:foo@herman.dom" 標頭來指定真實的來源。

當然,任何複雜的 MTA 在執行位址重寫時,如同 在 Exim 下設定不存在的電郵位址的垃圾桶, 第 9.6.1.3 節 和 在 Exim 下設定寄出郵件的位址重寫, 第 9.6.1.4 節 的討論,收件者顯示的郵件地址可以任意改變。


10.4 網域名稱服務 (DNS)

主機由網域名稱和IP地址所查詢。DNS用途是把網域名稱和IP位址以及主機的其他特性聯繫起來的一個客服端-伺服器系統。GNU C Library resolver(3)也可從檔案中查詢IP位址或查閱 Network Information Services (NIS)。

使用 hostname --fqdn 這個命令來查看網域名稱連接了那些區域主機。這會印出 revolver 找到第一個完全符合該區域主機的網域名稱。 [57]


10.4.1 resolver

查明IP位址和一特殊網域名稱的聯繫就是 resolver 的工作。大部份常用的 resolver 是 GNU C Library 中的 resolver 所提供的功能(resolver(3))。另一個是由libfiredns套件所提供的 FireDNS resolver。

LIBC 的 resolver 如何控制 /etc/nsswitch.conf 設定檔中含有 hosts 那一行來解決名稱查詢呢?該行列出查詢名稱的服務:例如 dns, files, nis, nisplus。 [58] 參閱 nsswitch.conf(5)。在使用 files 的情況下,resolver 也是由 /etc/hosts 設定檔控制。參閱 hosts(5)。

上述的檔案是固定的且可用您喜愛的編輯器修改。

在使用 dns 的情況下,resolver 也是由 /etc/resolv.conf 設定檔控制。參閱 resolv.conf(5)。resolv.conf 其中一項重要功能是列出名稱服務器的 IP 位址以便查詢名稱。該列表必須依賴網路環境,然而在您的電腦運行中,網路環境時隨時變動的。pppd 和 dhclient 等程式用來加入或移除resolv.conf中的資料,但這些功能並不一定能正常運作且兩者互斥。resolvconf 套件採用更好的方式來解決了這個問題,並提供一個標準框架來更新 resolv.conf。參閱管理名稱伺服器的資訊 – resolvconf, 第 10.4.2 節。


10.4.2 管理名稱伺服器的資訊 – resolvconf

resolvconf提供一個框架來動態管理可使用的名稱伺服器資訊。它解決了長久以來維護 resolver 和 DNS 快取使用的動態名稱伺服器的列表問題。Resolvconf 扮演著各個控制網路裝置介面,提供名稱伺服器資訊的程式或需要名稱伺服器資訊的軟體的媒介。

resolvconf被設計成無須任何手動設定就能工作。但該套件還相當新,可能需要部份的手動調整才能正常工作。如果您曾改造過套件使它會更新/etc/resolv.conf的話,您將需要取消修改的部份。更多訊息請參閱 /usr/share/doc/resolvconf/README.gz。


10.4.3 快取已查閱的名稱 – nscd, dnsmasq, pdnsd, bind9

如果你的名稱伺服器反應緩慢你可能想要使用nscd 來快取使用libc6 resolver 所查詢的結果。

如果你想要在你的區域網路快取其他主機名稱,你可能要執行一個快取前置名稱伺服器,就像 dnsmasq 或 pdnsd。

如果你希望也可以使用 bind9 套件的 named程式當一個快取前置名稱伺服器。雖然這是一個重量級的程式,除非你需要他先進的功能,否則你使用先前提及的套件是比較好的。

所有這些的套件皆與 resolvconf 運作良好。


10.4.4 提供網路名稱服務 – bind

如果你需要提供可靠的名稱服務給一個網域,你需要一個完全成熟的名稱伺服器,例如套件 bind9中的 named 。

如果你安裝 bind9 你也應該安裝 dnsutils. 你可能也需要安裝這一些公用的套件: bind9-host; dns-browse; dnscvsutil; nslint. 你可能也需要安裝這個使用說明套件: bind9-doc. 你可能也需要安裝這一些開發套件: libbind-dev; libnet-dns-perl. 如果你安裝界面是使用 DHCP 你可能找到這一有用的套件: dhcp-dns.

安裝 bind9 或 dpkg-reconfigure 它來作基本的設定。設定包含編輯 named.conf。在 Debian 裡,該檔案在 /etc/bind/ 找到且主要被使用來定義基本的 DNS 區域;它包含了兩個其他文件:named.conf.local,用來定義區域地區,和named.conf.options,用來設定選項。(後者是靠著 resolvconf 來產生 /var/run/bind/named.options,除了 forwarders 說明是目前可得到的非區域的名稱伺服器的目錄之外,其餘的都是和原來的相同。要利用這功能,改變named.conf 中的 include 這一行,使得它包含了 /var/run/bind/named.options。參閱 管理名稱伺服器的資訊 – resolvconf, 第 10.4.2 節。)

在 named.conf* 目錄下的沒有全部路徑名稱的資料庫檔案會被儲存在 /var/cache/bind/。這是最合適儲存由named 產生檔案的位置:舉例來說,zone 的資料庫檔案為第一,而 daemon為第二。在named.conf的資料必須依靠完整路徑才能找到/etc/bind/目錄下的固定資料庫檔案。詳細訊息請參閱 /usr/share/doc/bind9/README.Debian.gz。


10.5 安裝網路界面使用 DHCP

低階的網路安裝界面靠著 Dynamic Host Configuration Protocol (DHCP)可以被自動安裝。你的防火牆或路由器或寬頻的 ISP 可能用此方法來配置IP位址和其他參數。

要做到這項工作你必順安裝下列的套件之一:

pump 是一套簡單且廣泛使用的套件。 dhcp3-client 是複雜的但常安裝的。 [59]


10.6 Debian 的高階網路設定

為了要使網路安裝更加容易,Debian 提供了一個標準的高階網路工具由 ifup 和and ifdown 程式和/etc/network/interfaces 檔案所組成。 [60] 如果你選擇去使用 ifupdown 來做你的網路設定,那麼你應該不使用低階的命令。 [61] 這 ifupdown 程式被設計的目地是要被獨立地使用來安裝和反安裝網路界面。

要更新介面設定請執行:

     # ifdown eth0
     # editor /etc/network/interfaces  # 依您的需要調整
     # ifup eth0

更多資訊請參閱 interfaces(5), /usr/share/doc/ifupdown/examples/network-interfaces.gz和ifup(8)。


10.6.1 以固定IP位址來安裝一個界面

假設你要安裝一乙太網路界面以致它有一固定的 192.168.0.111 IP位址。這位址從 192.168.0 開始,所以它一定在 LAN 上。更深一步地假設, 192.168.0.1 是 LAN 連上網際網路的通訊閘位址。編輯 /etc/network/interfaces 以致於它包含了像這樣的資料:

     iface eth0 inet static
             address 192.168.0.111
             netmask 255.255.255.0
             gateway 192.168.0.1

你可以設定介面的其他部份或是執行其他動作,在界面被帶起之後或在它被帶下之前,靠著是 "up" 和 "down" 那一行適當的命令說明。

     iface eth0 inet static
             address 192.168.0.111
             netmask 255.255.255.0
             gateway 192.168.0.1
             up route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.2 dev $IFACE
             down route del -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.2 dev $IFACE
             up echo Interface $IFACE going up | /usr/bin/logger -t ifup
             down echo Interface $IFACE Going down | /usr/bin/logger -t ifdown

二者擇一地,命令可以在 /etc/network/if-up.d 和 /etc/network/if-down.d 資料夾被插入在scripts之內。這樣的 scripts 也可以執行延伸的選項。參閱 interfaces(5) 來了解細節。舉例來說,resolvconf 套件納入的 script 在界面帶起時允許你增加選項來說明被包含在 /etc/resolv.conf 的DNS資訊:

     iface eth0 inet static
             address 192.168.0.111
             netmask 255.255.255.0
             gateway 192.168.0.1
             dns-search somedomain.org
             dns-nameservers 195.238.2.21 195.238.2.22

在 dns-search 的 somedomain.org 參數選項符合在 resolv.conf(5) 的 search 參數選項。 在 dns-nameservers 的 195.238.2.21 和 195.238.2.22 參數選項符合這 nameserver 參數選項。 其他識別的選項是 dns-domain 和 dns-sortlist。參閱 管理名稱伺服器的資訊 – resolvconf, 第 10.4.2 節。


10.6.2 使用DHCP來安裝裝置界面

使用DHCP來安裝一個界面裝置介面,請編輯 /etc/network/interfaces,包含了像這樣的敘述:

     iface eth0 inet dhcp

為了要使這功能運作你必須安裝一個在 安裝網路界面使用 DHCP, 第 10.5 節 所提及的DHCP用戶端程式。


10.6.3 安裝 Wi-Fi 裝置介面

wireless-tools 這個套件包含了一個 hook script /etc/network/if-pre-up.d/wireless-tools 使得界面被帶起之前順利安裝 Wi-Fi (802.11a/b/g) 硬體變成可能。 使用 iwconfig 這一程式來完成設定;參閱 iwconfig(8)。 對 iwconfig 的每一可能命令參數,您可以在 /etc/network/interfaces 包含一個選項,像是 "wireless-" 前綴參數一樣來命名。舉例來說,在使用 DHCP 帶起 eth0 之前,設定 eth0 的 ESSID 到myessid 和加密金鑰到 123456789e ,編輯/etc/network/interfaces 以致於它包含了像這樣的敘述:

     iface eth0 inet dhcp
             wireless-essid myessid
             wireless-key 123456789e

注意!如果你執行 waproamd 來設定這裝置介面,你不應該使用這個方法來設定 ESSID 和金鑰。在 ifup 執行時,waproamd 已經設定了 ESSID 和金鑰。參閱 觸發網路設定 – 使用 waproamd, 第 10.10.4 節 。


10.6.4 設定 PPP 介面

ifup 和 ifdown 程式使用 pon 和 poff來增加和移除 PPP 界面,所以首先閱讀 設定 PPP 裝置, 第 10.2.4 節 。

假設你已經設定了 PPP 和 myisp 一起運作。編輯 /etc/network/interfaces 以致於它包含了像這樣的敘述:

     iface ppp0 inet ppp
             provider myisp

如同這樣的敘述,ifup ppp0 會完成

     pon myisp

遺憾的是目前無法提供額外的 pppd 選項到 /etc/network/interfaces 中的 ppp 敘述。 [62]

目前使用 ifupdown 來執行 PPP 界面的輔助設定是不可能的。因為 pon 在 pppd 完成連結之前就存在了,在 PPP 界面準備使用之前,ifup 會預先執行 up scripts。 直到這個 bug [63] 被修正前,還是要額外設定 /etc/ppp/ip-up 或 /etc/ppp/ip-up.d/。


10.6.5 設定 PPPoE 裝置界面

許多寬頻網路供應商 (ISPs) 使用 PPP 協調連線,即使用者的機器透過 Ethernet 和/或 ATM 網路來連接他們。完成這樣的功能需依靠封裝乙太網路的 frame 的 PPP 串流技術,也就是 PPP over Ethernet (PPPoE)。 假設你的 ISP 是叫做 myisp。首先對 myisp 設定 PPP 和 PPPoE。最容易做到這的方法是從主控台安裝 pppoeconf 套件且執行 pppoeconf。然後編輯 /etc/network/interfaces 以致於它包含了像這樣的敘述:

     iface eth0 inet ppp
             provider myisp

有時候最大傳輸單位 Maximum Transmit Unit (MTU) 決定於 Digital Subscriber Line (DSL) 之上的 PPPoE。參閱 DSL-HOWTO 來了解細節。

注意!如果你的寬頻數據機包含路由器功能,那麼數據機/路由器本身處理 PPPoE 連線並當作一條簡單的乙太網路通訊閘連向網際網路的路徑出現在 LAN 周邊。


10.6.6 為通訊閘設定多個乙太網路裝置介面

假設 eth0 用一個 DHCP-configured IP 位址連接到網際網路且 eth1 用一個固定的 IP 位址 192.168.1.1 連接到 LAN 。編輯 /etc/network/interfaces 以致於它包含了像這樣的敘述:

     iface eth0 inet dhcp
     
     iface eth1 inet static
             address 192.168.1.1
             netmask 255.255.255.0

如果你如 建立通訊閘路由器, 第 10.14 節 所描述的去啟動在主機上的 NAT,那麼你可以分享網際網路連接在 LAN 上的所有主機。


10.6.7 設定虛擬裝置介面

使用虛擬裝置介面,你可以安裝一張乙太網路卡去成為好幾個 IP 子網面的介面。舉例來說,假設你的主機是在 LAN 網路上 192.168.0.x/24。你想要讓主機連線到網際網路,並用原本的網路卡透過 DHCP 機制取得真實 IP 位址。編輯 /etc/network/interfaces 以致於它包含了像這一些敘述:

     iface eth0 inet static
             address 192.168.0.1
             netmask 255.255.255.0
             network 192.168.0.0
             broadcast 192.168.0.255
     
     iface eth0:0 inet dhcp

這 eth0:0 界面是一個虛擬的界面。當它被帶起時,它的根源就是 eth0。


10.7 使用邏輯裝置介面設定網路

在下列,對讀者而言了解 physical interface 和 logical interface 之間的不同是重要的。 [64] 一個 physical 裝置界面是我們稱呼為 "裝置界面",核心命名為 eth0, eth1, ppp0 ,諸如此類的。一 logical 裝置界面是一套可以指定 physical 裝置界面的可變參數值。 當妳在閱讀的同時,如果發現有困惑,用這個述敘 "configured with interface profile X" 來取代 "configured as logical interface X"。

那些定義在 /etc/network/interfaces的iface,實際上是定義邏輯裝置界面而不是 physical 裝置界面。 [65] 如果你從不想要去重安裝你的界面,那麼你可以忽略這個細節,因為 physical 裝置介面 foo 預設會被設定成邏輯裝置介面 foo。

然而,假設你的電腦是你在家裡和工作之間運輸的筆記型電腦。當你的電腦連線到公司的網路或是到你的家用 LAN 時,相應地你需要設定 eth0。

首先定義兩個邏輯裝置界面 home 和 work(取代 eth0,就像我們先前做的),針對家用網路和公司網路各別地設定裝置介面。

     iface home inet static
             address 192.168.0.123
             netmask 255.255.255.0
             gateway 192.168.0.1
     
     iface work inet static
             address 81.201.3.123
             netmask 255.255.0.0
             gateway 81.201.1.1

透過適當的設定後,只要在命令列上指定後,physical 裝置界面 eth0 就能在家庭網路上被帶起:

     # ifup eth0=home

針對公司網路重新設定 eth0 只要執行這些命令:

     # ifdown eth0
     # ifup eth0=work

注意,如果interfaces設定檔內容如上面寫所的,即使單獨執行 ifup eth0 也不會帶起 eth0。 這理由是因為,ifup 使用 physical 裝置界面名稱來當作預設的邏輯裝置介面名稱,然而我們的例子中沒有定義 eth0 這個邏輯裝置介面。


10.8 神奇的網路設定方式

裝置介面名稱可以在執行 ifup 時對應成其他名稱。至於對應成什麼名稱則是依照情況判定。因此ifup能設定在帶起實體裝置介面時能對應成多個預定義的邏輯裝置。

邏輯裝置介面名稱發生對應的情況如下:

mapping 敘述的文法是:

     mapping glob-pattern
             script script-name
             [map script input]

mapping 敘述命名的 script 會加入 physical 裝置介面為參數執行,而剩下的敘述中的 "map"(不包含 "map" 字串) 行的內容會導入到它的標準輸入。該 script 在離開前會印出對應到他的標準輸出的結果。

舉例來說,底下的 mapping 敘述會促使 ifup 帶起 eth0 裝置介面並當成 home 邏輯裝置介面。

     mapping eth0
             script /usr/local/sbin/echo-home

/usr/local/sbin/echo-home 的內容是:

     #!/bin/sh
     echo home

因為對使用 script 完成對應,所以自動選擇邏輯裝置介面是可能的 — 基於幾個測試的結果。參閱 使用 guessnet 選擇邏輯裝置介面, 第 10.8.1 節 中的範例。


10.8.1 使用 guessnet 選擇邏輯裝置介面

安裝 guessnet 套件並加入以下的敘述到 /etc/network/interfaces:

     mapping eth0
             script guessnet-ifupdown
             map home
             map work

現在起,當妳執行 ifup eth0 時, guessnet 會檢查 eth0 是否被帶起成 home 或 work。它使用儲存在邏輯裝置介面的定義來完成檢查的動作。


10.8.2 利用 laptop-net 自動設定網路

laptop-net套件使用不同的方法來自動設定網路。Laptop-net 不採用 ifupdown 的邏輯裝置反而改用它內建的系統設定 的 "方案" 以及系統 "偏好"。但是,Laptop-net 仍然使用 ifup 和 ifdown 來設定硬體裝置。安裝 laptop-net-doc 套件來閱讀詳盡說明的文件。


10.9 處理核心的非一致性裝置命名規則

eth0, eth1 等裝置名稱是由核心指定的,而核心建立裝置的順序是依照這些名稱。在開機時偵測到介面卡後,通常是以同樣的順序來偵測,所以指定的裝置名稱也是依照同樣的順序,然而,該規則無法套用在可熱插拔的裝置上。在不同的情況下,這些裝置被偵測到後,核心可以用任何順序或規則來指定裝置節點。

因為這樣的關係,系統上使用可熱插拔的網路卡將不會採用 /etc/network/interfaces定義好的邏輯裝置,如 eth0, eth1 等預設的裝置對映。取而代之的是您必須針對這邏輯裝置給定一個別的名稱並使用下列兩者其一的方式來控制那一個介面卡指定成那一個邏輯裝置。

使用 nameif 工具(在 net-tools 套件中)或更具彈性的 ifrename 工具(在 ifrename 套件中)使得核心依照介面卡的屬性來指定裝置名稱。採用這種命名規則的話,介面卡就能推測是使用那一個實體裝置名稱。

另一個辦法是採用 ifup 的對應技術使得介面卡在被帶起時能依據部份屬性來找到對應的邏輯裝置介面。

假設,舉例說明,您有兩個不同的網路卡,對應的網路分別為 net1 和 net2。/usr/share/doc/ifupdown/examples/ 目錄下包含了對應 script,依照 Media Access Controller address (MAC 位址) 來選擇介面卡的邏輯裝置介面。先安裝該 script 到適當的目錄。

     # install -m770 /usr/share/doc/ifupdown/examples/match-mac-address.sh \
        /usr/local/sbin/

然後增加類似下列的敘述到 /etc/network/interfaces:

     mapping eth0
             script /usr/local/sbin/match-mac-address.sh
             map 02:23:45:3C:45:3C net1
             map 00:A3:03:63:26:93 net2

參閱 多階段(Multi-stage)對應, 第 10.11 節 取得更進階的範例。

不管採用那一種方式,最常見的是用 MAC 位址來辨認介面卡。


10.10 觸發(Triggering)網路設定

我們已經了解裝置介面是如何設定或重新設定。這些動作需要在適當時機就完成。

傳統上,網路在開機時會經由 /etc/rcS.d/S40networking 這個 initscript 設定完成,極少數的機會重新設定。其他網路服務會在陸續啟動。反過來說,在關機或重開機的時候,initscript 執行的時機剛好相反。

現在,GUN 和 Linux 正朝著支援動態更換硬體和處理突發事件產生的趨勢。首先支援的是可熱(線上)抽換的 PCMCIA 卡。目前的 hotplug 已經支援更多可抽換的週邊硬體,即使是電腦運行中。這也包含了網路硬體。注意,當您移除可熱(線上)抽換的硬體時,牽涉到硬體的服務必須先停止。這表示這類型的服務必須從 System V init 系統移除並歸屬在 ifupdown 的控制下。

例如,支援控制 foo 服務的 initscript:/etc/init.d/foo 仰賴於動態設定的網路介面 eth0。


10.10.1 在開機時觸發(trigging)網路設定

在啟動 /etc/rcS.d/S40networking init script 時會執行 ifup -a 這個指令。這會帶起/etc/network/interfaces檔案中所有auto敘述的硬體裝置介面。

這表示使用動態方式來設定網路會比較適當。當支援動態更動硬體的技術成熟後,這會是最簡單的方式來轉化固定的硬體當成動態裝置處理。啟動裝置就能當成是另一個熱插拔的事件。(參閱 觸發網路設定 – 使用hotplug, 第 10.10.2 節。)

儘管如此,大部份的情況下,至少loloopback裝置要在開機時被帶起。所以,確定 /etc/network/interfaces 中有包含底下的敘述。

     auto lo
     
     iface lo inet loopback

如果妳想讓其他硬體裝置在開機時也被帶起,請加入 auto 敘述吧。絕對不要在 PCMCIA 介面上加入auto敘述。PCMCIA 的管理程式:cardmgr會在 /etc/rcS.d/S40networking執行後啟動。


10.10.2 觸發網路設定 – 使用hotplug

安裝 hotplug 套件以尋求 熱抽換的支援。

你可以在開機時或是安裝介面卡(例如 PCMCIA 卡)到系統後或者discover工具執行後載入必須的驅動程式時隨然抽換您的網路硬體。

當核心偵測到新的硬體,則會初使硬體的驅動程式並執行 hotplug 程式來設定它。如果移除硬體,則核心會再一次執行hotplug但以不同的環境變數。在 Debian 裡,當hotplug被呼叫時,會執行/etc/hotplug/ 和 /etc/hotplug.d/目錄底下的 script。更詳盡的訊息請參閱 hotplug(8)

新安裝的網路硬體是由/etc/hotplug/net.agent這個 script 來設定。 [67] 假設您的 PCMCIA 網路卡在安裝後使得 eth0 為對應的網路裝置介面。則 /etc/hotplug/net.agent 會完成底下的事情 [68] :

     ifup eth0=hotplug

除非您加入邏輯裝置介面定義或對應的hotplug名稱到/etc/network/interfaces,否則該指定不會有任何效果。為了讓該指令能正確設定 eth0,加入下列敘述到/etc/network/interfaces:

     mapping hotplug
             script echo

如同 使用邏輯裝置介面設定網路, 第 10.7 節 說明的,這將會對應上述的指令,也同等於底下的指令:

     ifup eth0=eth0

(如果您使用hotplug啟動時所帶起的ifplugd 或 waproamd事件來控制這些裝置介面,千萬不要使用上述的對應敘述。)

如果您只希望eth0在熱抽換時被帶起,改用 grep 來取代 echo 敘述,如同下列:

     mapping hotplug
             script grep
             map eth0

參閱 神奇的網路設定方式, 第 10.8 節 和 /usr/share/doc/hotplug/README.Debian 取得更多小技巧。


10.10.3 觸發網路設定 – 使用ifplugd

ifplugd daemon 不管實體硬體有無安裝,都能帶起或關閉網路裝置介面。該程式能偵測乙太網路是否接上纜線或是 Wi-Fi 裝置介面是否取得 AP(雖然waproamd是比較適合後來的情況)。 當 ifplugd 發現連線狀態改變時,它會執行一個代理 script,預設是呼叫 ifup 或 ifdown。


10.10.4 觸發網路設定 – 使用 waproamd

waproamd daemon 類似ifplugd,只是說它是針對 Wi-Fi 介面卡設計的。它能動態掃描 Wi-Fi 硬體能存取的 AP。找到能存取的 AP 時,waproamd 會執行 ifup。

如果您使用 waproamd,則您應該直接使用waproamd來設定 Wi-Fi 介面卡而非使用/etc/network/interfaces中的wireless-*敘述。


10.10.5 網路設定和 PCMCIA

有許多可行的辦法來設定 PCMCIA 網路裝置介面(針對 2.4 和 2.6 的核心)。

針對 16 bit 的介面卡而言,推薦使用核心 2.4,因為該版本的 hotplug 子系統已經支援 PCMCIA 了。 [69]

PCMCIA網路卡是可熱插拔的。因此,任何使用 PCMCIA 卡的網路服務必須要仔細設定,使得網路卡插入時能正常啟動;網路卡移除時能正常關閉服務。這通常是依據排列ifup和ifdown來啟動或關閉服務才能完成。有些人是限制他們的PCMCIA網路卡為不可抽換:他們會在開機前安裝好網路卡,並在開機過程中陸續啟動需要該網路卡的服務。如果您是這樣的朋友,為了確保該網路卡在啟動服務前是設定良好的。您必須完成下列事項:

這些動作只適合 16 bit PCMCIA 介面卡。

注意,如果您使用 16 bit PCMCIA 介面卡,還是需要安裝pcmcia-cs套件。該套件包含的cardmgr daemon 是用來管理 socket 和載入驅動程式模組。我們不用經由/etc/pcmcia/network去呼叫網路設定程式。

為了讓cardmgr能正常工作,您可能要編輯/etc/pcmcia/config.opts來設定16 bit PCMCIA 介面卡的資源。更多訊息請參閱 PCMCIA, 第 7.2.1 節 和 Linux PCMCIA HOWTO


10.11 多階段(Multi-stage)對應

第一個假設您的網路介面卡是可熱抽換的且您也設定好如觸發網路設定 – 使用hotplug, 第 10.10.2 節敘述的自動設定功能。第二個假設您需要對應邏輯裝置介面到"實體"裝置介面(如同處理核心的非一致性裝置命名規則, 第 10.9 節的敘述)以及連接到網路的裝置介面(如同使用 guessnet 選擇邏輯裝置介面, 第 10.8.1 節的敘述)。您可利用多階段對應來實現這個功能。

如果裝置介面可熱抽換,第一階段的對應則使用 hotplug 群組名並輸出核心所指定的裝置介面。第二階段對應使用核心指定的裝置介面名稱並輸出該介面卡的名稱。第三階段對應以網路環境來對應介面卡名稱和邏輯裝置介面名稱。

     # 允許 hotplug 帶起裝置
     mapping hotplug
     	script echo
     
     # 決定那一個介面是有線或無線
     mapping eth?
             script /usr/local/sbin/match-mac-address.sh
             map 02:23:45:3C:45:3C wired
             map 00:A3:03:63:26:93 wifi
     
     # 偵測可取得的有線網路
     mapping wired
             script guessnet-ifupdown
             map work-wired
             map home
     
     # 偵測可取得的無線網路
     mapping wifi
             script ifscout
             map starbucks
             map work-wireless
     
     iface work-wired inet static
     	...

10.12 網路服務設定

家用或桌上型電腦使用的典型網路服務包括:


10.13 解決網路問題

如果您在使用網路時出問題,請先執行下列的敘述來檢查輸出的結果:

     # ifconfig
     # cat /proc/pci
     # cat /proc/interrupts
     # dmesg | more

同時,請參閱 網路測試基礎, 第 8.6.29 節 接下來的段落。

如果您無法瀏覽特定的站台,請參閱 無法存取某此站台的怪問題, 第 3.7.5 節。


10.14 建立通訊閘路由器

一台 Debian 主機能完成所有通訊閘機器的功能,諸如網路位址轉譯(NAT, 也稱為 IP 偽裝),傳送郵件,DHCP,DNS 快取,HTTP 代理快取,CVS 服務,NFS 服務以及 Samba 服務。參考 網路所需的主機名和IP地址, 第 3.1.9 節 的範例來設定上述的服務。


10.14.1 Netfilter 設定

netfilter/iptables 專案是核心 2.4 或之後的版本的一個防火牆子系統。參閱 Netfilter,您會取得許多網路設定的方針和說明。


10.14.1.1 Netfilter 基礎

Netfilter 使用五個內建的 "chain"--PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING 來處理封包。

                     routing
                     decision
     IN ------> PRE ---> ------> FORWARD -----> ----> POST -----> OUT
     interface  ROUTING  \       filter       /       ROUTING     interface
                DNAT     |       tracking     ^       SNAT
                REDIRECT |                    |       MASQUERADE
                         v                    |
                       INPUT                OUTPUT
                         | filter             ^ filter,DNAT 
                         v                    |
                         \--> Local Process --/
                              user-space programs

10.14.1.2 Netfilter 表格

每一個內建的 "chain" 使用底下的表格來處理所有的封包。


10.14.1.3 Netfilter 目標

防火牆的規則有幾種目標:


10.14.1.4 Netfilter 指令

基本的iptables指令為:

     iptables -N chain                   # 建立一個新 chain
     
     iptables -A chain \                 # 加入規則到 chain
              -t table \                 # 使用 table (filter, nat, mangle)
              -p protocol \              # tcp, udp, icmp, 或 all,
              -s source-address[/mask] \
              --sport port[:port] \      # 當 -p 是 tcp 或 udp 時,指定來源埠號
              -d destination-address[/mask] \
              --dport port[:port] \      # 當 -p 是 tcp 或 udp 時,指定目的埠號
              -j target \                # 如果符合則作何處理
              -i in-interface-name \     # 針對 INPUT,  FORWARD, PREROUTING
              -o out-interface-name      # 針對 FORWARD, OUTPUT, POSTROUTING

10.14.1.5 網路位址轉譯(NAT)

區網內的機器能夠存取網際網路的資源是因為通訊閘轉譯了區網內的 IP 位置成網際網路合法的 IP 位置。

     # apt-get install ipmasq

使用範例的規則來加強ipmasq的保護。參閱/usr/share/doc/ipmasq/examples/stronger/README。使用 Debian woody 的 kernel-image-2.4 核心的朋友,請確定載入適當的模組。Sarge 版本的 ipmasq 解決了這麻煩的問題。設定步驟請參閱網絡功能, 第 7.2.3 節。

使用 Debian kernel-image-2.2 的朋友,請編輯 /etc/masq/rules 的 Z92timeouts.rul 檔案,參照下列範例設定,以確保對外長時間的連線(適合大量電子郵件傳輸...等):

     # tcp, tcp-fin, udp
     # 2hr, 10 sec, 160 sec - default
     # 1 day, 10 min, 10 min - longer example
     $IPCHAINS -M -S 86400 600 600

另外,如果是透過 PCMCIA 網路卡連線的,ipmasq 需要由 /etc/pcmcia/network.opts(閱讀 /usr/share/doc/ipmasq/ipmasq.txt.gz)或/etc/network/interfaces(閱讀 網路設定和 PCMCIA, 第 10.10.5 節 和 觸發(Triggering)網路設定, 第 10.10 節)來啟動。


10.14.1.6 重導 SMTP 連線 (2.4)

假設您的筆記型電腦在不同的區網環境下,如果您不希望重新設定郵件用戶代理程式就能直接使用在筆記型電腦上。

執行 iptables 並加入底下的規則,它將會重導 SMTP 連線到通訊閘的機器。

     # iptables -t nat -A PREROUTING -s 192.168.1.0/24 -j REDIRECT \
                -p tcp --dport smtp --to-port 25 # smtp=25, INPUT is open

至於完整的重導規則,安裝ipmasq套件並複製M30redirect.def到/etc/ipmasq/rules/目錄下。


10.14.2 管理多重的網路連線

[FIXME] Policy routing (by Phil Brutsche pbrutsch@tux.creighton.edu): 更多訊息請參閱 iproute manual。Traffic control (tc) 也是有幫助的。

環境設定:

     eth0: 192.168.1.2/24; 通訊閘 192.168.1.1
     eth1: 10.0.0.2/24; 通訊閘 10.0.0.1
     該機器沒有任何 IP 偽裝的機制。

Special magic:

  1. ip rule add from 192.168.1.2 lookup 1
  2. ip rule add from 10.0.0.2 lookup 2
  3. ip route add to default via 10.0.0.1 metric 0
  4. ip route add to default via 192.168.1.1 metric 1
  5. ip route add table 1 to 192.168.1.0/24 via eth0
  6. ip route add table 1 to 10.0.0.2/24 via eth1
  7. ip route add table 1 to default via 192.168.1.1
  8. ip route add table 2 to 192.168.1.0/24 via eth0
  9. ip route add table 2 to 10.0.0.2/24 via eth1
  10. ip route add table 2 to default via 10.0.0.2

[FIXME] 我從未試驗過。至於如何設定備緩的撥接以及自動重撥的功能來實現快速連線?還請寄給我一個補丁 :-)


[ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一頁 ]

Debian 參考手冊

1.08-3, 週日 五月 1 07:45:18 UTC 2005

青木 修 (Osamu Aoki) osamu@debian.org
翻譯者:葉信佑 (Shine-Yoh Yeh) asho@debian.org.tw
作者, 第 A.1 節