第5章。网络设置

目录

5.1. 基本网络基础设施
5.1.1. 域名
5.1.2. 主机名解析
5.1.3. 网络接口名称
5.1.4. LAN 的网络地址范围
5.1.5. 网络设备支持
5.2. 桌面系统的现代网络配置
5.2.1. GUI 网络配置工具
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. 无线 LAN 接口的基础知识
5.5.7. 具有 WPA/WPA2 的无线 LAN 接口
5.5.8. 具有 WEP 的无线 LAN 接口
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. 映射节
5.6.6. 手动可切换的网络配置
5.6.7. 使用 ifupdown 系统进行脚本编写
5.6.8. 使用 guessnet 进行映射
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 基础设施
[Tip] 提示

有关 GNU/Linux 网络的通用指南,请阅读Linux 网络管理员指南

[Tip] 提示

尽管本文档仍然在其网络配置示例中使用旧的 ifconfig(8) 与 IPv4,但 Debian 正在 wheezy 版本中转向 ip(8) 与 IPv4+IPv6。欢迎提供更新本文档的补丁。

5.1. 基本网络基础设施

让我们回顾一下现代 Debian 系统上的基本网络基础设施。

表 5.1. 网络配置工具列表

软件包 popcon 大小 类型 描述
ifupdown http://qa.debian.org/popcon.php?package=ifupdown 180 config::ifupdown 启动和关闭网络的标准化工具(Debian 特有)
ifplugd http://qa.debian.org/popcon.php?package=ifplugd 352 , , 自动管理有线网络
ifupdown-extra http://qa.debian.org/popcon.php?package=ifupdown-extra 119 , , 网络测试脚本,用于增强 "ifupdown" 软件包
ifmetric http://qa.debian.org/popcon.php?package=ifmetric 100 , , 为网络接口设置路由指标
guessnet http://qa.debian.org/popcon.php?package=guessnet 449 , , 映射脚本,通过 "/etc/network/interfaces" 文件增强 "ifupdown" 软件包
ifscheme http://qa.debian.org/popcon.php?package=ifscheme 132 , , 映射脚本,用于增强 "ifupdown" 软件包
ifupdown-scripts-zg2 http://qa.debian.org/popcon.php?package=ifupdown-scripts-zg2 232 , , 用于 ifupdown 手动方法的 Zugschlus 接口脚本
network-manager http://qa.debian.org/popcon.php?package=network-manager 4015 config::NM NetworkManager(守护程序):自动管理网络
network-manager-gnome http://qa.debian.org/popcon.php?package=network-manager-gnome 5746 , , NetworkManager(GNOME 前端)
network-manager-kde http://qa.debian.org/popcon.php?package=network-manager-kde 36 , , NetworkManager(KDE 前端)
wicd http://qa.debian.org/popcon.php?package=wicd 48 config::wicd 有线和无线网络管理器(元软件包)
wicd-cli http://qa.debian.org/popcon.php?package=wicd-cli 87 , , 有线和无线网络管理器(命令行客户端)
wicd-curses http://qa.debian.org/popcon.php?package=wicd-curses 195 , , 有线和无线网络管理器(Curses 客户端)
wicd-daemon http://qa.debian.org/popcon.php?package=wicd-daemon 1654 , , 有线和无线网络管理器(守护程序)
wicd-gtk http://qa.debian.org/popcon.php?package=wicd-gtk 552 , , 有线和无线网络管理器(GTK+ 客户端)
iptables http://qa.debian.org/popcon.php?package=iptables 1366 config::Netfilter 数据包过滤和 NAT 的管理工具 (Netfilter)
iproute http://qa.debian.org/popcon.php?package=iproute 999 config::iproute2 iproute2,IPv6 和其他高级网络配置:ip(8)tc(8),等等
ifrename http://qa.debian.org/popcon.php?package=ifrename 192 , , 基于各种静态条件重命名网络接口:ifrename(8)
ethtool http://qa.debian.org/popcon.php?package=ethtool 279 , , 显示或更改以太网设备设置
iputils-ping http://qa.debian.org/popcon.php?package=iputils-ping 156 test::iproute2 通过主机名IP 地址测试远程主机的网络可达性 (iproute2)
iputils-arping http://qa.debian.org/popcon.php?package=iputils-arping 80 , , 测试由 ARP 地址指定的远程主机的网络可达性
iputils-tracepath http://qa.debian.org/popcon.php?package=iputils-tracepath 116 , , 跟踪到远程主机的网络路径
net-tools http://qa.debian.org/popcon.php?package=net-tools 996 config::net-tools NET-3 网络工具包 (net-tools,IPv4 网络配置): ifconfig(8) 等。
inetutils-ping http://qa.debian.org/popcon.php?package=inetutils-ping 278 test::net-tools 通过主机名IP 地址测试远程主机的网络可达性(传统,GNU)
arping http://qa.debian.org/popcon.php?package=arping 46 , , 测试由 ARP 地址指定的远程主机的网络可达性(传统)
traceroute http://qa.debian.org/popcon.php?package=traceroute 124 , , 跟踪到远程主机的网络路径(传统,控制台)
isc-dhcp-client http://qa.debian.org/popcon.php?package=isc-dhcp-client 1776 config::low-level DHCP 客户端
wpasupplicant http://qa.debian.org/popcon.php?package=wpasupplicant 1365 , , 对 WPA 和 WPA2 (IEEE 802.11i) 的客户端支持
wpagui http://qa.debian.org/popcon.php?package=wpagui 790 , , wpa_supplicant 的 Qt GUI 客户端
wireless-tools http://qa.debian.org/popcon.php?package=wireless-tools 325 , , 用于操作 Linux 无线扩展的工具
ppp http://qa.debian.org/popcon.php?package=ppp 858 , , 使用 chat 的 PPP/PPPoE 连接
pppoeconf http://qa.debian.org/popcon.php?package=pppoeconf 340 config::helper PPPoE 连接的配置助手
pppconfig http://qa.debian.org/popcon.php?package=pppconfig 1024 , , 使用 chat 的 PPP 连接的配置助手
wvdial http://qa.debian.org/popcon.php?package=wvdial 276 , , 使用 wvdialppp 的 PPP 连接的配置助手
mtr-tiny http://qa.debian.org/popcon.php?package=mtr-tiny 113 test::low-level 跟踪到远程主机的网络路径 (curses)
mtr http://qa.debian.org/popcon.php?package=mtr 154 , , 跟踪到远程主机的网络路径 (curses 和 GTK+)
gnome-nettool http://qa.debian.org/popcon.php?package=gnome-nettool 2644 , , 用于常见网络信息操作的工具 (GNOME)
nmap http://qa.debian.org/popcon.php?package=nmap 10815 , , 网络映射器 / 端口扫描器 (Nmap, 控制台)
zenmap http://qa.debian.org/popcon.php?package=zenmap 2135 , , 网络映射器 / 端口扫描器 (GTK+)
tcpdump http://qa.debian.org/popcon.php?package=tcpdump 1023 , , 网络流量分析器 (Tcpdump, 控制台)
wireshark http://qa.debian.org/popcon.php?package=wireshark 2214 , , 网络流量分析器 (Wireshark, GTK+)
tshark http://qa.debian.org/popcon.php?package=tshark 302 , , 网络流量分析器 (控制台)
nagios3 http://qa.debian.org/popcon.php?package=nagios3 29 , , 用于主机、服务和网络的监控和管理系统 (Nagios)
tcptrace http://qa.debian.org/popcon.php?package=tcptrace 389 , , tcpdump 输出生成连接的摘要
snort http://qa.debian.org/popcon.php?package=snort 1659 , , 灵活的网络入侵检测系统 (Snort)
ntop http://qa.debian.org/popcon.php?package=ntop 1656 , , 在 Web 浏览器中显示网络使用情况
dnsutils http://qa.debian.org/popcon.php?package=dnsutils 374 , , BIND 提供的网络客户端:nslookup(8)nsupdate(8)dig(8)
dlint http://qa.debian.org/popcon.php?package=dlint 96 , , 使用名称服务器查找检查 DNS 区域信息
dnstracer http://qa.debian.org/popcon.php?package=dnstracer 81 , , 跟踪 DNS 服务器链到源

