跳转至内容

IPv6

来自 ArchWiki

在 Arch Linux 中,IPv6 默认启用。

tldp Linux+IPv6-HOWTO (/usr/share/doc/howto/txt/Linux+IPv6-HOWTO,来自 tldp-howtos-txt)文章较旧且维护较少。但它试图涵盖本文中提到的许多主题,从基础开始,并以较慢的速度前进。它还有许多命令行示例。初学者在阅读本文档之前可以阅读或浏览它。

静态配置

有时,使用静态地址可以提高安全性。例如,如果您的本地路由器使用邻居发现或 radvd (RFC 2461),则您的接口将自动根据其 MAC 地址(使用 IPv6 的无状态自动配置)获得地址,除非启用了 隐私扩展稳定私有地址。这可能对安全性不利,因为它允许在 IP 地址的网络部分发生变化时仍能跟踪系统。

systemd-networkd

要通过 systemd-networkd 配置静态 IPv4 和 IPv6,您可以这样做:

[Match]
Name=XXXX (for example ens3)

[Network]
Address=XXX.XX.X.XX/32 (IPv4 address)
Gateway=10.0.0.1 (IPv4 gateway)
Address=XXXX:XXXX:X:XXX::2/64 (IPv6 address)
Gateway=XXXX:XXXX:X:XXX::1 (IPv6 gateway)

每个人的网络参数各不相同,但应由 ISP 提供。请在 /etc/systemd/network/example.network 中创建或编辑文件。完成后,需要重启 networkd 服务。要检查 IPv4 和 IPv6 连接,请尝试 ping -c3 google.com 和 ping -6 -c3 google.com。

netctl

要使用 netctl 分配静态 IP 地址,请查看 /etc/netctl/examples/ethernet-static 中的示例配置文件。以下行很重要:

...
# For IPv6 static address configuration
IP6=static
Address6=('1234:5678:9abc:def::1/64' '1234:3456::123/96')
Routes6=('abcd::1234')
Gateway6='1234:0:123::abcd'
注意 如果您仅连接 IPv6,则需要确定您的 IPv6 DNS 服务器。例如:
DNS=('6666:6666::1' '6666:6666::2')
如果您的提供商未提供 IPv6 DNS 并且您没有运行自己的 DNS 服务器,则可以从 resolv.conf 文章中选择。

邻居发现

ping 组播地址 ff02::1 会导致链接本地范围内的所有主机响应。必须指定接口:

$ ping ff02::1%eth0

之后,您可以使用以下命令获取本地网络中所有 IPv6 邻居的列表:

$ ip -6 neigh

使用 ping 组播地址 ff02::2,只有路由器会响应。

如果添加了选项 -I your-global-ipv6,链接本地主机将用它们的全局范围地址响应。在这种情况下可以省略接口:

$ ping -I 2001:4f8:fff6::21 ff02::1

要 ping 所有接口上的所有主机,并向所有人宣告您的地址,请使用脚本。

#!/usr/bin/bash
declare -a l_ifs
readarray l_ifs < <(/sbin/ip -6 -j address | jq -r '.[] | .ifname ')
for l_if in ${l_ifs[@]} ; do
 echo $l_if
 declare -a l_addrs
 readarray l_addrs < <(/sbin/ip -6 -j address show dev "$l_if" | \
                        jq -r  '.[0].addr_info[].local')
 for l_addr in ${l_addrs[@]} ; do
   echo $l_addr
   ping -c 4 -6 -I "$l_addr" ff02::1%"$l_if"
 done
done

无状态自动配置 (SLAAC)

只要您的网络配置正确,获取 IPv6 地址的最简单方法是通过无状态地址自动配置(简称 SLAAC)。地址会自动从路由器宣告的 prefix 推断出来,不需要进一步配置或像 DHCP 客户端这样的专用软件。

SLAAC 实现于邻居发现之上。在没有路由器的情况下,客户端会自动将 fe80::/64 链接本地 prefix 与其 64 位接口标识符 (IID) 结合,形成其链接本地地址。当客户端收到包含 /64 prefix 的路由器宣告 (RA) 数据包时,它将 prefix 与 IID 结合,形成一个全局 IPv6 地址。默认情况下,IID 从 MAC 地址派生,但这会引发隐私问题,而“隐私”变体使用伪随机值来解决(见下文)。

对于客户端

如果您正在使用 netctl,只需将以下行添加到您的以太网或无线配置中。

