Chapter2 - 管理ipv6网络
复习IPV4 联网配置
ipv4联网
NetworkManager 概述
在红帽企业 Linux 7 中网络接口的配置是由称为 NetworkManager 的系统守护进程来管理的。对于NetworkManager:
- 设备是网络接口
- 连接是可以为设备配置的设置的集合
- 对于任何一个设备,在同一时间只能有一个连接处于活动状态。可能 存在多个连接,以供不同设备使用或者以便为同一设备更改配置
- 每个连接具有一个用于标识自身的名称或ID
- 连接的持久配置存储在 /etc/sysconfig/network-scripts/ifcfg-name 中,其中 name 是连接的名称(但文件中的空格通常会替换为下划线)。如果需要,可以手动编辑此文件
- nmcli 实用程序可用于通过shell 提示符来创建和编辑连接文件。
查看联网信息
命令 nmcli dev status
将显示所有网络设备的状态
命令 nmcli con show
将显示所有连接的列表,要仅列出活动的连接,可使用 –active
选项。
ip addr show
命令仍将显示系统上网络接口的当前配置。要仅列出单个接口,请添加接口名称作为最后一个参数。
添加网络连接
nmcli con add
命令用于添加新的网络连接。
以下命令将为接口 eno2
添加一个新连接,此连接将使用 DHCP 获取 ipv4联网信息并在系统启动后自动连接。由于 con-name 为 eno2 因此配置将保存在 /etc/sysconfig/network-scripts/ifcfg-eno2
中
nmcli con add con-name eno2 type ethernet ifname eno2
下一个示例改为以静态方式配置 eno2接口,且使用 ipv4 地址和网络前缀 192.168.0.5/24 及默认网关 192.168.0.254 但是仍在启动时自动连接并将其配置保存到相同的文件中。此示例以 shell \ 转义换行
nmcli con add con-name eno2 type ethernet ifname eno2 \
>ip4 192.168.0.5/24 192.168.0.254
控制网络连接
nmcli con up name
命令将其绑定的网络接口上激活 name 连接。请注意,命令采用连接的名称,而非网络接口的名称。切记 nmcli con show
可用于列出所有可用的连接名称。
nmcli con up static-eth0
nmcli dev disconnect device
命令将断开与网络接口设备连接并将其关闭。此命令可以缩写 nmcli dev dis device
:
nmcli dev dis eth0
重要
使用 nmcli dev dis device
可停用网络接口。命令 nmcli con down name
通常并非是信用网络接口的最佳方法,此命令将关闭连接.但在默认情况下,大部分有线系统连接是在启用了 autoconnect
的情况下配置的。这将在其网络接口可用后立即激活连接。由于连接的网络接口仍可用,因此 nmcli con down name
将关闭接口,但是 NetworkManager 会立即将其重新开启,除非连接与接口断开。
修改网络连接设置
NetworkManager 连接具有两种类型的设置。有静态连接属性,他们是由管理员配置并存储在 /etc/sysconfig/network-scripts/ifcfg-*
中的配置文件中。还可能有活动连接数据,这些数据是连接从 DHCP 服务器获取的。不会持久存储。
要列出某个连接的当前 设置,请运行 nmcli con show name
命令,其中 name是连接的名称。小写的设置是静态属性。管理员可以更改;全大写的设置是活动设置,临时用于此连接实例。
nmcli con mod name
命令可用于更改连接的设置。这些更改还将保存在连接 /etc/sysconfig/network-scripts/ifcfg-name
文件中,nm-settings(5)
man page
中记录了可用的不同设置
要针对 ststic-eth0 连接将 IPV4 地址设置为 192.0.2.2/24 并将默认网关设置为:
nmcli con mod static-eth0 ipv4.addresses "192.0.2.2/24 192.0.2.254"
重要
如果连接之前通过 DHCPv4 服务器获取 IPv4信息,而现在改为仅通过静态配置文件来获取. 那么设置ipv4.method 也应从 auto 更改为 manual 。 同样,连接在激活后可能 挂载或者无法成功完成。或者除了静态地址外还从DHCP获取 IPv4地址。
很多设置可能具有多个值。通过向设置名称的开关添加 +
或 –
符号,可以在列表中添加或从列表中删除特定值。
要将 DNS 服务器 192.0.2.1 添加到与static-eth0 连接一起使用的名称服务的列表:
nmcli con mod static-eth0 +ipv4.dns 192.0.2.1
默认情况下,通过 nmcli con mod name
进行的更改将自动保存到 /etc/sysconfig/network-scripts/ifcfg-name
。还可以使用文件编辑器手动编辑此文件。执行此操作后 运行 nmcli con reload
以便 NetworkManager 读取配置更改。
出于向后兼容的原因,此文件中保存的指使具有不同于 nm-settings(5)名称的名称和语法。下表将部分关键设置名称映射到ifcfg-*
指令。
nm-setting 与 ifcfg- 指令的比较:*
nmcli con mod | ifcfg-* file | 影响 |
---|---|---|
ipv4.method manual | BOOTPROTO=none | IPv4以静态方式配置 |
ipv4.method auto | BOOTPROTO=dhcp | 将从DHCPv4服务器中查找配置设置。如果还设置了静态地址,则在我们从 DHCPv4 中获取信息之前将不会激活这些静态地址 |
ipv4.adresses "192.0.2.1/24 192.0.2.254" | ``IPADDR0=192.0.2.1 PREFIX0=24 GATEWAY0=192.0.2.254 | 设置静态 IPv4地址、网络前缀和默认网关。如果 为连接设备多个,则 ifcfg-* 指令将以 1、2、3等等结尾,而不是以0结尾 |
ipv4.dns 8.8.8.8 | DNS0=8.8.8.8 | 修改 /etc/resolv.conf 以使用此 nameserver |
ipv4.dns-search example.com`` | DOMAIN=example.com | 修改 /etc/resolv.conf 以在 search 指令中使用此域 |
ipv4.ignore-auto-dns true | PEERDNS=no | 忽略来自 DHCP服务器的 DNS 服务器信息 |
connect.autoconnect yes | ONBOOT=yes | 在启动时自动激活此连接 |
connection.id eth0 | NAME=eth0 | 此连接的名称(con-name) |
connection.interface | DEVICE=eth0 | 连接与具有名称的网络接口编写(ifname) |
802-3-ethernet.mac-address …. | HWADR=…. | 连接与具有此MAC 地址的网络接口绑定 |
删除网络连接
nmcli con del name
将从系统中删除名为 name 的连接,同时断开它与设备的连接并删除文件 /etc/sysconfig/network-scripts/ifcfg-name
.
修改系统主机名
hostname
命令显示或临时修改系统的完全限定主机名(fully qualified hostname),单使用 hostname
可以查看当前的主机名
可以在 /etc/hostname
文件中指定静态主机名。hostnamectl
命令用于修改此文件,也可用于查看系统的完全限定主机名的状态。如果此文件不存在,则主机在接口被分配了IP 地址时由反向 DNS 查询设定
重要
静态主机名存储在 /etc/hostname 中。以前的 RHEL 版本将主机名作为变量存储在 /etc/sysconfig/network 文件中
命令 | 用途 |
---|---|
nmcli dev stauts | 显示所有网络接口的 NetworkManager状态 |
nmcli con show | 列出所有连接 |
nmcli con show name | 列出name 连接的当前配置 |
nmcli con add con-name name … | 添加一个名为name 的新连接 |
nmcli con mod name … | 修改name 连接 |
nmcli con reload | 告知 NetworkManager 重新读取配置文件(在手动编辑配置文件之后使用) |
nmcli con up name | 激活 name 连接 |
nmcli dev dis dev | 在网络接口 dev 上信用并断开当前连接 |
nmcli con del name | 删除name 连接及其配置 |
ip addr show | 显示当前网络接口地址配置 |
hostnamectl set-hostname … | 在此系统上持久设置主机名 |
IPv6 联网概念
IPv6 概述
IPv6 旨在替换 IPv4 网络协议。它通过使用大得多的网络地址空间解决了 IPv4地址耗尽的主要问题。它还在网络配置管理方面提供一些增强功能和新特性并且支持将来的协议变更。
目前尚未广泛部署IPv6的关键原因,核心协议没有一种简单方法使仅具有IPv6 地址的系统能够与仅具有 IPv4 的系统进程通信。
目前最佳的过渡计划是为所有主机提供 IPv4 和 IPv6 两种地址,以便能够从主机访问仅使用 其中一种协议的 Internet 资源。这称为双栈配置。也是本课程将重点讲述的方法。
注意
目前正在开发多种有前景的过渡方法以使仅具有 IPV6 的主机能够使用 IPv4 Internet 或者支持其他形式的 ipv4/ipv6 转换。如 NAT64(RFC 6145) 和 464XLANT (RFC 6877).
Internet 工程任务组(IETE) 的基本观点是,使用 ipv4 的网络运营商应“获取”ipv6前缀,在其网络中以及自身和其他同级上游或下游网络邻居之间开启IPV6路由,在其计算机上启用并在正常处理期间使用它。这应该在保持 ipv4 稳定的情况下完成,直到可以执行的任何通信均能够同样正常地使用任一协议。到那时,同时运行这两种的经济合理性谁会变得有争议,并且网络运营商可以合理的关闭 ipv4
解读 ipv6 地址
ipv6 地址是一个 128位数字,通常表示八组以冒号分隔的四个十六进制半字节,每个半字节平均表示4位的 IPv6地址,因此每个组表示16位的 ipv6 地址。
2001:0db8:0000:0000:0000:0000:0000:0001
为了方便编写 ipv6 地址,不需要编写冒号分隔组的前导零(0)。但是每个字段中必须至少编写一个“半字节”。不需要编写的在组中跟在非零半字节后面的零。
2001:db8:0:10:0:0:0:1
由于带有很长的零字符串的地址很常见,一组或多级连接的零可以通过一个 :: 块来合并。
2001:db8:0:10::1
注意,根据这些规则,2001:db8::10:0:0:1将成为编写示例地址另一中不太方便的方法。但它也是相同地址的有效表示法,而这可能 让不熟悉 ipv6 的管理员感到困惑。有关刘红宇始终可读的地址的一些提示如下 :
- 必须始终隐藏组中的前导零
- 使用 :: 来心可能地缩短。如果两串继续零的长度相等,则最好是缩短最左侧的连续零
- 请不要使用 :: 来缩短一组零(尽管允许这样).而是应使用 :0: 并保存 :: 以表示多串长于一组的连接零。。
- 始终对十六进制数字使用小写字母 a 到 f
重要
如果ipv6 地址后面包括 TCP 或 UDP 网络端口,请即使将 ipv6 地址括在方括号中,以便端口不会被误认为是地址的一部分。[2001:db8::1]: 80
ipv6 子网
普通的单播地址分为两个部分:网络前缀和接口ID。网络前缀标识子网。同一子网上的任何两个子网接口都不能具有相同接口ID,接口ID可标识子网上特定接口。
与IPV4不同的是 ,ipv6 具有一个标准的子网掩码 /64 ,用于几乎所有的普通地址。在此情况下,地址的一半是网络前缀,别一半是接口ID 。这意味着单个子网可以根据需要容纳任意数量的主机。
通常,网络提供商将为组织分配一个较短的前缀。如 /48 。这会保留其余网络部分用于通过这一分配的前缀来指定子网。对于 /48 分配,将保留 16 位以用于子网 (最多 65535 个子网)
ipv6 地址分配
通用ipv6 地址和网络
ipv6 地址或网络 | 用途 | 描述 |
---|---|---|
::1/128 | 本地主机 | 等效于 127.0.0.1/8 的ipv6 ,在回环接口上设置。 |
:: | 未指定地址 | 等将于 0.0.0.0 的 ipv6 。对于网络服务,这可能 表示其正在侦听所有已配置的ip地址 |
::/0 | 默认路由(ipv6 internet) | 等效于 0.0.0.0/0 的ipv6。路由表中的默认路由与此网络匹配;此网络的路由器是在没有更好路由的情况下发送所有流量的位置。 |
2000::/3 | 全局单播地址(公网) | “普通”的ipv6 地址目前由IANA 从该空间进行分配,这等同于范围从2000/16 的所有网络 |
fd00::/8 | 唯一本地地址(RFC 4193) | ipv6 没有 RFC 1918 专用地址空间的直接等效对象,尽管 这很接近。站点可以使用这些以在组织中自助分配可路由的专用ip地址空间,但是这些网络不能在全局 Internet 上使用。站点必须随机从该空间中选择一个 /48 但是它可以正常将分配空间划分为 /64 网络 |
fe80::/64 | 本地链接地址 | 每个ipv6 接口自动配置一个本地链接地址,该地址仅在该网络中的本地链接中有效。这在后面将更加详细地讨论。 |
ff00::/8 | 多播 | 等效于 224.0.0.0/4 的ipv6。多播用于同时传输到多个主机,并且在 ipv6 中特别重要,因为其没有广播地址 |
本地链接地址
ipv6 中的本地链接地址是一个无法路由的地址,仅用于特定网络链接上的主机进行通信。系统上的每个网络接口都通过fe80:: 网络上的本地链接地址来自动配置。为确保其唯一性,本地链接地址的接口ID 是通过网络接口的以太网硬件地址来构建的。将48位 MAC 地址转换为 64 位接口ID 的常规过程是设置7位的MAC 地址,然后在其两个中间字节之间插入 ff:fe
- 网络前缀 fe80::/64
- MAC 地址 00:11:22:aa:bb:cc
- 本地链接地址 fe80::211:22ff:feaa:bbcc/64
其他计算机机的本地链接地址可以由相同链接上的其他主机像普通地址那样使用。由于每个链接都具有 fe80::/64 网络,不能使用路由表来正确地选择出站接口。在地址的结尾必须使用作用域标识符来指定与本地链接地址进行通信时使用的链接。作用域标识符由 % 以及后路的网络接口名组成。
例如 ,要用不用 ping6 对本地链接地址 fe80::211:22ff:feaa:bbcc 进行 ping 操作(使用连接到eth0 网络接口的链接),正确的命令是:
ping6 fe80::211:22ff:feaa:bbcc%eth0
注意
仅当联系具有 “链接”作用域的地址时,才需要使用作用域标识符。普通全局地址的使用就如同在ipv4 中的用法一样,并且从路由表中选择其出站接口。
多播
多播在ipv6 中比在ipv4 中扮演着更重要的角色,因为ipv6 中没有广播地址。ipv6 中的一个重要多播地址是 ff02/8 开始)