5.1.1. 域名

对于普通的 PC 工作站用户来说,域名的命名是一个棘手的问题。PC 工作站可能是移动的,在网络中跳跃,或者位于 NAT 防火墙之后,无法从互联网访问。对于这种情况,您可能不希望域名是有效的域名,以避免名称冲突。

如果您不确定为域名选择什么,请选择 "localdomain"。

根据我的传入邮件分析,其他流行的无效且安全的顶级域名 (TLD) 似乎是 "lan"、"localnet"、"home"、"invalid" 或 "local"。这与报告的无效 TLD 查询一致。您也可以选择一些未使用的二级或三级域名。

[Warning] 警告

如果您的 LAN 上的 DNS 服务使用 "local" 作为您的 LAN 的 TLD,则它可能会干扰 mDNS。

[Tip] 提示

当您使用无效域名时,您需要欺骗某些程序(例如 MTA)使用的域名,以使其正常运行。请参阅第 6.3.3 节,“邮件地址配置”

5.1.2. 主机名解析

主机名解析目前也由 NSS(名称服务切换)机制支持。此解析的流程如下。

  1. 具有类似 "hosts: files dns" 节的 "/etc/nsswitch.conf" 文件指示主机名解析顺序。(这取代了 "/etc/host.conf" 中 "order" 节的旧功能。)

  2. 首先调用 files 方法。如果在 "/etc/hosts" 文件中找到主机名,它将返回其所有有效地址并退出。("/etc/host.conf" 文件包含 "multi on"。)

  3. 调用 dns 方法。如果通过查询 "/etc/resolv.conf" 文件标识的 互联网域名系统 (DNS) 找到主机名,它将返回其所有有效地址并退出。

例如,"/etc/hosts" 看起来像下面这样。

127.0.0.1 localhost
127.0.1.1 <host_name>.<domain_name> <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 地址 开头,后跟关联的 主机名

在此示例的第二行中,IP 地址 127.0.1.1 可能在某些其他类 Unix 系统上找不到。Debian 安装程序为没有永久 IP 地址的系统创建此条目,作为某些软件(例如 GNOME)的解决方法,如 错误 #316099 中所述。

<host_name> 与 "/etc/hostname" 中定义的主机名匹配。