IP6=stateless

如果您正在使用 NetworkManager,那么只要网络中有 IPv6 地址的宣告,它就会自动启用 IPv6 地址。

请注意,无状态自动配置是在允许 IPv6 ICMP 数据包在整个网络中传输的条件下工作的。因此,对于客户端,必须接受 ipv6-icmp 数据包。如果您正在使用 Simple stateful firewall/iptables,只需添加:

-A INPUT -p ipv6-icmp -j ACCEPT

如果您正在使用其他防火墙前端(ufw、shorewall 等),请查阅它们的文档以了解如何启用 ipv6-icmp 数据包。

如果您的网络管理解决方案不支持使用无状态 IPv6 配置 DNS 解析器(例如 netctl),那么可以使用 ndisc6 包中的 rdnssd(8)

对于网关

为了正确地将 IPv6 分配给网络客户端,我们需要使用宣告守护程序。为此的常用工具是 radvdradvd 的配置非常简单:

/etc/radvd.conf
interface LAN {
  AdvSendAdvert on;
  MinRtrAdvInterval 3;
  MaxRtrAdvInterval 10;
  AdvDefaultLifetime 1800;
  prefix ::/64 {
    AdvOnLink on;
    AdvAutonomous on;
    AdvRouterAddr on;
  };
};

上述配置将指示客户端使用宣告的 /64 块中的地址进行自动配置。请注意,上述配置宣告了分配给 LAN 朝向接口的所有可用前缀。如果您想限制宣告的前缀,请将 ::/64 替换为所需的前缀,例如 2001:DB8::/64prefix 块可以重复多次以包含更多前缀。

为了确保 Android 设备能够成功连接,需要配置设置 AdvDefaultLifetime 1800。此特定值可防止 Google 问题跟踪器中详细说明的连接问题(请参阅:[1][2])。

要向您的 LAN 客户端宣告 DNS 服务器,您可以使用 RDNSS 功能。例如,添加以下行以宣告 Google 的 DNS v6 服务器:

/etc/radvd.conf
RDNSS 2001:4860:4860::8888 2001:4860:4860::8844 {
 };

网关还必须允许所有基本链上的 ipv6-icmp 数据包的流量。对于 Simple stateful firewall/iptables,请添加:

-A INPUT -p ipv6-icmp -j ACCEPT
-A OUTPUT -p ipv6-icmp -j ACCEPT
-A FORWARD -p ipv6-icmp -j ACCEPT

请相应地调整其他防火墙前端,并且不要忘记 启用 radvd.service

隐私扩展

当客户端通过 SLAAC 获取地址时,其 IPv6 地址是从宣告的 prefix 和客户端网络接口的 MAC 地址派生出来的。这可能会引起隐私问题,因为可以通过 IPv6 地址轻松获得计算机的 MAC 地址。为了解决这个问题,已开发出IPv6 隐私扩展标准(内核中为 RFC 3041;最新版本为 RFC 8981)。通过隐私扩展,内核会生成一个临时地址,该地址是通过修改原始自动配置地址生成的。连接到远程服务器时首选私有地址,以便隐藏原始地址。要启用隐私扩展,请执行以下步骤:

添加以下 sysctl 参数:

/etc/sysctl.d/40-ipv6.conf
# Enable IPv6 Privacy Extensions
net.ipv6.conf.all.use_tempaddr = 2
net.ipv6.conf.default.use_tempaddr = 2
net.ipv6.conf.nic.use_tempaddr = 2

其中 nic 是您的网络接口卡。您可以使用 网络配置#列出网络接口中的说明找到它们的名称。all.use_tempaddrdefault.use_tempaddr 参数不适用于在执行 sysctl 设置时已经存在的 NIC。

至少在重启后,隐私扩展应该会启用。

net.ipv6.conf.{all, default, nic} 下的隐私扩展 sysctl [3]
Variable name 描述
use_tempaddr 偏好隐私扩展 (RFC3041)。<= 0:禁用;1:启用,但优先使用公共地址而不是临时地址;> 1:启用并优先使用临时地址而不是公共地址。
temp_prefered_lft 首选临时地址生命周期(秒)。请注意拼写错误必须使用。
temp_valid_lft 最大临时地址生命周期(秒)。

dhcpcd

