第 5 章 網絡設置

目录

5.1. 基本網絡架構
5.1.1. 主機名解析
5.1.2. 網路介面名稱
5.1.3. 區域網網路地址範圍
5.1.4. 網路裝置支援
5.2. 現代的桌面網路配置
5.2.1. 圖形介面的網路配置工具
5.3. 傳統的網路連線和配置
5.4. 網路連線方式(傳統)
5.4.1. 乙太網 DHCP 連線
5.4.2. 乙太網靜態 IP 連線
5.4.3. 使用 pppconfig 的 PPP 連線
5.4.4. 使用 wvdialconf 的另一種可選的 PPP 連線
5.4.5. 使用 pppoeconf 的 PPPoE 乙太網連線
5.5. 使用 ifupdown 進行基本網路配置(舊)
5.5.1. 簡單的命令語法
5.5.2. "/etc/network/interfaces" 基本語法
5.5.3. 迴環網路介面
5.5.4. 使用 DHCP 的網路介面
5.5.5. 使用靜態 IP 地址的網路介面
5.5.6. 無線區域網介面基礎
5.5.7. 使用 WPA/WPA2 的無線區域網介面
5.5.8. 使用 WEP 的無線區域網介面
5.5.9. PPP 連線
5.5.10. 另一種 PPP 連線
5.5.11. PPPoE 連線
5.5.12. ifupdown 網路配置狀態
5.5.13. 網路重新配置基礎
5.5.14. ifupdown-extra 包
5.6. 使用 ifupdown 的高階網路配置(舊)
5.6.1. ifplugd 軟體包
5.6.2. ifmetric 軟體包
5.6.3. 虛擬介面
5.6.4. 高階命令語法
5.6.5. 對映節 mapping stanza
5.6.6. 手動的可切換網路配置
5.6.7. ifupdown 系統的指令碼
5.6.8. guessnet Mapping 對映
5.7. 底層網路配置
5.7.1. Iproute2 命令
5.7.2. 安全的底層網路操作
5.8. 網路優化
5.8.1. 找出最佳 MTU
5.8.2. 設定 MTU
5.8.3. WAN TCP 優化
5.9. Netfilter 網路過濾框架
[提示] 提示

關於GNU/Linux網絡的通用手冊,請查看Linux 網絡管理員手冊

[提示] 提示

關於Debian專屬的網絡手冊,請查看Debian管理員手冊—網絡配置

[警告] 警告

為代替使用傳統的網路介面名稱的方案 ("eth0", "eth1", "wlan0", …), 新的 systemd 使用"enp0s25" 之類的 "可預測網路介面名稱".

[警告] 警告

本章是基於 2013 年發佈的 Debian 7.0 (Wheezy) 編寫的,所以其內容正在變得過時。

[提示] 提示

儘管本文件仍使用舊的 ifconfig(8) 以 IPv4 做為其網路組態的範例,Debian 正移動至 ip(8)wheezy 釋出中使用 IPv4+IPv6。歡迎對本文件的昇級補丁。

[提示] 提示

systemd環境下,可以用networkd來配置網絡。請參考systemd-networkd(8)

讓我們來回顧一下現代Debian操作系統中的基本網絡架構。

表 5.1. 網絡配置工具一覽表

