第七章 网络

第七章 网络7.1. 简介7.2. 设置网络7.2.1. 识别网络适配器7.3. 有线网络7.3.1. 配置动态IPv4地址7.3.2. 配置动态IPv4地址7.3.3. IPv67.3.4. 配置静态IPv6地址7.3.5. 配置动态IPv6地址7.3.6. 路由器通告和主机自动配置7.3.7. IPv6和IPv4地址映射7.4. 无线网络7.4.1. 快速开始连接到无线网络7.4.2. 基本无线配置7.4.3. 扫描无线网络7.4.4. 无线网络的连接和身份验证7.4.4.1. 使用WPA2/WPA/个人身份验证7.4.4.2. 使用开放网络进行身份验证7.4.5. 同时使用有线和无线连接7.5. 主机名7.5.1. 检查当前主机名7.5.2. 更改主机名7.6. DNS7.6.1. 本地地址7.6.2. 配置名称服务器7.7. 故障排除7.7.1. 有线网络故障排除7.7.2. 无线网络故障排除

7.1. 简介

本章深入探讨了网络配置和性能的主题,展示了FreeBSD操作系统的强大网络功能。无论是使用有线网络还是无线网络,本章都提供了在FreeBSD中配置和优化网络连接的全面指南。

在深入细节之前,读者最好对协议、网络接口和寻址等网络概念有一个基本的了解。

本章涵盖:

有关如何进行高级网络配置的更多信息参阅【34. 高级网络】。

7.2. 设置网络

设置有线或无线连接是FreeBSD用户的常见任务。本节将展示如何识别有线和无线网络适配器以及如何配置它们。

在开始配置之前,有必要了解以下网络数据:

7.2.1. 识别网络适配器

FreeBSD支持用于有线和无线网络的各种网络适配器。检查所用FreeBSD版本的硬件兼容性列表,查看是否支持网络适配器。

要获取系统使用的网络适配器,请执行以下命令:

“@”符号前的文本是控制设备的驱动程序的名称。在这种情况下,它们是 em(4)iwn(4)

① 显示供应商的名称

② 显示设备的名称

7.3. 有线网络

加载正确的驱动程序后,需要配置网络适配器。FreeBSD使用驱动程序名称后跟一个单元号来命名网络接口适配器。单元号表示在启动时检测适配器或稍后发现适配器的顺序。

例如, em0 是系统上使用 em(4) 驱动程序的第一个网络接口卡(network interface card,NIC)。

要显示网络接口配置,请输入以下命令:

在此示例中,显示了以下设备:

该示例显示 em0 已启动并运行。

关键指标包括:

  1. UP 表示接口已配置并准备就绪。
  2. 该接口具有IPv4互联网(inet)地址 192.168.1.19
  3. 该接口有一个IPv6互联网(inet6)地址,fe80::21f:16ff:fe0f:275a%em0
  4. 它有一个有效的子网掩码(netmask),其中 0xffff00255.255.255.0相同。
  5. 它有一个有效的广播地址 192.168.1.255
  6. 接口(ether)的MAC地址为 00:1f:16:0f:27:5a
  7. 物理介质选择处于自动选择模式(media: Ethernet autoselect (1000baseT<full-duplex>))。
  8. 链路的状态(status)为 active (活动),表示检测到载波信号。对于 em0 ,当以太网电缆未插入接口时, status: no carrier 是正常的。

如果 ifconfig(8) 输出显示了与下一个输出类似的内容,则表示接口尚未配置:

7.3.1. 配置动态IPv4地址

本节提供在FreeBSD系统上配置静态IPv4地址的指南。

网络接口卡配置可以使用 ifconfig(8) 从命令行执行,但在重新启动后不会持续,除非该配置也添加到 /etc/rc.conf 中。

可以通过执行以下命令设置IP地址:

要使更改在重新启动后保持不变,请执行以下命令:

添加执行以下命令的默认路由器:

将DNS记录添加到 /etc/resolv.conf

