目录
![]() |
提示 |
---|---|
有关 GNU/Linux 网络的通用指南,请阅读Linux 网络管理员指南。 |
![]() |
提示 |
---|---|
尽管本文档仍然在其网络配置示例中使用旧的 ifconfig(8) 与 IPv4,但 Debian 正在 |
让我们回顾一下现代 Debian 系统上的基本网络基础设施。
表 5.1. 网络配置工具列表
对于普通的 PC 工作站用户来说,域名的命名是一个棘手的问题。PC 工作站可能是移动的,在网络中跳跃,或者位于 NAT 防火墙之后,无法从互联网访问。对于这种情况,您可能不希望域名是有效的域名,以避免名称冲突。
如果您不确定为域名选择什么,请选择 "localdomain
"。
根据我的传入邮件分析,其他流行的无效且安全的顶级域名 (TLD) 似乎是 "lan
"、"localnet
"、"home
"、"invalid
" 或 "local
"。这与报告的无效 TLD 查询一致。您也可以选择一些未使用的二级或三级域名。
".invalid" 旨在用于在线构建确定为无效的域名。(<rfc2606>)
".local" 是 mDNS 网络发现协议(Apple Bonjour / Apple Rendezvous,Debian 上的 Avahi)使用的 伪顶级域名。
![]() |
警告 |
---|---|
如果您的 LAN 上的 DNS 服务使用 " |
![]() |
提示 |
---|---|
当您使用无效域名时,您需要欺骗某些程序(例如 MTA)使用的域名,以使其正常运行。请参阅第 6.3.3 节,“邮件地址配置”。 |
主机名解析目前也由 NSS(名称服务切换)机制支持。此解析的流程如下。
具有类似 "hosts: files dns
" 节的 "/etc/nsswitch.conf
" 文件指示主机名解析顺序。(这取代了 "/etc/host.conf
" 中 "order
" 节的旧功能。)
首先调用 files
方法。如果在 "/etc/hosts
" 文件中找到主机名,它将返回其所有有效地址并退出。("/etc/host.conf
" 文件包含 "multi on
"。)
调用 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 地址 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
方法进行主机名解析。)
网络接口名称,例如 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
" 规则文件运行。您可以修改它以更改命名规则。
![]() |
注意 |
---|---|
编辑 " |
让我们回顾一下 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 |
![]() |
注意 |
---|---|
如果将这些地址之一分配给主机,则该主机不得直接访问 Internet,而必须通过充当单个服务代理的网关或执行 网络地址转换 (NAT) 来访问 Internet。宽带路由器通常为消费者 LAN 环境执行 NAT。 |
尽管 Debian 系统支持大多数硬件设备,但有些网络设备需要 DFSG 非自由外部硬件驱动程序才能支持它们。请参阅第 9.7.6 节,“非自由硬件驱动程序”。
Debian squeeze
系统可以通过管理 守护程序 软件(例如 NetworkManager (NM) (network-manager 和相关软件包) 或 Wicd (wicd 和相关软件包))来管理网络连接。
![]() |
注意 |
---|---|
请勿将这些自动网络配置工具用于服务器。它们主要针对笔记本电脑上的移动桌面用户。 |
需要正确配置这些现代网络配置工具,以避免与传统的 ifupdown
软件包及其配置文件 "/etc/network/interfaces
" 冲突。
![]() |
注意 |
---|---|
这些自动网络配置工具的某些功能可能会出现倒退。它们不如传统的 |
NM 和 Wicd 在 Debian 上的官方文档分别在 "/usr/share/doc/network-manager/README.Debian
" 和 "/usr/share/doc/wicd/README.Debian
" 中提供。
本质上,桌面系统的网络配置按如下方式完成。
使桌面用户(例如 foo
)属于组 "netdev
",方法如下(或者,在现代桌面环境(例如 GNOME 和 KDE)下,通过 D-bus 自动执行)。
$ sudo adduser foo netdev
保持 "/etc/network/interfaces
" 的配置与以下内容一样简单。
auto lo iface lo inet loopback
通过以下方式重启 NM 或 Wicd。
$ sudo /etc/init.d/network-manager restart
$ sudo /etc/init.d/wicd restart
通过 GUI 配置您的网络。
![]() |
注意 |
---|---|
只有 未 在 " |
![]() |
提示 |
---|---|
如果您希望扩展 NM 的网络配置功能,请寻找适当的插件模块和补充软件包,例如 |
![]() |
注意 |
---|---|
这些自动网络配置工具可能与传统的 |
当第 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
")。
ifplugd
、guessnet
、ifscheme
等 ifupdown
软件包的辅助脚本被创建以自动化网络环境的动态配置,例如有线 LAN 上的移动 PC 的配置。这些脚本相对难以使用,但与现有的 ifupdown
系统配合良好。
这些将在详细说明并附带示例(请参阅第 5.5 节,“使用 ifupdown 的基本网络配置(传统)”和第 5.6 节,“使用 ifupdown 的高级网络配置(传统)”)。
![]() |
注意 |
---|---|
本节中描述的连接测试方法旨在用于测试目的。它并非旨在直接用于日常网络连接。建议您通过 NM、Wicd 或 |
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
|
网络连接首字母缩略词的含义如下。
![]() |
注意 |
---|---|
通过有线电视提供的 WAN 连接服务通常由 DHCP 或 PPPoE 提供。ADSL 和 FTTP 提供的服务通常由 PPPoE 提供。您必须咨询您的 ISP 以获取 WAN 连接的确切配置要求。 |
![]() |
注意 |
---|---|
当 BB 路由器用于创建家庭 LAN 环境时,LAN 上的 PC 通过 BB 路由器与网络地址转换 (NAT)连接到 WAN。对于这种情况,LAN 上 PC 的网络接口由 BB 路由器的静态 IP 或 DHCP 提供服务。必须按照您的 ISP 的指示配置 BB 路由器以连接 WAN。 |
典型的现代家庭和小型企业网络,即 LAN,使用一些消费级宽带路由器连接到 WAN(互联网)。此路由器后面的 LAN 通常由路由器上运行的动态主机配置协议 (DHCP)服务器提供服务。
只需为由动态主机配置协议 (DHCP)服务的以太网安装 isc-dhcp-client
软件包。
参见 dhclient.conf(5)。
配置脚本 pppconfig
通过选择以下内容以交互方式配置PPP 连接。
电话号码
ISP 用户名
ISP 密码
端口速度
调制解调器通信端口
身份验证方法
表 5.6. 使用 pppconfig 的PPP 连接的配置文件列表
![]() |
注意 |
---|---|
如果在没有参数的情况下调用 |
您可以使用如下所示的低级网络配置工具测试配置。
$ sudo pon <isp_name> ... $ sudo poff <isp_name>
参见 "/usr/share/doc/ppp/README.Debian.gz
"。
使用 pppd(8) 的另一种方法是从 wvdial(1) 运行它,它包含在 wvdial
软件包中。`wvdial` 执行拨号和初始协商,然后启动 pppd
来完成其余操作,而不是 pppd
运行 chat(8) 来拨入和协商连接。
配置脚本 wvdialconf
通过选择以下内容以交互方式配置 PPP 连接。
电话号码
ISP 用户名
ISP 密码
在大多数情况下,wvdial
成功建立连接并自动维护身份验证数据列表。
您可以使用如下所示的低级网络配置工具测试配置。
$ sudo wvdial ... $ sudo killall wvdial
参见 wvdial(1) 和 wvdial.conf(5)。
当您的 ISP 为您提供 PPPoE 连接,并且您决定将 PC 直接连接到 WAN 时,您的 PC 网络必须配置 PPPoE。PPPoE 代表以太网上的 PPP。配置脚本 pppoeconf
以交互方式配置 PPPoE 连接。
配置文件如下。
您可以使用如下所示的低级网络配置工具测试配置。
$ sudo /sbin/ifconfig eth0 up $ sudo pon dsl-provider ... $ sudo poff dsl-provider $ sudo /sbin/ifconfig eth0 down
参见 "/usr/share/doc/pppoeconf/README.Debian
"。
Debian 系统上传统的TCP/IP 网络设置使用 ifupdown
软件包作为高级工具。有两种典型情况。
对于动态 IP 系统(例如移动 PC),您应该使用 resolvconf
软件包设置 TCP/IP 网络,并使您能够轻松切换网络配置(请参阅第 5.5.4 节,“由 DHCP 服务的网络接口”)。
对于静态 IP 系统(例如服务器),您应该在不使用 resolvconf
软件包的情况下设置 TCP/IP 网络,并保持系统简洁(请参阅第 5.5.5 节,“具有静态 IP 的网络接口”)。
如果您希望设置高级配置,这些传统设置方法非常有用(请参阅第 5.5 节,“使用 ifupdown 的基本网络配置(旧版)”)。
ifupdown
软件包为 Debian 系统中的高级网络配置提供了标准化框架。在本节中,我们将通过简化的介绍和许多典型示例来学习使用 ifupdown
的基本网络配置。
ifupdown
软件包包含 2 个命令:ifup(8) 和 ifdown(8)。它们提供由配置文件“/etc/network/interfaces”决定的高级网络配置。
表 5.9. 使用 ifupdown 的基本网络配置命令列表
命令 | 操作 |
---|---|
ifup eth0
|
如果存在 "iface eth0 " 节,则使用配置 eth0 启动网络接口 eth0 |
ifdown eth0
|
如果存在 "iface eth0 " 节,则使用配置 eth0 关闭网络接口 eth0 |
![]() |
警告 |
---|---|
请勿使用 ifconfig(8) 和 ip(8) 命令等低级配置工具来配置处于启动状态的接口。 |
![]() |
注意 |
---|---|
没有 |
如 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 节”)。
![]() |
警告 |
---|---|
请勿在“ |
“/etc/network/interfaces
”文件中的以下配置条目在系统启动时(通过auto
节)启动回环网络接口 lo
。
auto lo iface lo inet loopback
此条目始终存在于“/etc/network/interfaces
”文件中。
在通过第 5.4.1 节,“以太网的 DHCP 连接”准备系统后,由 DHCP 服务的网络接口通过在“/etc/network/interfaces
”文件中创建如下配置条目来配置。
allow-hotplug eth0 iface eth0 inet dhcp
当 Linux 内核检测到物理接口 eth0
时,allow-hotplug
节导致 ifup
启动接口,而 iface
节导致 ifup
使用 DHCP 配置接口。
由静态 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
![]() |
注意 |
---|---|
上述示例中使用的 IP 地址并非旨在字面复制。您必须根据实际网络配置调整 IP 号码。 |
无线局域网(简称 WLAN)通过基于称为 IEEE 802.11 的标准集的免许可无线电频段的扩频通信提供快速无线连接。
WLAN 接口几乎与普通以太网接口类似,但在初始化时需要提供一些网络 ID 和加密密钥数据。它们的高级网络工具与以太网接口的完全相同,只是接口名称略有不同,例如 eth1
、wlan0
、ath0
、wifi0
,…具体取决于使用的内核驱动程序。
![]() |
提示 |
---|---|
|
以下是一些需要记住的 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 不兼容 |
协议的实际选择通常受您部署的无线路由器限制。
您需要安装 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
"。
您需要安装 wireless-tools
软件包以支持具有旧 WEP 的 WLAN。(您的消费级路由器可能仍在使用这种不安全的基础设施,但这总比没有好。)
![]() |
注意 |
---|---|
请注意,您在使用 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
"。
您需要先配置 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 服务的 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
“/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
![]() |
注意 |
---|---|
对于连接到 PPPoE 的以太网设备,ifconfig(8) 命令的输出缺少类似于上述示例的行。 |
当您尝试重新配置接口时,例如 eth0
,您必须首先使用 “sudo ifdown eth0
” 命令禁用它。这会从“/etc/network/run/ifstate
”文件中删除 eth0
的条目。(如果 eth0
未激活或之前配置不当,这可能会导致一些错误消息。到目前为止,对于简单的单用户工作站来说,随时执行此操作似乎是安全的。)
现在您可以根据需要自由地重写“/etc/network/interfaces
”内容,以重新配置网络接口 eth0
。
然后,您可以使用 “sudo ifup eth0
” 命令重新激活 eth0
。
![]() |
提示 |
---|---|
您可以通过 “ |
ifupdown-extra
软件包为与 ifupdown
软件包一起使用提供了简单的网络连接测试。
可以从 shell 使用 network-test(1) 命令。
自动脚本为每个 ifup
命令执行运行。
network-test
命令使您无需执行繁琐的低级命令来分析网络问题。
自动脚本安装在“/etc/network/*/
”中,并执行以下操作。
检查网线连接
检查 IP 地址重复使用
根据“/etc/network/routes
”定义设置系统的静态路由
检查网络网关是否可达
将结果记录在“/var/log/syslog
”文件中
此 syslog 记录对于远程系统上网络问题的管理非常有用。
![]() |
提示 |
---|---|
|
通过高级知识,ifupdown
软件包的功能可以超越第 5.5 节,“使用 ifupdown 的基本网络配置(旧版)”中所述的内容得到改进。
这里描述的功能是完全可选的。我,作为一个懒惰和极简主义者,很少费心使用这些功能。
![]() |
注意 |
---|---|
如果您无法通过第 5.5 节,“使用 ifupdown 的基本网络配置(旧版)”中的信息设置网络连接,则使用以下信息会使情况变得更糟。 |
ifplugd
软件包是较旧的自动网络配置工具,只能管理以太网连接。这解决了移动 PC 等设备的以太网电缆拔出/重新插入问题。如果您已安装 NetworkManager 或 Wicd(请参阅第 5.2 节,“桌面的现代网络配置”),则不需要此软件包。
此软件包运行守护程序并替换 auto 或 allow-hotplug 功能(请参阅表 5.10,““/etc/network/interfaces”中的节列表”),并在接口连接到网络时启动接口。
以下是如何为内部以太网端口(例如 eth0
)使用 ifplugd
软件包。
删除“/etc/network/interfaces
”中的节:“auto eth0
”或“allow-hotplug eth0
”。
保留“/etc/network/interfaces
”中的节:“iface eth0 inet …
”和“mapping …
”。
安装 ifplugd
软件包。
运行 “sudo dpkg-reconfigure ifplugd
”。
将 eth0
放在“要由 ifplugd 监视的静态接口”中。
现在,网络重新配置按您的意愿工作。
在开机或硬件发现时,接口不会自行启动。
没有长时间 DHCP 超时的快速启动过程。
没有在没有适当 IPv4 地址的情况下激活的奇怪接口(请参阅第 5.5.12 节,“ifupdown 的网络配置状态”)。
找到以太网电缆后,接口将启动。
拔下以太网电缆一段时间后,接口将自动关闭。
插入另一根以太网电缆后,接口将在新的网络环境下启动。
![]() |
提示 |
---|---|
ifplugd(8) 命令的参数可以设置其行为,例如重新配置接口的延迟。 |
ifmeric
软件包使我们能够事后操纵路由的指标,即使对于 DHCP 也是如此。
以下设置 eth0
接口优先于 wlan0
接口。
安装 ifmetric
软件包。
在 “iface eth0 inet dhcp
” 行下方添加一个带有 “metric 0
” 的选项行。
在 “iface wlan0 inet dhcp
” 行下方添加一个带有 “metric 1
” 的选项行。
指标 0 表示最高优先级路由,是默认路由。较大的指标值表示较低优先级路由。具有最低指标值的活动接口的 IP 地址将成为发起地址。请参阅 ifmetric(8)。
单个物理以太网接口可以配置为具有不同 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
![]() |
注意 |
---|---|
虽然使用 netfilter/iptables 的网络地址转换 (NAT) 的此配置示例(请参阅第 5.9 节,“Netfilter 基础设施”)可以为仅具有单个接口的局域网提供廉价路由器,但这种设置没有真正的防火墙功能。您应该使用 2 个具有 NAT 的物理接口来保护本地网络免受 Internet 的侵害。 |
ifupdown
软件包使用网络配置名称和网络接口名称提供高级网络配置。我使用的术语与 ifup(8) 和 interfaces(5) 中使用的术语略有不同。
表 5.12. 网络设备术语列表
手册页术语 | 我的术语 | 以下文本中的示例 | 描述 |
---|---|---|---|
物理接口名称 | 网络接口名称 |
lo 、eth0 、<interface_name> |
由 Linux 内核给出的名称(使用 udev 机制) |
逻辑接口名称 | 网络配置名称 |
config1 、config2 、<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.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
” 的脚本输入行是可选的,并且可以重复。
![]() |
注意 |
---|---|
|
以下是如何在多个网络配置之间手动切换,而无需像第 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
系统的当前网络配置状态。
![]() |
警告 |
---|---|
如果您有多个网络接口,您可能需要调整 |
ifupdown
系统在导出环境变量到脚本的同时,自动运行安装在 “/etc/network/*/
” 中的脚本。
表 5.14. ifupdown 系统传递的环境变量列表
环境变量 | 传递的值 |
---|---|
“$IFACE ” |
正在处理的接口的物理名称(接口名称) |
“$LOGICAL ” |
正在处理的接口的逻辑名称(配置名称) |
“$ADDRFAM ” |
接口的 <address_family> |
“$METHOD ” |
接口的 <method_name>。(例如,“static”) |
“$MODE ” |
如果从 ifup 运行,则为 “start”;如果从 ifdown 运行,则为 “stop” |
“$PHASE ” |
与 “$MODE ” 相同,但具有更精细的粒度,区分 pre-up 、post-up 、pre-down 和 post-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_
”,将大小写转换为大写,将连字符替换为下划线,并丢弃非字母数字字符。
![]() |
提示 |
---|---|
有关 <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 进行映射”)也使用这些变量,该软件包为通过映射机制自动选择网络配置提供了简单而强大的框架。
![]() |
注意 |
---|---|
有关使用这些环境变量的自定义网络配置脚本的更多具体示例,您应该查看 “ |
您可以使用 第 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)。
![]() |
注意 |
---|---|
当 “ |
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.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 区域信息 |
![]() |
提示 |
---|---|
其中一些底层网络配置工具位于 “ |
通用网络优化超出了本文档的范围。 我仅涉及与消费级连接相关的主题。
表 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 | 带宽分析工具 |
可以使用 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) 命令可以自动执行此操作。
![]() |
提示 |
---|---|
上面 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 值越大通常越好。
以下是将 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 限制数据包大小,并且对路由器很有用。 请参阅 iptables(8) 中的 “TCPMSS”。 |
Netfilter 为 状态防火墙 和 网络地址转换 (NAT) 提供了基础设施,使用 Linux 内核 模块(参见 第 3.5.12 节,“内核模块初始化”)。
表 5.19. 防火墙工具列表
netfilter 的主要用户空间程序是 iptables(8)。 您可以从 shell 手动交互式配置 netfilter,使用 iptables-save(8) 保存其状态,并在系统重启时通过 iptables-restore(8) 的 init 脚本恢复它。
配置辅助脚本(例如 shorewall)简化了此过程。
请参阅 http://www.netfilter.org/documentation/ (或 “/usr/share/doc/iptables/html/
”)上的文档。
![]() |
提示 |
---|---|
尽管这些是为 Linux 2.4 编写的,但 iptables(8) 命令和 netfilter 内核功能都适用于当前的 Linux 2.6。 |