軟件包 流行度 大小 類型 說明
ifupdown V:575, I:995 202 配置::ifupdown 用來啓動/關閉網絡的標準工具(Debian特有)
ifplugd V:4, I:20 214 同上 自動管理有線網絡
ifupdown-extra V:0, I:1 96 同上 網絡測試腳本,加強"ifupdown"軟件包的功能
ifmetric V:0, I:1 36 同上 設置網絡接口的路由度量
guessnet V:0, I:0 422 同上 腳本文件,利用"/etc/network/interfaces"文件來加強"ifupdown"的功能
ifscheme V:0, I:0 58 同上 映射腳本文件,增強"ifupdown"軟件包的功能
ifupdown-scripts-zg2 V:0, I:0 147 同上 Zugschlus寫的腳本,用於ifupdown手動管理
network-manager V:373, I:475 9979 配置::NM NetworkManager(守衛進程):自動管理網絡
network-manager-gnome V:202, I:417 5601 同上 NetworkManager(GNOME前端)
wicd I:33 35 配置::wicd 有線和無線網絡管理器(元軟件包)
wicd-cli V:0, I:2 59 同上 有線和無線網絡管理器(命令行客戶端)
wicd-curses V:1, I:4 175 同上 有線和無線網絡管理器(文本界面客戶端)
wicd-daemon V:28, I:37 954 同上 有線和無線網絡管理器(守護進程)
wicd-gtk V:23, I:35 574 同上 有線和無線網絡管理器(GTK+客戶端)
iptables V:249, I:994 1528 配置::Netfilter 封包過濾和網絡地址轉換管理工具(Netfilter
iproute V:91, I:406 23 配置::iproute2 iproute2, IPv6和其他高級網絡配置:ip(8),tc(8)等等
ifrename V:1, I:2 122 同上 根據不同的靜態標準來重命名網絡接口:ifrename(8)
ethtool V:103, I:263 375 同上 顯示或更改以太網設備的設定
iputils-ping V:254, I:996 111 測試::iproute2 測試能否連接遠程主機,通過主機名IP 地址iproute2
iputils-arping V:50, I:423 58 同上 測試能否連接遠程主機,通過ARP地址
iputils-tracepath V:10, I:192 75 同上 跟蹤訪問遠程主機的路徑
net-tools V:365, I:876 940 配置::net-tools NET-3網絡工具箱(net-tools,IPv4網絡配置):ifconfig(8)等等。
inetutils-ping V:0, I:1 337 測試::net-tools 測試能否連接遠程主機,通過hostnameIP 地址(傳統方式,GNU)
arping V:2, I:28 73 同上 測試能否連接遠程主機,通過ARP地址(傳統方法)
traceroute V:68, I:984 154 同上 跟蹤連接遠程主機的路徑(傳統方法,控制檯)
isc-dhcp-client V:335, I:967 649 配置::底層 DHCP客戶端
wpasupplicant V:298, I:545 2528 同上 WPA和WPA2客戶端支持(IEEE 802.11i)
wpagui V:0, I:3 780 同上 wpa_supplicant Qt 圖形界面客戶端
wireless-tools V:139, I:277 286 同上 操控Linux無線擴展的工具
ppp V:188, I:519 927 同上 使用chat連接PPP/PPPoE
pppoeconf V:0, I:11 290 配置::輔助 配置助手,以便於使用PPPoE連接
pppconfig V:1, I:3 805 同上 配置助手,以便於使用chat連接PPP
wvdial V:0, I:7 276 同上 配置助手,以便於使用wvdialppp連接PPP
mtr-tiny V:6, I:57 138 測試::底層 追蹤連接遠程主機的路徑(文本界面)
mtr V:5, I:41 190 同上 追蹤連接遠程主機的路徑(文本界面和GTK+界面)
gnome-nettool V:7, I:183 2112 同上 獲取常見網絡信息的工具(GNOME)
nmap V:39, I:364 23548 同上 網絡映射/端口掃描(Nmap,控制檯)
zenmap V:3, I:12 2911 同上 網絡映射/端口掃描(GTK+)
tcpdump V:19, I:199 1192 同上 網絡流量分析(Tcpdump,控制檯)
wireshark I:63 73 同上 網絡流量分析(Wireshark,GTK+)
tshark V:3, I:37 388 同上 網絡流量分析(控制檯)
tcptrace V:0, I:1 392 同上 根據tcpdump的輸出生成的連接數據統計
snort V:1, I:1 1920 同上 靈活的網絡入侵偵測系統(Snort
ntopng V:1, I:1 684 同上 在網頁瀏覽器中展示網絡流量
dnsutils V:74, I:833 519 同上 BIND軟件包提供的網絡客戶端程序:nslookup(8),nsupdate(8),dig(8)
dlint V:0, I:17 96 同上 利用域名服務器查詢來查看DNS域信息
dnstracer V:0, I:2 56 同上 跟蹤DNS查詢直至源頭

主機名解析,目前也是由 NSS (名字服務轉換 Name Service Switch) 機制來支援。這個解析的流程如下。

  1. "/etc/nsswitch.conf" 檔案裡的 "hosts: files dns" 這段規定主機名解析順序。 (代替 "/etc/host.conf" 檔案裡的"order" 這段原有的功能。)

  2. files 方式首先被呼叫。如果主機名在 "/etc/hosts" 檔案裡面發現,則返回所有有效地址並退出。 ( "/etc/host.conf" 檔案包含 "multi on".)

  3. dns 方式被呼叫。如果主機名通過查詢 "/etc/resolv.conf" 檔案裡面寫的 網際網路域名系統 Domain Name System (DNS) 來找到,則返回所有有效地址並退出。

例如, "/etc/hosts" 看起來如下。

127.0.0.1 localhost
127.0.1.1 <host_name>

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

每一行由 IP 地址 開始,接下來是相關聯的主機名.

在這個例子的第二行 127.0.1.1 IP 地址也許不會在其它類 Unix 系統發現。Debian Installer 為沒有永久 IP 地址的系統建立這個條目,作為某些軟體(如 GNOME)的一個變通方法,見文件 bug #719621.

<host_name> 匹配在"/etc/hostname"裡定義的主機名。

對於有永久 IP 地址的系統,這個永久 IP 地址應當代替這裡的 127.0.1.1

對於有永久 IP 地址和有 域名系統 Domain Name System (DNS)提供完全資格域名 fully qualified domain name (FQDN) 的系統,規範名 <host_name>.<domain_name> 應當被用來代替 <host_name>.

如果 resolvconf 軟體包沒有安裝,"/etc/resolv.conf" 是一個靜態檔案。如果安裝了,它是一個符號連結。此外,它包含有解析策略的初始化資訊。如 DNS 是 IP="192.168.11.1",則包含如下。

nameserver 192.168.11.1

resolvconf 軟體包使這個 "/etc/resolv.conf" 檔案成為一個符號連結,並通過鉤子指令碼自動管理其內容。

對於典型 adhoc 區域網環境下的 PC 工作站,除了基本的 filesdns 方式之外,主機名還能夠通過組播 DNS (mDNS, 零配置網路 Zeroconf)進行解析。

  • Avahi 提供 Debian 下的組播 DNS 發現框架。

  • 它和 Apple Bonjour / Apple Rendezvous 相當.

  • libnss-mdns 外掛包提供 mDNS 的主機名解析,GNU C 庫 (glibc)的 GNU 名字服務轉換 Name Service Switch (NSS) 功能支援 mDNS。

  • "/etc/nsswitch.conf" 檔案應當有像 "hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4" 這樣的一段.

  • ".local"結尾的主機名,使用 pseudo-top-level domain (TLD) 來解析.

  • mDNS IPv4 本地連線組播地址 "224.0.0.251" 或它相應的 IPv6 地址 "FF02::FB" 被用來作為 ".local" 結尾名字的 DNS 查詢。

較老的 Windows 系統安裝 winbind 軟體包來提供舊的 NETBios over TCP/IP 主機名解析。為啟用這個功能,"/etc/nsswitch.conf" 檔案應當有這樣的一段: "hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 wins"。 (現代 Windows 系統通常使用 dns 方式來進行主機名解析。)

網路介面名稱,比如說 eth0, 是在 Linux 核心裡分配給每一個硬體的,當這個硬體被核心發現的時候,通過使用者層的配置機制udev (參見 第 3.3 节 “udev 系統”)來分配.網絡卡介面名稱也就是 ifup(8)interfaces(5)裡的 physical interface

為了保證每個網路介面名稱在每次重啟後一致,會用到 MAC 地址 等,有一個規則檔案"/etc/udev/rules.d/70-persistent-net.rules". 這個檔案是由"/lib/udev/write_net_rules" 程式自動生成,是由 "persistent-net-generator.rules" 規則檔案來執行. 你可以修改該檔案來改變命名規則。

[小心] 小心

當編輯 "/etc/udev/rules.d/70-persistent-net.rules" 規則檔案時,你必須保持每條規則在單獨的一行中,並且 MAC 地址 要小寫。比如說,如果你發現"FireWire device" 和"PCI device" 在這個檔案中,你也許想命名"PCI device" 作為 eth0,並配置它為首要網路介面。

Debian squeeze 和新的發行版都可以通過後臺守護程序(daemon)管理軟體來管理網路連線,例如 NetworkManager (NM)(network-manager 和相關軟體包)或 Wicd(wicd 和相關軟體包)。

  • 它們有自己的 GUI 和命令列程式來作為使用者介面。

  • 它們有自己的後臺守護程序(daemon)作為它們的系統後端。

  • 它們使你可以簡單地將系統連線到網路。

  • 它們使你可以簡單地管理有線和無線網路的配置。

  • 它們允許你配置網路而不依賴傳統的 ifupdown 軟體包。

[注意] 注意

不要在伺服器上使用這些自動網路配置工具。它們主要針對於膝上型電腦上的移動桌面使用者。

這些現代的網路配置工具需要進行適當的配置,以避免與傳統 ifupdown 軟體包發生衝突,它的配置檔案位於 “/etc/network/interfaces”。

[提示] 提示

使用 systemd 的系統中,可以在 /etc/systemd/network/ 裡配置網路。參見 systemd-resolved(8)resolved.conf(5)systemd-networkd(8)

[注意] 注意

這些自動網路配置工具的一些功能可能會帶來令人煩擾的問題。它們不像傳統的 ifupdown 軟體包那樣健壯。檢查 network-manager 的 BTSwicd 的 BTS,來檢視當前的問題和限制。

Debian 系統 NM 和 Wicd 的官方文件分別位於 “/usr/share/doc/network-manager/README.Debian” 和 “/usr/share/doc/wicd/README.Debian”。

本質上,如下操作即可完成桌面的網路配置。

  1. 通過下列命令使桌面使用者 foo 歸屬 “netdev” 組(另外,例如 GNOME 和 KDE 這樣的現代桌面環境會通過 D-bus 自動完成該操作)。

    $ sudo adduser foo netdev
  2. 使 “/etc/network/interfaces” 的配置保持下面那樣簡潔。

    auto lo
    iface lo inet loopback
  3. 通過下列命令重新啟動 NM 或 Wicd。

    $ sudo /etc/init.d/network-manager restart
    $ sudo /etc/init.d/wicd restart
  4. 通過圖形介面配置網路。

[注意] 注意

只有列在 “/etc/network/interfaces” 中的介面會被 NM 或 Wicd 管理,以避免與 ifupdown 的衝突。

[提示] 提示

如果你想擴充套件 NM 的網路配置功能,請尋找適當的外掛模組和補充軟體包,例如 network-manager-openconnect network-manager-openvpn-gnomenetwork-manager-pptp-gnomemobile-broadband-provider-infognome-bluetooth 等等。這同樣適用於 Wicd。

[小心] 小心

這些自動網路配置工具可能無法相容 “/etc/network/interfaces” 中傳統的 ifupdown 的深奧配置,例如 第 5.5 节 “使用 ifupdown 進行基本網路配置(舊)”第 5.6 节 “使用 ifupdown 的高階網路配置(舊)” 中的那些配置。檢查 network-manager 的 BTSwicd 的 BTS 來檢視當前的問題和限制。

如果 第 5.2 节 “現代的桌面網路配置” 中描述的方法無法滿足你的需要,那你應該使用結合了許多普通工具的傳統網路連線和配置方法。

傳統網路連線的每個方法都是特定的(參見 第 5.4 节 “網路連線方式(傳統)”)。

用於 Linux 底層網路配置的程式有兩種型別(參見 第 5.7.1 节 “Iproute2 命令”)。

  • 來自 Linux NET-3 網路系統的舊 net-tools 程式(ifconfig(8)……)。它們中的大多數都已經過時了。

  • 來自現在的 Linux 網路系統的新 Linux iproute2 程式(ip(8)……)。

儘管底層程式十分強大,但它們使用繁瑣。因此建立了高層網路配置系統。

ifupdown 軟體包是 Debian 中這種高層網路配置系統的實際標準。它讓你可以簡單地通過例如 “ifup eth0” 這樣的命令來開啟網路。它的配置檔案位於 “/etc/network/interfaces” 中並且其典型內容如下。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

resolvconf 軟體包是為了使 ifupdown 系統支援自動重寫解析器配置檔案 “/etc/resolv.conf” 來使網路地址解析平滑地重新配置。現在,大多數 Debian 網路配置軟體包都使用了 resolvconf 軟體包(參見 “/usr/share/doc/resolvconf/README.Debian”)。

ifupdown 軟體包的輔助指令碼,例如 ifplugdguessnetifscheme等,是為了進行網路環境的自動動態配置,例如位於有線區域網中的移動電腦。這些相對來說比較難使用,但在當前的 ifupdown 系統下工作良好。

詳細的案例參見 第 5.5 节 “使用 ifupdown 進行基本網路配置(舊)”第 5.6 节 “使用 ifupdown 的高階網路配置(舊)”

[小心] 小心

在這節描述的連線測試方式僅僅用於測試目的。不應當直接用於日常的網路連線。建議你使用 NM, Wicd, 或 ifupdown 包代替。(參見 第 5.2 节 “現代的桌面網路配置”第 5.5 节 “使用 ifupdown 進行基本網路配置(舊)”).

一臺電腦典型的網路連線方式和連線路徑,能夠使用下面的內容概述。


每種連線方式配置指令碼彙總。


網路連線縮略語意義如下。


[注意] 注意

通過電視線纜的廣域網服務,通常使用 DHCP 或 PPPoE。ADSL 和 FTTP 通常使用 PPPoE。你需要諮詢你的網際網路服務提供商來獲得廣域網連線使用的精確配置。

[注意] 注意

當寬頻路由器用來搭建家庭區域網環境時,區域網上的電腦需要使用寬頻路由器上的 網路地址轉換(NAT),來連線到廣域網。在這樣的情況下,區域網上的電腦網路介面需使用靜態 IP 或者寬頻路由器提供的 DHCP 服務。寬頻路由器必須按 ISP 的指引來配置連線到廣域網。

配置指令碼 pppconfig 配置 PPP 連線,僅需要互動式的選擇下面內容。

  • 電話號碼

  • ISP 使用者名稱

  • ISP 密碼

  • 埠速率

  • modem 通訊埠

  • 認證方式

表 5.6. 使用 pppconfig 的 PPP 連線配置檔案列表

檔案 功能
/etc/ppp/peers/<isp_name> pppconfig 生成針對 <isp_name> 的 pppd 配置檔案
/etc/chatscripts/<isp_name> pppconfig 生成針對 <isp_name> 的 chat 配置檔案
/etc/ppp/options pppd 常用的執行引數
/etc/ppp/pap-secret PAP 的鑑權認證資料 (有安全風險)
/etc/ppp/chap-secret CHAP 的鑑權認證資料(更安全)

[小心] 小心

"<isp_name>" 是 "網際網路服務提供商" ,假設 ponpoff 命令呼叫時,沒有引數。

你可以使用下面的底層網路配置工具測試配置。

$ sudo pon <isp_name>
...
$ sudo poff <isp_name>

參見 "/usr/share/doc/ppp/README.Debian.gz".

Debian 系統上的傳統 TCP/IP 網路 搭建,ifupdown 軟體包是作為一個上層工具來使用。有兩個典型場景。

如果你想設定高階配置,這些傳統的設定方法,是相當有用的。在下面的內容中發現細節。

ifupdown 包提供 Debian 系統中標準的高層網路配置框架。在本節中,我們通過 ifupdown 的簡單介紹和許多典型列子來學習基本的網路配置。

第 5.4.1 节 “乙太網 DHCP 連線” 準備系統後,在"/etc/network/interfaces" 裡面,按下面的內容建立配置條目後,網路介面的 DHCP 便配置好了。

allow-hotplug eth0
iface eth0 inet dhcp

當 Linux 核心檢測到物理介面 eth0, allow-hotplug 節促使 ifup 啟動介面,iface 促使 ifup 使用 DHCP 來配置介面。

你需要安裝 wpasupplicant 包來支援 WLAN 使用新的 WPA/WPA2.

使用 DHCP 的無線區域網連線,"/etc/network/interfaces" 檔案的條目需要按下面的內容設定。

allow-hotplug ath0
iface ath0 inet dhcp
 wpa-ssid homezone
 # hexadecimal psk is encoded from a plaintext passphrase
 wpa-psk 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

參見 "/usr/share/doc/wpasupplicant/README.modes.gz".

你需要安裝 wireless-tools 包來支撐老的 WEP 無線區域網。(你的消費等級的路由器可能仍然使用不安全的架構,但這總比沒有好。)

[小心] 小心

請注意:WEP 無線區域網上的網路流量,可以被其他人監聽。

使用 DHCP 的無線區域網連線,"/etc/network/interfaces" 檔案的條目需要按下面的內容設定。

allow-hotplug eth0
iface eth0 inet dhcp
 wireless-essid Home
 wireless-key1 0123-4567-89ab-cdef
 wireless-key2 12345678
 wireless-key3 s:password
 wireless-defaultkey 2
 wireless-keymode open

參見 "/usr/share/doc/wireless-tools/README.Debian".

你需要按之前的描述配置 PPP 連線(參見 第 5.4.3 节 “使用 pppconfig 的 PPP 連線”). 然後,按下面的方式給第一個 PPP 裝置 ppp0 增加 “/etc/network/interfaces" 檔案裡的條目.

iface ppp0 inet ppp
 provider <isp_name>

你需要按之前的描述先配置好使用 wvdial 的另外一種 PPP 連線(參見第 5.4.4 节 “使用 wvdialconf 的另一種可選的 PPP 連線”). 然後,按下面的方式給第一個 PPP 裝置 ppp0 增加 “/etc/network/interfaces" 檔案裡的條目.

iface ppp0 inet wvdial

使用 PPPoE 直接連線到廣域網的電腦,你需要按之前的描述用 PPPoE 連線配置系統(參見 第 5.4.5 节 “使用 pppoeconf 的 PPPoE 乙太網連線”). 然後,按下面的方式給第一個 PPPoE 裝置 eth0 增加 “/etc/network/interfaces" 檔案裡的條目.

allow-hotplug eth0
iface eth0 inet manual
 pre-up /sbin/ifconfig eth0 up
 up ifup ppp0=dsl
 down ifdown ppp0=dsl
 post-down /sbin/ifconfig eth0 down
# The following is used internally only
iface dsl inet ppp
 provider dsl-provider

ifupdown 軟體包,使用其高階用法,其功能就能夠超出在 第 5.5 节 “使用 ifupdown 進行基本網路配置(舊)” 所描述的內容。

描述在這裡的這些功能是完全可選的。我,由於懶惰和極簡主義,幾乎不使用這些令人煩擾的東西。

[小心] 小心

如果你不能夠通過 第 5.5 节 “使用 ifupdown 進行基本網路配置(舊)” 裡的資訊建立網路連線,使用下面的資訊,你就會使你的情形變得比較糟糕。

ifplugd 軟體包是一個老的自動網路配置工具,它僅能夠管理乙太網連線。解決了移動 PC 等拔插乙太網線纜的問題。如果你有安裝 NetworkManagerWicd (參見 第 5.2 节 “現代的桌面網路配置”),就不需要這個軟體包。

這個軟體包執行一個後臺守護程序(daemon) 來代替 autoallow-hotplug 的功能 (參見 表 5.10 “"/etc/network/interfaces" 裡面的節列表”),並啟動網路連線上的介面。

乙太網埠怎樣使用 ifplugd 軟體包,比如 eth0,請看下面。

  1. 刪除 "/etc/network/interfaces" 裡面的節: "auto eth0" 或 "allow-hotplug eth0".

  2. 保留 "/etc/network/interfaces" 裡的節: "iface eth0 inet …" 和 "mapping …".

  3. 安裝 ifplugd 軟體包.

  4. 執行 "sudo dpkg-reconfigure ifplugd".

  5. eth0 作為 "由 ifplugd 監控的靜態網絡卡".

現在,網路按你希望的方式重新配置了。

  • 在開啟電源或發現硬體的時候啟動,介面不會自己啟動自己。

  • 發現乙太網線纜時,啟動介面。

  • 在拔掉乙太網線纜後啟動一段時間,然後介面自動關閉。

  • 在插入另外的乙太網線纜時,介面在新的網路環境下啟動。

[提示] 提示

ifplugd(8) 命令的引數能夠設定其行為,比如說重新配置介面的延時。

為了避免複雜,我們在 第 5.5.2 节 “"/etc/network/interfaces" 基本語法” 裡省略瞭解釋 "/etc/network/interfaces" 裡的 mapping 節。

mapping <interface_name_glob>
 script <script_name>
 map <script_input1>
 map <script_input2>
 map ...

這給 /etc/network/interfaces 檔案提供了一個高階特徵,可以自動選擇對映指令碼 <script_name> 定義的配置。

讓我們來跟隨下面的執行。

$ sudo ifup eth0

當 "<interface_name_glob>" 匹配 "eth0", 這個執行過程執行下面的命令來自動配置 eth0

$ sudo ifup eth0=$(echo -e '<script_input1> \n <script_input2> \n ...' | <script_name> eth0)

這裡," map " 指令碼輸入行是可選和可以重複的。

[注意] 注意

mapping 節工作的匹配模式,類似於 shell 檔名匹配。 (參見 第 1.5.6 节 “Shell 萬用字元”).

以下是如何在幾個網路配置中進行手動切換,而無需像 第 5.5.13 节 “網路重新配置基礎” 中那樣重寫 “/etc/network/interfaces” 檔案。

對於你需要訪問的所有網路配置,你需要在 “/etc/network/interfaces” 檔案中像下面那樣建立一個單獨的節。

auto lo
iface lo inet loopback

iface config1 inet dhcp

iface config2 inet static
 address 192.168.11.100
 netmask 255.255.255.0
 gateway 192.168.11.1
 dns-domain example.com
 dns-nameservers 192.168.11.1

iface pppoe inet manual
 pre-up /sbin/ifconfig eth0 up
 up ifup ppp0=dsl
 down ifdown ppp0=dsl
 post-down /sbin/ifconfig eth0 down

# The following is used internally only
iface dsl inet ppp
 provider dsl-provider

iface pots inet ppp
 provider provider

請注意,iface 後面標識的 網路配置名稱 不用於標識 網路介面名稱。另外,也沒有 autoallow-hotplug 節來根據事件自動啟動網路介面 eth0

現在,你可以切換網路配置了。

讓我們通過 DHCP 將你的 PC 移動到區域網。你可以通過下列命令開啟由網路配置名稱(邏輯介面名稱)config1 指定的網路介面(物理介面) eth0

$ sudo ifup eth0=config1
Password:
...

eth0 介面已開啟,由 DHCP 配置並連線到了區域網。

$ sudo ifdown eth0=config1
...

eth0 介面已關閉並斷開區域網連線。

讓我們通過靜態 IP 使你的 PC 移動到區域網。你可以通過下列命令開啟由網路配置名稱 config2 指定的網路介面 eth0

$ sudo ifup eth0=config2
...

開啟 eth0 介面,使用靜態 IP 配置並連線到區域網。像 dns-* 這樣的額外引數會配置 “/etc/resolv.conf” 的內容。如果安裝了 resolvconf,“/etc/resolv.conf” 會更容易管理。

$ sudo ifdown eth0=config2
...

eth0 介面再次關閉並斷開區域網連線。

讓我們將你的 PC 移動到 PPPoE 伺服器的 BB-modem 上的一個埠。你可以通過下列命令開啟由網路配置名稱 pppoe 指定的網路介面 eth0

$ sudo ifup eth0=pppoe
...

eth0 介面已開啟,由 PPPoE 配置直接連線到 ISP。

$ sudo ifdown eth0=pppoe
...

eth0 介面再次關閉並斷開連線。

讓我們將你的 PC 移動到使用 POTS 和 modem 的位置,而非區域網或 BB-modem。你可以通過下列命令開啟由網路配置名稱 ppp0 指定的網路介面 eth0

$ sudo ifup ppp0=pots
...

開啟 ppp0介面,並使用 PPP 連線到網際網路。

$ sudo ifdown ppp0=pots
...

關閉 ppp0 介面並斷開網路。

你應該檢查 “/etc/network/run/ifstate” 檔案,檢視ifupdown 系統當前網路配置的狀態。

[警告] 警告

如果你有多個網路介面,你可能需要調整 eth*ppp* 等的末尾數字。

ifupdown 系統會自動執行安裝在 “/etc/network/*/” 中的指令碼,而且會傳遞環境變數給指令碼。


這裡,每一個環境變數,"$IF_<OPTION>",是在相應的選項名字 <option1> 和 <option2> 前增加 "$IF_" 來建立, 把字母轉換為大寫字母,將中劃線替換為下劃線,忽略非字母數字的字元。

[提示] 提示

<address_family>, <method_name>, <option1> 和 <option2> 的說明,請參見第 5.5.2 节 “"/etc/network/interfaces" 基本語法”

ifupdown-extra 軟體包 (參見 第 5.5.14 节 “ifupdown-extra 包”)使用這些環境變數來擴充套件ifupdown 軟體包的功能. ifmetric 軟體包 (參見 第 5.6.2 节 “ifmetric 軟體包”)安裝 "/etc/network/if-up.d/ifmetric"指令碼,這個指令碼通過"$IF_METRIC"變數來設定 metric 路由度量值. guessnet 軟體包 (參見 第 5.6.8 节 “guessnet Mapping 對映”),提供簡單和功能強大的框架,用於通過 mapping 對映機制自動選擇網路配置,這個軟體包也使用了這些環境變數。

[注意] 注意

使用這些環境變數進行個性化網路配置的列子,你可以檢視"/usr/share/doc/ifupdown/examples/*"裡的列子指令碼,以及 ifschemeifupdown-scripts-zg2 軟體包使用的指令碼.這些額外的指令碼有部分功能和 ifupdown-extraguessnet 軟體包的基本功能重疊. 如果你安裝了這些額外指令碼,你應當個性化這些指令碼來避免互相影響。

為了替代在 第 5.6.6 节 “手動的可切換網路配置” 描述的手工選擇配置,你可以使用在 第 5.6.5 节 “對映節 mapping stanza” 描述的對映機制,自動選擇個性化指令碼來進行配置網路。

guessnet 軟體包提供的 guessnet-ifupdown(8) 命令,是被設計作為對映指令碼,並提供強力框架來增強ifupdown 系統.

  • iface 節下的每一個網路配置,列出測試條件作為guessnet 選項的值。

  • 對映機制選擇第一個沒有錯誤結果的 iface 作為網路配置。

guessnet-ifupdown 使用的對映指令碼和 ifupdown的原始網路配置架構,這兩種對 "/etc/network/interfaces" 檔案的用法,不會造成負面的影響,因為 guessnet 選項僅僅只匯出額外的環境變數到 ifupdown 系統執行的指令碼。細節參見 guessnet-ifupdown(8).

[注意] 注意

當多個 guessnet 選項行需要在 "/etc/network/interfaces" 裡出現時,選項行使用 guessnet1, guessnet2,這類的開頭,因為 ifupdown 軟體包不允許選項行開頭字串重複。

通用的網路優化超出了本文的範圍。我提及消費等級連線相關的主題。


最大傳輸單元 Maximum Transmission Unit (MTU) 的值能夠通過加 "-M do" 選項的 ping(8) 實驗來確定,它傳送從 1500 位元組(對於IP+ICMP 包頭,有 28 位元組的偏移)大小開始的 ICMP 包,來找出 IP 不分片的最大包大小。

嘗試下列例子

$ ping -c 1 -s $((1500-28)) -M do www.debian.org
PING www.debian.org (194.109.137.218) 1472(1500) bytes of data.
From 192.168.11.2 icmp_seq=1 Frag needed and DF set (mtu = 1454)

--- www.debian.org ping statistics ---
0 packets transmitted, 0 received, +1 errors

嘗試 1454 代替 1500

你看到用 1454 ping(8) 成功了。

這個過程是 路徑 MTU (PMTU) 發現 (RFC1191) , tracepath(8) 命令能夠自動完成這個。

[提示] 提示

上面的列子,PMTU 的值是 1454,這是我先前的光纖到戶提供商,使用了 非同步傳輸模式 Asynchronous Transfer Mode (ATM) 作為他們的骨幹網路,並使用 PPPoE 作為客戶端。實際 PMTU 值依賴於你的環境,比如說,我新的光纖到戶提供商是 1500。


除了這些基本的指引方法外,你還應當知道下面的資訊。

  • 使用任何隧道方式(VPN 等.)的最佳 MTU 需要進一步減去它們上面的頭部。

  • MTU 值不應當超過通過實驗驗證的 PMTU 值。

  • 當遇到其它限制的時候,較大的 MTU 值通常比較好。

這裡示例設定 MTU 值,從預設的 1500 設定到 1454.

對於 DHCP (參見 第 5.5.4 节 “使用 DHCP 的網路介面”), 你能夠使用下面的方式替換 "/etc/network/interfaces" 檔案裡 iface 節相關的行.

iface eth0 inet dhcp
 pre-up /sbin/ifconfig $IFACE mtu 1454

對於靜態 IP (參見 第 5.5.5 节 “使用靜態 IP 地址的網路介面”), 你能夠使用下面的方式替換 "/etc/network/interfaces" 檔案裡 iface 節相關的行.

iface eth0 inet static
 address 192.168.11.100
 netmask 255.255.255.0
 gateway 192.168.11.1
 mtu 1454
 dns-domain example.com
 dns-nameservers 192.168.11.1

對於直接 PPPoE (參見 第 5.4.5 节 “使用 pppoeconf 的 PPPoE 乙太網連線”),你能夠使用下面的方式替換 "/etc/ppp/peers/dsl-provider" 裡 "mtu" 相關的行.

mtu 1454

最大分片大小 (MSS) 是另外一種衡量包大小的方法。MSS 和 MTU 的關係如下.

  • 對於 IPv4, MSS = MTU - 40

  • 對於 IPv6,MSS = MTU - 60

[注意] 注意

基於 iptables(8) (參見 第 5.9 节 “Netfilter 網路過濾框架”) 的優化,能夠通過 MSS 來壓縮包大小,路由器會用到 MMS 。參見 iptables(8)中的"TCPMSS" .

TCP 吞吐量能夠通過調整 TCP 緩衝大小的引數來最大化,對現代大頻寬和高延時的 WAN,在 "TCP Tuning Guide" 和 "TCP tuning"裡有描述. 到目前為止,當前 Debian 預設設定能夠很好的服務好我的 1G bps 光纖到戶 LAN 連線。

Netfilter 使用 Linux 核心 模組 (參見 第 3.3.1 节 “核心模組初始化”) 提供 狀態防火牆網路地址轉換 (NAT) 框架。


netfilter 主要的使用者層程式是 iptables(8).你能從 shell 手工交付式的配置 netfilter,使用 iptables-save(8) 儲存當前狀態,當系統重啟時,通過 init 指令碼呼叫 iptables-restore(8) 來恢復。

shorewall 這樣的配置幫助指令碼能夠使這個過程變得更簡單。

參見 http://www.netfilter.org/documentation/ 上的文件(或在 "/usr/share/doc/iptables/html/" 裡面的文件).

[提示] 提示

雖然這些是為 Linux 2.4 寫的,iptables(8) 命令和 netfilter 核心功能都能夠在 Linux2.63.x 核心系列實現.