然后重新启动 netif 并执行以下命令进行 routing

可以使用 ping(8) 测试连接:

7.3.2. 配置动态IPv4地址

如果网络有DHCP服务器,则很容易配置网络接口以使用DHCP。FreeBSD使用 dhclient(8) 作为DHCP客户端。 dhclient(8) 将自动提供IP、网络掩码和默认路由器。

要使接口与DHCP一起工作,请执行以下命令:

dhclient(8) 可以通过运行以下命令手动使用:

通过这种方式,可以验证使用DHCP的地址分配是否正常工作。

然后执行以下命令重新启动 netif

可以使用 ping(8) 测试连接:

7.3.3. IPv6

IPv6是众所周知的IP协议的新版本,就像IPv4。

IPv6比IPv4提供了几个优势以及许多新功能:

FreeBSD包括 KAME项目 (海龟)IPv6参考实现,并附带了使用IPv6所需的一切。

本节重点介绍如何配置和运行IPv6。

有三种不同类型的IPv6地址:

读取IPv6地址时,规范形式表示为 x:x:x:x:x:x:x:x:x ,其中每个 x 表示一个16位十六进制值。一个例子是 FEBC:A574:382B:23C1:AA49:4592:4EFE:9982

通常,一个地址会有很长的全零子字符串。 ::(双冒号)可用于替换每个地址的一个子字符串。此外,每个十六进制值最多可以省略三个前导0 。例如,fe80::1 对应于规范形式 fe80:0000:0000:00000:0000:0000

第三种形式是使用众所周知的IPv4表示法写入最后32位。例如,2002::10.0.0.1 对应于十六进制规范表示 2002:0000:0000:000:0000:00000:0a00:0001 ,这反过来又等价于 2002::a00:1

要查看FreeBSD系统的IPv6地址,请执行以下命令:

在这个例子中,em0 接口使用的是 fe80::21f:16ff:fe0f:275a%em0 ,这是一个自动配置的链接本地地址,由MAC地址自动生成。

保留了一些IPv6地址。可以在下表中查看保留地址列表:

表10. IPv6保留地址示例

IPv6 地址描述备注
::/128未指定的相当于IPv4中的 0.0.0.0
::1/128环回地址相当于IPv4中的 127.0.0.1
::ffff:0.0.0.0/96IPv4映射的IPv6地址较低的32位是IPv4地址,用于与IPv4主机和路由器兼容。
fe80::/10链接本地单播相当于IPv4中的169.254.0.0/16。
fc00::/7唯一的本地地址唯一的本地地址用于本地通信,只能在一组协作站点内路由。
ff00::/8多播 
2000::/3全局单播所有全局单播地址均从此池中分配。前3位是 001
2001:db8::/32, 3fff::/20文档文档中使用的IPv6地址前缀。

有关IPv6地址结构的更多信息,请参阅 RFC4291

7.3.4. 配置静态IPv6地址

要将FreeBSD系统配置为具有静态IPv6地址的IPv6客户端,需要设置IPv6地址。

执行以下命令以满足要求:

要指定默认路由器,请执行以下命令指定其地址:

要配置额外的IPv6任播地址,请将任播地址指定为 _aliasN ,如 rc.conf(5) 中所述,然后指定 anycast 选项:

请记住,应用程序不能绑定到 anycast 地址;在这种情况下,您需要使用别名地址。

7.3.5. 配置动态IPv6地址

要使用SLAAC动态配置接口的IPv6地址,请执行以下命令:

请注意,当启用IPv6数据包转发时(即 ipv6_gateway_enable=YES ),系统将不会配置SLAAC地址,除非 net.inet6.ip6.rfc6204w3 sysctl(8)变量设置为 1

7.3.6. 路由器通告和主机自动配置

本节演示如何在IPv6路由器上设置 rtadvd(8) 以通告IPv6网络前缀和默认路由。

要启用 rtadvd(8) ,请执行以下命令:

指定在其上进行IPv6路由器通告的接口非常重要。例如,要告诉 rtadvd(8) 使用 em0

