跳转到内容

Ict-创新/LPI/109.2

来自维基教科书,开放世界中的开放书籍

109.2 基本网络配置

[编辑 | 编辑源代码]

候选人应该能够查看、更改和验证客户端主机上的配置设置


关键知识领域

  • 手动和自动配置网络接口
  • 基本 TCP/IP 主机配置。

网络接口

[编辑 | 编辑源代码]

网络接口卡 (NIC) 必须受内核支持。您可以通过检查 dmesg 的输出(显示内核消息缓冲区的内容)来确定您正在使用的卡(以及您的内核是否识别它)。

示例


$ dmesg | grep eth0

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


上一章 | 下一章

华夏公益教科书