我正在尝试在专用的 Ubuntu 服务器上配置 IPv6。我的提供商给了我一个“/64”(不管那是什么 - 我仍然感到困惑)的 IPv6 地址。
但是,当我尝试使用它们时,我无法 ping 任何东西。我该怎么办? :(
# ping6 ipv6.google.com PING ipv6.google.com(vx-in-x63.1e100.net) 56 个数据字节 来自 fe80::219:d1ff:fefb:42d8 icmp_seq=1 目标不可达:地址不可达 来自 fe80::219:d1ff:fefb:42d8 icmp_seq=2 目标不可达:地址不可达 来自 fe80::219:d1ff:fefb:42d8 icmp_seq=3 目标不可达:地址不可达 --- ipv6.google.com ping 统计 --- 发送 3 个数据包,接收 0 个数据包,+3 个错误,100% 数据包丢失,耗时 2014 毫秒 #tracepath6 ipv6.google.com 1?: [LOCALHOST] 0.025ms pmtu 1500 1:fe80::219:d1ff:fefb:42d8%eth0 2000.022ms !H 简历:pmtu 1500 # cat /etc/network/interfaces # 环回网络接口 自动档 iface lo inet 环回 # 主网络接口 自动 eth0 iface eth0 inet 静态 地址 64.***.***.*** 网络掩码 255.255.255.248 网关 64.***.***.*** iface eth0 inet6 静态 预先启动 modprobe ipv6 地址 2607:F878:1:***::1 网络掩码 64 网关 2607:F878:1:***(与地址相同)::1 # ifconfig eth0 链路封装:以太网 HWaddr 00:19:d1:fb:42:d8 inet 地址:64.***.***.*** Bcast:64.***.***.*** 掩码:255.255.255.248 inet6 地址:fe80::219:d1ff:fefb:42d8/64 范围:链接 inet6 地址:2607:f878:1:***::1/64 范围:全球 上行广播运行多播 MTU:1500 度量:1 RX 数据包:52451 错误:0 丢弃:0 超限:0 帧:0 TX 数据包:39729 错误:0 丢弃:0 超限:0 载波:0 碰撞:0 txqueuelen:1000 RX 字节数:6817761 (6.8 MB) TX 字节数:6153835 (6.1 MB) 中断:41 基址:0xc000 lo 链路封装:本地环回 inet 地址:127.0.0.1 掩码:255.0.0.0 inet6 地址:::1/128 范围:主机 上行环回运行 MTU:16436 度量:1 RX 数据包:166 错误:0 丢弃:0 超限:0 帧:0 TX 数据包:166 错误:0 丢弃:0 超限:0 载波:0 碰撞:0 txqueuelen:0 RX 字节:31714 (31.7 KB) TX 字节:31714 (31.7 KB)
答案1
不要将充当路由器的主机上的网关设置为其自身。如果您的 ISP 提供了网关地址,请将其用作主机上的网关,或让主机使用路由器公告来配置自身。网关地址永远不应与服务器自己的地址相同。用于路由其他主机的地址不应分配网关。
您的 ISP 可能已为您提供了外部(Internet)接口的地址。如果提供了相应的网关地址,请使用该地址配置您的 eth0 接口。如果有内部接口(eth1),请使用 /64 地址。您还需要设置radvd
以在该接口上运行。
如果您没有内部接口,您可以在 inet6 配置中添加一行,从而在 /64 范围内添加静态地址。
up ip -6 addr add 2607:F878:***::2 dev eth0
了解、和ip
等命令。有多个地址和路由是很常见的。 ip -6 addr
ip -6 route
ip -6 neigh
答案2
默认网关在 IPv6 上的工作方式略有不同。
我建议你启动tcpdump
并观察它Router Advertisements
(你可能想在 WireShark 中分析捕获的内容 - 更容易)。这就是你的 IPv6 主机知道如何访问互联网的方式。还要注意,Neighbor Solicitation
因为这是 ARP 的替代品。
如果您看到这些请求进来,但没有返回,则您的内部防火墙正在阻止 IPv6 流量。如果您看到它们出去(请求),但没有返回,那么您需要确保您的前缀长度是正确的(这是部分/64
。虽然我看到很多/64
传递出去的 s 实际上是/48
)。
重要且粗体的部分
ICMP 对于 IPv6 功能来说绝对至关重要。在 IPv4 中,可以阻止它而不会产生很大影响,但在 IPv6 中,整个网络的所有功能都依赖于 ICMP。不要阻止它。
在参照
我的提供商给了我一个“/64”(不管那是什么——我仍然很困惑)的 IPv6 地址
这是你的前缀长度,以前称为你的子网掩码用于跨域路由。数字越小,您拥有的 IP 地址越多。对于 IPv6,/64
和/48
非常常见,它们应该会为您提供比您一生所需的更多的 IP 地址。
答案3
如果不知道您的 ISP 为您的配置提供的完整数据,就不可能提供完整的答案。
您的提供商可以通过两种方式将您的 /64 路由给您。
理想情况下:提供商提供两个网络地址。一个用于您与提供商的链接(例如 2001:db8:1001:abcd::/64),在这种情况下,他们可能会为您提供该网络上的网关地址(例如 2001:db8:1001:abcd::1),并告诉您为主机使用特定地址(例如 2001:db8:1001:abcd::1001:feaf)。第二个网络地址将是您的内部网络的 /64(例如 2001:db8:1001:feaf::/64)。您的主机将配置上述接口地址,并充当此网络的网关。假设您有面向提供商的以太网接口 eth0 和面向内部网络的 eth1,您将按如下方式配置您的接口文件(IPv6 部分):
auto eth0
iface eth0 inet6 static
pre-up mod probe ipv6 # This shouldn't be necessary, make IPv6 a default mod
address 2001:db8:1001:abcd::1201:feaf
netmask 64
gateway 2001:db8:1001:abcd::1
auto eth1
face eth1 inet6 static
address 2001:db8:1001:abcd:feaf::1
netmask 64
这应该使您能够从网关主机通过您的提供商 ping 互联网上的各个地方。
为了使您的内部主机正常工作,您可能需要采取一些额外的步骤,例如打开 IPv6 数据包的转发,确保 ip6tables 配置为允许转发您想要转发的数据包等。
如前所述,阻止 ICMP6 会破坏您的 IPv6 连接。
如果您的提供商希望您在链接上使用 SLAAC,那么您将需要不同的(动态)配置,这有点违反直觉,但这种情况不太可能发生,因为您的提供商需要知道如何将您的内部 /64 路由到您的动态地址。
第二种可能的方式是桥接网络,其中您的主机充当桥接器而不是路由器。在这种情况下,您不会有 eth1 连接,并且您的所有主机都将与您的提供商和 eth0 位于同一 LAN 段上(无论是物理上还是通过桥接接口)。
答案4
TLDR;在 IPv6 中让主机使用您的网络网关公布的地址;仅配置主机 IP 地址/掩码(和可选的 DNS)。
在 IPv6 中,您可以静态配置主机 IPv6 地址,通过网络上的 DHCPv6 服务器获取地址,或者直接自动配置(推荐方式)。事实上,所有启用 IPv6 的主机都有多个 IPv6 地址用于不同用途。使用 IPv6 前缀的地址用于公共互联网流量。
一般情况下,所有实体都会被分配一个 /64 范围,这意味着该范围内所有地址的前 64 位都是固定的,属于该实体;其余 64 位供其自己的主机使用。这个私有部分可以细分用于实体的每个设施(校园、分支机构等),但当然,一些地址应该由路由器用作路由目的的网关地址,而不能用于其他主机。
事实上,主机的具体路由信息来自于您网络中的 IPv6 网关路由器,该路由器定期或在请求时使用称为“路由器广告”或 RA 的数据包来宣传其自己的地址。
您的服务器在激活 IPv6 模块后,会自动生成一些自己的“链接本地”地址,并向网络请求到 IPv6 多播地址ff02::2:
(即“所有 IPv6 路由器”)的可用路由。您的 IPv6 路由器会向您的主机发送有关网关地址和 DNS 信息的信息。然后,主机会使用这些数据在路由器提供的范围内生成另一个附加地址,用作其公共 IPv6 地址(有几种生成此地址的方法,其中一些方法试图使其随机化以避免个人身份识别问题)。
因此,网关 IPv6 信息不应静态提供;作为网关的路由器有责任提供该信息,并且应由您的 ISP 或网络管理员为其配置适当的地址范围。
也就是说,如果您仍想为主机分配特定地址,则可以使用前 64 位定义(如您显示的“2607:F878”部分)并选择其余部分,这样它就不会与网络中的其他 IPv6 主机冲突。因此,您可以在 /64 前缀中构建 IPv6 地址,只需更改地址中的 xxxx 数据:
2001:0db8:0000:0000:xxxx:xxxx:xxxx:xxxx
当然,选择一个随机值,比如 2607:F878::be15,被使用的概率会很低,但这就是上面显示的协议的目的:主机自动确定生成的地址是否可用;如果不可用,则生成另一个。
Ubuntu 特定的 IPv6 配置。
要在 Ubuntu 中配置此静态 IPv6 地址,您有两个主要选项(使用 2001:db8::/64 作为示例前缀)
- 使用网络管理器
该地址在文件中配置/etc/network/interfaces
(如您的配置所示),指示代替 IFACE 的网络接口名称:
auto IFACE
iface IFACE static
address 2001:db8::be15
netmask 64
要应用,请发出命令service networking restart
(如果您的系统没有)systemd
,或者systemctl restart network-manager
如果有。
- 使用网络计划:
配置位于*.yaml
“/etc/netplan”目录中的文件中,它们具有以下结构(间距和缩进很重要):
network:
version: 2
renderer: networkd
ethernets:
IFACE:
accept-ra: yes
addresses:
- 20001:db8::be15
使用命令测试配置netplan generate
。如果没有错误,则使用应用它netplan apply
。