重要且粗体的部分

重要且粗体的部分

我正在尝试在专用的 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 addrip -6 routeip -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 作为示例前缀)

  1. 使用网络管理器

该地址在文件中配置/etc/network/interfaces(如您的配置所示),指示代替 IFACE 的网络接口名称:

auto IFACE
iface IFACE static
  address 2001:db8::be15
  netmask 64

要应用,请发出命令service networking restart(如果您的系统没有)systemd,或者systemctl restart network-manager如果有。

  1. 使用网络计划

配置位于*.yaml“/etc/netplan”目录中的文件中,它们具有以下结构(间距和缩进很重要):

network:
  version: 2
  renderer: networkd
  ethernets:
    IFACE:
      accept-ra: yes
      addresses:
        - 20001:db8::be15

使用命令测试配置netplan generate。如果没有错误,则使用应用它netplan apply

相关内容