dhcpcd 的默认配置包含选项 slaac private,它启用了“稳定的私有 IPv6 地址而不是基于硬件的地址”,实现了 RFC 7217。因此,除非希望比每次系统连接到新网络时更频繁地更改 IPv6 地址,否则无需更改任何内容。设置为 slaac hwaddr 以获得稳定地址。

NetworkManager

NetworkManager 中使用 IPv6 隐私扩展可以通过 NetworkManager.conf(5) 中的 ipv6.ip6-privacy 设置或连接配置文件来控制。如果全局或按连接未设置,NetworkManager 将回退读取 /proc/sys/net/ipv6/conf/default/use_tempaddr

要默认显式启用 IPv6 隐私扩展,请将以下行添加到 NetworkManager.conf(5)

/etc/NetworkManager/conf.d/ip6-privacy.conf
[connection]
ipv6.ip6-privacy=2

应用配置并重新连接到所有活动连接。

要控制单个 NetworkManager 管理的连接的 IPv6 隐私扩展的使用,请编辑 /etc/NetworkManager/system-connections/ 中所需的连接密钥文件,并在其 [ipv6] 部分追加键值对 ip6-privacy=2

/etc/NetworkManager/system-connections/example_connection.nmconnection
...
[ipv6]
method=auto
ip6-privacy=2
...

重新加载连接并随后重新连接。

注意 尽管启用隐私扩展创建的 scope global temporary IPv6 地址似乎永不会续期(在其 valid_lft 生命周期结束时,它永远不会变为 deprecated 状态),但需要更长时间的验证来确认此地址确实会改变。

systemd-networkd

systemd-networkd 默认不启用 IPv6 隐私扩展。要启用它们,请在每个连接的 .network 文件中的 [Network] 部分设置 IPv6PrivacyExtensions=yes,或使用 /etc/systemd/networkd.conf.d/ 中的配置文件进行全局设置。例如:

/etc/systemd/networkd.conf.d/ipv6-privacy-extensions.conf
[Network]
IPv6PrivacyExtensions=yes

除非将 IPv6PrivacyExtensions 选项设置为 kernel,否则 systemd-networkd 不会遵守 net.ipv6.conf.nicN.use_tempaddr sysctl 设置。

然而,IPv6 隐私扩展的其他选项,如 net.ipv6.conf.nicN.temp_prefered_lftnet.ipv6.conf.nicN.temp_valid_lft,会被遵守。

有关详细信息,请参阅 systemd-networkdsystemd.network(5)

ConnMan

在服务文件中使用以下设置:

/var/lib/connman/service/settings
IPv6.privacy=preferred

有关详细信息,请参阅 ConnMan

稳定的私有地址

另一个选择是稳定的私有 IP 地址(RFC 7217)。这允许在网络内拥有稳定的 IP,而无需暴露接口的 MAC 地址。

为了让内核生成一个密钥(例如,针对 wlan0),我们可以设置:

# sysctl net.ipv6.conf.wlan0.addr_gen_mode=3

关闭并重新打开接口,然后运行 ip addr show dev wlan0 后,您应该会在每个 IPv6 地址旁边看到 stable-privacy。内核已生成一个 128 位密钥用于为该接口生成 IP 地址,要查看它,请运行 sysctl net.ipv6.conf.wlan0.stable_secret。我们将持久化此值,因此请将以下行添加到 /etc/sysctl.d/40-ipv6.conf

# Enable IPv6 stable privacy mode
net.ipv6.conf.wlan0.stable_secret = output_from_previous_command
net.ipv6.conf.wlan0.addr_gen_mode = 2
注意 如果您使用 dhcpcd 来获取 IPv6 地址,则此 IP 地址将不会显示 stable-privacy 标志。

NetworkManager

NetworkManager 不会遵守上述设置,但 NetworkManager 默认使用稳定的私有地址。[4][5]

systemd-networkd

上述设置不会被 systemd-networkd 遵守。为确保始终使用稳定的私有地址,您可以设置:

[IPv6AcceptRA]
Token=prefixstable

上述命令指示 systemd-networkd 使用从机器 ID 派生的密钥。您也可以自己指定一个密钥,甚至可以将设置应用于仅出现在路由器宣告消息中的特定前缀。有关详细信息,请参阅 systemd.network(5) § [IPV6ACCEPTRA] SECTION OPTIONS

如果需要,您还可以生成稳定的私有链接本地地址:

[Network]
IPv6LinkLocalAddressGenerationMode=stable-privacy

IPv6 与 PPPoE

