ping6.net
最佳实践

如何在 Windows、macOS、Linux 和路由器上启用 IPv6

让 IPv6 在你的设备和网络上工作。Windows、macOS、Linux 和流行路由器品牌的分步说明。

ping6.net2024年3月1日6 min read
IPv6配置WindowsmacOSLinux路由器设置

先决条件#

在启用 IPv6 之前,你需要三样东西:

  1. ISP 支持 - 致电你的 ISP 或查看他们的文档。如果他们不提供 IPv6,其他都无关紧要。
  2. 路由器支持 - 过去 5-7 年的任何路由器都应该可以工作。如果不确定,请查看规格表。
  3. 现代操作系统 - Windows 7+、macOS 10.7+ 或过去十年的任何 Linux 都包括 IPv6。

大多数 ISP 已经启用了 IPv6 而没有告诉任何人。你可能已经拥有它。

TL;DR - 快速摘要

要点:

  • 通过访问 ping6.net 或运行 ping6 ipv6.google.com 检查你是否已有 IPv6
  • Windows/macOS/Linux:IPv6 默认启用——只需配置路由器
  • 路由器:启用 IPv6,将连接类型设置为「原生/自动」,启用路由器通告
  • 安全性:配置 IPv6 防火墙规则以匹配 IPv4 策略
  • 隐私:在客户端设备上启用隐私扩展以防止 MAC 地址跟踪

跳转至: Windows 配置 | macOS 设置 | Linux 指南 | 路由器配置


检查你是否已经有 IPv6#

在配置任何东西之前,检查你的当前状态。访问 ping6.net 查看你的 IPv6 地址是否自动检测到。

从命令行,尝试 ping 仅 IPv6 主机:

# Windows
ping -6 ipv6.google.com
 
# macOS/Linux
ping6 ipv6.google.com

如果你收到回复,你就完成了。如果没有,请继续阅读。

Windows 10/11#

Windows 上默认启用 IPv6,但以下是如何验证或重新启用它。

GUI 方法#

  1. Win + R,键入 ncpa.cpl,按 Enter
  2. 右键单击你的网络适配器 → 属性
  3. 在列表中找到 Internet Protocol Version 6 (TCP/IPv6)
  4. 确保复选框已选中
  5. 选择它,单击 属性
  6. 选择 自动获取 IPv6 地址
  7. 选择 自动获取 DNS 服务器地址
  8. 单击 确定

PowerShell 方法#

以管理员身份打开 PowerShell:

# 检查 IPv6 状态
Get-NetAdapterBinding -ComponentID ms_tcpip6
 
# 在特定适配器上启用 IPv6
Enable-NetAdapterBinding -Name "Ethernet" -ComponentID ms_tcpip6
 
# 在所有适配器上启用
Get-NetAdapter | Enable-NetAdapterBinding -ComponentID ms_tcpip6
 
# 验证它工作了
Get-NetIPAddress -AddressFamily IPv6
 
# 测试连接
Test-NetConnection -ComputerName ipv6.google.com

如果事情不工作,重置 IPv6 栈:

netsh int ipv6 reset
ipconfig /flushdns

然后重启你的网络适配器或重启。

不要在 Windows 上禁用 IPv6

Microsoft 明确建议即使你不使用 IPv6 也保持启用。禁用它会破坏 DirectAccess、HomeGroup,并可能导致 DNS 解析延迟。

macOS#

默认启用 IPv6。以下是如何验证或配置它。

系统设置#

  1. 打开 系统设置网络
  2. 选择你的连接(Wi-Fi 或以太网)
  3. 单击 详细信息
  4. 转到 TCP/IP 选项卡
  5. 配置 IPv6 下,选择:
    • 自动 - 用于 SLAAC/DHCPv6(推荐)
    • 仅链路本地 - 仅用于本地网络
    • 手动 - 用于静态地址

终端#

# 检查当前 IPv6 配置
networksetup -getinfo "Wi-Fi"
 
# 启用自动 IPv6
networksetup -setv6automatic "Wi-Fi"
 
# 显示所有 IPv6 地址
ifconfig | grep inet6
 
# 测试连接
ping6 ipv6.google.com

对于静态配置:

# 设置静态地址
sudo networksetup -setv6manual "Wi-Fi" 2001:db8::10 64 2001:db8::1

Linux#

配置方法取决于你的发行版和网络管理器。

NetworkManager(Ubuntu、Fedora、RHEL)#

GUI:

  1. 设置网络
  2. 单击连接旁边的齿轮图标
  3. 转到 IPv6 选项卡
  4. 将方法设置为:
    • 自动 - 带路由器通告的 SLAAC(默认)
    • 仅自动,DHCP - 仅 DHCPv6
    • 手动 - 静态配置
  5. 单击 应用

使用 nmcli 的命令行:

# 检查当前设置
nmcli connection show "Wired connection 1" | grep ipv6
 
# 启用 SLAAC
nmcli connection modify "Wired connection 1" ipv6.method auto
 