ipv6 地址
在ipv4中,有两种方法可用于在网络接口上配置地址。可以由管理员手动在接口上配置网络地址,也可以使用DHCP 通过网络进行动态配置,ipv6也支持手动配置以及两种动态配置方法,其中一种便是 DHCPv6
静态寻址
与ipv4 一样,可以随意选择静态ipv6地址的接口ID。在ipv4中,网络上有两个地址无法使用:子网中最低地址和子网中最高地址。在ipv6中,以下接口ID是保留的,无法用于主机上的普通网络地址
- 由链接上的所有路由器使用的全零标识符 0000:0000:0000:0000(“子网路由器任意广播”)。(对于2001:db8)
- 标识符 fdff:ffff:ffff:ff80 到 fdff:ffff:ffff:ffff.
DHCPv6配置
由于没有广播地址,dhcpv6的工作原理与适用于ipv4的dhcp 略有不同,基本上,主机将 “DHCPv6 请求从其本地链接地址发送到 ff02::1:2上的端口574/udp,即全dhcp 服务器本地链接多播组。”然后 dhcpv6 服务器通常向客户端的本地链接地址上的端口546/udp 发送一个包含相应信息的回复。
RHEL7 中的dhcp软件包提供了对dhcpv6 服务器的支持。
SLAAC 配置
除了dhcpv6之外,ipv6 也支持另外一个动态配置方法,称为无状态地址自动配置(SLAAC).使用 SLAAC ,主机通常使用地址链接 fe802 (即,全路由器本地链接多播组)发送一个“路由器请求”。本地链接上的 ipv6 路由器以网络前缀以及其他可能 的信息来响应主机的本地链接地址。主机随后将该网络前缀与其通常构建的接口ID(构建方式与本地链接地址相同)配合使用。路由器定期发送多播更新(“路由器播发”)以确认或更新其提供的信息。
RHEL7 中的 radvd 软件允许基于 RHEL 的ipv6 路由器通过路由器播发来提供 SLAAC 。
重要
配置为通过DHCP 获取 ipv4 地址的的典型 RHEL7 计算机通常还配置为使用 SLAAC 来获取 ipv6 路由器时,这可能导致计算机意外获取 ipv6 地址。
部分 ipv6 部署将 SLAAC 与dhcpv6 组合, SLAAC
仅用于提供网络地址信息,而dhcpv6 仅用于提供其他信息(如,要配置的 DHCP 服务器和搜索域)。
ipv6 联网配置
NetworkManager 和 ipv6
要使用 NetworkManager 来处理ipv6 地址,与ipv4 联网一起使用的所有命令均对 ipv6 联网有效。有一些与连接相关的不同设置,但大部分命令对于ipv6 配置仍是类似的。
添加 ipv6 网络连接
nmcli con add 命令用于添加新的网络连接
以下命将为接口eno2 添加一个新连接,此连接的启动时自动连接,以使用 DHCP v4来获取 ipv4 联网信息。此命令还将通过侦听本地链接上的路由器播发来获取 ipv6 联网设置。

