索引

....

ifupdown - 高階網路設定工具

Debian GNU/Linux 的基礎網路設定稱為 DebianPackages:ifupdown ,這個工具會讀取 /etc/network/interfaces 這一個設定檔來啟動網路。可查閱 interfaces(5) 以得知細節。

索引


ifup

ifup 用於驅動特定的網路介面,屬於 ifupdown 的工具之一。與 ifconfig 不同的是, ifup 會讀取 ifupdown 的設定,介面停止或執行時,會執行 interfaces 或 /etc/network/if-<option>.d/ 中的命令稿,再以 ifconfig 終止或啟動網路介面。用法請參考 ifupdown(8) 。相關文件請參考 interfaces 及 ifconifg(8)。

用法,啟動 eth0 網路介面

# /sbin/ifup eth0

不執行特定的 mapping。請參閱 interfaces

# /sbin/ifup --no-mappings eth0

ifdown

/sbin/ifdown 用於停止特定的網路介面,屬於 ifupdown 的工具之一。與 ifconfig 不同的是, ifdown 會讀取 ifupdown 的設定,介面停止時,執行 interfaces 或 /etc/network/if-<option>.d/ 中的命令稿,佐以 ifconfig 終止網路介面。用法請參考 ifupdown(8) 。相關文件請參考 interfaces 及 ifconifg(8)。

基本用法,停止 eth0

# /sbin/ifdown eth0

/etc/network/interfaces 集網路設定之大成

/etc/network/interfaces 是 Debian 系統中最為重要的網路設定檔案,許多網路介面的設定都是透過這個檔案。細節請查閱 interfaces(5)。或您的系統檔案 /usr/share/doc/ifupdown/examples/network-interfaces.gz 有完整的範例介紹。

本文件以最新版 ifupdown 為基礎。

interfaces 中若為空白或 # 開頭,則視之為註解,系統會自動略過。首先,您永遠都會想要一個 loopback 介面。因此 interfaces 介面會有這麼兩行

auto lo
iface lo inet loopback

接下來您可能想設定乙太網路卡的 IP 位址及路由,假設位址是 192.168.0.1,網路遮罩為 255.255.255.0,路由器位址是 192.168.0.254。那麼請在檔案中加入

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 192.168.0.1
        network 192.168.0.0 # 此行不寫無妨
        netmask 255.255.255.0
        broadcast 192.168.0.255 # 此行不寫無妨
        gateway 192.168.0.254

或您的介面藉由 (dhcp)? 動態網路設定,那麼可以如此寫

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

數個乙太介面可以寫為

auto lo eth0 eht1 eth2
iface lo inet loopback
iface eth0 inet dhcp
iface eth1 inet dhcp
iface eth2 inet dhcp

如果要讓更動立刻生效,最有效的辦法是重新開機,最聰明的辦法是以 root 身份下達以下指令

# /etc/init.d/networking restart

以上是最基本與最常用的。接下來將仔細介紹語法、設定方式及進階的用法。

如果您注意到設定的內容了,大概已經發現每個網路介面設定是起於 "auto"、"iface" 兩個關鍵字,而關鍵字之後接上網路介面名稱,網路類別以及設定方法,下方便是該網路介面的設定細節。事實上除了 "auto"、 "iface" 之外,還有一個 "mapping"。

auto

auto 關鍵字乃指定每個「物理網路介面」,你可以單一行指定介面名稱,也可以在檔案中使用數行。在開機時,系統命令稿會執行 "ifup -a",而這個指令會找出所有的 auto 設定節,並依序啟動該網路介面。

auto lo eth0
iface lo inet loopback
iface eth0 inet dhcp

或以數行表示

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp

iface 設定選項

關鍵字 "iface" 設定的則是「邏輯介面」(logical interface),倘若未使用 "mapping" 設定,則 iface 等於純粹用於設定「實體介面」(physical interface),稍後提到 "mapping" 會說明差別。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 192.168.0.1
        netmask 255.255.255.0
        gateway 192.168.0.254

依照範例設定而言,iface 之後接的是介面名稱(之後會介紹 logical interface 與 physical interface),以上顯示的即是 eth0。之後則是網路協定類別(address family),有以下三種分類