# 启用 DHCPv6
nmcli connection modify "Wired connection 1" ipv6.method dhcp
 
# 静态配置
nmcli connection modify "Wired connection 1" \
  ipv6.method manual \
  ipv6.addresses "2001:db8::10/64" \
  ipv6.gateway "2001:db8::1"
 
# 应用更改
nmcli connection up "Wired connection 1"

systemd-networkd(Arch、Debian 服务器安装)#

编辑 /etc/systemd/network/20-wired.network

[Match]
Name=eth0
 
[Network]
DHCP=yes
IPv6AcceptRA=yes
 
# 或用于静态:
# Address=2001:db8::10/64
# Gateway=2001:db8::1

重启服务:

sudo systemctl restart systemd-networkd

使用 ip 命令的手动配置#

对于临时配置或故障排除:

# 显示当前 IPv6 地址
ip -6 addr show
 
# 添加 IPv6 地址
sudo ip -6 addr add 2001:db8::10/64 dev eth0
 
# 添加默认路由
sudo ip -6 route add default via 2001:db8::1 dev eth0
 
# 检查路由表
ip -6 route show

此配置不会在重启后保留。对于永久更改,使用 NetworkManager 或 systemd-networkd。

在 Linux 上测试#

# Ping IPv6 地址
ping6 2001:4860:4860::8888
 
# 通过 IPv6 ping 主机名
ping -6 google.com
 
# Traceroute
traceroute6 google.com
 
# 检查路由表
ip -6 route show
 
# 显示邻居发现缓存
ip -6 neigh show

路由器配置#

你的路由器需要从你的 ISP 请求 IPv6 并向你的 LAN 通告前缀。配置因品牌而异。