下个示例改为静态方式配置 eno2 接口,且使用ipv6 地址和网络前缀2001:db8:0:11 以及 ipv4 地址和网络前缀 192.0.2.7/24 及默认ipv4 网关 192.0.2.1 ,但是仍在启动时自动连接,并将其配置保存到 /etc/sysconfig/network-scripts/ifcfg-eno2

修改 IPV6 的网络连接设置
nmcli con show name
命令(其中name 是连接名称 )可用于查看 ipv6 相关设置

同样,nmcli con mod name
可用于调整连接设置ipv6 地址的方式。
针对 stati-eth0 连接,将ipv6 地址设为 2001:db8:0:11
nmcli con mod ens36 ipv6.addresses '2001:db8:0:1::a00:1/64 2001:db8:0:1::1'
##nmcli 0.9.9 之前支持,之后版本不支持加网关的方式,需要使用下图的方式

重要
如果某个链接之前通过SLAAC 或 DHCPv6 服务器获取其ipv6 信息,而现在更改为仅通过静态配置文件来获取,那么 ipv6.method
设置也应从 auto 或dhcp 更改为 manual 。 同样,连接在激活后可能 挂载或者无法成功完成,或者除了静态地址外还从SLAAC 或者 DHCPv6 获取ipv6 地址。
很多设置可能具有多个值。通过向设置名称的开关添加 +
或者–
符号,可以在列表中添加或者从列表中删除特定值。
要将 dns 服务器 2001:4860:4860::8888 添加到与 static-eth0 连接一起使用的名称服务器列表:

注意
静态ipv4 和 ipv6 dns 设置在 /etc/resolv.conf
中均以 nameserver 指令结束。最好是确保至少有一个可访问的 ipv4 服务器(假设双栈系统)并且最好是至少有个名称服务使用各个协议(以防止 ipv4 或 ipv6 联网出现连接问题)
切记,可以直接编辑 /etc/sysconfig/network-scripts/ifcfg-name
并且nmcli con reload
必须在保存后才能运行,以便 NetworkManager 读取配置更改。
下表将与ipv6 连接相关的部分关键 NetworkManager 设置名称映射到ifcfg-*
指令。
nm-setting 与 ifcfg- 指令的比较*
nmcli con mod`` | ifcfg-* file | 影响 |
---|---|---|
ipv6.method manual | IPV6_AUTOCONFIG=no | ipv6 地址以静态方式配置 |
ipv6.method auto | IPV6_AUTOCONFIG=yes | 将使用路由器播发中的 SLAAC 来配置网络设置 |
ipv6.method dhcp | IPV6_AUTOCONFIG=yes DHCPv6=yes | 将使用 DHCPv6 (而不使用 SLAAC)来配置网络设置。 |
ipv6.addresses "2001:db81" | IPV6ADDR=2001:db81 | 设置静态IPV4 地址、网络前缀和默认网关。如果为连接设置多个地址,IPV6_SECONDARIES 将采用空格分隔的地址/前缀定义的双引号列表。![]() |
ipv6.dns . . . | DNS0=. . . | 修改 /etc/resolv.conf 以使用此 nameserver 与 IPv4 完成相同。 |
ipv6.dns-search example.com | DOMAIN=example.com | 修改/etc/resolv.conf 以在 search 指令中使用此域。与 ipv4 完全相同。 |
ipv6.ignore-auto-dns true | IPV6_PEERDNS=no | 忽略来自 DHCP 服务器的 DNS 服务器信息 |
connection.autoconnect yes | ONBOOT=yes | 在启动时自动激活此连接。 |
connection.id eth0 | NAME=eth0 | 此连接的名称 |
connection.interface-name eth0 | DEVICE=eth0 | 连接与具有此名称的网络接口绑定 |
802-3-ethernet.mac-address . . . | HWADDR= . . . | 连接与具有此 MAC 地址的网络接口绑定。 |
查看 IPV6 联网信息
nmcli dev status
(用于显示所有网络设备的 NetworkManager 状态)和 nmcli con show
(用于显示可用连接的列表)的效果都与其对 IPV4 的效果完全相同。
ip addr show
命令将显示系统上网络接口的当前配置。以下示例调用与 IPv6相关的某些项目。