PPPoE 的标准工具 pppd(8) 只要您的 ISP 和调制解调器支持,就提供对 PPPoE 上 IPv6 的支持。只需将以下内容添加到 /etc/ppp/options

+ipv6

如果您使用 netctl 进行 PPPoE,只需将以下内容添加到您的 netctl 配置中:

PPPoEIP6=yes

前缀委托 (DHCPv6-PD)

注意 本节主要针对自定义网关配置,而非客户端机器。对于标准零售路由器,请查阅您的路由器文档以了解如何启用前缀委托。

前缀委托是许多 ISP 使用的常见 IPv6 部署技术。它是一种将网络前缀分配给用户站点(即本地网络)的方法。可以配置路由器,将不同的网络前缀分配给不同的子网。ISP 通过 DHCPv6(通常是 /56/64)发放网络前缀,DHCP 客户端将前缀分配给本地网络。对于一个简单的双接口网关,它实际上会为连接到本地网络的接口分配一个 IPv6 前缀,该地址是通过连接到 WAN 的接口(或像 ppp 这样的伪接口)获取的。

DHCPv6 要求客户端在端口 546 UDP 上接收传入连接。对于基于 nftables 的防火墙,可以在 /etc/nftables.conf 的 input 链中用一行进行配置:

table inet filter {
  chain input {
    udp dport dhcpv6-client accept
    ...
  }
...
}

使用 dhcpcd

dhcpcd 除了支持 IPv4 DHCP 外,还提供了对 DHCPv6 客户端标准的相当完整的实现,其中包括 DHCPv6-PD。如果您正在使用 dhcpcd,请编辑 /etc/dhcpcd.conf。您可能已经在为 IPv4 使用 dhcpcd,只需更新现有配置。

duid
noipv6rs
waitip 6
# Uncomment this line if you are running dhcpcd for IPv6 only.
#ipv6only

# The following applies to the interface WAN.
interface WAN
    ipv6rs
    # Assign WAN the iaid 1.
    iaid 1
    # Assign a Normal Address to the interface with iaid 1 (i.e. WAN).
    ia_na 1
    # Delegate a prefix with wan interface iaid 1 (i.e. WAN) and lan interface LAN.
    ia_pd 1 LAN
    #ia_pd 1/::/64 LAN/0/64

此配置将请求来自 WAN 接口(WAN)的前缀并将其委托给内部接口(LAN)。如果发放的是 /64 范围,则需要使用注释掉的第二个 ia_pd instruction。它还将禁用除 WAN 接口(WAN)之外所有接口上的路由器宣告。

提示 同时阅读 dhcpcd(8)dhcpcd.conf(5)

使用 WIDE-DHCPv6

WIDE-DHCPv6 是一个开源的 IPv6 动态主机配置协议 (DHCPv6) 实现,最初由 KAME 项目开发。它可以通过 wide-dhcpv6AUR 安装

如果您正在使用 wide-dhcpv6,请编辑 /etc/wide-dhcpv6/dhcp6c.conf

# use the interface connected to your WAN
interface WAN {
  send ia-pd 0;
};

id-assoc pd 0 {
  # use the interface connected to your LAN
  prefix-interface LAN {
    sla-id 1;
    sla-len 8;
  };
};
注意 sla-len 应设置为使 (WAN-prefix) + (sla-len) = 64。在此情况下,它是为 /56 前缀设置的,56+8=64。对于 /64 前缀,sla-len 应为 0

wide-dhcpv6 客户端可以通过 dhcp6c@interface.service systemd 单元文件启动/启用,其中 interface 是配置文件中的接口名称,例如,对于接口名称“WAN”,请使用 dhcp6c@WAN.service

提示 阅读 dhcp6c(8)dhcp6c.conf(5) 以获取更多信息。

systemd-networkd

配置上游 (wan) 和下游 (lan) 接口。这将启用运行 DHCPv6 客户端的接口上的 DHCPv6-PD。委托的前缀通过下游网络上的 IPv6 路由器宣告进行分发。

/etc/systemd/network/wan.network
[Network]
# Use 'yes' instead of 'ipv6' for both ipv4 and ipv6.
DHCP=ipv6
/etc/systemd/network/lan.network
[Network]
IPv6SendRA=yes
DHCPv6PrefixDelegation=yes
提示 同时阅读 systemd.network(5) § EXAMPLES

其他客户端