接下来,创建配置文件 /etc/rtadvd.conf ,如下例所示:

em0 替换为要使用的接口,将 2001:db8:1f11:246:: 替换为分配的前缀。

对于专用 /64 子网,不需要更改其他任何内容。否则,将 prefixlen# 更改为正确的值。

7.3.7. IPv6和IPv4地址映射

当服务器上启用IPv6时,可能需要启用IPv4映射的IPv6地址通信。此兼容性选项允许将IPv4地址表示为IPv6地址。允许IPv6应用程序与IPv4通信,反之亦然,可能是一个安全问题。

在大多数情况下,此选项可能不是必需的,仅用于兼容性。此选项将允许仅支持IPv6的应用程序在双栈环境中与IPv4一起工作。这对于可能不支持纯IPv6环境的第三方应用程序最有用。

要启用此功能,请执行以下命令:

7.4. 无线网络

大多数无线网络都基于 IEEE®802.11标准 。

FreeBSD支持使用 802.11a、802.11b、802.11g和802.11n的网络。

一个基本的无线网络由多个与2.4GHz或5GHz频段广播的无线电通信的站组成,尽管这因地区而异,并且也在不断变化,以实现2.3GHz和4.9GHz范围内的通信。

配置无线网络有三个基本步骤:

  1. 扫描并选择一个接入点
  2. 对站点进行身份验证
  3. 配置IP地址或使用DHCP。

以下部分将讨论每个步骤。

7.4.1. 快速开始连接到无线网络

将FreeBSD连接到现有的无线网络是一种非常常见的情况。

此快速入门过程显示了使用基本身份验证连接到网络所需的步骤。下一节将给出更详细的程序。

第一步是从网络管理员处获取无线网络的服务集标识符(Service Set Identifier,SSID)和预共享密钥(Pre-Shared KeyPSK)。

第二步是将此网络的条目添加到 /etc/wpa_supplicant.conf

如果文件不存在,请创建它。有关格式化此文件中条目的详细信息,请参阅 wpa_supplicant.conf(5)

① 是无线网络的SSID。请将其替换为无线网络的名称。

② 是无线网络的PSK。请将其替换为无线网络的密码。

第三步是添加网络接口条目,以便在启动时配置网络。使用 sysctlnet.wlan.devices 获取网络设备接口。在下面的列表中,此sysctl的输出显示网络设备接口为“iwn0”。

在下面的sysrc行中,如果需要,将“iwn0”替换为sysctl命令的输出。

7.4.2. 基本无线配置

本节提供了配置无线网卡的更详细示例。要了解系统中有哪些无线网卡,请查看【7.2.1. 识别网络适配器】一节。

要使更改在重新启动后保持不变,请执行以下命令:

7.4.3. 扫描无线网络

可用的无线网络可以使用 ifconfig(8) 进行扫描。

要列出无线网络,请执行以下命令:

  1. SSID/MESH ID ——标识网络的名称。
  2. BSSID ——标识接入点的MAC地址。
  3. CAPS ——字段标识每个网络的类型和在那里运行的站的能力(有关更多详细信息,请参阅 ifconfig(8) 中的 list scan 定义)。

7.4.4. 无线网络的连接和身份验证

一旦从扫描的网络列表中选择了无线网络,就需要执行连接和身份验证。在绝大多数无线网络中,身份验证是通过路由器中配置的密码完成的。其他方案要求在数据流量流动之前完成加密握手,要么使用预共享密钥或秘密,要么使用涉及RADIUS等后端服务的更复杂的方案。

7.4.4.1. 使用WPA2/WPA/个人身份验证

无线网络中的身份验证过程由 wpa_supplicant(8) 管理。

wpa_supplicant(8) 配置将在 /etc/wpa_suppliant.conf 文件中进行。有关更多信息,请参阅 wpa_supplicant.conf(5)

一旦对无线网络进行了扫描,选择了一个网络并使用了密码(PSK),该信息将被添加到 /etc/wpa_supplicant.conf 文件中,如下例所示:

① SSID扫描技术。仅当网络隐藏时才需要使用此选项

② 网络名称。

③ 无线网络的密码。

下一步将在 /etc/rc.conf 文件中配置无线连接。

要使用静态地址,需要执行以下命令:

要使用动态地址,需要执行以下命令:

然后执行以下命令重新启动网络:

7.4.4.2. 使用开放网络进行身份验证

完成无线网络扫描并选择无线网络的SSID后,执行以下命令:

然后执行 dhclient(8) 以获取配置的地址:

7.4.5. 同时使用有线和无线连接

有线连接提供更好的性能和可靠性,而无线连接提供灵活性和移动性。笔记本电脑用户通常希望在两种连接之间无缝漫游。

在FreeBSD上,可以以“故障转移”(failover)的方式将两个甚至多个网络接口组合在一起。这种配置使用一组网络接口中最优选和可用的连接,当链路状态发生变化时,操作系统会自动切换。

链路聚合和故障转移在【34.9. 链路聚合和失效转移】中有所介绍,在【示例46. 以太网和无线接口之间的故障转移模式】下提供了使用有线和无线连接的示例。

7.5. 主机名

主机名表示网络上主机的完全限定域名(FQDN)。

7.5.1. 检查当前主机名

hostname(1) 可用于检查当前主机名:

7.5.2. 更改主机名

要更改主机的主机名并在重新启动后保持不变,请执行以下命令:

7.6. DNS

DNS可以被理解为一个电话簿(telephone directory),其中IP被标识为主机名,反之亦然。

有三个文件处理FreeBSD系统如何与DNS交互。这三个文件是 hosts(5)resolv.conf(5)nsswitch.conf(5)

除非 /etc/nsswitch.conf 文件中另有说明,否则FreeBSD将查看 /etc/hosts 文件中的地址,然后查看 /etc/resolv.conf 文件中的DNS信息。

7.6.1. 本地地址

/etc/hosts 文件是一个简单的文本数据库,它提供主机名到IP地址的映射。通过局域网连接的本地计算机的条目可以添加到此文件中,以实现简单的命名目的,而不是设置DNS服务器。此外, /etc/hosts 可用于提供互联网名称的本地记录,从而减少了查询外部DNS服务器以获取常用名称的需要。

例如,在本地环境中有 www/gitlab-ce 的本地实例的情况下,可以按如下方式将其添加到 /etc/hosts 文件中:

7.6.2. 配置名称服务器

FreeBSD系统如何访问互联网域名系统(DNS)由 resolv.conf(5) 控制。

/etc/resolv.conf 中最常见的条目是:

典型的 /etc/resolv.conf 如下:

使用DHCP时, dhclient(8) 通常会用从DHCP服务器接收到的信息重写 /etc/resolv.conf

如果正在进行配置的计算机不是DNS服务器,则可以使用 localunbound(8) 来提高DNS查找性能。

要在启动时启用它,请执行以下命令:

要启动 local-unbound(8) 服务,请执行以下命令:

7.7. 故障排除

在排除硬件和软件配置故障时,请先检查简单的事情。

7.7.1. 有线网络故障排除

如果卡工作正常,但性能不佳,请通读 tuning(7) 。此外,请检查网络配置,因为不正确的网络设置会导致连接速度变慢。

如果系统无法将数据包路由到目标主机,则会出现 No route to host 消息。如果没有指定默认路由或拔下电缆,则可能会发生这种情况。检查 netstat -rn 的输出,并确保有到主机的有效路由。如果没有,请阅读【34.2. 网关和路由】。

ping: sendto: Permission denied 错误消息通常是由配置错误的防火墙引起的。如果FreeBSD上启用了防火墙,但没有定义任何规则,默认策略是拒绝所有流量,甚至 ping(8) 。有关更多信息,请参阅【33. 防火墙】。

7.7.2. 无线网络故障排除

本节介绍了一些帮助解决常见无线网络问题的步骤。