网络基础
Table of Contents
FreeBSD 是理想的互联网或内网服务器操作系统,能在极高负载下提供稳健的网络服务 并高效使用内存,在数千个并发用户进程下保持良好响应时间
FreeBSD 网络配置涉及多个核心命令和配置文件:
| 命令/文件 | 用途 |
| ifconfig | 配置网络接口参数 |
| route | 手动操作网络路由表 |
| /etc/rc.conf | 系统启动配置的核心文件,网络接口的持久化配置均存储在此文件中 |
| /etc/resolv.conf | 配置 DNS 解析器信息 |
| /etc/hosts | 提供本地主机名到 IP 地址的静态映射 |
网络模型基础
计算机网络是将地理位置不同、具有独立功能的多台计算机及其外部设备,通过通信线路连接起来的系统。在网络操作系统、网络管理软件及网络通信协议的管理和协调下,该网络实现资源共享和信息传递
FreeBSD 网络子系统基于 TCP/IP 协议族实现,遵循互联网协议套件的分层架构
TCP/IP 协议族采用四层模型组织网络功能:
| 层次 | 名称 | 功能说明 |
| 第一层 | 网络接口层 Link Layer | 负责在物理网络介质上发送和接收数据帧,处理硬件地址 MAC 地址 解析。该层对应 FreeBSD 中的网络接口驱动程序,其配置由 ifconfig 命令管理。以太网帧的发送和接收、地址解析 ARP , Address Resolution Protocol 均在该层完成 |
| 第二层 | 互联网层 Internet Layer | 负责数据包的路由和转发,核心协议为 IP Internet Protocol ,同时处理逻辑寻址 IP 地址 、分片与重组、路由选择等功能。路由表管理和 route 命令操作均属于该层 |
| 第三层 | 传输层 Transport Layer | 提供端到端的通信服务,主要协议为 TCP Transmission Control Protocol 和 UDP User Datagram Protocol 。TCP 提供可靠的面向连接传输,UDP 提供无连接的不可靠传输。FreeBSD 实现了多 TCP 栈共存架构,允许系统同时加载多个 TCP 协议栈实现 |
| 第四层 | 应用层 Application Layer | 包含多种面向用户的网络应用协议,如 HTTP、SSH、DNS、SMTP 等。FreeBSD 通过 Ports 和 pkg 提供了大量网络服务软件 |
TCP/IP 四层模型与数据封装过程如下:
识别网络适配器
FreeBSD 支持多种有线和无线网络适配器。查看所用 FreeBSD 版本的硬件兼容性列表,确认网络适配器是否受支持
通过 pciconf 命令识别网络适配器
要获取系统使用的网络适配器,执行以下命令:
$ pciconf -lv | grep -A1 -B3 network
输出示例如下:
em0@pci0:2:1:0: class=0x020000 rev=0x01 hdr=0x00 vendor=0x8086 device=0x100f subvendor=0x15ad subdevice=0x0750 vendor = 'Intel Corporation' device = '82545EM Gigabit Ethernet Controller (Copper)' class = network subclass = ethernet iwm0@pci0:3:0:0: class=0x028000 rev=0x00 hdr=0x00 vendor=0x8086 device=0x4237 subvendor=0x8086 subdevice=0x1211 vendor = 'Intel Corporation' device = 'PRO/Wireless 5100 AGN [Shiloh] Network Connection' class = network
@ 符号前的文本是控制该设备的驱动程序名称
在此示例中,分别是 em(4) 和 iwm(4)
通过 ifconfig 命令识别网络适配器
使用 ifconfig 命令可查看系统中的网络接口列表及其状态。输出应类似于以下内容:
em0: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500 options=4e504bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,LRO,VLAN_HWFILTER,VLAN_HWTSO,RXCSUM_IPV6,TXCSUM_IPV6,HWSTATS,MEXTPG> ether 00:0c:29:84:0f:86 inet 192.168.5.22 netmask 0xffffff00 broadcast 192.168.5.255 inet6 fe80::20c:29ff:fe84:f86%em0 prefixlen 64 scopeid 0x1 inet6 240e:341:207:a600:2d60:b653:3a68:8605 prefixlen 64 autoconf pltime 101808 vltime 188208 media: Ethernet autoselect (1000baseT <full-duplex>) status: active nd6 options=823<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL,STABLEADDR> lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 16384 options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6> inet 127.0.0.1 netmask 0xff000000 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2 groups: lo nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL> wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=200001<RXCSUM,RXCSUM_IPV6> ether 20:0d:b0:c4:ab:59 inet 192.168.5.23 netmask 0xffffff00 broadcast 192.168.5.255 groups: wlan ssid test_5G channel 153 (5765 MHz 11a vht/80-) bssid e4:60:4d:97:00:e8 regdomain FCC country US authmode WPA2/802.11i privacy ON deftxkey UNDEF AES-CCM 2:128-bit AES-CCM ucast:128-bit txpower 17 bmiss 7 mcastrate 6 mgmtrate 6 scanvalid 60 ampdulimit 64k ampdudensity 2 shortgi -stbc -uapsd vht vht40 vht80 -vht160 -vht80p80 wme roaming MANUAL parent interface: rtwn0 media: IEEE 802.11 Wireless Ethernet VHT mode 11ac status: associated nd6 options=829<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL,STABLEADDR>
FreeBSD 采用 驱动程序名称 后接 单元号 的方式为网络接口命名。单元号表示适配器在启动时被检测到的顺序,或后续被检测到时的顺序
例如,em0 是系统中使用 em(4) 驱动程序的第一块网卡,wlan0 是使用 rtwn(4) 驱动创建的第一个无线接口
该示例显示以下设备:
- em0:以太网接口
- lo0:本地回环接口,用于本机内部通信,不属于物理网卡。可用于性能分析、软件测试与本地通信
- wlan0:通用 WiFi 802.11 链路层接口,用于连接无线网络
如果 ifconfig 输出中仅显示 lo0 接口,则表示系统未识别物理网卡 此时应检查网卡硬件连接和驱动加载状态 可通过 dmesg | grep ether 命令查看网卡驱动加载日志 该示例显示 em0、wlan0 已启动且运行正常
关键指示项:
| 指示项 | 说明 |
| UP | 表示接口已被管理员启用(处于 up 状态),当前 em0 和 wlan0 均已启用 |
| inet(IPv4 地址) | 有线接口 em0 的地址更新为 192.168.5.22;无线接口 wlan0 的地址为 192.168.5.23 |
| inet6(IPv6 地址) | em0 当前拥有两个 IPv6 地址,分别是链路本地地址 fe80::20c:29ff:fe84:f86%em0 和全局动态地址 240e:341:207:a600:2d60:b653:3a68:8605 |
| netmask(子网掩码) | em0 和 wlan0 的掩码均为 0xffffff00,这等同于标准的 255.255.255.0 |
| broadcast(广播地址) | 两个接口当前所在网段的有效广播地址均为 192.168.5.255 |
| ether(MAC 地址) | 有线接口 em0 的物理地址是 00:0c:29:84:0f:86;无线接口 wlan0 的物理地址是 20:0d:b0:c4:ab:59 |
| media(物理媒体) | em0 显示为以太网自动选择模式(Ethernet autoselect (1000baseT <full-duplex>));wlan0 显示为无线高速模式(IEEE 802.11 Wireless Ethernet VHT mode 11ac) |
| status(链接状态) | em0 的状态为 active,说明网线已连接且载波信号正常;wlan0 的状态为 associated,说明已成功关联到无线基站(SSID 外部显示为 test_5G) |
此外, wlan0 的关键指示项如下:
| 指示项 | 说明 |
| ssid(无线网络名称) | 当前连接的 Wi-Fi 名称为 test_5G |
| channel(工作信道与频率) | 当前工作在 153 信道,频率为 5765 MHz(属于 5GHz 频段),且启用了 80MHz 的频宽(vht/80-) |
| bssid(无线路由器 MAC 地址) | 当前所连 Wi-Fi 热点的物理地址是 e4:60:4d:97:00:e8 |
| country / regdomain(国家区域代码与无线监管域) | 当前遵从美国标准(country US)以及美国联邦通信委员会(regdomain FCC)的无线电法律法规 |
| authmode / privacy(认证与加密模式) | 认证方式为 WPA2/802.11i(目前主流的安全无线认证标准),且隐私加密已开启(privacy ON),单播与传输密钥采用 AES-CCM (128-bit) |
| txpower(发射功率) | 当前无线的发射功率为 17 dBm |
如果 ifconfig(8) 输出类似于以下内容,则表示网络接口待配置:
em0: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500 options=4e504bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,L RO,VLAN_HWFILTER,VLAN_HWTSO,RXCSUM_IPV6,TXCSUM_IPV6,HWSTATS,MEXTPG> ether 00:0c:29:84:0f:86 inet6 fe80::20c:29ff:fe84:f86%em0 prefixlen 64 scopeid 0x1 inet6 240e:341:207:a600:2d60:b653:3a68:8605 prefixlen 64 autoconf pltime 1018 08 vltime 188208 media: Ethernet autoselect (1000baseT <full-duplex>) status: active nd6 options=823<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL,STABLEADDR> lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 16384 options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6> inet 127.0.0.1 netmask 0xff000000 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2 groups: lo nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
网关和路由
路由 是系统寻找通往其他系统的网络路径的机制
- 每条路由由一对地址定义,分别表示 目标 和 网关
- 路由表明:连接指定目标时,应经由指定网关发送数据包
- 目标分为三种类型: 单台主机 、 子网 和 默认
- “默认路由”在其他路由均不适用时生效
- 网关同样分为三种类型: 单台主机 、 接口 (也称为 链路 )和 以太网硬件 MAC地址
- 已知路由存储于路由表中
- 目标分为三种类型: 单台主机 、 子网 和 默认
路由基础
使用 netstat(1) 可查看 FreeBSD 系统的路由表
添加 -n 选项可避免反向 DNS 解析延迟
这在排查网络问题时尤为重要
$ netstat -rn Routing tables Internet: # IPv4 # 路径 网关 标志 接口 过期时间 Destination Gateway Flags Netif Expire default 192.168.179.2 UGS em0 # 默认路由,通过 em0 接口 localhost link#3 UH lo0 # 回环地址,使用 lo0 接口 192.168.5.0/24 link#2 U em1 # 192.168.5.0/24 192.168.5.16 link#3 UHS lo0 # 192.168.5.16 192.168.179.0/24 link#1 U em0 # 192.168.179.0/24 子网 192.168.179.128 link#3 UHS lo0 # 本地主机地址 192.168.179.128 Internet6: # IPv6 Destination Gateway Flags Netif Expire ::/96 link#3 URS lo0 # IPv4 兼容 IPv6 地址块(已废弃,RFC 4291) default fe80::5%em1 UG em1 # 默认 IPv6 路由,下一跳是链路本地地址 fe80::5,标志 UG 表示可达且为网关 localhost link#3 UHS lo0 # IPv6 本地回环地址 ::1 ::ffff:0.0.0.0/96 link#3 URS lo0 # IPv4 映射 IPv6 地址 240e:341:22b:ae00: link#2 U em1 # 全球单播地址 240e:341:22b:ae00: link#3 UHS lo0 # 本地主机路由 fe80::%lo0/10 link#3 URS lo0 # 链路本地 IPv6 网络 fe80::%em0/64 link#1 U em0 # em0 接口链路本地 IPv6 地址 fe80::20c:29ff:fe8 link#3 UHS lo0 # 静态主机路由 fe80::%em1/64 link#2 U em1 # em1 接口链路本地 IPv6 地址 fe80::20c:29ff:fe8 link#3 UHS lo0 # 静态主机路由(与前条 fe80::20c:29ff:fe8 条目重复,属路由表缓存正常现象) fe80::%lo0/64 link#3 U lo0 # lo0 接口链路本地子网 fe80::1%lo0 link#3 UHS lo0 # lo0 本地主机链路本地地址,静态主机路由 ff02::/16 link#3 URS lo0 # IPv6 多播地址
该示例的条目如下:
default : 默认路由。本地系统需连接远程主机时,检查路由表以确定是否存在已知路径。如果远程主机匹配表中某条目,系统即检查能否通过该条目指定的接口完成连接。 默认路由在无更具体前缀匹配时采用,不受其他路径状态的影响。对于局域网中的主机,默认路由的 Gateway 字段应设为可直接连接互联网的系统。读取该条目时,应确认 Flags 列指示 网关可达 UG
该机器具备双栈网络能力,IPv4 和 IPv6 出口分别依赖不同网卡(em0 和 em1)
- IPv4 网络中,默认网关为 192.168.179.2,标记为 UGS(Up、Gateway、Static)。所有发往未知外部网络(如互联网)的 IPv4 流量均经 em0 接口发送至该路由器转发
- IPv6 部分中,默认路由以链路本地地址 fe80::5%em1 指定下一跳,该下一跳通常为 ISP 提供的路由器。标志为 UG
- 所有未匹配的 IPv6 流量经 em1 接口发出
- 链路本地地址为 IPv6 特性,仅用于本地链路通信,不等同于公网可达地址
- 对于充当对外网关的主机,其默认路由指向与 互联网服务提供商 ISP 相连的网关
localhost:第二条路由。Netif 列中为 localhost 指定的接口是 lo0,也称为回环设备
所有发往该目标的流量均保留于本机内部,不通过网络发送
子网: IPv4 路由表显示该设备同时接入两个局域网:192.168.5.0/24 和 192.168.179.0/24
- 对应网关分别为 link#2 和 link#1
- 标志仅含 U Up ,表明二者均为 直连网络
该机器与这两个网段内其他设备(如 192.168.5.x 范围内的计算机)通信时,数据包无须经由路由器 而是通过 ARP 解析目标 MAC 地址后,直接经 em1 和 em0 接口以链路层单播帧发送
全球单播地址: IPv6 路由(Internet6)中,以 240e:341:22b:ae00: 为首的条目绑定于 em1 接口。该地址属于 全球单播地址 Global Unicast Address
通常由运营商(如中国电信,以 240e 开头)分配 理论上可在互联网中路由,但实际访问能力取决于防护策略与服务配置
标志: Flags 列展示各路由的属性。下表汇总了常见的路由表标志及其含义
Table 2: 常见的路由表标志 标志 目的 U 路由可用 H 路由目标是单个主机 G 将此目的地的任何流量转发到此网关,由网关决定如何进一步转发 S 该路由是静态配置的 M 路由已被重定向修改 B 黑洞路由:静默丢弃匹配的数据包 D 由重定向动态创建 L 链路层路由,涉及以太网硬件地址引用 R 拒绝路由:目标主机或网络不可达 b 路由表示广播地址
跟踪路由信息
地址空间 分配给某网络后,服务提供商会配置自身路由表,确保所有流量均发往该站点链路。外部站点如何确定应将数据包发往该网络的 ISP
互联网通过 全球路由系统 跟踪所有已分配地址空间,并界定其与 互联网主干网 承载互联网流量的核心线路 的连接节点。每台主干路由器均保存一份 主路由表 ,将特定网络的流量指向对应的主干运营商,再经由一系列服务提供商逐级传递至目标网络
服务提供商必须向主干站点通告自身的连接点,使流量能够到达该网络。该过程称为 路由传播
路由传播偶尔出现故障,导致部分站点无法连通。此时,查找路由断点的常用命令是 traceroute
IPv6 使用 traceroute6,在 ping 失败时尤为有用
使用 traceroute 必须提供远程主机的地址。输出将显示路径上的网关主机,最终抵达目标主机或因连接中断而终止。以下为对 freebsd.org 域名的 IPv6 路径跟踪:
$ traceroute6 freebsd.org
traceroute6 to freebsd.org (2610:1c1:1:606c::50:15) from 240e:341:22b:ae00:f534:e5cb:2367:c033, 64 hops max, 28 byte packets
1 * * *
2 240e:c::201 (240e:c::201) 6.427 ms 5.508 ms 6.578 ms
3 *
240e:c:1:20e::2 (240e:c:1:20e::2) 6.229 ms 5.737 ms
4 * * *
5 240e::1:11:46:5c02 (240e::1:11:46:5c02) 10.729 ms * *
6 240e::f:1:6601:503 (240e::f:1:6601:503) 13.093 ms * 11.332 ms
7 240e:0:a::c9:360d (240e:0:a::c9:360d) 15.618 ms
240e:0:a::c9:3649 (240e:0:a::c9:3649) 16.334 ms *
8 * * *
9 *
zayo.ae10.mpr4.sjc7.us.zip.zayo.com (2001:438:ffff::407e:2f9) 180.002 ms 179.112 ms
10 ae34.mpr1.ewr4.us.zip.zayo.com (2001:438:ffff::407d:1455) 244.026 ms 243.263 ms *
11 2001:438:fffe::24ba (2001:438:fffe::24ba) 246.736 ms * 245.756 ms
12 cs89-cs80.nyinternet.net (2610:1c1::2502) 218.700 ms 218.396 ms 217.715 ms
13 2610:1c1::803 (2610:1c1::803) 228.099 ms 227.280 ms 226.003 ms
14 wfe0.nyi.freebsd.org (2610:1c1:1:606c::50:15) 214.724 ms 216.682 ms *
| 序号 | 节点 | 说明 |
| 1 | * | 本地网络第一跳无响应 |
| 2 | 240e:c::201 (240e:c::201) | 运营商接入网关 |
| 3、4 | * | 骨干网前级节点无响应,可能丢弃了 ICMPv6 |
| 5 | 240e::1:11:46:5c02 (240e::1:11:46:5c02) | 中国电信核心骨干路由器,国内长途汇聚节点 |
| 6 | 240e::f:1:6601:503 (240e::f:1:6601:503) | 中国电信国际出口前的骨干节点,部分探测包丢失 |
| 7 | 240e:0:a::c9:360d (240e:0:a::c9:360d), 240e:0:a::c9:3649 (240e:0:a::c9:3649) | 中国电信向海外出口的跨洲骨干路由器 |
| 8 | * | 无响应节点,可能丢弃了 ICMPv6 |
| 9 | zayo.ae10.mpr4.sjc7.us.zip.zayo.com (2001:438:ffff::407e:2f9) | Zayo 美国加州圣何塞骨干网(Zip Zayo)入口节点 |
| 10 | ae34.mpr1.ewr4.us.zip.zayo.com (2001:438:ffff::407d:1455) | Zayo 美国纽瓦克骨干网节点,负责东海岸流量汇聚 |
| 11 | 2001:438:fffe::24ba (2001:438:fffe::24ba) | Zayo 美国骨干网最后一跳,接近 NYInternet 入口 |
| 12 | cs89-cs80.nyinternet.net (2610:1c1::2502) | NYInternet 美国运营商核心路由器,接入 freebsd.org 网络 |
| 13 | 2610:1c1::803 (2610:1c1::803) NYInternet | 核心骨干节点,负责 freebsd.org 服务器的流量分发 |
| 14 | wfe0.nyi.freebsd.org (2610:1c1:1:606c::50:15) | freebsd.org 服务器终端节点,traceroute6 的目标 |
配置 IPv4
配置动态 IPv4 地址
如果网络中有 DHCP 服务器,可使用 DHCP 动态获取 IP 地址。FreeBSD 使用 dhclient(8) 作为 DHCP 客户端 ,dhclient(8) 可自动获取 IP 地址、子网掩码和默认路由器
dhclient(8) 不支持 DHCPv6(RFC 3315/RFC 8415) IPv6 动态地址需使用 rtsold(8)(SLAAC)或第三方 DHCPv6 客户端(如 dhcp6c)
要使接口使用 DHCP,执行以下命令:
$ sysrc ifconfig_em0="DHCP"
可以手动运行 dhclient(8):
$ dhclient em0
DHCPREQUEST on em0 to 255.255.255.255 port 67
DHCPACK from 192.168.1.1
bound to 192.168.1.19 -- renewal in 43200 seconds.
dhclient(8) 也可在后台启动。后台运行可能影响依赖网络的程序,但多数情况下能加快启动速度
要在后台执行 dhclient(8),执行以下命令:
$ sysrc background_dhclient="YES"
随后重启网络接口:
$ service netif restart
配置静态 IPv4 地址
也可在命令行通过 ifconfig(8) 配置网络接口,但若不同时将这些配置写入 /etc/rc.conf 文件,重启后配置将丢失。可通过以下命令设置 IP 地址:
$ ifconfig em0 inet 192.168.1.150/24
要使更改在重启后持久化,执行以下命令:
$ sysrc ifconfig_em0="inet 192.168.1.150 netmask 255.255.255.0"
一次性设置默认路由:
$ route add default 192.168.1.1
永久添加默认路由器:
$ sysrc defaultrouter="192.168.1.1"
将 DNS 服务器地址添加到 /etc/resolv.conf 文件:
nameserver 223.5.5.5 # 指定首选 DNS 服务器为阿里云公共 DNS nameserver 223.6.6.6 # 指定备用 DNS 服务器为阿里云公共 DNS
随后重启网络接口和路由:
$ service netif restart $ service routing restart
可使用 ping(8) 测试连接:
$ ping -4c2 FreeBSD.org PING FreeBSD.org (96.47.72.84): 56 data bytes 64 bytes from 96.47.72.84: icmp_seq=0 ttl=51 time=239.916 ms 64 bytes from 96.47.72.84: icmp_seq=1 ttl=51 time=236.443 ms --- FreeBSD.org ping statistics --- 2 packets transmitted, 2 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 236.443/238.179/239.916/1.737 ms
如能正常收到 ICMP 响应报文,表明网络已连通
配置 IPv6
IPv6 是 IPv4 的后继协议。IPv6 相对于 IPv4 提供了多项优势和新功能:
- 其 128 位地址空间可容纳约 3.4×10^38 个地址,从而解决了 IPv4 地址短缺与耗尽问题
- 路由器仅在路由表中存储网络聚合地址,通过地址聚合减少路由表条目,这与 IPv4 相比大幅降低了路由器的内存和 CPU 需求
- 地址自动配置 RFC 4862
- 以多播取代广播地址
支持 IPsec IP 安全
但非强制要求(RFC 6434 已将 IPv6 节点对 IPsec 的实现要求由 MUST 调整为 SHOULD,因此成为推荐而非必选)
- 简化的头部结构
- 对移动 IP 的支持
- IPv6 到 IPv4 的过渡机制
FreeBSD 集成了 KAME 项目 IPv6 参考实现,并包含 IPv6 所需的全部组件
KAME 项目已于 2006 年结束,其代码由 FreeBSD 项目继续维护和演进
IPv6 地址有三种不同类型:
| 类型 | 说明 |
| 单播 Unicast | 发送到单播地址的数据包到达属于该地址的接口 |
| 任播 Anycast | 地址在语法上与单播地址无法区分,但指向一组接口。发往任播地址的数据包将到达最近的接口 |
| 多播 Multicast | 地址标识一组接口。发往多播地址的数据包将到达属于多播组的所有接口。IPv4 广播地址(通常为 xxx.xxx.xxx.255)在 IPv6 中由多播地址表示 |
读取 IPv6 地址时,规范形式表示为 x:x:x:x:x:x:x:x ,其中每个 x 代表一个 16 位十六进制值
例如 FEBC:A574:382B:23C1:AA49:4592:4EFE:9982
- IPv6 地址中常出现连续的 全零字段 :: 双冒号 可用于替换地址中一段连续的全零字段
每个十六进制值最多可省略三个前导零
例如,fe80::1 对应规范形式 fe80:0000:0000:0000:0000:0000:0000:0001
部分 IPv6 地址为保留地址:
| IPv6 地址 | 描述 | 说明 |
| ::/128 | 未指定地址 | 等同于 IPv4 中的 0.0.0.0 |
| ::1/128 | 回环地址 | 等同于 IPv4 中的 127.0.0.1 |
| ::ffff:0.0.0.0/96 | IPv4 映射的 IPv6 地址 | 低 32 位是 IPv4 地址 |
| fe80::/10 | 链路本地单播 | 等同于 IPv4 中的 169.254.0.0/16 |
| fc00::/7 | 唯一本地 | 仅在协作站点集合内可路由 |
| ff00::/8 | 多播 | — |
| 2000::/3 | 全局单播 | 所有全局单播地址从此池分配 |
| 2001:db8::/32 | 文档用途 | 用于文档中的 IPv6 地址前缀 |
配置动态 IPv6 地址
要使用 SLAAC 动态配置接口的 IPv6 地址:
$ sysrc ifconfig_em0_ipv6="inet6 accept_rtadv" $ sysrc rtsold_enable="YES"
注意:启用 IPv6 数据包转发 ipv6_gateway_enable=YES 后,除非将 net.inet6.ip6.rfc6204w3 sysctl(8) 变量设置为 1 ,否则系统不会配置 SLAAC 地址
配置静态 IPv6 地址
要将 FreeBSD 系统配置为具有静态 IPv6 地址的 IPv6 客户端,需设置 IPv6 地址:
$ sysrc ifconfig_em0_ipv6="inet6 2001:db8:4672:6565:2026:5043:2d42:5344 prefixlen 64"
要分配默认路由器:
$ sysrc ipv6_defaultrouter="2001:db8:4672:6565::1"
可使用 ping(8) 测试连接:
$ ping -6c2 FreeBSD.org PING(56=40+8+8 bytes) 240e:341:228:f400:cfbe:d56:7f75:26e0 --> 2610:1c1:1:606c::50:15 16 bytes from 2610:1c1:1:606c::50:15, icmp_seq=0 hlim=47 time=223.377 ms 16 bytes from 2610:1c1:1:606c::50:15, icmp_seq=1 hlim=47 time=223.348 ms --- FreeBSD.org ping statistics --- 2 packets transmitted, 2 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 223.348/223.362/223.377/0.014 ms
如能正常收到 ICMP 响应报文,表明网络已连通
网卡别名
FreeBSD 的常见用途之一是虚拟站点托管,即一台服务器在网络中呈现为多台服务器 其实现方式是将多个网络地址分配给单个接口
一个网络接口可配置一个 主 IP 地址 Primary Address 以及任意数量的 附加 IP 地址 Secondary Addresses ,它们在底层网络通信中具有同等效力。
“别名”(alias)地址只是早期操作系统为了方便管理而沿用的传统称呼,对于物理网卡而言并无区别 实际上,IPv6 本身即支持多地址
这些别名通常通过在 /etc/rc.conf 中添加 别名条目 来实现,如下所示:
$ sysrc ifconfig_em0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"
别名条目必须以 alias0 开头,使用递增的数字
如 alias0、alias1,依此类推。配置过程将在第一个缺失的数字处停止
别名子网掩码的计算非常重要。对于给定的接口,必须有一个地址正确表示网络的子网掩码。任何其他属于该网络的地址必须使用全 1 的子网掩码,表示为 255.255.255.255 或 0xffffffff
例如,假设以下情况:em0 接口连接到两个网络: 10.1.1.0、子网掩码为 255.255.255.0; 202.0.75.16、子网掩码为 255.255.255.240 我们需要为系统配置两个网段的 IP 地址范围:10.1.1.1 到 10.1.1.5,以及 202.0.75.17 到 202.0.75.20
- 只有给定网络范围中的第一个地址应具有实际的子网掩码
- 其余地址(10.1.1.2 到 10.1.1.5 和 202.0.75.18 到 202.0.75.20)必须配置为子网掩码为 255.255.255.255
网卡 em0 的 IP 别名结构如下图所示:
以下 /etc/rc.conf 条目将接口配置为适应此场景:
$ sysrc ifconfig_em0="inet 10.1.1.1 netmask 255.255.255.0" $ sysrc ifconfig_em0_alias0="inet 10.1.1.2 netmask 255.255.255.255" $ sysrc ifconfig_em0_alias1="inet 10.1.1.3 netmask 255.255.255.255" $ sysrc ifconfig_em0_alias2="inet 10.1.1.4 netmask 255.255.255.255" $ sysrc ifconfig_em0_alias3="inet 10.1.1.5 netmask 255.255.255.255" $ sysrc ifconfig_em0_alias4="inet 202.0.75.17 netmask 255.255.255.240" $ sysrc ifconfig_em0_alias5="inet 202.0.75.18 netmask 255.255.255.255" $ sysrc ifconfig_em0_alias6="inet 202.0.75.19 netmask 255.255.255.255" $ sysrc ifconfig_em0_alias7="inet 202.0.75.20 netmask 255.255.255.255"
一种更简洁的表达方式是使用以 空格分隔 的 IP 地址范围。第一个地址将使用指定的子网掩码,而额外的地址将使用子网掩码 255.255.255.255
$ sysrc ifconfig_em0_aliases="inet 10.1.1.1-5/24 inet 202.0.75.17-20/28"
主机名
主机名代表主机在网络上的完全限定域名 FQDN Fully Qualified Domain Name
检查当前主机名:
$ hostname ykla
临时更改主机名:
root@ykla:/home/ykla $ hostname f # 将主机名由 ykla 临时修改为 f root@f:/home/ykla $
更改主机名并使其在重启后持久化:
$ sysrc hostname="f"
DNS
可将 DNS 类比为电话簿,其中 IP 地址与主机名相互对应。除非 /etc/nsswitch.conf 文件中另有说明,FreeBSD 将首先查看 /etc/hosts 文件中的地址,随后查看 /etc/resolv.conf 文件中的 DNS 信息
相关文件结构:
/etc/ ├── rc.conf # 系统启动配置文件 ├── resolv.conf # DNS 解析服务器配置文件 └── resolvconf.conf # resolvconf 服务配置文件
本地地址 hosts 文件
/etc/hosts 文件是一个简单的文本数据库,提供主机名到 IP 地址的映射。通过 LAN 连接的本地计算机条目可添加到此文件中,用于简单的主机名解析,无须设置 DNS 服务器
- 此外,/etc/hosts 文件可提供互联网域名的本地记录,减少对外部 DNS 服务器的查询需求。
例如,在本地环境中有 www/gitlab-ce 的本地实例,可以将如下行添加到 /etc/hosts 文件:
192.168.1.150 git.example.com git
配置 DNS 名称服务器
FreeBSD 系统访问 Internet 域名系统(DNS)的方式由 resolv.conf(5) 控制。 /etc/resolv.conf 文件中最常见的条目是:
| 条目 | 说明 |
| nameserver | 解析器应查询的名称服务器的 IP 地址。服务器按列出的顺序查询,最多三个 |
| search | 主机名查找的搜索列表。通常由本地主机名的域确定 |
| domain | 本地域名 |
典型的 /etc/resolv.conf 文件如下:
search example.com nameserver 223.5.5.5 nameserver 223.6.6.6
- search 和 domain 选项互斥;如果两者都指定,只有最后一个生效
- 使用 DHCP 时,dhclient(8) 通常会用从 DHCP 服务器接收的信息重写 /etc/resolv.conf 文件
由于动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)客户端在获取网络配置时会通过 resolvconf 服务重写 /etc/resolv.conf 手动编辑该文件后,系统重启时配置可能被覆盖
如需使用手动配置的 DNS 服务器而不希望系统自动更新覆盖,可 禁用 resolvconf 服务。编辑 /etc/resolvconf.conf 文件(如不存在则创建),写入 resolvconf=NO 一行,该配置将禁用系统对 DNS 配置文件的自动更新
网络故障排除
首先检查以下基本要素:
- 电源连接是否正常?
- 路由器是否正常工作?
- 宽带或网络费用是否缴纳?
- 是否是区域性大规模网络中断事件?
- 计算机的时间是否正确?
- 网线是否连接正常?
- 网络服务是否正确配置?
- 防火墙是否正确配置?
- 网卡是否受 FreeBSD 支持?
如果网卡工作正常但性能不佳,可参阅 tuning(7) 。不正确的网络设置可能导致连接缓慢,应同时检查网络配置
“No route to host”消息表示系统无法将数据包路由到目标主机。这通常是因为未指定默认路由或网线未连接
- 可使用 route get <目标地址> 命令查看系统对特定目标的路由决策
- 再检查 netstat -rn 的输出,确保有到主机的有效路由
错误消息 ping: sendto: Permission denied 通常由防火墙配置错误引起
如果直接加载了 IPFW 防火墙模块但未配置任何规则,IPFW 的默认规则 65535 会拒绝所有流量,甚至是 ping(8)
通过 rc.conf 启用防火墙时:
- firewall_type 的默认值为 "UNKNOWN",此时不会添加任何放行规则,仅有默认规则 65535(deny all)生效
- 将 firewall_type 显式设置为 "open",则 IPFW 会在规则 65000 处添加放行规则,覆盖默认的拒绝行为
PF 和 IPFilter 无规则时默认放行
查看网卡速率
如需实时监控网络接口的流量统计信息,可使用 systat 工具的网络接口视图。该命令以指定的刷新间隔显示各网络接口的接收和发送流量数据:
$ systat -ifstat 2
其中 -ifstat 参数指定显示网络接口信息,数字 2 表示刷新间隔为 2 秒
查看 FreeBSD 下载流量 bwm-ng
如需查看更详细的网络流量统计,可安装 bwm-ng 工具,该工具提供多种流量显示格式和交互功能:
$ pkg install bwm-ng # 安装 bwm-ng $ bwm-ng bwm-ng v0.6.3 (probing every 0.500s), press 'h' for help input: getifaddrs type: rate / iface Rx Tx Total ============================================================================== em0: 2.04 MB/s 6.03 KB/s 2.05 MB/s lo0: 0.00 B/s 0.00 B/s 0.00 B/s vm-public: 2.04 MB/s 2.05 MB/s 4.09 MB/s tap0: 5.49 KB/s 2.04 MB/s 2.04 MB/s ------------------------------------------------------------------------------ total: 4.09 MB/s 4.09 MB/s 8.18 MB/s
附录:/etc/rc.conf 网络配置示例
修改 /etc/rc.conf 文件后,需重启系统或依次运行命令 service netif restart 与 service routing restart 来应用网络更改
主机名(不得为空,否则无法使用 Xorg):
hostname="ykla"
动态 DHCP 方式
动态 DHCP 方式:使网卡 igc0 使用 DHCP:
ifconfig_igc0="DHCP"
静态 IP 方式
静态 IP 方式:将网卡 igc0 的 IPv4 设置为 192.168.5.77,子网掩码为 255.255.255.0:
ifconfig_igc0="inet 192.168.5.77 netmask 255.255.255.0"
默认网关/默认路由,通常为路由器 IP 地址:
defaultrouter="192.168.5.1"
为网卡 igc0 设置别名 IPv4 192.168.5.12,子网掩码为 255.255.255.255(与主地址同子网时必须使用全 1 掩码)从而拥有额外的 IPv4 地址:
ifconfig_igc0_alias0="inet 192.168.5.12 netmask 255.255.255.255"
注意:如果别名地址与主地址位于同一子网,必须将子网掩码设为 255.255.255.255(0xffffffff),否则会产生重复路由错误
不同子网的别名则使用该子网正常的子网掩码
静态路由:
static_routes="static1 static2"
在 /etc/rc.conf 文件中,如果需要一次性写入多个配置项,只能使用 ABC_XYZ="xxx yyy ccc ddd" 这种格式。如果写成以下形式是 错误的:
ABC_XYZ="xxx" # 第一行 ABC_XYZ="yyy" ABC_XYZ="ccc" ABC_XYZ="ddd"
因为在这种形式下,后续的 ABC_XYZ 配置行会覆盖前一行,因此只有最后一行会生效
如需访问 192.168.50.0/24 地址块(可用主机 IP 从 192.168.50.1 到 192.168.50.254),将数据包发送给 192.168.1.1,由其转发:
route_static1="-net 192.168.50.0/24 192.168.1.1"
如需访问网络 10.88.200.0/24 地址块(可用主机 IP 从 10.88.200.1 到 10.88.200.254),则将数据包发送至 10.10.10.254,由其转发:
route_static2="-net 10.88.200.0/24 10.10.10.254"
| Next:无线网络 | Home: 高级网络 |