之後看到的 static 選項稱為 method of the interface,也就是設定的方式,通常用到的是

每種設定方式對於之後的細部設定參數都有所不同。細節請參考 interfaces(5)。以 TCP/IP networking 為例

auto eth0
iface eth0 inet static
        address 192.168.0.1
        network 192.168.0.0 # 此行不寫無妨
        netmask 255.255.255.0
        broadcast 192.168.0.255 # 此行不寫無妨
        gateway 192.168.0.254

我們可看到以上屬於 inet static 的設定有 address、network、netmask、broadcast、gateway,您大概注意到每行開頭的空白縮格,這些空白僅是為了閱讀設定便利,無縮格亦可。

另外一些強大的模組化命令稿機制便是 "up"、"pre-up"、"down"、"post-down" 等參數。這些參數的用途在於介面啟動或停止時,執行特定的命令。例如可在介面啟動時,自動載入您欲設定的 iptables 規則等,或是藉由 macchanger 指令在開機時更改網路介面的 MAC 位址。如果您要進行的設定是不分網路介面的,那麼可以把相關的命令寫成命令稿丟到 /etc/network/if-<option>.d/,那麼系統便會自動以 run-parts 逐一執行之。

mapping 設定選項

mapping 是 ifupdown 的主要特色之一,本文介紹的語法為最新版,使用 woody 的版本語法大有不同。這個選項可用來執行特定的指令,並決定目前的環境以決定網路組態。

例如伺服器上有兩張乙太網路卡,一張網路介面接於區域網路,作為 NAT 服務。另一張介面則接於廣域網路或寬頻網路,透過 (DHCP)? 取得網路位址。大部份時候必須逐一確認兩張網路卡的位址,以便設定組態。以下的範例用於可直接判別某個特定 MAC 位址的網路設備是否存在,每張不同的網路介面無法跨網域存取其他網路設備的位址。

auto eth0 eth1
mapping eth0 eth1
    script /path/to/get-mac-address.sh
    map 11:22:33:44:55:66 lan
    map AA:BB:CC:DD:EE:FF internet
iface lan inet static
    address 192.168.42.1
    netmask 255.255.255.0
    pre-up /usr/local/sbin/enable-masq $IFACE
iface internet inet dhcp
    pre-up /usr/local/sbin/firewall $IFACE

設定中以 "script" 參數明確指出執行的程式,此程式會逐一的在指定的網路介面上執行,並傳回特定的字串,以這裡的範例為例,取得特定的網路設備位址。而 map 11:22:33:44:55:66 lan,則是若 11:22:33:44:55:66 存在,則指定「邏輯介面」(logical interface) 為 lan,若為 AA:BB:CC:DD:EE:FF 則指定為 internet。

下面的設定區塊中則指示不同的「邏輯介面」則給予不同的設定。例子中

iface lan inet static
    address 192.168.42.1
    netmask 255.255.255.0
    pre-up /usr/local/sbin/enable-masq $IFACE

指示 lan 邏輯介面設定位址為 192.168.42.1,網路遮罩為 255.255.255.0,並在啟動時執行 /usr/local/sbin/enable-masq $IFACE,其中 $IFACE 變數則是實體介面(physical interface),非 "eth0" 即 "eth1",這個變數會傳給 /usr/local/sbin/enable-masq ,因此程式便可執行正確的設定。

iface internet inet dhcp
    pre-up /usr/local/sbin/firewall $IFACE

而 internet 邏輯介面,則以 dhcp 啟動,並執行 /usr/local/sbin/firewall。

除了這樣的用途,如果你擁有膝上型電腦,想必偶爾於工作、客戶、家中甚至咖啡館使用。不同的網路環境需要不同的組態,如果你必須在移動之後不停的更改組態,實在非常麻煩。試著想想,如果只需要設定一次,未來只要插上網路線,系統便自動且聰明的決定使用何種組態,那豈不方便?請試試 guessnet 吧。

更多的範例藏在 /usr/share/doc/ifupdown/examples/network-interfaces.gz 。