第 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:360, I:426 15210 配置::NM NetworkManager(守卫进程):自动管理网络
network-manager-gnome V:124, I:357 5351 配置::NM NetworkManager(GNOME前端)
ifupdown V:612, I:989 217 配置::ifupdown 用来启动/关闭网络的标准工具(Debian特有)
isc-dhcp-client V:222, I:980 686 配置::底层 DHCP客户端
pppoeconf V:0, I:8 192 配置::辅助 配置助手,以便于使用PPPoE连接
wpasupplicant V:335, I:491 3439 同上 WPA和WPA2客户端支持(IEEE 802.11i)
wpagui V:0, I:2 780 同上 wpa_supplicant Qt 图形界面客户端
wireless-tools V:180, I:239 297 同上 操控Linux无线扩展的工具
iw V:320, I:467 293 同上 配置 Linux 无线设备的工具
iproute2 V:695, I:937 2867 配置::iproute2 iproute2, IPv6和其他高级网络配置:ip(8),tc(8)等等
iptables V:314, I:990 2521 配置::Netfilter 封包过滤和网络地址转换管理工具(Netfilter
iputils-ping V:224, I:997 113 测试 测试能否连接远程主机,通过主机名IP 地址iproute2
iputils-arping V:7, I:98 55 测试 测试能否连接远程主机,通过ARP地址
iputils-tracepath V:4, I:53 72 测试 跟踪访问远程主机的路径
ethtool V:103, I:266 597 测试 显示或更改以太网设备的设定
mtr-tiny V:6, I:55 161 测试::底层 追踪连接远程主机的路径(文本界面)
mtr V:4, I:46 214 同上 追踪连接远程主机的路径(文本界面和GTK界面)
gnome-nettool V:1, I:38 2105 同上 获取常见网络信息的工具(GNOME)
nmap V:27, I:246 4509 同上 网络映射/端口扫描(Nmap,控制台)
zenmap V:1, I:8 2939 同上 网络映射/端口扫描(GTK)
tcpdump V:19, I:208 1329 同上 网络流量分析(Tcpdump,控制台)
wireshark I:54 65 同上 网络流量分析(Wireshark,GTK)
tshark V:3, I:33 408 同上 网络流量分析(控制台)
tcptrace V:0, I:3 401 同上 根据tcpdump的输出生成的连接数据统计
snort V:0, I:1 2206 同上 灵活的网络入侵侦测系统(Snort
ntopng V:1, I:2 969 同上 在网页浏览器中展示网络流量
dnsutils V:59, I:490 261 同上 BIND软件包提供的网络客户端程序:nslookup(8),nsupdate(8),dig(8)
dlint V:0, I:6 53 同上 利用域名服务器查询来查看DNS域信息
dnstracer V:0, I:1 61 同上 跟踪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 方式来进行主机名解析。)

[注意] 注意

域名系统 Domain Name System 中的扩展通用顶级域名 expansion of generic Top-Level Domains (gTLD) 还在进行中。在局域网内,选择一个域名时,请提防名字冲突 name collision

对于使用 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 内核系列实现.