在 Linux 中配置 IPv6 地址

过去,许多系统管理员只是简单地禁用 IPv6,而不是正确配置它,继续依赖已经运行了很长时间的旧 IPv4.
由于 IPv4 地址空间已经用尽,管理员开始出于需要慢慢采用 IPv6.

在本教程中,我们将介绍如何在 Linux 中配置 IPv6 寻址,并提供一些解决 IPv6 网络问题的基本技巧和建议。

在这个例子中,我们使用 CentOS 7.

基本 IPv6 故障排除

以下是一些可用于执行基本 IPv6 故障排除的基本工具,它们的工作方式与 IPv4 对应工具非常相似。

IPv6 ping

ping6 命令的工作方式与普通 ping 命令相同,只是 ping6 使用 IPv6 地址。
这可用于将 ICMP 流量发送到 IPv6 地址并检查回复,以下示例 ping IPv6 本地主机地址。

[jack@onitroad ~]# ping6 ::1
PING ::1(::1) 56 data bytes
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.039 ms
...

我们也可以 ping 出指定的接口,下面的命令可以 ping 连接到 eno1677736 的所有内容。

[jack@onitroad ~]# ping6 ff02::1%eno16777736
PING ff02::1%eno16777736(ff02::1) 56 data bytes
64 bytes from fe80::204:edff:feef:a770: icmp_seq=1 ttl=64 time=2.32 ms
64 bytes from fe80::204:edff:feef:a770: icmp_seq=2 ttl=64 time=0.640 ms

IPv6 路由

'ip -6 route show' 命令可用于显示 IPv6 路由。

[jack@onitroad ~]# ip -6 route show
unreachable ::/96 dev lo  metric 1024  error -101
unreachable ::ffff:0.0.0.0/96 dev lo  metric 1024  error -101
unreachable 2002:a00::/24 dev lo  metric 1024  error -101
unreachable 2002:7f00::/24 dev lo  metric 1024  error -101
unreachable 2002:a9fe::/32 dev lo  metric 1024  error -101
unreachable 2002:ac10::/28 dev lo  metric 1024  error -101
unreachable 2002:c0a8::/32 dev lo  metric 1024  error -101
unreachable 2002:e000::/19 dev lo  metric 1024  error -101
unreachable 3ffe:ffff::/32 dev lo  metric 1024  error -101
fe80::/64 dev eth0  proto kernel  metric 256

IPv6 跟踪路由

traceroute6 命令可用于以与 traceroute 命令相同的方式显示到指定目的地的路径中的所有跃点。

[jack@onitroad ~]# traceroute6 ipv6.google.com
traceroute to ipv6.google.com (2607:f8b0:4006:80f::200e), 30 hops max, 80 byte packets
connect: Network is unreachable

tracepath6 命令以类似的方式工作。

查看当前 IPv6 地址信息

我们可以通过运行“ip address show”的缩写“ip a”命令来显示当前的 IPv6 配置。
这将显示 IPv6 接口为“inet6”,后跟其 IP 地址。

查看 IPv6 网络连接

默认情况下,“netstat”命令显示 IPv4 和 IPv6,但是使用 -6 选项,我们可以选择仅显示服务器正在侦听的端口及其 IPv6 地址以及任何连接。

[jack@onitroad ~]# netstat -antup6
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::111                  :::*                    LISTEN      787/rpcbind
tcp6       0      0 :::22                   :::*                    LISTEN      1661/sshd
tcp6       0      0 ::1:631                 :::*                    LISTEN      2476/cupsd
tcp6       0      0 ::1:25                  :::*                    LISTEN      2066/master
udp6       0      0 :::111                  :::*                                787/rpcbind
udp6       0      0 :::123                  :::*                                781/chronyd
udp6       0      0 ::1:323                 :::*                                781/chronyd
udp6       0      0 :::39836                :::*                                1439/dhclient
udp6       0      0 :::942                  :::*                                787/rpcbind

配置 IPv6 地址

与 IPv4 相比,IPv6 地址可以通过一些其他方式进行配置,下面列出了其中一些。

  • 手动配置:这与手动配置 IPv4 的方式非常相似,本质上我们手动编辑 /etc/sysconfig/network-scripts/ifcfg-<interface> 格式的接口文件。
  • DHCPv6:动态主机协议版本 6 类似于 IPv4 的 DHCP,因为它会自动配置我们的接口。
  • 无状态地址自动配置 (SLAAC):其工作方式类似于 DHCP,但它通过从网络上的本地 IPv6 路由器接收路由器AD消息来工作。

在这里,我们将主要关注手动 IPv6 网络配置。

手动 IPv6 配置

首先查看 /etc/sysconfig/network-scripts/ 目录,看看是否已经存在针对特定接口的 IPv6 配置。
文件名将被列为 ifcfg-<interface>,我们可以通过运行“ip a”或者不推荐使用的“ifconfig”来确认接口名称。
典型名称可能包括 eth0 或者较新的“eno*”格式,例如 eno16777736.
此文件可以包含同一接口的 IPv4 和 IPv6 配置。

下面是我的 CentOS 7 /etc/sysconfig/network-scripts/ifcfg-eno16777736 文件的配置,注意以“IPV6”开头的设置。

  • IPV6INIT=yes - 在接口上配置 IPv6 时需要此项。
  • IPV6ADDR=<ipv6-address> - 指定主要静态 IPv6 地址。
  • IPV6_DEFAULTGW=<ipv6-address>%eno16777736 - 通过指定的接口添加默认路由。

请注意,如果我们手动编辑这些文件,则需要运行“nmcli con reload”来获取更改。
或者,我们可以使用 nmcli 命令进行更改,这确实需要一些时间来习惯,但功能非常强大,它的选项卡自动完成有很大帮助。

nmcli con mod eno16777736 ipv6.addresses 'fe80::20c:29ff:fe27:f2b6/64'
nmcli con mod eno16777736 ipv6.method bananaal

第一个命令设置 IPv6 地址,而第二个命令确保这是一个静态地址并且不会从 DHCP 或者 SLAAC 中丢失。

有关更多信息,请记住“nmcli-examples”手册页,因为此处记录了许多不同的示例,我们可以使用它们。

man nmcli-examples

自动 IPv6 配置

IPv6 地址的自动配置可以通过 DHCPv6 或者 SLAAC 进行。
下面是 CentOS 7 的一些默认配置,它启用了 IPV6_AUTOCONF,它使用 SLAAC 路由器AD配置网络设置。

[jack@onitroad network-scripts]# cat ifcfg-eno16777736
HWADDR=00:0C:29:AB:12:34
TYPE=Ethernet
BOOTPROTO=dhcp
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
UUID=0dbee9e5-2e7e-4c88-822b-869cfc9e2d54
ONBOOT=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes

或者,我们可以将 IPV6_AUTOCONF 设置为 no,并定义 DHCPV6C=yes 以使用 DHCPv6 而不是 SLAAC。
使用 SLAAC 或者 DHCPv6 时,IPV6ADDR 和 IPV6_DEFAULTGW 等手动配置项可以删除,因为这些将被自动配置。

有关这些变量的更多信息,我们可以查看 /usr/share/doc/initscripts-*/sysconfig.txt 中的文档

应用网络更改

对 /etc/sysconfig/network-scripts/ 中的文件进行任何更改后,需要重新启动网络以使它们生效。

systemctl restart network

我们也可以执行系统重启,但这会花费更长的时间,但会使用新配置启动界面。

日期:2020-07-07 20:56:12 来源:oir作者:oir