Ict-创新/LPI/109.2
候选人应该能够查看、更改和验证客户端主机上的配置设置
关键知识领域
- 手动和自动配置网络接口
- 基本 TCP/IP 主机配置。
网络接口卡 (NIC) 必须受内核支持。您可以通过检查 dmesg 的输出(显示内核消息缓冲区的内容)来确定您正在使用的卡(以及您的内核是否识别它)。
示例
e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection e1000: eth0: e1000_watchdog_task: NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None eth0: no IPv6 routers present |
您可以使用 lspci 直接探测硬件
$ lspci | grep -i ethernet 09:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8040 PCI-E Fast Ethernet Controller (rev 12) |
lspci -v 提供更多详细信息。以下是输出的相关部分
09:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8040 PCI-E Fast Ethernet Controller (rev 12) 子系统:戴尔设备 022e 标志:总线主控,快速选择,延迟 0,IRQ 28 内存位于 f9ffc000(64 位,不可预取)[大小=16K] I/O 端口位于 de00 [大小=256] 功能:<访问被拒绝> 正在使用的内核驱动程序:sky2 内核模块:sky2 |
从上面的例子中,我们可以看到以太网控制器的类型、内存和 I/O 地址分配、正在使用的 IRQ 以及相关的内核驱动程序模块(本例中为 sky2)。如果使用错误的模块或资源(I/O 或 IRQ)不可用,这些信息可能会有用。
有时,可以使用这些信息插入具有不同 I/O 地址的模块(使用 modprobe 或 insmod 实用程序),或者将其保存在 /etc/modules.conf 中。 此文件由 modprobe 咨询;在此处放置条目将在下次系统启动时保存设置。但是,内核通常会自动检测卡并加载正确的模块。
名称解析
机器必须能够执行主机名解析;也就是说,将机器名(如 neptune.example.com)转换为 IP 地址(如 144.11.20.101)
/etc/hosts 文件是执行名称解析的一种方法。至少您会在该文件中看到一个针对环回地址(传统上称为 localhost)的条目。该文件也可能包含其他机器的条目,但通常只包含本地网络中的机器
# 不要删除以下行,否则各种程序 |
# 需要网络功能将失败。 |
127.0.0.1 m1530-rhel localhost localhost.localdomain |
::1 localhost6 |
# 其他主机 |
192.168.1.108 mesa mesa.domain.org |
192.168.1.119 pico |
(另请注意 localhost6 的 IPV6 条目)
名称解析也可以通过咨询 DNS 来执行。有关详细信息,请参阅主题 109.4:配置客户端 DNS。
/etc/nsswitch.conf 文件用于告知标准 C 库中的解析器在哪里查找其信息。解析器是一个查找某些内容(如用户名或主机名)并返回一些对应信息(如 UID 或 IP 地址)的例程。nsswitch.conf 中控制主机名解析的行看起来像这样
hosts: files dns
此条目告诉解析器首先查看本地文件(/etc/hosts),然后咨询 DNS。此处可以指定的其他主机名查找来源包括 nis 和 nisplus
内核对机器主机名的当前理解由 hostname 命令报告
# hostname m1530-rhel.example.com |
机器的主机名在多个文件中设置。在某些发行版(如 Ubuntu)上,使用 /etc/hostname 文件。其他发行版(如 RedHat)在 /etc/sysconfig/network 中设置它。以下命令可能有助于您找出您的发行版中定义了主机名的位置。此示例位于 RedHat 上
# find /etc -type f -exec grep -l $(hostname) {} \; /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network /etc/hosts /etc/dhclient-eth0.conf |
/etc/sysconfig/network 文件定义是否必须启动网络。在 RedHat 系统上,它还定义了主机名和默认网关。这些是适用于整个机器的设置(即,它们不特定于一个网络接口)
NETWORKING=yes |
HOSTNAME=mesa.domain.org |
GATEWAY=192.168.1.254 |
在 RedHat 系统上,/etc/sysconfig/network-scripts/ifcfg-eth0 文件包含 eth0 的配置参数。此示例显示了使用静态分配的 IP 地址的接口的文件可能是什么样子
DEVICE=eth0 |
BOOTPROTO=static |
BROADCAST=192.168.1.255 |
IPADDR=192.168.1.108 |
NETMASK=255.255.255.0 |
ONBOOT=yes |
对于使用 DHCP 配置的卡,该文件将更简单
DEVICE=eth0 |
BOOTPROTO=dhcp |
ONBOOT=yes |
停止和启动网络
- 从命令行
用于启动网络接口的主要工具是 /sbin/ifconfig。初始化后,内核模块(在 /etc/modules.conf 中别名为 eth0,例如 tulip.o)被加载并分配了 IP 和网络掩码值。因此,只要内核模块被插入,接口就可以停止和重启,而不会丢失这些信息。
示例:使用 ifconfig。
/sbin/ifconfig eth0 192.168.10.1 netmask 255.255.128.0
/sbin/ifconfig eth0 down /sbin/ifconfig eth0 up |
在没有参数的情况下运行 ifconfig 将显示当前设置
# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:0C:29:76:13:68 inet addr:192.168.81.130 Bcast:192.168.81.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe76:1368/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5623 errors:0 dropped:0 overruns:0 frame:0 TX packets:8037 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:418797 (408.9 KiB) TX bytes:1338985 (1.2 MiB) Base address:0x2000 Memory:d8920000-d8940000 |
另一个工具是 /sbin/ifup。此实用程序读取 /etc/sysconfig/ 中的系统配置,并为给定接口分配存储的值。eth0 的脚本称为 ifcfg-eth0,必须进行配置。如果定义了诸如 DHCP 之类的引导协议,则 ifup 将使用该协议启动接口。
示例:使用 ifup。
/sbin/ifup eth0 /sbin/ifup ppp0 /sbin/ifdown eth0 |
RedHat 没有 ifup 和 ifdown 的手册页(Ubuntu 有!),但在 RedHat 上它们是 shell 脚本,因此您可以查看代码(如果您愿意)。
- . 使用网络脚本
在启动时,网络接口使用 /etc/rc.d/init.d/network 脚本初始化。所有相关的网络文件都在 /etc/sysconfig/ 目录中被调用。此脚本也可以手动运行。
此外,该脚本还读取 /etc/sysctl.conf 中的 sysctl 选项,您可以在其中将系统配置为路由器(允许内核中的 IP 转发)。例如,行
net.ipv4.ip_forward = 1
将启用 ip 转发。如果机器用作网关/路由器,您将需要执行此操作。
使用此脚本,可以像这样启动、停止或重启网络
# /etc/rc.d/init.d/network start # /etc/rc.d/init.d/network stop # /etc/rc.d/init.d/network restart |
最后一个命令在您更改了 /etc/sysconfig 下的任何网络设置时很有用。但是请注意,此命令将停止并重新启动所有网络接口,而 ifconfig、ifup 和 ifdown 可用于启动和停止单个接口。
RedHat 还提供了一个名为 service 的“包装器”程序,它提供了一种更简单的方法来运行这些脚本,例如
# service network restart |
使用诸如 ifup 之类的系统脚本而不是 ifconfig 本身时,一个显着的区别是系统路由表在一种情况下被设置,而在另一种情况下不被设置。
这是因为要么读取 /etc/sysconfig/network 文件,其中存储了默认网关,要么 DHCP 服务器已将此信息与 IP 号一起发送。
路由表使用 /sbin/route 工具进行配置、检查和更改。
路由示例
通过设备 eth1 向网络 10.0.0.0 添加静态路由,并使用 192.168.1.108 作为该网络的网关
#/sbin/route add -net 10.0.0.0 gw 192.168.1.108 dev eth1 |
添加默认网关
/sbin/route add default gw 192.168.1.1 eth0 |
以这种方式添加的路由仅在“此时此地”有效 - 它们不会在重新引导后保留。
列出内核路由表
/sbin/route -n |
► 内核 IP 路由表 |
目标 网关 Genmask 接口 |
192.168.1.0 0.0.0.0 255.255.255.0 eth0 |
10.1.8.0 192.168.1.108 255.0.0.0 eth1 |
127.0.0.0 0.0.0.0 255.0.0.0 lo |
0.0.0.0 192.168.1.254 0.0.0.0 eth0 |
这里,第一个条目定义了 eth0 的直接连接网络。它表示无需网关即可到达网络 192.168.1.0。第二个条目定义了到网络 10.1.8.0 的特定路由。最后一个条目定义了默认路由。由于此规则的 Genmask 为 0.0.0.0 且目标为 0.0.0.0,因此它始终匹配;但是,仅当找不到更具体的路由(具有更长 Genmask 的路由)时才使用它。
如果您属于 192.168.10.0 网络,并且您添加了到 192.168.1.0 网络的路由,您可能会发现后者的网络中的机器没有响应。这可能是因为从 192.168.1.0 网络到您的主机的路由尚未设置!这个问题可以通过使用 daemons gated 和 routed 动态更新跨网络的路由表来解决。但是,动态路由在“存根网络”(大多数机器所在的地方)上不是必需的,它也不是 LPI 1 级目标的一部分。
永久静态路由
可以在 /etc/sysconfig 下的文件中定义永久静态路由。根据版本,RedHat 从 /etc/sysconfig/network-scripts/route-eth0(对于 eth0)获取特定于接口的路由,以及从 /etc/sysconfig/static-routes 获取非特定于接口的路由。这些路由将在启动时由网络脚本添加。
命名网络
使用 /etc/networks 文件,可以将名称分配给网络编号。一个典型的条目可能如下所示
office 192.168.3.0
然后,可以使用网络名称与诸如 route 之类的工具一起使用,例如
route add -net office.org netmask 255.0.0.0 |
图 109.2-1:路由方案
以下是使用过的文件、术语和实用程序的部分列表:* /etc/hostname
- /etc/hosts
- /etc/resolv.conf
- /etc/nsswitch.conf
- ifconfig
- ifup
- ifdown
- route
- ping