消费者路由器的通用步骤#

  1. 登录你的路由器(通常是 192.168.1.1192.168.0.1
  2. 找到 IPv6 设置(在 高级互联网WAN 下)
  3. 启用 IPv6
  4. 根据你的 ISP 选择连接类型:
    • 原生/自动 - 最常见,首先使用这个
    • DHCPv6 - ISP 使用 DHCPv6 前缀委派
    • PPPoE - 如果你为 IPv4 使用 PPPoE
    • 6rd6to4 - 传统隧道(罕见)
  5. 为你的 LAN 启用路由器通告
  6. 为你的 LAN 客户端启用 SLAAC 或 DHCPv6(或两者)
  7. 保存并在需要时重启

重启后等待 30-60 秒,然后检查你的设备是否有 IPv6 地址。

ASUS 路由器#

  1. 高级设置IPv6
  2. 连接类型:原生或自动
  3. 接口:匹配你的 WAN 类型(PPPoE 的 PPP,DHCP 的以太网)
  4. DHCP-PD:启用
  5. 路由器通告:启用
  6. 应用

ASUS 路由器通常自动检测正确的设置。如果「自动」不工作,尝试「原生」。

  1. 高级IPv6
  2. 启用 IPv6:开
  3. 互联网连接类型:动态 IP(SLAAC/DHCPv6)
  4. 保存

TP-Link 固件因型号而异很大。一些较旧的型号需要「自动配置」或「自动检测」。

Netgear 路由器#

  1. 高级高级设置IPv6
  2. 互联网连接类型:自动检测(或自动配置)
  3. 应用

Netgear 的自动检测在大多数 ISP 上效果很好。如果失败,手动尝试「DHCPv6」。

UniFi(Ubiquiti)#

  1. 设置互联网
  2. 选择你的 WAN 网络
  3. IPv6 连接:DHCPv6
  4. 前缀委派大小:/60(或如果你的 ISP 提供,/56)
  5. IPv6 RA:启用
  6. DHCPv6/RDNSS DNS 控制:自动
  7. 应用更改

UniFi 对配置更挑剔。检查你的 ISP 文档以了解正确的前缀委派大小。

pfSense / OPNsense#

WAN 接口:

  1. 接口WAN
  2. IPv6 配置类型:DHCPv6
  3. DHCPv6 前缀委派大小:60 或 56(与 ISP 核实)
  4. 仅请求 IPv6 前缀:未选中(你想要 WAN 地址和前缀)
  5. 发送 IPv6 前缀提示:如果你的 ISP 需要,请选中
  6. 保存应用

LAN 接口:

  1. 接口LAN
  2. IPv6 配置类型:跟踪接口
  3. IPv6 接口:WAN
  4. IPv6 前缀 ID:0(为其他 VLAN 递增)
  5. 保存应用

路由器通告:

  1. 服务DHCPv6 服务器和 RA
  2. 选择 LAN 接口
  3. 路由器模式:辅助(启用 SLAAC + DHCPv6)
  4. 路由器优先级:正常
  5. 保存

pfSense 和 OPNsense 给你最多的控制,但需要理解你的 ISP 的 IPv6 部署方法。大多数有线电视 ISP 使用带 /60 前缀的 DHCPv6-PD。

DNS 配置#

你的设备将通过路由器通告或 DHCPv6 接收 DNS 服务器,但你可以使用公共 IPv6 DNS 服务器覆盖它们。

公共 IPv6 DNS 服务器#

提供商主要次要功能
Google Public DNS2001:4860:4860::88882001:4860:4860::8844快速,无过滤
Cloudflare2606:4700:4700::11112606:4700:4700::1001注重隐私,快速
Quad92620:fe::fe2620:fe::9恶意软件阻止
OpenDNS2620:119:35::352620:119:53::53可用内容过滤

设置 DNS 服务器#

Windows(PowerShell):

Set-DnsClientServerAddress -InterfaceAlias "Ethernet" `
  -ServerAddresses "2001:4860:4860::8888","2001:4860:4860::8844"

macOS:

networksetup -setdnsservers "Wi-Fi" 2001:4860:4860::8888 2001:4860:4860::8844

Linux(systemd-resolved):

编辑 /etc/systemd/resolved.conf

[Resolve]
DNS=2001:4860:4860::8888 2001:4860:4860::8844

然后重启:

sudo systemctl restart systemd-resolved

Linux(NetworkManager):

nmcli connection modify "Wired connection 1" \
  ipv6.dns "2001:4860:4860::8888 2001:4860:4860::8844"
nmcli connection up "Wired connection 1"

隐私扩展#

没有隐私扩展,你的 IPv6 地址包含你的 MAC 地址。这可以跨网络跟踪。

隐私扩展(RFC 4941)生成定期轮换的临时地址。现代系统默认启用此功能,但请验证。

Windows:

# 检查状态
netsh interface ipv6 show privacy
 
# 如果需要启用
netsh interface ipv6 set privacy state=enabled

macOS:

# 检查状态(应返回 1)
sysctl net.inet6.ip6.use_tempaddr

macOS 上默认启用隐私扩展。如果它返回 0,你的系统配置有问题。

Linux:

# 检查状态(2 = 优先临时地址)
sysctl net.ipv6.conf.all.use_tempaddr
 
# 临时启用
sudo sysctl -w net.ipv6.conf.all.use_tempaddr=2
 
# 永久启用
echo "net.ipv6.conf.all.use_tempaddr = 2" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

有关更多详细信息,请参阅我们关于 IPv6 隐私扩展的文章。

验证#

配置 IPv6 后,验证一切正常:

  1. **检查地址:**使用 ipconfig /all(Windows)、ifconfig(macOS/Linux)或 ip -6 addr(Linux)
  2. **验证连接:**访问 ping6.net 或使用我们的连接测试
  3. **测试 DNS:**使用我们的 IPv6 DNS 查找工具
  4. **检查路由:**使用我们的 Traceroute 工具追踪到 2001:4860:4860::8888 的路径

你应该看到 IPv6 地址(以 23 开头,而不是 fe80)和成功连接到 IPv6 主机。

fe80 地址呢?

fe80:: 开头的链路本地地址是正常的,存在于每个 IPv6 接口上。它们仅用于本地网络通信,而不是互联网连接。你需要全局可路由的地址(以 23 开头)才能访问 IPv6 互联网。

故障排除#

没有 IPv6 地址#

按顺序检查:

  1. 你的 ISP 是否支持 IPv6?致电他们或查看他们的网站。
  2. 你的路由器上是否启用了 IPv6?登录并验证。
  3. 你的路由器上是否启用了路由器通告?它必须广播 RA 消息。
  4. 你的防火墙是否阻止 ICMPv6?ICMPv6 对于 IPv6 是强制性的,与 IPv4 的 ICMP 不同。

**快速测试:**将设备直接连接到你的调制解调器(绕过路由器)。如果你获得 IPv6 地址,问题在你的路由器配置中。

有地址但没有连接#

按顺序检查:

  1. 你有默认路由吗?运行 ip -6 route(Linux)或 netstat -rn -f inet6(macOS)并查找 default 条目。
  2. 你可以 ping 你的网关吗?使用 ip -6 route 找到你的网关,然后使用 ping6 <gateway> ping 它。
  3. 你可以 ping 外部 IPv6 主机吗?尝试 ping6 2001:4860:4860::8888
  4. 你的 DNS 工作吗?尝试 nslookup google.com 2001:4860:4860::8888

大多数「无连接」问题要么是缺少默认路由,要么是防火墙规则阻止 IPv6 流量。

IPv6 缓慢或不一致#

这通常表明路径 MTU 发现(PMTUD)损坏。一些 ISP 或路由器阻止 ICMPv6「数据包太大」消息,破坏 PMTUD。

测试:

# 使用大数据包大小 ping
ping6 -s 1400 ipv6.google.com

如果这失败但小 ping 工作,你有 PMTUD 问题。联系你的 ISP 或将路由器 WAN 接口上的 MTU 减少到 1480。

有关详细的故障排除,请参阅我们关于故障排除 IPv6 连接的指南。

相关文章#

亲自尝试

使用我们的 IPv6 PingDNS 查询工具测试你的 IPv6 连接。