內容目錄
![]() |
提示 |
---|---|
關於Debian專屬的網絡手冊,請查看Debian管理員手冊—網絡調配。 |
讓我們來回顧一下現代Debian作業系統中的基本網絡架構。
表格 5.1. 網絡調配工具一覽表
軟體包 | 流行度 | 大小 | 類型 | 說明 |
---|---|---|---|---|
network-manager
|
V:388, I:458 | 15413 | 調配::NM | NetworkManager(守衛行程):自動管理網絡 |
network-manager-gnome
|
V:122, I:372 | 5583 | 調配::NM | NetworkManager(GNOME前端) |
netplan.io
|
V:1, I:4 | 249 | config::NM+networkd | Netplan (generator): Unified, declarative interface to NetworkManager and systemd-networkd backends |
ifupdown
|
V:611, I:981 | 199 | 調配::ifupdown | 用來啓動/關閉網絡的標準工具(Debian特有) |
isc-dhcp-client
|
V:215, I:982 | 2866 | 調配::底層 | DHCP客戶端 |
pppoeconf
|
V:0, I:5 | 186 | 調配::輔助 | 調配助手,以便於使用PPPoE連接 |
wpasupplicant
|
V:351, I:513 | 3846 | 調配::輔助 | WPA和WPA2客戶端支援(IEEE 802.11i) |
wpagui
|
V:0, I:2 | 770 | 調配::輔助 | wpa_supplicant Qt 圖形界面客戶端 |
wireless-tools
|
V:178, I:244 | 292 | 調配::輔助 | 操控Linux無線擴展的工具 |
iw
|
V:34, I:477 | 302 | 調配::輔助 | 配置 Linux 無線裝置的工具 |
iproute2
|
V:727, I:969 | 3637 | 調配::iproute2 | iproute2,
IPv6和其他高級網絡調配:ip (8),tc (8)等等 |
iptables
|
V:315, I:747 | 2408 | 調配::Netfilter | 封包過濾和網絡地址轉換管理工具(Netfilter) |
iputils-ping
|
V:199, I:997 | 120 | 測試 | 測試能否連接遠程主機,通過主機名或IP 地址(iproute2) |
iputils-arping
|
V:3, I:41 | 49 | 測試 | 測試能否連接遠程主機,通過ARP地址 |
iputils-tracepath
|
V:2, I:32 | 45 | 測試 | 跟蹤存取遠程主機的路徑 |
ethtool
|
V:96, I:266 | 735 | 測試 | 顯示或更改以太網設備的設定 |
mtr-tiny
|
V:5, I:47 | 156 | 測試::底層 | 追蹤連接遠程主機的路徑(文本界面) |
mtr
|
V:4, I:41 | 209 | 測試::底層 | 追蹤連接遠程主機的路徑(文本界面和GTK界面) |
gnome-nettool
|
V:1, I:19 | 2492 | 測試::底層 | 獲得常見網絡資訊的工具(GNOME) |
nmap
|
V:25, I:202 | 4498 | 測試::底層 | 網絡映射/端口掃描(Nmap,控制檯) |
tcpdump
|
V:16, I:177 | 1340 | 測試::底層 | 網絡流量分析(Tcpdump,控制檯) |
wireshark
|
I:45 | 28 | 測試::底層 | 網絡流量分析(Wireshark,GTK) |
tshark
|
V:2, I:25 | 398 | 測試::底層 | 網絡流量分析(控制檯) |
tcptrace
|
V:0, I:2 | 401 | 測試::底層 | 根據tcpdump 的輸出生成的連接數據統計 |
snort
|
V:0, I:0 | 2203 | 測試::底層 | 靈活的網絡入侵偵測系統(Snort) |
ntopng
|
V:0, I:1 | 15904 | 測試::底層 | 在網頁瀏覽器中展示網絡流量 |
dnsutils
|
V:19, I:298 | 272 | 測試::底層 | BIND軟體包提供的網絡客戶端程序:nslookup (8),nsupdate (8),dig (8) |
dlint
|
V:0, I:4 | 53 | 測試::底層 | 利用域名服務器查詢來查看DNS域資訊 |
dnstracer
|
V:0, I:1 | 61 | 測試::底層 | 跟蹤DNS查詢直至源頭 |
主機名解析,目前也是由 NSS (名字服務轉換 Name Service Switch) 機制來支援。這個解析的流程如下。
"/etc/nsswitch.conf
" 檔案裡的 "hosts: files
dns
" 這段規定主機名解析順序。 (代替 "/etc/host.conf
"
檔案裡的"order
" 這段原有的功能。)
files
方式首先被呼叫。如果主機名在 "/etc/hosts
"
檔案裡面發現,則回傳所有有效地址並退出。 ( "/etc/host.conf
" 檔案包含
"multi on
".)
dns
方式被呼叫。如果主機名通過查詢 "/etc/resolv.conf
"
檔案裡面寫的 網際網路域名系統 Domain Name
System (DNS) 來找到,則回傳所有有效地址並退出。
A typical workstation may be installed with its host name set to, e.g.,
"host_name" and its optional domain name set to an
empty string. Then, "/etc/hosts
" looks like the
following.
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
在這個例子的第二行 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
"
檔案成為一個符號連結,並通過鉤子指令碼自動管理其內容。
For the PC workstation on the typical adhoc LAN environment, the hostname
can be resolved via Multicast DNS (mDNS)
in addition to the basic files
and dns
methods.
Avahi 提供 Debian 下的組播 DNS 發現框架。
libnss-mdns
外掛包提供 mDNS 的主機名解析,GNU C 庫 (glibc)的 GNU 名字服務轉換
Name Service Switch (NSS) 功能支援 mDNS。
"/etc/nsswitch.conf
" 檔案應當有像 "hosts: files
mdns4_minimal [NOTFOUND=return] dns mdns4
" 這樣的一段.
A host name suffixed with the ".local" pseudo-top-level domain is resolved by
sending a mDNS query message in a multicast UDP packet using IPv4 address
"224.0.0.251
" or IPv6 address
"FF02::FB
".
較老的 Windows 系統安裝 winbind
軟體包來提供舊的 NETBios over TCP/IP
主機名解析。為啟用這個功能,"/etc/nsswitch.conf
" 檔案應當有這樣的一段:
"hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
wins
"。 (現代 Windows 系統通常使用 dns
方式來進行主機名解析。)
![]() |
注意 |
---|---|
域名系統 Domain Name System 中的擴充通用頂級域名 expansion of generic Top-Level Domains (gTLD) 還在進行中。在區域網內,選擇一個域名時,請提防名字衝突 name collision。 |
讓我們重新提醒下在 rfc1918 裡規定的區域網 local area networks (LANs)IPv4 32 位地址在各類地址的保留範圍. 這些地址保證不會與因特網上專有的地址衝突。
![]() |
注意 |
---|---|
IP 地址書寫中有冒號的是 IPv6
地址,例如," |
表格 5.2. 網路地址範圍列表
類別 | 網路地址 | 子網掩碼 | 子網掩碼/位數 | 子網數 |
---|---|---|---|---|
A | 10.x.x.x | 255.0.0.0 | /8 | 1 |
B | 172.16.x.x — 172.31.x.x | 255.255.0.0 | /16 | 16 |
C | 192.168.0.x — 192.168.255.x | 255.255.255.0 | /24 | 256 |
![]() |
注意 |
---|---|
如果這些地址分配到一個主機,那麼這個主機一定不能夠直接存取網際網路,必須通過一個作為閘道器的代理服務或通過 網路地址轉換 Network Address Translation (NAT). 消費區域網環境,寬頻路由器通常使用 NAT。 |
儘管 Debian 系統支援大多數硬體裝置,但依舊有一些網路裝置需要 DFSG non-free 韌體來支援它們。參見 節 9.10.5, “硬體驅動和韌體”。
對於使用 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
” 。
本質上,如下操作即可完成桌面的網路調配。
通過下列指令使桌面使用者 foo
歸屬 “netdev
” 組(另外,例如
GNOME 和 KDE 這樣的現代桌面環境會通過 D-bus 自動完成該操作)。
$ sudo adduser foo netdev
使 “/etc/network/interfaces
” 的調配保持下面那樣簡潔。
auto lo iface lo inet loopback
透過下列命令重新啟動 NM。
$ sudo systemctl restart network-manager
通過圖形介面調配網路。
![]() |
注意 |
---|---|
只有不列在
“ |
![]() |
提示 |
---|---|
如果你想擴充 NM 的網路組態功能,請尋找適當的外掛模組和補充軟體包,例如
|
使用 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
The modern network configuration for cloud may use
cloud-init
and netplan.io
packages
(see 節 3.2.4, “Cloud system initialization”).
The netplan.io
package supports
systemd-networkd
and NetworkManager
as
its network configuration backends, and enables the declarative network
configuration using YAML data. When you change
YAML:
Run "netplan generate
" command to generate all the
necessary backend configuration from YAML.
Run "netplan apply
" command to apply the generated
configuration to the backends.
See "Netplan documentation",
netplan
(5), netplan-generate
(8), and
netplan-apply
(8).
See also "Cloud-init
documentation" (especially around "Configuration sources" and "Netplan Passthrough") for how
cloud-init
can integrate netplan.io
configuration with alternative data sources.
A DHCP client configuration can be set up by creating a data source file
"/etc/netplan/50-dhcp.yaml
":
network: version: 2 ethernets: all-en: match: name: "en*" dhcp4: true dhcp6: true
A static network configuration can be set up by creating a data source file
"/etc/netplan/50-static.yaml
":
network: version: 2 ethernets: eth0: addresses: - 192.168.0.15/24 routes: - to: default via: 192.168.0.1
在 Linux 上的底層網路配置,使用 iproute2 程式
(ip
(8), …) .
Iproute2 指令集提供完整的底層網路調配能力。有個從舊的 net-tools 指令集到新的 iproute2 指令集的轉換表。
表格 5.3. 從舊的 net-tools
指令集到新的 iproute2
指令集轉換表
舊的 net-tools | 新的 iproute2 | 操作 |
---|---|---|
ifconfig (8) |
ip addr |
一個裝置上的協議(IP 或 IPv6)地址 |
route (8) |
ip route |
路由表條目 |
arp (8) |
ip neigh |
ARP 或 NDISC 快取條目 |
ipmaddr |
ip maddr |
多播地址 |
iptunnel |
ip tunnel |
IP 隧道 |
nameif (8) |
ifrename (8) |
基於 MAC 地址的網路介面名 |
mii-tool (8) |
ethtool (8) |
乙太網路裝置設定 |
參見 ip
(8) 和 IPROUTE2 工具套件 Howto.
你可以按下面的方式安全的使用底層網路指令,這些指令不會改變網路調配。
表格 5.4. 底層網路指令列表
指令 | 說明 |
---|---|
ip addr show |
顯示活動的網路介面連線和地址狀態 |
route -n |
用數字地址顯示全部路由表 |
ip route show |
用數字地址顯示全部路由表 |
arp |
顯示當前 ARP 快取表的內容 |
ip neigh |
顯示當前 ARP 快取表的內容 |
plog |
顯示 ppp 後臺背景程式(daemon)日誌 |
ping yahoo.com |
檢查到 "yahoo.com " 的因特網連線 |
whois yahoo.com |
在域名資料庫裡面檢查誰註冊了 "yahoo.com " |
traceroute yahoo.com |
跟蹤到 "yahoo.com " 的因特網連線 |
tracepath yahoo.com |
跟蹤到 "yahoo.com " 的因特網連線 |
mtr yahoo.com |
跟蹤到 "yahoo.com " 的因特網連線(重複的) |
dig [@dns-server.com] example.com [{a|mx|any}] |
查詢由 "dns-server.com " 提供服務的
"example.com " 域名的 DNS 記錄:
"a ", "mx " 或 "any "
記錄 |
iptables -L -n |
檢視包過濾 |
netstat -a |
找出所有開啟的埠 |
netstat -l --inet |
找出監聽埠 |
netstat -ln --tcp |
找出 TCP 監聽埠(數字的) |
dlint example.com |
查詢 "example.com " 的 DNS zone 資訊 |
![]() |
提示 |
---|---|
部分底層網路調配工具放在 " |
通用的網路優化超出了本文的範圍。我提及消費等級連線相關的主題。
表格 5.5. 網路最佳化工具清單
軟體包 | 流行度 | 大小 | 說明 |
---|---|---|---|
iftop
|
V:7, I:101 | 93 | 顯示一個網路介面上的頻寬使用資訊 |
iperf
|
V:3, I:44 | 360 | 網際網路協議頻寬測量工具 |
ifstat
|
V:0, I:7 | 58 | 介面統計監控 |
bmon
|
V:1, I:17 | 144 | 行動式頻寬監視器和網速估計工具 |
ethstatus
|
V:0, I:3 | 40 | 快速測量網路裝置吞吐的指令碼 |
bing
|
V:0, I:0 | 80 | 實驗性的隨機頻寬測試器 |
bwm-ng
|
V:1, I:14 | 95 | 小巧簡單的控制檯頻寬監測器 |
ethstats
|
V:0, I:0 | 23 | 基於控制檯的乙太網路統計監視器 |
ipfm
|
V:0, I:0 | 82 | 頻寬分析工具 |
網路管理器通常會自動設定最佳 最大傳輸單元 (MTU) 。
在一些場景中,在用 ping
(8) 加上"-M do
"選項傳送各種大小的
ICMP 報文資料包進行實驗後,你希望可以手動設定 MTU。MTU 是最大可完成沒有 IP 分片的資料包大小加上 28 位元組(IPv4)或 48
位元組(IPv6)。下面的列子,發現 IPv4 連線的 MTU 是 1460,IPv6 連線的 MTU 是 1500。
$ ping -4 -c 1 -s $((1500-28)) -M do www.debian.org PING (149.20.4.15) 1472(1500) bytes of data. ping: local error: message too long, mtu=1460 --- ping statistics --- 1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms $ ping -4 -c 1 -s $((1460-28)) -M do www.debian.org PING (130.89.148.77) 1432(1460) bytes of data. 1440 bytes from klecker-misc.debian.org (130.89.148.77): icmp_seq=1 ttl=50 time=325 ms --- ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 325.318/325.318/325.318/0.000 ms $ ping -6 -c 1 -s $((1500-48)) -M do www.debian.org PING www.debian.org(mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e)) 1452 data bytes 1460 bytes from mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e): icmp_seq=1 ttl=47 time=191 ms --- www.debian.org ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 191.332/191.332/191.332/0.000 ms
這個過程是 路徑 MTU (PMTU) 發現 (RFC1191) , tracepath
(8)
指令能夠自動完成這個。
除了這些基本的指引方法外,你還應當知道下面的資訊。
使用任何隧道方式(VPN 等.)的最佳 MTU 需要進一步減去它們上面的頭部。
MTU 值不應當超過通過實驗驗證的 PMTU 值。
當遇到其它限制的時候,較大的 MTU 值通常比較好。
最大分片大小 (MSS) 是另外一種衡量包大小的方法。MSS 和 MTU 的關係如下.
對於 IPv4, MSS = MTU - 40
對於 IPv6,MSS = MTU - 60
![]() |
注意 |
---|---|
基於 |
TCP 吞吐量能夠通過調整 TCP 緩衝大小的參數來最大化,對現代大頻寬和高延時的 WAN,在 "TCP Tuning Guide" 和 "TCP tuning"裡有描述. 到目前為止,當前 Debian 預設設定能夠很好的服務好我的 1G bps 光纖到戶 LAN 連線。
Netfilter 使用 Linux 核心 模組 (參見 節 3.8.1, “核心模組初始化”) 提供 狀態防火牆 和 網路地址轉換 (NAT) 框架。
表格 5.7. 防火牆工具列表
軟體包 | 流行度 | 大小 | 說明 |
---|---|---|---|
iptables
|
V:315, I:747 | 2408 | netfilter
管理工具(iptables (8) 用於 IPv4, ip6tables (8)
用於 IPv6) |
arptables
|
V:0, I:1 | 100 | netfilter
管理工具(arptables (8) 用於 ARP) |
ebtables
|
V:14, I:29 | 264 | netfilter 管理工具
(ebtables (8) 用於乙太網路橋) |
iptstate
|
V:0, I:2 | 119 | 持續性監控 netfilter 狀態 (和
top (1) 相似) |
ufw
|
V:53, I:74 | 857 | Uncomplicated Firewall (UFW) is a program for managing a netfilter firewall |
gufw
|
V:5, I:10 | 3660 | graphical user interface for Uncomplicated Firewall (UFW) |
firewalld
|
V:9, I:13 | 2497 | firewalld is a dynamically managed firewall program with support for network zones |
firewall-config
|
V:0, I:2 | 1164 | graphical user interface for firewalld |
shorewall-init
|
V:0, I:0 | 89 | Shoreline 防火牆 初始化 |
shorewall
|
V:3, I:8 | 3090 | Shoreline 防火牆, netfilter 組態檔案生成器 |
shorewall-lite
|
V:0, I:0 | 71 | Shoreline 防火牆, netfilter 組態檔案生成器 (精簡版) |
shorewall6
|
V:0, I:1 | 1334 | Shoreline 防火牆, netfilter 組態檔案生成器(IPv6 版本) |
shorewall6-lite
|
V:0, I:0 | 71 | Shoreline 防火牆, netfilter 組態檔案生成器 (IPv6,精簡版) |
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
寫的, |