- 某个活动接口为up
- link/ether 行指定设备的硬件MAC 地址
- inet 行显示 IPv4地址、其网络前缀长度和作用域
- inet6 行显示IPv6 地址、其网络前缀长度和作用域。此地址属于全局作用域,通常使用此地址
- inet6 行表示 link 作用域的地址,并且只能用于本地以太网连接上的通信。
ip -6 route show
命令显示系统的 IPV6路由表:

在先前示例中,将忽略 unreachable 路由,此路由指向了绝不会使用的网络。这留下了三个路由:
- 指向使用eth0 接口的 2001:db8:0:1::/64 网络(推测在该网络上具有地址)
- 指向使用 eth0 接口的 fe80/64 的路由
- 一个默认路由,指向 IPv6 Internet 上满足以下条件的所有网络(ffff的路由器,可使用 eth0 设备来访问。
IPv6 故障排除工具
连接
ping6
命令是RHEL 中的ping 的 ipv6 版本,它通过 ipv6 进行通信,并且采用 ipv6 地址,但是其他工作方式类似 ping

可以对本地链接地址和本地链接全节点多播组(ff021%eth0)来显示指定要使用的网络接口。如果遗漏,则将显示错误 connect:Invalid argument 。
对ff02::1
发出ping 命令可能有助于找到本地网络上的其他IPv6 节点。

切记,就像普通地址一样,IPv6 本地连接可以由同一链接上的其他主机使用。

路由
tracepath6
和 traceroute -6
命令等效于 IPv6 版本的tracepath 和 traceroute.

端口和服务
ss
命令或 netstat
命令可以显示有关网络套接字的信息,并且它们采用几乎相同的选项。

ss 和 netstat 的选项
选项 | 描述 |
---|---|
-n | 显示接口和端口的编号,而不显示名称 |
-t | 显示 TCP 套接字 |
-u | 显示 udp 套接字 |
-l | 仅显示侦听中的套接字 |
-a | 显示所有(侦听和已建立)套接字 |
-p | 显示使用套接字的进程 |
-A inet | 对于 inet 地址系统,显示活动的连接(但不显示侦听套接字),也就是说,忽略本地UNIX 域套接字.对于ss,将同时显示 ipv4 和 ipv6 连接。对于 netstat ,将仅显示 ipv4 连接。(netstat -A inet6 将显示 ipv6 连接,而 netstat -46 将同时显示 ipv4 和ipv6)。 |