我目前正致力于向我们的网络添加 IPv6 功能,并且我对 2020 年被认为是将我们习惯的一些 IPv4 概念转换为 IPv6 世界的最佳实践有一些疑问。
在我当前的设置中,我们从 ISP 分配了一个 /64,路由器会为客户端通告该前缀以使用 SLAAC 进行配置。这似乎工作正常,据我所知,每个人都可以访问 IPv6 互联网。
但是,我们希望能够按名称查询事物,我不确定为客户提供 AAAA 记录的最佳做法是什么。
我所做的是在运行我们的 DHCPv4 的 dnsmasq 实例上部署有状态的 DHCPv6,并告诉它从某个范围分发 ULA,这自然会为任何要求地址的人提供 AAAA 记录。这似乎也工作正常,但我知道有些人不喜欢有状态的 DHCPv6。这也有助于我整合我们在静态 IP 上的服务器分配,就像我对 DHCPv4 所做的一样,由于各种原因,这些服务器应该可以在固定 IP 地址上访问,我们希望 IPv6 的情况继续如此。
我能想到的执行 AAAA 记录的唯一另一种方法是通过单播从路由器向 dnsmasq 机器发送 RA 前缀,然后使用 dnsmasq 使用该ra-names
选项为 slaac 通告 GUA 前缀。尽管据我所知,这并不能解决静态地址分配问题,而且我不确定它实际上有多可靠。有没有比使用有状态 DHCPv6 的 ULA 更好的方法来处理内部 AAAA 记录?
最后,随着事情开始奏效,我们现在正在考虑将我们的公共服务迁移到 IPv6。我的理解是,这将需要服务器使用固定的 GUA 来提供公共 AAAA 记录。我不确定如何使用来自边缘路由器的 SLAAC 来实现这一点,除非有某种动态 dns 等价物。我可以再次使用 DHCPv6 或其他手动分配方法在我们分配的前缀中选择 IP 吗?我对此犹豫不决,因为我认为它可能会与 SLAAC 地址发生冲突,而且我不确定如果发生冲突会发生什么。或者,我可以选择向 ISP 询问 …
我发现有些客户端在 IPv4 网络上时会通过 DHCP 选项号 101 了解其当前时区。
在radvd
Ubuntu Server 14.04 上公布 IP 前缀的纯 IPv6 网络上,这些客户端不会选择正确的时区。
是否可以通过radvd
或需要 DHCPv6 服务器来通告时区?
我们有一个由 Sonicwall、Windows Server 2016 DC 和 Exchange Server 2016(托管在第二台 WS2016 机器上)以及许多 Windows 10 客户端组成的小型网络。
由于与我们的供应商之一兼容,我们被迫在我们的网络上启用 IPv6(不仅仅是默认的链接本地寻址)。
这是我遇到的问题:如果我们的服务器启用了 IPv6,Windows 客户端更喜欢使用 IPv6 进行通信,包括在域上进行身份验证。如果 DNS 记录设置不正确,包括身份验证和交换在内的一切都会停止工作。
似乎没有关于在 Windows Server 2016 中为静态 IP 正确配置 IPv6 的任何文档。如果有人可以提供帮助,我将不胜感激。
现在Amazon 已将VPC 的IPv6支持扩展到其大部分全球区域,包括 eu-west-1,我正在尝试连接我的实例。不幸的是,我无法让路由工作。
我已按照迁移指南中的步骤操作,即将 IPv6 CIDR 关联到我们的 VPC,将其中的一部分分配给我们的“公共”子网,更新了 VPC 路由表以::/0
通过 igw(互联网网关)发送,确保将路由表分配给公共子网,并从控制台将 IPv6 地址分配给一些新的 Ubuntu 16.04 实例。
然后,通过添加到网络设置并重新启动,我将 Ubuntu 配置为通过 DHCPv6 获取分配的地址,如此处所述iface eth0 inet6 dhcp
。
当我重新启动实例时,启动需要几分钟的时间,但最终我可以登录并ip a s
显示配置的 IPv4 和全局 IPv6 地址。
但是,v6 网络不起作用:
# ping6 www.google.com
connect: Network is unreachable
Run Code Online (Sandbox Code Playgroud)
路由表确实缺少默认路由:
# ip -6 route
2001:DB8:1234:1234:1234:1234:1234:1234 dev eth0 proto kernel metric 256
fe80::/64 dev eth0 proto kernel metric 256 mtu 9001
Run Code Online (Sandbox Code Playgroud)
手动添加默认的 v6 路由,通过 …
我们目前正在为仅 IPv6 网络部署做准备,并且正在努力寻找唯一的服务器标识。
在我们之前的设置中,我们使用 mac 地址作为服务器的主要标识。然后我们就能够始终为服务器分配相同的地址。
例如,我们需要从 wheezy 升级到 jessie,而不是 apt-get dist-upgrade,我们重新安装了服务器。当我们使用 puppet 进行配置时,这一切都花了 15 分钟,服务器已启动、全新并使用相同的 IP 和 DNS 名称再次完美运行。
不幸的是,我们目前无法通过 IPv6 实现这一点,因为每个操作系统(Linux、PXEBoot 内核等)的服务器都有不同的 DUID,这意味着每个操作系统都有不同的 IPv6 地址。
在我们的设置中,我们使用 mikrotik 作为 DHCP 服务器。
你会如何处理这样的情况?
更新 #1:目前似乎不可能:
我能够为 isc-dhcp-server找到一个补丁(http://alter.org.ua/soft/fbsd/isc_dhcpd/)来解决这个问题,但这不是全局解决方案,我不能在 cisco 上应用它或 mikrotik 设备。
更新 #2:我们决定离开 mikrotik 平台,因为我们已经超出了这个平台的能力。我们目前正在准备基于 linux 的新“基础设施”服务器,它将运行https://dhcpy6d.ifw-dresden.de/(除了其他服务,例如用于 ipmi 的 openvpn,...)。
在我们的网络课程中,我们被要求在虚拟机中设置 DHCPv6 服务器。我选择在运行 Ubuntu Desktop 16.04 和 Lubuntu 14.04 的虚拟机(在 VMware 上)上工作,作为测试客户端,并为特定 LAN 设置网络适配器。我首先将 isc-dhcp-server 配置为在这篇文章中描述的 IPv6 功能,最后我得到了一个正常运行的 dhcpv6,其中包含一个包含以下行的配置文件(/etc/dhcp/dhcpd6.conf):
ddns-update-style none;
default-lease-time 100;
max-lease-time 200;
subnet6 2001:4340:4532:0400::/64{
range6 2001:4340:4532:0400::0004 2001:4340:4532:0400::0006;
}
Run Code Online (Sandbox Code Playgroud)
我还对 init 脚本进行了必要的更改,以设置 .conf、.pid、租用文件并使用静态地址配置接口 ens33,如下所示:静态 ip set through gui
问题是客户端正在接收 /128 地址。
经过一番研究,我发现 DHCPv6 服务器不提供有关前缀长度的信息,并且必须使用路由器广告进行广播。所以,我在同一个 VM 上安装了 radvd,启用转发,禁用 ufw 并使用以下配置文件对其进行配置:
interface ens33{
#this is important :
AdvSendAdvert on;
MaxRtrAdvInterval 6;
MinRtrAdvInterval 4;
#this is important to :
AdvManagedFlag on;
AdvOtherConfigFlag off;
prefix 2001:4340:4532:400::/64
{
AdvOnLink on; …
Run Code Online (Sandbox Code Playgroud) 我正在 Ubuntu 中测试 IPv6 的实现。我的 Ubuntu linux 客户端正确地从服务器获取 RA 并在广告前缀中配置一个地址。接下来,它通过具有/128
掩码的DHCP 获取另一个地址。
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether f8:a9:63:0c:3c:cb brd ff:ff:ff:ff:ff:ff
inet6 2001:xxxx:1f15:yyyy::9/128 scope global
valid_lft forever preferred_lft forever
inet6 2001:xxxx:1f15:yyyy:faa9:63ff:fe0c:3ccb/64 scope global dynamic
valid_lft 82162sec preferred_lft 10162sec
inet6 fe80::faa9:63ff:fe0c:3ccb/64 scope link
valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)
我/128
对这个地址的掩码很感兴趣,这意味着点对点链接。为什么是面具/128
而不是,说/64
?
这是 DHCPv6 的正常行为还是与我的 DHCP 服务器的配置有关?
我似乎无法在 Amazon EC2 的 Fedora 28 中使用 IPv6(因此使用 cloud-init 和 DHCPv6)。
它使用此处描述的配置在 RHEL 7 中工作。将相同的配置应用于 Fedora 28 似乎没有任何作用。特别是,/etc/sysconfig/network
它不得到改写包含NETWORKING_IPV6=yes
,也不/etc/sysconfig/network-scripts/ifcfg-eth0
包含任何IPv6的东西。
我的/etc/cloud/cloud.cfg.d/56-custom-networking.cfg
包含:
network:
version: 1
config:
- type: physical
name: eth0
subnets:
- type: dhcp
- type: dhcp6
Run Code Online (Sandbox Code Playgroud)
生成的/etc/sysconfig/network
是:
NOZEROCONF=yes
DEVTIMEOUT=10
# Created by cloud-init on instance boot automatically, do not edit.
#
NETWORKING=yes
Run Code Online (Sandbox Code Playgroud)
生成的/etc/sysconfig/network-scripts/ifcfg-eth0
是:
# Created by cloud-init on instance boot automatically, do not edit.
# …
Run Code Online (Sandbox Code Playgroud) 对于 IPv6,我知道客户端可以使用 SLAAC 无状态地获取地址,或者使用 DHCPv6 有状态地获取地址(尽管我听说 Android 不支持通过 DHCPv6 分配地址)。
我的问题是,对于通过 SLAAC 配置其 IPv6 地址的客户端,网络将其他网络配置推送给他们的方式是什么?他们能否通过路由器广告获得此类配置,或者网络还必须为客户端部署 DHCPv6 以获取这些额外信息(但不能获取其 IPv6 地址)?例如:
如果 DHCPv6 是获取此类服务器信息的唯一方法,那么将客户端配置为通过 SLAAC 获取其地址,然后通过 DHCPv6 获取此额外配置是否合理直接?
我有两台装有 Ubuntu Server 20.04 的虚拟机。这些虚拟机之一是 DHCPv6 服务器,另一个是客户端。我可以在客户端上设置 IPv6 地址,但我无法与该地址进行 ping 操作。ip -6 route
显示此地址,但前缀长度为 128。我希望前缀长度等于 64,与服务器 IP 地址相同。当我将从服务器获得的客户端 IP 地址添加到我的路由表中,但前缀长度等于 64 时,我可以在我的虚拟机之间进行 ping 操作。
这是我/etc/dhcp/dhcpd6.conf
在服务器上的文件:
default-lease-time 2592000;
preferred-lifetime 604800;
option dhcp-renewal-time 3600;
option dhcp-rebinding-time 7200;
allow leasequery;
option dhcp6.name-servers 3ffe:501:ffff:100:200:ff:fe00:3f3e;
option dhcp6.domain-search "test.example.com","example.com";
option dhcp6.info-refresh-time 21600;
authoritative:
subnet6 fdaa:a:a:a::/64 {
range6 fdaa:a:a:a::100 fdaa:a:a:a::199;
}
Run Code Online (Sandbox Code Playgroud)
最后三行是我加的。
这是我/etc/netplan/00-installer-config.yaml
在客户端上的文件:
network:
ethernets:
ens3:
dhcp4: false
dhcp6: true
version: 2
Run Code Online (Sandbox Code Playgroud)
预先感谢您的任何帮助。
我最近在启用 IPv6 DHCP 的网络上安装了 Debian 8。尽管所有 IPv6 DHCP 均已禁用、IPv6 自动配置已禁用且不存在 dhclient 进程,但 /etc/resolv.conf 仍不断被 IPv6 DHCP 整体覆盖。如果我修改路由器上的 IPv6 DHCP DNS 服务器,它们会在 /etc/resolv.conf 中快速更新。以下是正确的:
net.ipv6.conf.all.autoconf=0
IPv6 的自动配置已被和net.ipv6.conf.all.accept_ra=0
AND强制禁用net.ipv6.conf.eth0.autoconf=0
,因为由于某种原因前两者不够用。dns-nameserver
ipv4 和 v6中的条目/etc/network/interfaces
完全被忽略我更喜欢一个不是“完全禁用 IPv6”的答案,尽管我已经接近这一点了(只要说这是一台物理机而不是虚拟机,我早就把它扔出窗外了) 。
编辑:请注意 sysctl 中的 net.ipv6.conf.all.disable_ipv6=0 修复了此问题,但看起来 resolv.conf 现在会定期完全清除,从而破坏 DNS。
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0 …
Run Code Online (Sandbox Code Playgroud) 根据RFC3315:
每个 DHCP 客户端和服务器都有一个 DUID。DHCP 服务器使用 DUID 来标识客户端以选择配置参数以及将 IA 与客户端关联。DHCP 客户端在需要识别服务器的消息中使用 DUID 来识别服务器。
[...]
客户端和服务器必须将 DUID 视为不透明值,并且必须仅比较 DUID 是否相等。客户端和服务器不得以任何其他方式解释 DUID。
对于 IPv4,DHCP 服务器根据 MAC 地址等为客户端分配固定地址是很常见的。那么对于 IPv6,DHCPv6 服务器如何分配固定的 IPv6 地址呢?
我对 IPv6 SLAAC 的困惑在于路由器提供网络前缀,而主机使用 EUI-64 生成自己的部分,这意味着它始终是 64 位地址。
现在,SLAAC 是路由器广告的一部分,这是获取 IPv6 地址的“默认网关”的唯一方法,因为我已经读到 DHCPv6 不提供网关信息。只有路由器广告将网关信息提供给主机。
现在,问题是,如果我想要在我的组织中使用 /96 或 /112 或 /116 地址的较小子网,如果我想要动态提供地址,我该如何解决这个问题?因为,如果我使用 SLAAC,那么我需要将主机部分保留为 /64,如果我使用 DHCPv6,我将不会获得我的主机的网关信息。
在此先感谢您的帮助。
dhcpv6 ×13
ipv6 ×12
dhcp ×2
radvd ×2
amazon-ec2 ×1
amazon-vpc ×1
cloud-init ×1
debian ×1
fedora ×1
gateway ×1
linux ×1
mikrotik ×1
ndp ×1
pxe-boot ×1
qemu ×1
rfc ×1
timezone ×1
ubuntu ×1
ubuntu-14.04 ×1
ubuntu-16.04 ×1