dhclient 也可以请求前缀,但必须使用 dhclient 退出脚本来将该前缀或其部分分配给接口。例如:https://github.com/jaymzh/v6-gw-scripts/blob/master/dhclient-ipv6

NAT64

Wikipedia:NAT64 是 IPv6 过渡机制,IPv6 Only 主机可以通过 NAT 与 IPv4 主机通信。

Linux 内核本身不支持 NAT64,但有几个软件包可以添加对 NAT64 的支持。

  • Jool — Linux 的 SIIT 和 NAT64
https://nicmx.github.io/Jool/ || jool-dkmsAUR, jool-toolsAUR
  • TAYGA — NAT64 守护进程
https://github.com/apalrd/tayga || taygaAUR

禁用 IPv4

禁用 Linux 上的 IPv4 或 IPv6 地址栈的原因非常少,双栈 Linux 自 1999 年以来一直运行良好。但随着全球 IPv6 普及的增长,IPv6 Only 网络已变得越来越普遍。NAT64DNS64 是 IPv6 Only 网络与旧版 IPv4 Only 网络通信的常用过渡机制。

禁用 IPv4 网络服务的常见原因:

在 systemd-networkd 中禁用 IPv4

本文或本章节的准确性存在争议。

原因:LinkLocalAddressing=ipv6 是默认设置。(在 Talk:IPv6 中讨论)

要在 systemd-networkd 中配置 IPv6 Only 接口,请在您的网络配置中设置 LinkLocalAddressing=ipv6,请参阅下面的示例:

/etc/systemd/network/lan.network
[Match]
Name=eno0

[Link]
RequiredForOnline=routable
RequiredFamilyForOnline=ipv6

[Network]
# Enable IPv6 only
LinkLocalAddressing=ipv6

# Enable DHCP
DHCP=ipv6

# Enable SLAAC
IPv6AcceptRA=true

禁用 IPv6

注意 Arch 内核直接内置了 IPv6 支持,因此无法禁用模块。

对于某些 ISP[6][7],IPv6 流量比 IPv4 慢:如果您能确定您遇到此类问题,禁用 IPv6 可能会加快您的网络速度。

不应盲目进行此操作:对于大多数用户,IPv4 Only 网络会在 运营商级 NAT 后面降低性能,并阻碍您使用 P2P 或 WebRTC 应用程序(例如某些游戏)。相反,配置 优先使用 IPv4 而非 IPv6 是两全其美的选择。

禁用功能

向内核行添加 ipv6.disable=1 会禁用整个 IPv6 栈,如果您遇到问题,这很可能是您想要的。有关更多信息,请参阅 内核参数

或者,添加 ipv6.disable_ipv6=1 也可以使 IPv6 栈保持功能,但不会为您的任何网络设备分配 IPv6 地址。

sysctl

可以通过将以下 sysctl 配置添加到 /etc/sysctl.d/40-ipv6.conf 来为所有或特定网络接口禁用 IPv6 栈:

# Disable IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.nic0.disable_ipv6 = 1
...
net.ipv6.conf.nicN.disable_ipv6 = 1

但这仅在 重启 systemd-sysctl.service 后才能工作,因为 systemd-sysctl.service 在网络接口完全配置之前启动。在启动时,您只能为 lodefaultall 设置配置,因为它们是 IPv6 栈的内部部分。

提示 如果 IPv6 栈未完全禁用,也可以在运行时为接口禁用 IPv6 以测试配置更改。执行 # sysctl -w net.ipv6.conf.all.disable_ipv6=1 会删除所有网络接口上已分配的 IPv6 地址及其路由,并且可以撤销。
  • 大多数网络管理器(netplansystemd-networkdNetworkManager 等)会根据其自身的配置设置已配置网络接口的 IPv6 栈状态,忽略 net.ipv6.conf.default.disable_ipv6 中设置的配置。
  • 如果通过 sysctl 禁用 IPv6,您应该注释掉 /etc/hosts 中的 IPv6 主机。否则可能会出现连接错误,因为主机将被解析为其无法访问的 IPv6 地址。

systemd unit

如果您想在启动时为所有网络接口禁用 IPv6 栈,并能轻松地稍后启用 IPv6,则需要一个在网络管理器之后运行的 systemd 单元。

用于 systemd-networkd 的单元将如下所示:

/etc/systemd/system/enforce_disable_ipv6.service
[Unit]
Description=enforce default disable_ipv6
AssertPathExists=/proc/sys/net/ipv6/conf/all/disable_ipv6
AssertPathExists=/proc/sys/net/ipv6/conf/default/disable_ipv6
After=systemd-networkd.service
PartOf=systemd-networkd.service