对于移动 PC 的 <domain_name>,您可以选择无效且安全的域名,例如 "localdomain"。(请参阅第 5.1.1 节,“域名”

对于具有永久 IP 地址的系统,此处应使用该永久 IP 地址而不是 127.0.1.1

对于具有永久 IP 地址和 完全限定域名 (FQDN) 的系统,该 FQDN 由 域名系统 (DNS) 提供,此处应使用规范的 <host_name> 和 <domain_name>。

如果未安装 resolvconf 软件包,则 "/etc/resolv.conf" 是一个静态文件。如果已安装,则它是一个符号链接。无论哪种方式,它都包含初始化解析器例程的信息。如果在 IP="192.168.11.1" 处找到 DNS,它将包含以下内容。

nameserver 192.168.11.1

resolvconf 软件包使 "/etc/resolv.conf" 成为符号链接,并通过挂钩脚本自动管理其内容。

通过多播 DNS(使用 Zeroconf,又名 Apple Bonjour / Apple Rendezvous)的主机名解析,它实际上允许通过常见 Unix/Linux 程序在 ad-hoc mDNS 域 "local" 中进行名称解析,可以通过安装 libnss-mdns 软件包来提供。"/etc/nsswitch.conf" 文件应具有类似 "hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4" 的节,以启用此功能。

通过已弃用的 NETBios over TCP/IP 的主机名解析,旧的 Windows 系统使用它可以通过安装 winbind 软件包来提供。"/etc/nsswitch.conf" 文件应具有类似 "hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 wins" 的节,以启用此功能。(现代 Windows 系统通常使用 dns 方法进行主机名解析。)

5.1.3. 网络接口名称

网络接口名称,例如 eth0,通过用户空间配置机制 udev(请参阅第 3.5.11 节,“udev 系统”)分配给 Linux 内核中的每个硬件,因为它被找到。网络接口名称在 ifup(8)interfaces(5) 中被称为 物理接口

为了确保每个网络接口在每次重新启动时使用 MAC 地址 等持久命名,有一个记录文件 "/etc/udev/rules.d/70-persistent-net.rules"。此文件由 "/lib/udev/write_net_rules" 程序自动生成,可能由 "persistent-net-generator.rules" 规则文件运行。您可以修改它以更改命名规则。

[Caution] 注意

编辑 "/etc/udev/rules.d/70-persistent-net.rules" 规则文件时,您必须将每个规则保持在一行上,并且 MAC 地址 必须为小写。例如,如果您在此文件中找到“FireWire 设备”和“PCI 设备”,您可能希望将“PCI 设备”命名为 eth0 并将其配置为主网络接口。

5.1.4. LAN 的网络地址范围

让我们回顾一下 rfc1918 为在 局域网 (LAN) 上使用而保留的每个类中的 IPv4 32 位地址范围。这些地址保证与 Internet 上的任何地址都不冲突。

表 5.2. 网络地址范围列表

网络地址 子网掩码 子网掩码 /bits 子网数
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

[Note] 注意

如果将这些地址之一分配给主机,则该主机不得直接访问 Internet,而必须通过充当单个服务代理的网关或执行 网络地址转换 (NAT) 来访问 Internet。宽带路由器通常为消费者 LAN 环境执行 NAT。

5.1.5. 网络设备支持

尽管 Debian 系统支持大多数硬件设备,但有些网络设备需要 DFSG 非自由外部硬件驱动程序才能支持它们。请参阅第 9.7.6 节,“非自由硬件驱动程序”

5.2. 桌面系统的现代网络配置

Debian squeeze 系统可以通过管理 守护程序 软件(例如 NetworkManager (NM) (network-manager 和相关软件包) 或 Wicd (wicd 和相关软件包))来管理网络连接。

  • 它们带有自己的 GUI 和命令行程序作为其用户界面。

  • 它们带有自己的 守护程序 作为其后端系统。

  • 它们允许轻松地将您的系统连接到互联网。

  • 它们允许轻松管理有线和无线网络配置。

  • 它们允许我们配置独立于传统 ifupdown 软件包的网络。

[Note] 注意

请勿将这些自动网络配置工具用于服务器。它们主要针对笔记本电脑上的移动桌面用户。

需要正确配置这些现代网络配置工具,以避免与传统的 ifupdown 软件包及其配置文件 "/etc/network/interfaces" 冲突。

[Note] 注意

这些自动网络配置工具的某些功能可能会出现倒退。它们不如传统的 ifupdown 软件包那么健壮。检查 network-manager 的 BTSwicd 的 BTS 以了解当前的问题和限制。

5.2.1. GUI 网络配置工具

NM 和 Wicd 在 Debian 上的官方文档分别在 "/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. 通过 GUI 配置您的网络。

[Note] 注意

只有 在 "/etc/network/interfaces" 中列出或已配置为 "auto …" 或 "allow-hotplug …" 和 "iface … inet dhcp"(没有其他选项)的接口才由 NM 管理,以避免与 ifupdown 冲突。

[Tip] 提示

如果您希望扩展 NM 的网络配置功能,请寻找适当的插件模块和补充软件包,例如 network-manager-openconnectnetwork-manager-openvpn-gnomenetwork-manager-pptp-gnomemobile-broadband-provider-infognome-bluetooth 等。Wicd 的情况也是如此。

[Caution] 注意

这些自动网络配置工具可能与传统的 ifupdown 在 "/etc/network/interfaces" 中的深奥配置不兼容,例如第 5.5 节,“使用 ifupdown 的基本网络配置(传统)”第 5.6 节,“使用 ifupdown 的高级网络配置(传统)”中的配置。检查 network-manager 的 BTSwicd 的 BTS 以了解当前的问题和限制。

5.3. 传统的网络连接和配置

第 5.2 节,“桌面系统的现代网络配置”中描述的方法不能满足您的需求时,您应该使用传统的网络连接和配置方法,该方法结合了许多更简单的工具。

传统的网络连接对于每种方法都是特定的(请参阅第 5.4 节,“网络连接方法(传统)”)。

Linux 上有两种类型的程序用于底层网络配置(请参阅第 5.7.1 节,“Iproute2 命令”)。

  • 旧的 net-tools 程序(ifconfig(8),…)来自 Linux NET-3 网络系统。现在它们中的大多数已经过时了。

  • 新的 Linux iproute2 程序(ip(8),…)是当前的 Linux 网络系统。

尽管这些底层网络程序功能强大,但使用起来很麻烦。因此创建了高级网络配置系统。

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")。

ifplugdguessnetifschemeifupdown 软件包的辅助脚本被创建以自动化网络环境的动态配置,例如有线 LAN 上的移动 PC 的配置。这些脚本相对难以使用,但与现有的 ifupdown 系统配合良好。

这些将在详细说明并附带示例(请参阅第 5.5 节,“使用 ifupdown 的基本网络配置(传统)”第 5.6 节,“使用 ifupdown 的高级网络配置(传统)”)。

5.4. 网络连接方法(传统)

[Caution] 注意

本节中描述的连接测试方法旨在用于测试目的。它并非旨在直接用于日常网络连接。建议您通过 NM、Wicd 或 ifupdown 软件包使用它们(请参阅第 5.2 节,“桌面系统的现代网络配置”第 5.5 节,“使用 ifupdown 的基本网络配置(传统)”)。

PC 的典型网络连接方法和连接路径可以总结如下。

表 5.3. 网络连接方法和连接路径列表

PC 连接方法 连接路径
串行端口 (ppp0) PPP 调制解调器 ⇔ POTS ⇔ 拨号接入点 ⇔ ISP
以太网端口 (eth0) PPPoE/DHCP/静态 ⇔ BB-调制解调器 ⇔ BB 服务 ⇔ BB 接入点 ⇔ ISP
以太网端口 (eth0) DHCP/静态 ⇔ LAN ⇔ 具有网络地址转换 (NAT) 的 BB 路由器(⇔ BB-调制解调器 …)

这是每种连接方法的配置脚本摘要。

表 5.4. 网络连接配置列表

连接方法 配置 后端软件包
PPP pppconfig 创建确定性 chat pppconfig, ppp
PPP(替代) wvdialconf 创建启发式 chat ppp, wvdial
PPPoE pppoeconf 创建确定性 chat pppoeconf, ppp
DHCP 在 "/etc/dhcp/dhclient.conf" 中描述 isc-dhcp-client
静态 IP (IPv4) 在 "/etc/network/interfaces" 中描述 net-tools
静态 IP (IPv6) 在 "/etc/network/interfaces" 中描述 iproute

网络连接首字母缩略词的含义如下。

表 5.5. 网络连接首字母缩略词列表

首字母缩略词 含义
POTS 普通旧式电话服务
BB 宽带
BB-服务 例如,数字用户线路 (DSL)、有线电视或光纤到户 (FTTP)
BB-调制解调器 例如,DSL 调制解调器电缆调制解调器光网络终端 (ONT)
LAN 局域网
WAN 广域网
DHCP 动态主机配置协议
PPP 点对点协议
PPPoE 以太网上的点对点协议
ISP 互联网服务提供商

[Note] 注意

通过有线电视提供的 WAN 连接服务通常由 DHCP 或 PPPoE 提供。ADSL 和 FTTP 提供的服务通常由 PPPoE 提供。您必须咨询您的 ISP 以获取 WAN 连接的确切配置要求。

[Note] 注意

当 BB 路由器用于创建家庭 LAN 环境时,LAN 上的 PC 通过 BB 路由器与网络地址转换 (NAT)连接到 WAN。对于这种情况,LAN 上 PC 的网络接口由 BB 路由器的静态 IP 或 DHCP 提供服务。必须按照您的 ISP 的指示配置 BB 路由器以连接 WAN。

5.4.1. 以太网的 DHCP 连接

典型的现代家庭和小型企业网络,即 LAN,使用一些消费级宽带路由器连接到 WAN(互联网)。此路由器后面的 LAN 通常由路由器上运行的动态主机配置协议 (DHCP)服务器提供服务。

只需为由动态主机配置协议 (DHCP)服务的以太网安装 isc-dhcp-client 软件包。

参见 dhclient.conf(5)

5.4.2. 以太网的静态 IP 连接

对于由静态 IP 服务的以太网,无需特殊操作。

5.4.3. 使用 pppconfig 的 PPP 连接

配置脚本 pppconfig 通过选择以下内容以交互方式配置PPP 连接。

  • 电话号码

  • ISP 用户名

  • ISP 密码

  • 端口速度

  • 调制解调器通信端口

  • 身份验证方法

表 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 的身份验证数据(更安全)

[Caution] 注意

如果在没有参数的情况下调用 ponpoff 命令,则假定 "provider" 的 "<isp_name>" 值。

您可以使用如下所示的低级网络配置工具测试配置。

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

参见 "/usr/share/doc/ppp/README.Debian.gz"。

5.4.4. 使用 wvdialconf 的替代 PPP 连接

使用 pppd(8) 的另一种方法是从 wvdial(1) 运行它,它包含在 wvdial 软件包中。`wvdial` 执行拨号和初始协商,然后启动 pppd 来完成其余操作,而不是 pppd 运行 chat(8) 来拨入和协商连接。

配置脚本 wvdialconf 通过选择以下内容以交互方式配置 PPP 连接。

  • 电话号码

  • ISP 用户名

  • ISP 密码

在大多数情况下,wvdial 成功建立连接并自动维护身份验证数据列表。

表 5.7. 使用 wvdialconf 的 PPP 连接的配置文件列表

文件 功能
/etc/ppp/peers/wvdial wvdialconf 生成的特定于 wvdialpppd 配置文件
/etc/wvdial.conf wvdialconf 生成的配置文件
/etc/ppp/options pppd 的通用执行参数
/etc/ppp/pap-secret PAP 的身份验证数据(安全风险)
/etc/ppp/chap-secret CHAP 的身份验证数据(更安全)

您可以使用如下所示的低级网络配置工具测试配置。

$ sudo wvdial
...
$ sudo killall wvdial

参见 wvdial(1)wvdial.conf(5)

5.4.5. 使用 pppoeconf 的 PPPoE 连接

当您的 ISP 为您提供 PPPoE 连接,并且您决定将 PC 直接连接到 WAN 时,您的 PC 网络必须配置 PPPoE。PPPoE 代表以太网上的 PPP。配置脚本 pppoeconf 以交互方式配置 PPPoE 连接。

配置文件如下。

表 5.8. 使用 pppoeconf 的 PPPoE 连接的配置文件列表

文件 功能
/etc/ppp/peers/dsl-provider pppoeconf 生成的特定于 pppoepppd 配置文件
/etc/ppp/options pppd 的通用执行参数
/etc/ppp/pap-secret PAP 的身份验证数据(安全风险)
/etc/ppp/chap-secret CHAP 的身份验证数据(更安全)

您可以使用如下所示的低级网络配置工具测试配置。

$ sudo /sbin/ifconfig eth0 up
$ sudo pon dsl-provider
...
$ sudo poff dsl-provider
$ sudo /sbin/ifconfig eth0 down

参见 "/usr/share/doc/pppoeconf/README.Debian"。

5.5. 使用 ifupdown 的基本网络配置(旧版)

Debian 系统上传统的TCP/IP 网络设置使用 ifupdown 软件包作为高级工具。有两种典型情况。

如果您希望设置高级配置,这些传统设置方法非常有用(请参阅第 5.5 节,“使用 ifupdown 的基本网络配置(旧版)”)。

ifupdown 软件包为 Debian 系统中的高级网络配置提供了标准化框架。在本节中,我们将通过简化的介绍和许多典型示例来学习使用 ifupdown 的基本网络配置。

5.5.1. 命令语法简化

ifupdown 软件包包含 2 个命令:ifup(8)ifdown(8)。它们提供由配置文件“/etc/network/interfaces”决定的高级网络配置。

表 5.9. 使用 ifupdown 的基本网络配置命令列表

命令 操作
ifup eth0 如果存在 "iface eth0" 节,则使用配置 eth0 启动网络接口 eth0
ifdown eth0 如果存在 "iface eth0" 节,则使用配置 eth0 关闭网络接口 eth0

[Warning] 警告

请勿使用 ifconfig(8)ip(8) 命令等低级配置工具来配置处于启动状态的接口。

[Note] 注意

没有 ifupdown 命令。

5.5.2. “/etc/network/interfaces”的基本语法

interfaces(5) 中所述,“/etc/network/interfaces”的关键语法可以总结如下。

表 5.10. “/etc/network/interfaces”中的节列表

含义
auto <interface_name> 在系统启动时启动接口 <interface_name>
allow-auto <interface_name> , ,
allow-hotplug <interface_name> 当内核检测到来自接口的热插拔事件时启动接口 <interface_name>
以 “iface <config_name> …” 开头的行 定义网络配置 <config_name>
以 “mapping <interface_name_glob> ” 开头的行 为匹配的 <interface_name> 定义 <config_name> 的映射值
以井号 “#” 开头的行 忽略作为注释(不支持行尾注释)
以反斜杠 “\” 结尾的行 将配置扩展到下一行

iface 节开头的行具有以下语法。

iface <config_name> <address_family> <method_name>
 <option1> <value1>
 <option2> <value2>
 ...

对于基本配置,不使用mapping 节,您将网络接口名称用作网络配置名称(请参阅第 5.6.5 节,“mapping 节”)。

[Warning] 警告

请勿在“/etc/network/interfaces”中为网络接口定义重复的 “iface” 节。

5.5.3. 回环网络接口

/etc/network/interfaces”文件中的以下配置条目在系统启动时(通过auto 节)启动回环网络接口 lo

auto lo
iface lo inet loopback

此条目始终存在于“/etc/network/interfaces”文件中。

5.5.4. 由 DHCP 服务的网络接口

在通过第 5.4.1 节,“以太网的 DHCP 连接”准备系统后,由 DHCP 服务的网络接口通过在“/etc/network/interfaces”文件中创建如下配置条目来配置。

allow-hotplug eth0
iface eth0 inet dhcp

当 Linux 内核检测到物理接口 eth0 时,allow-hotplug 节导致 ifup 启动接口,而 iface 节导致 ifup 使用 DHCP 配置接口。

5.5.5. 具有静态 IP 的网络接口

由静态 IP 服务的网络接口通过在“/etc/network/interfaces”文件中创建如下配置条目来配置。

allow-hotplug eth0
iface eth0 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

当 Linux 内核检测到物理接口 eth0 时,allow-hotplug 节导致 ifup 启动接口,而 iface 节导致 ifup 使用静态 IP 配置接口。

在这里,我假设了以下内容。

  • 局域网网络的 IP 地址范围:192.168.11.0 - 192.168.11.255

  • 网关的 IP 地址:192.168.11.1

  • PC 的 IP 地址:192.168.11.100

  • resolvconf 软件包:已安装

  • 域名:“example.com

  • DNS 服务器的 IP 地址:192.168.11.1

当未安装 resolvconf 软件包时,需要通过编辑“/etc/resolv.conf”手动完成 DNS 相关配置,如下所示。

nameserver 192.168.11.1
domain example.com
[Caution] 注意

上述示例中使用的 IP 地址并非旨在字面复制。您必须根据实际网络配置调整 IP 号码。

5.5.6. 无线局域网接口的基础知识

无线局域网(简称 WLAN)通过基于称为 IEEE 802.11 的标准集的免许可无线电频段的扩频通信提供快速无线连接。

WLAN 接口几乎与普通以太网接口类似,但在初始化时需要提供一些网络 ID 和加密密钥数据。它们的高级网络工具与以太网接口的完全相同,只是接口名称略有不同,例如 eth1wlan0ath0wifi0,…具体取决于使用的内核驱动程序。

[Tip] 提示

wmaster0 设备是主设备,它是一个仅供 SoftMAC 与 Linux 的新 mac80211 API of Linux 一起使用的内部设备。

以下是一些需要记住的 WLAN 关键字。

表 5.11. WLAN 的首字母缩略词列表

首字母缩略词 完整单词 含义
NWID 网络 ID pre-802.11 WaveLAN 网络使用的 16 位网络 ID(非常过时)
(E)SSID (扩展)服务集标识符 互连以形成集成 802.11 无线局域网无线接入点 (AP)的网络名称,域 ID
WEP, (WEP2) 有线等效保密 第一代 64 位(128 位)无线加密标准,带有 40 位密钥(已弃用)
WPA Wi-Fi 保护访问 第二代无线加密标准(大多数为 802.11i),与 WEP 兼容
WPA2 Wi-Fi 保护访问 2 第三代无线加密标准(完整 802.11i),与 WEP 不兼容

协议的实际选择通常受您部署的无线路由器限制。

5.5.7. 具有 WPA/WPA2 的无线局域网接口

您需要安装 wpasupplicant 软件包以支持具有新 WPA/WPA2 的 WLAN。

如果 WLAN 连接上使用DHCP 服务的 IP,则“/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"。

5.5.8. 具有 WEP 的无线局域网接口

您需要安装 wireless-tools 软件包以支持具有旧 WEP 的 WLAN。(您的消费级路由器可能仍在使用这种不安全的基础设施,但这总比没有好。)

[Caution] 注意

请注意,您在使用 WEP 的 WLAN 上的网络流量可能会被他人嗅探。

如果 WLAN 连接上使用DHCP 服务的 IP,则“/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"。

5.5.9. PPP 连接

您需要先配置 PPP 连接,如前所述(请参阅第 5.4.3 节,“使用 pppconfig 的 PPP 连接”)。然后,为主要 PPP 设备 ppp0 添加“/etc/network/interfaces”文件条目,如下所示。

iface ppp0 inet ppp
 provider <isp_name>

5.5.10. 替代 PPP 连接

您需要先使用 wvdial 配置替代 PPP 连接,如前所述(请参阅第 5.4.4 节,“使用 wvdialconf 的替代 PPP 连接”)。然后,为主要 PPP 设备 ppp0 添加“/etc/network/interfaces”文件条目,如下所示。

iface ppp0 inet wvdial

5.5.11. PPPoE 连接

对于直接连接到由 PPPoE 服务的 WAN 的 PC,您需要使用 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

5.5.12. ifupdown 的网络配置状态

/etc/network/run/ifstate”文件存储了由 ifupdown 软件包管理的所有当前活动网络接口的预期网络配置状态列表。遗憾的是,即使 ifupdown 系统未能按预期启动接口,“/etc/network/run/ifstate”文件仍将其列为活动状态。

除非接口的 ifconfig(8) 命令的输出没有像以下示例一样的行,否则它不能用作 IPV4 网络的一部分。

  inet addr:192.168.11.2  Bcast:192.168.11.255  Mask:255.255.255.0
[Note] 注意

对于连接到 PPPoE 的以太网设备,ifconfig(8) 命令的输出缺少类似于上述示例的行。

5.5.13. 基本网络重新配置

当您尝试重新配置接口时,例如 eth0,您必须首先使用 “sudo ifdown eth0” 命令禁用它。这会从“/etc/network/run/ifstate”文件中删除 eth0 的条目。(如果 eth0 未激活或之前配置不当,这可能会导致一些错误消息。到目前为止,对于简单的单用户工作站来说,随时执行此操作似乎是安全的。)

现在您可以根据需要自由地重写“/etc/network/interfaces”内容,以重新配置网络接口 eth0

然后,您可以使用 “sudo ifup eth0” 命令重新激活 eth0

[Tip] 提示

您可以通过 “sudo ifdown eth0;sudo ifup eth0” 简单地(重新)初始化网络接口。

5.5.14. ifupdown-extra 软件包

ifupdown-extra 软件包为与 ifupdown 软件包一起使用提供了简单的网络连接测试。

  • 可以从 shell 使用 network-test(1) 命令。

  • 自动脚本为每个 ifup 命令执行运行。

network-test 命令使您无需执行繁琐的低级命令来分析网络问题。

自动脚本安装在“/etc/network/*/”中,并执行以下操作。

  • 检查网线连接

  • 检查 IP 地址重复使用

  • 根据“/etc/network/routes”定义设置系统的静态路由

  • 检查网络网关是否可达

  • 将结果记录在“/var/log/syslog”文件中

此 syslog 记录对于远程系统上网络问题的管理非常有用。

[Tip] 提示

ifupdown-extra 软件包的自动行为可通过“/etc/default/network-test”配置。其中一些自动检查会稍微减慢系统启动速度,因为它需要一些时间来侦听 ARP 回复。

5.6. 使用 ifupdown 的高级网络配置(旧版)

通过高级知识,ifupdown 软件包的功能可以超越第 5.5 节,“使用 ifupdown 的基本网络配置(旧版)”中所述的内容得到改进。

这里描述的功能是完全可选的。我,作为一个懒惰和极简主义者,很少费心使用这些功能。

[Caution] 注意

如果您无法通过第 5.5 节,“使用 ifupdown 的基本网络配置(旧版)”中的信息设置网络连接,则使用以下信息会使情况变得更糟。

5.6.1. ifplugd 软件包

ifplugd 软件包是较旧的自动网络配置工具,只能管理以太网连接。这解决了移动 PC 等设备的以太网电缆拔出/重新插入问题。如果您已安装 NetworkManagerWicd(请参阅第 5.2 节,“桌面的现代网络配置”),则不需要此软件包。

此软件包运行守护程序并替换 autoallow-hotplug 功能(请参阅表 5.10,““/etc/network/interfaces”中的节列表”),并在接口连接到网络时启动接口。

以下是如何为内部以太网端口(例如 eth0)使用 ifplugd 软件包。

  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 监视的静态接口”中。

现在,网络重新配置按您的意愿工作。

  • 在开机或硬件发现时,接口不会自行启动。

  • 找到以太网电缆后,接口将启动。

  • 拔下以太网电缆一段时间后,接口将自动关闭。

  • 插入另一根以太网电缆后,接口将在新的网络环境下启动。

[Tip] 提示

ifplugd(8) 命令的参数可以设置其行为,例如重新配置接口的延迟。

5.6.2. ifmetric 软件包

ifmeric 软件包使我们能够事后操纵路由的指标,即使对于 DHCP 也是如此。

以下设置 eth0 接口优先于 wlan0 接口。

  1. 安装 ifmetric 软件包。

  2. 在 “iface eth0 inet dhcp” 行下方添加一个带有 “metric 0” 的选项行。

  3. 在 “iface wlan0 inet dhcp” 行下方添加一个带有 “metric 1” 的选项行。

指标 0 表示最高优先级路由,是默认路由。较大的指标值表示较低优先级路由。具有最低指标值的活动接口的 IP 地址将成为发起地址。请参阅 ifmetric(8)

5.6.3. 虚拟接口

单个物理以太网接口可以配置为具有不同 IP 地址的多个虚拟接口。通常,目的是将接口连接到多个 IP 子网。例如,通过单个网络接口基于 IP 地址的虚拟 Web 托管就是这样一种应用。

例如,让我们假设以下情况。

  • 主机上的单个以太网接口连接到以太网集线器(而不是宽带路由器)。

  • 以太网集线器连接到 Internet 和局域网网络。

  • 局域网网络使用子网 192.168.0.x/24

  • 您的主机使用 DHCP 服务的 IP 地址和物理接口 eth0 连接到 Internet。

  • 您的主机使用 192.168.0.1 和虚拟接口 eth0:0 连接到局域网。

/etc/network/interfaces”中的以下节配置您的网络。

iface eth0 inet dhcp
 metric 0
iface eth0:0 inet static
 address 192.168.0.1
 netmask 255.255.255.0
 network 192.168.0.0
 metric 1
[Caution] 注意

虽然使用 netfilter/iptables 的网络地址转换 (NAT) 的此配置示例(请参阅第 5.9 节,“Netfilter 基础设施”)可以为仅具有单个接口的局域网提供廉价路由器,但这种设置没有真正的防火墙功能。您应该使用 2 个具有 NAT 的物理接口来保护本地网络免受 Internet 的侵害。

5.6.4. 高级命令语法

ifupdown 软件包使用网络配置名称和网络接口名称提供高级网络配置。我使用的术语与 ifup(8)interfaces(5) 中使用的术语略有不同。

表 5.12. 网络设备术语列表

手册页术语 我的术语 以下文本中的示例 描述
物理接口名称 网络接口名称 loeth0<interface_name> 由 Linux 内核给出的名称(使用 udev 机制)
逻辑接口名称 网络配置名称 config1config2<config_name> /etc/network/interfaces”中 iface 后面的名称标记

第 5.5.1 节,“命令语法简化”中的基本网络配置命令要求 iface 节的网络配置名称标记与“/etc/network/interfaces”中的网络接口名称匹配。

高级网络配置命令允许在“/etc/network/interfaces”中分离网络配置名称和网络接口名称,如下所示。

表 5.13. 使用 ifupdown 的高级网络配置命令列表

命令 操作
ifup eth0=config1 使用配置 config1 启动网络接口 eth0
ifdown eth0=config1 使用配置 config1 关闭网络接口 eth0
ifup eth0 启动网络接口 eth0,配置由 mapping 节选择
ifdown eth0 关闭网络接口 eth0,配置由 mapping 节选择

5.6.5. mapping 节

为了避免复杂化,我们在第 5.5.2 节,““/etc/network/interfaces”的基本语法”中跳过了对“/etc/network/interfaces”中的 mapping 节的解释。此节具有以下语法。

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

这通过使用 <script_name> 指定的映射脚本自动选择配置,为“/etc/network/interfaces”文件提供了高级功能。

让我们按照以下执行操作。

$ sudo ifup eth0

当 “<interface_name_glob>” 匹配 “eth0” 时,此执行会产生以下命令的执行以自动配置 eth0

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

在这里,带有 “map” 的脚本输入行是可选的,并且可以重复。

[Note] 注意

mapping 节的 glob 的工作方式类似于 shell 文件名 glob(请参阅第 1.5.6 节,“Shell glob”)。

5.6.6. 手动可切换网络配置

以下是如何在多个网络配置之间手动切换,而无需像第 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 之后的 token)不使用 网络接口名称的 token。 此外,没有 auto 节或 allow-hotplug 节在事件发生时自动启动网络接口 eth0

现在您已准备好切换网络配置。

让我们将您的 PC 移动到由 DHCP 服务的 LAN。 您通过将 网络配置名称(逻辑接口名称)config1 分配给 网络接口(物理接口)eth0 来启动它,如下所示。

$ sudo ifup eth0=config1
Password:
...

接口 eth0 已启动,由 DHCP 配置并连接到 LAN。

$ sudo ifdown eth0=config1
...

接口 eth0 已关闭并从 LAN 断开连接。

让我们将您的 PC 移动到由静态 IP 服务的 LAN。 您通过将 网络配置名称 config2 分配给 网络接口 eth0 来启动它,如下所示。

$ sudo ifup eth0=config2
...

接口 eth0 已启动,配置了静态 IP 并连接到 LAN。 作为 dns-* 给出的附加参数配置了 “/etc/resolv.conf” 内容。 如果安装了 resolvconf 软件包,则更好地管理此 “/etc/resolv.conf”。

$ sudo ifdown eth0=config2
...

接口 eth0 已关闭并再次从 LAN 断开连接。

让我们将您的 PC 移动到连接到 PPPoE 服务的 BB 调制解调器上的端口。 您通过将 网络配置名称 pppoe 分配给 网络接口 eth0 来启动它,如下所示。

$ sudo ifup eth0=pppoe
...

接口 eth0 已启动,配置了 PPPoE 连接,直接连接到 ISP。

$ sudo ifdown eth0=pppoe
...

接口 eth0 已关闭并再次断开连接。

让我们将您的 PC 移动到没有 LAN 或 BB 调制解调器,但有 POTS 和调制解调器的位置。 您通过将 网络配置名称 pots 分配给 网络接口 ppp0 来启动它,如下所示。

$ sudo ifup ppp0=pots
...

接口 ppp0 已启动并通过 PPP 连接到 Internet。

$ sudo ifdown ppp0=pots
...

接口 ppp0 已关闭并从 Internet 断开连接。

您应该检查 “/etc/network/run/ifstate” 文件以了解 ifupdown 系统的当前网络配置状态。

[Warning] 警告

如果您有多个网络接口,您可能需要调整 eth*ppp* 等末尾的数字。

5.6.7. 使用 ifupdown 系统进行脚本编写

ifupdown 系统在导出环境变量到脚本的同时,自动运行安装在 “/etc/network/*/” 中的脚本。

表 5.14. ifupdown 系统传递的环境变量列表

环境变量 传递的值
$IFACE 正在处理的接口的物理名称(接口名称)
$LOGICAL 正在处理的接口的逻辑名称(配置名称)
$ADDRFAM 接口的 <address_family>
$METHOD 接口的 <method_name>。(例如,“static”)
$MODE 如果从 ifup 运行,则为 “start”;如果从 ifdown 运行,则为 “stop”
$PHASE 与 “$MODE” 相同,但具有更精细的粒度,区分 pre-uppost-uppre-downpost-down 阶段
$VERBOSITY 指示是否使用了 “--verbose”;如果使用,则设置为 1,否则设置为 0
$PATH 命令搜索路径:“/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
$IF_<OPTION> iface 节下相应选项的值

在此,每个环境变量 “$IF_<OPTION>” 都是从相应选项的名称(例如 <option1> 和 <option2>)创建的,方法是添加前缀 “$IF_”,将大小写转换为大写,将连字符替换为下划线,并丢弃非字母数字字符。

[Tip] 提示

有关 <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 进行映射”)也使用这些变量,该软件包为通过映射机制自动选择网络配置提供了简单而强大的框架。

