第 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. Iproute2 命令
5.4.2. 安全的底層網路操作
5.5. 網路優化
5.5.1. 找出最佳 MTU
5.5.2. WAN TCP 優化
5.6. Netfilter 網路過濾框架
[提示] 提示

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

[提示] 提示

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

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

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

軟件包 流行度 大小 類型 說明
network-manager V:373, I:444 15443 配置::NM NetworkManager(守衛進程):自動管理網絡
network-manager-gnome V:130, I:374 5345 配置::NM NetworkManager(GNOME前端)
ifupdown V:590, I:988 218 配置::ifupdown 用來啓動/關閉網絡的標準工具(Debian特有)
isc-dhcp-client V:220, I:982 686 配置::底層 DHCP客戶端
pppoeconf V:0, I:7 192 配置::輔助 配置助手,以便於使用PPPoE連接
wpasupplicant V:340, I:508 3431 同上 WPA和WPA2客戶端支持(IEEE 802.11i)
wpagui V:0, I:2 796 同上 wpa_supplicant Qt 圖形界面客戶端
wireless-tools V:178, I:242 297 同上 操控Linux無線擴展的工具
iw V:252, I:483 294 同上 配置 Linux 無線裝置的工具
iproute2 V:696, I:945 3248 配置::iproute2 iproute2, IPv6和其他高級網絡配置:ip(8),tc(8)等等
iptables V:302, I:959 2521 配置::Netfilter 封包過濾和網絡地址轉換管理工具(Netfilter
iputils-ping V:211, I:997 113 測試 測試能否連接遠程主機,通過主機名IP 地址iproute2
iputils-arping V:6, I:87 55 測試 測試能否連接遠程主機,通過ARP地址
iputils-tracepath V:3, I:49 72 測試 跟蹤訪問遠程主機的路徑
ethtool V:95, I:264 627 測試 顯示或更改以太網設備的設定
mtr-tiny V:5, I:53 160 測試::底層 追蹤連接遠程主機的路徑(文本界面)
mtr V:4, I:43 214 同上 追蹤連接遠程主機的路徑(文本界面和GTK界面)
gnome-nettool V:1, I:34 2110 同上 獲取常見網絡信息的工具(GNOME)
nmap V:28, I:234 4509 同上 網絡映射/端口掃描(Nmap,控制檯)
zenmap V:0, I:5 2939 同上 網絡映射/端口掃描(GTK)
tcpdump V:18, I:196 1330 同上 網絡流量分析(Tcpdump,控制檯)
wireshark I:52 148 同上 網絡流量分析(Wireshark,GTK)
tshark V:2, I:31 501 同上 網絡流量分析(控制檯)
tcptrace V:0, I:2 401 同上 根據tcpdump的輸出生成的連接數據統計
snort V:0, I:1 2206 同上 靈活的網絡入侵偵測系統(Snort
ntopng V:1, I:1 969 同上 在網頁瀏覽器中展示網絡流量
dnsutils V:44, I:443 272 同上 BIND軟件包提供的網絡客戶端程序:nslookup(8),nsupdate(8),dig(8)
dlint V:0, I:6 53 同上 利用域名服務器查詢來查看DNS域信息
dnstracer V:0, I:1 60 同上 跟蹤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     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

每一行由 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 方式來進行主機名解析。)

對於使用 systemd 的現代 Debian 桌面系統,網路介面通常由兩個服務進行初始化:lo 介面通常在“networking.service”處理,而其它介面則由“NetworkManager.service”處理。

Debian 可以透過後臺守護程序(daemon)管理軟體來管理網路連線,例如 NetworkManager (NM)(network-manager 和相關軟體包)。

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

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

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

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

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

[注意] 注意

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

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

Debian 系統 NM 的官方文件位於 “/usr/share/doc/network-manager/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。

    $ sudo systemctl restart network-manager
  4. 通過圖形介面配置網路。

[注意] 注意

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

[提示] 提示

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

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

這個允許在沒有影象介面的情況下配置現代網路。

DHCP 客戶端的配置可以透過建立 "/etc/systemd/network/dhcp.network" 檔案來進行設定。例如:

[Match]
Name=en*

[Network]
DHCP=yes

一個靜態網路配置能夠透過建立 "/etc/systemd/network/static.network" 來設定.比如:

[Match]
Name=en*

[Network]
Address=192.168.0.15/24
Gateway=192.168.0.1

在 Linux 上的底層網路配置,使用 iproute2 程式 (ip(8), …) .

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


最大傳輸單元 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

嘗試 MTU=1454 代替 MTU=1500

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

如果 MTU 不是 1500,你可能想在 NM 裡面配置 MTU 設定。

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

[提示] 提示

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


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

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

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

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

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

  • 對於 IPv4, MSS = MTU - 40

  • 對於 IPv6,MSS = MTU - 60

[注意] 注意

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

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

Netfilter 使用 Linux 核心 模組 (參見 第 3.8.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 核心系列實現.