[Service]
Type=oneshot
ExecStart=-/usr/bin/cp --no-preserve=all -T /proc/sys/net/ipv6/conf/default/disable_ipv6 /proc/sys/net/ipv6/conf/all/disable_ipv6

[Install]
WantedBy=systemd-networkd.service

启用此单元后,任何对 systemd-networkd 的启动或重启都将强制所有网络接口上的 IPv6 栈状态的default值。

default 值可以在启动时通过 #sysctl 进行设置。

要为其他网络管理器调整此单元,需要将所有 systemd-networkd.service 的实例替换为其网络管理器的配置单元。

其他程序

在内核中禁用 IPv6 功能并不能阻止其他程序尝试使用 IPv6。在大多数情况下,这完全无害,但如果您发现自己在使用该程序时遇到问题,则应查阅该程序的手册页,了解禁用该功能的方法。

dhcpcd

dhcpcd 将继续无害地尝试执行 IPv6 路由器宣告。要禁用此功能,如 dhcpcd.conf(5) 手册页所述,请将以下内容添加到 /etc/dhcpcd.conf

noipv6rs
noipv6

NetworkManager

要在 NetworkManager 中禁用 IPv6,请右键单击网络状态图标,然后选择编辑连接 > 有线 > 网络名称 > 编辑 > IPv6 设置 > 方法 > 忽略/禁用。然后单击保存

这也可以通过以下方式完成:

# nmcli connection modify ConnectionName ipv6.method "disabled"

然后重启网络连接。

# nmcli connection up ConnectionName

要确认设置已应用,请使用 ip address show 并检查是否未显示 inet6 条目。或者,/proc/sys/net/ipv6/conf/interface/disable_ipv6 的值应为 1。

ntpd

遵循 systemd#Drop-in files 中的建议,编辑 ntpd.service 以定义 systemd 如何启动它。

这将创建一个 drop-in 片段,该片段将代替默认的 ntpd.service 运行。-4 标志可防止 ntp 守护进程使用 IPv6。将以下内容放入 drop-in 片段:

[Service]
ExecStart=
ExecStart=/usr/bin/ntpd -4 -g -u ntp:ntp

首先清除之前的 ExecStart,然后将其替换为包含 -4 标志的一个。

GnuPG

dirmngr 的配置文件中禁用 IPv6:

~/.gnupg/dirmngr.conf
disable-ipv6

之后重启 dirmngr.service 用户单元。

sshd

将以下内容添加到 sshd_config,确保 sshd 使用 IPv4:

/etc/ssh/sshd_config
AddressFamily inet

并重启 sshd.service

systemd-timesyncd

有时,即使 IPv6 已被禁用,systemd-timesyncd 仍会尝试查询 IPv6 时间服务器。这可能导致系统时钟未更新,并且日志中显示类似以下错误:

systemd-timesyncd[336]: Failed to set up connection socket: Address family not supported by protocol

systemd-timesyncd单元状态将在其状态条目中显示尝试连接 IPv6 地址,类似:

Status: "Connecting to time server [2001:19f0:8001:afd:5400:1ff:fe9d:cba]:123 (2.pool.ntp.org)"

根据 FS#59806,只有 "2." ntp.org 池提供 IPv6。因此,为防止此情况,请从 /etc/systemd/timesyncd.conf 文件中的 NTP 和 FallbackNTP 条目中删除 2.arch.pool.ntp.org2.pool.ntp.org

systemd-networkd

networkd 支持按接口禁用 IPv6。当网络单元的 [Network] 部分包含 LinkLocalAddressing=ipv4LinkLocalAddressing=no 时,networkd 将不会尝试在匹配的接口上配置 IPv6。

但请注意,即使使用上述选项,如果未全局禁用 IPv6,networkd 仍会期望接收路由器通告。如果接口未接收到 IPv6 流量(例如由于 sysctlip6tables 设置),它将保持配置状态,并可能导致等待网络完全配置的服务超时。为避免这种情况,还应在 [Network] 部分设置 IPv6AcceptRA=no 选项。

优先使用 IPv4 而非 IPv6

取消注释 /etc/gai.conf 中的以下行

#
#    For sites which prefer IPv4 connections change the last line to
#
precedence ::ffff:0:0/96  100

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.