[Note] 注意

有关使用这些环境变量的自定义网络配置脚本的更多具体示例,您应该查看 “/usr/share/doc/ifupdown/examples/*” 中的示例脚本以及 ifschemeifupdown-scripts-zg2 软件包中使用的脚本。 这些附加脚本与基本的 ifupdown-extraguessnet 软件包在功能上有一些重叠。 如果您安装了这些附加脚本,则应自定义这些脚本以避免干扰。

5.6.8. 使用 guessnet 进行映射

您可以使用 第 5.6.6 节,“手动可切换的网络配置” 中描述的手动选择配置的方式,也可以使用 第 5.6.5 节,“mapping 节” 中描述的映射机制,通过自定义脚本自动选择网络配置。

guessnet 软件包提供的 guessnet-ifupdown(8) 命令旨在用作映射脚本,并为增强 ifupdown 系统提供强大的框架。

  • 对于 iface 节下的每个网络配置,您将测试条件列为 guessnet 选项的值。

  • 映射选择第一个非 ERROR 结果的 iface 作为网络配置。

映射脚本 guessnet-ifupdown 和原始网络配置基础架构 ifupdown 对 “/etc/network/interfaces” 文件的双重使用不会造成负面影响,因为 guessnet 选项仅将额外的环境变量导出到由 ifupdown 系统运行的脚本。 有关详细信息,请参阅 guessnet-ifupdown(8)

[Note] 注意

当 “/etc/network/interfaces” 中需要多个 guessnet 选项行时,请使用以 guessnet1guessnet2 等开头的选项行,因为 ifupdown 软件包不允许重复选项行的起始字符串。

5.7. 底层网络配置

5.7.1. Iproute2 命令

Iproute2 命令提供完整的底层网络配置功能。 这是从过时的 net-tools 命令到新的 iproute2 等命令的转换表。

表 5.15. 从过时的 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 Utility Suite Howto

5.7.2. 安全的底层网络操作

您可以安全地使用以下底层网络命令,因为它们不会更改网络配置。

表 5.16. 底层网络命令列表

命令 描述
ifconfig 显示活动接口的链路和地址状态
ip addr show 显示活动接口的链路和地址状态
route -n 以数字地址显示所有路由表
ip route show 以数字地址显示所有路由表
arp 显示 ARP 缓存表的当前内容
ip neigh 显示 ARP 缓存表的当前内容
plog 显示 ppp 守护进程日志
ping yahoo.com 检查与 “yahoo.com” 的 Internet 连接
whois yahoo.com 检查谁在域名数据库中注册了 “yahoo.com
traceroute yahoo.com 跟踪与 “yahoo.com” 的 Internet 连接
tracepath yahoo.com 跟踪与 “yahoo.com” 的 Internet 连接
mtr yahoo.com 跟踪与 “yahoo.com” 的 Internet 连接(重复)
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 区域信息

[Tip] 提示

其中一些底层网络配置工具位于 “/sbin/” 中。 您可能需要发出完整的命令路径,例如 “/sbin/ifconfig”,或将 “/sbin” 添加到您的 “~/.bashrc” 中的 “$PATH” 列表中。

5.8. 网络优化

通用网络优化超出了本文档的范围。 我仅涉及与消费级连接相关的主题。

表 5.17. 网络优化工具列表

软件包 popcon 大小 描述
iftop http://qa.debian.org/popcon.php?package=iftop 109 显示网络接口上的带宽使用信息
iperf http://qa.debian.org/popcon.php?package=iperf 170 Internet 协议带宽测量工具
apt-spy http://qa.debian.org/popcon.php?package=apt-spy 105 基于带宽测试写入 “/etc/apt/sources.list” 文件
ifstat http://qa.debian.org/popcon.php?package=ifstat 88 接口统计信息监控
bmon http://qa.debian.org/popcon.php?package=bmon 188 便携式带宽监视器和速率估计器
ethstatus http://qa.debian.org/popcon.php?package=ethstatus 84 快速测量网络设备吞吐量的脚本
bing http://qa.debian.org/popcon.php?package=bing 96 经验随机带宽测试器
bwm-ng http://qa.debian.org/popcon.php?package=bwm-ng 114 小型且简单的基于控制台的带宽监视器
ethstats http://qa.debian.org/popcon.php?package=ethstats 52 基于控制台的以太网统计信息监视器
ipfm http://qa.debian.org/popcon.php?package=ipfm 156 带宽分析工具

5.8.1. 查找最佳 MTU

可以使用 ping(8) 和 “-M do” 选项实验性地确定 最大传输单元 (MTU) 值,该选项发送数据大小从 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

您看到 ping(8) 在 1454 时成功。

此过程是 路径 MTU (PMTU) 发现 (RFC1191),并且 tracepath(8) 命令可以自动执行此操作。

[Tip] 提示

上面 PMTU 值为 1454 的示例适用于我之前的 FTTP 提供商,该提供商使用 异步传输模式 (ATM) 作为其骨干网络,并使用 PPPoE 为其客户端提供服务。 实际的 PMTU 值取决于您的环境,例如,对于我的新 FTTP 提供商为 1500。

表 5.18. 最佳 MTU 值的基本指南

网络环境 MTU 理由
拨号链路 (IP: PPP) 576 标准
以太网链路 (IP: DHCP 或固定) 1500 标准和默认
以太网链路 (IP: PPPoE) 1492 (=1500-8) PPP 标头 2 字节和 PPPoE 标头 6 字节
以太网链路(ISP 的骨干网:ATM,IP:DHCP 或固定) 1462 (=48*31-18-8) 作者的推测:以太网标头 18 字节,SAR 尾部 8 字节
以太网链路(ISP 的骨干网:ATM,IP:PPPoE) 1454 (=48*31-8-18-8) 有关理由,请参阅 “PPPoE ADSL 连接的最佳 MTU 配置

除了这些基本指南之外,您还应该了解以下内容。

  • 任何隧道技术(VPN 等)的使用都可能因其开销而进一步降低最佳 MTU。

  • MTU 值不应超过实验确定的 PMTU 值。

  • 在满足其他限制的情况下,MTU 值越大通常越好。

5.8.2. 设置 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

[Note] 注意

基于 iptables(8) 的优化(参见 第 5.9 节,“Netfilter 基础设施”)可以通过 MSS 限制数据包大小,并且对路由器很有用。 请参阅 iptables(8) 中的 “TCPMSS”。

5.8.3. WAN TCP 优化

可以通过调整 TCP 缓冲区大小参数来最大化 TCP 吞吐量,如 “TCP 调优指南” 和 “TCP 调优” 中针对现代高带宽和高延迟 WAN 所述。 到目前为止,当前的 Debian 默认设置即使对于通过快速 1G bps FTTP 服务连接的 LAN 也运行良好。

5.9. Netfilter 基础设施

Netfilter状态防火墙网络地址转换 (NAT) 提供了基础设施,使用 Linux 内核 模块(参见 第 3.5.12 节,“内核模块初始化”)。


netfilter 的主要用户空间程序是 iptables(8)。 您可以从 shell 手动交互式配置 netfilter,使用 iptables-save(8) 保存其状态,并在系统重启时通过 iptables-restore(8) 的 init 脚本恢复它。

配置辅助脚本(例如 shorewall)简化了此过程。

请参阅 http://www.netfilter.org/documentation/ (或 “/usr/share/doc/iptables/html/”)上的文档。

[Tip] 提示

尽管这些是为 Linux 2.4 编写的,但 iptables(8) 命令和 netfilter 内核功能都适用于当前的 Linux 2.6