我目前正在学习 IPv6,在测试期间我尝试使用全局 IPv6 地址配置接口但2002::失败了,指出这是一个不正确的地址。而且我注意到,如果我尝试使用以它开头的 IPv6 地址配置接口,2002则它必须高于2002:0099::否则它说这是无效的。
所以,2000::是有效的,2001::是有效的,2002:100::是有效的,但在2002::和之间没有任何东西2002:99::。这是为什么?
首先,我有一个特殊的 IPv6 地址分配给我的专用服务器,只有 1。一个 ::1/128 一个。但我可以为 eth0 分配地址(例如:::2/128、::3/128 等)。
现在我想在该服务器上运行 LXC 容器,但我希望它们成为一等公民,我希望它们拥有自己的 IPv6 地址。
带有 IPv4 的 LXC 工作正常。我可以启动一个容器,并从中 ping 世界。我有一个名为lxcbr0.
老实说,我不知道如何继续。在我的特定 LXC 配置中(“前缀”代表我分配的前缀):
lxc.network.ipv6 = prefix::3/128
lxc.network.ipv6.gateway = prefix::2 # iffy, not sure this is correct
Run Code Online (Sandbox Code Playgroud)
在主机上,我已将 sysctl 配置为使用转发:
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.eth0.forwarding = 1
Run Code Online (Sandbox Code Playgroud)
现在我迷失了方向。我想我需要为网桥分配一个 IP。我已经为它分配了前缀::2/128,这是我在上面的 LXC 配置中使用的。在“界面”中:
iface lxcbr0 inet6 static
address prefix::2
netmask 128
# use arp proxy? Read that somewhere.
post-up /sbin/ip -6 neigh add proxy prefix::3 dev eth0 …Run Code Online (Sandbox Code Playgroud) 我在 CentOS 7 服务器上有多个 IPv6 地址,需要将特定的 v6 地址设为路由中使用的默认地址。我已经能够通过修改路由表来做到这一点。
ip -6 route del default
ip -6 route add default via 2001:470:xxxx:xx::1 src 2001:470:xxxx:xx::6
Run Code Online (Sandbox Code Playgroud)
问题是每次网络接口重新启动或服务器本身重新启动时,对默认 IPv6 路由的更改都会丢失。我怎样才能使这个更改持久化以便永久保存?
我们目前正在为仅 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,...)。
愚蠢的错误导致了这一切,请阅读更新 5
我正在尝试使用 IPv6 设置 Linux 路由器(LXC,3.10.0-123.el7.x86_64)。
提供者是 Hetzner,我有 2 个子网,一个 /56 和一个 /64。他们已经设置了到我的 LL 地址的路由,我的默认网关是 fe80::1。
我在 sysctl.conf 中启用了 ipv6 和 ipv4 转发:
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
Run Code Online (Sandbox Code Playgroud)
我将 IPTables 配置为接受所有内容。
我知道这ICMPv6是用于 IPv6 中路由的主要实用程序 - 所以它不会被阻止 ;-)。我还补充道-A FORWARD -j ACCEPT。
我已将 /56 子网的第二个 (::2) ip 配置为 eth1,将 /64 的第二个 (::2) ip 配置为 eth0。
eth0 为上行接口 eth1 为 LAN 接口
所以现在是主要问题。
具有来自 /56 的 ipv6 地址的内部客户端无法 ping 外部世界,但数据包和响应被正确路由,直到我的路由器,它只是在没有任何提示的情况下丢弃数据包。
例如 ping6 ipv6.google.com 导致超时
但在路由器的上行链路上我得到:
20:43:13.350932 IP6 …Run Code Online (Sandbox Code Playgroud) 当我有一个服务侦听特定 IPv6 地址时,它在启动时失败,声称该地址仍然不可用。这发生在侦听特定地址的每个服务上。
为了避免这种情况,我为该服务创建了一个插件,After=... network.target通过After=... network-online.target此更改可以解决 IPv4 地址绑定问题,但不能解决 IPv6。我尝试了一些特定于接口的目标,但没有成功,他们等待 IPv6 的 IPv4 位没有启动。
作为一种解决方法,我还添加到服务部分:
[Service]
Restart=on-failure
RestartSec=10s
StartLimitInterval=1min
Run Code Online (Sandbox Code Playgroud)
这似乎每个人都在努力解决这个问题,但我对此并不满意,并且似乎是一种允许 systemd 等待 IPv6 地址的方法。
我的系统是CentOS 7.2,禁用了 NetworkManager 和 firewalld,启用了网络和 iptables,使用静态 IP,在接口填满 IPv4/IPv6 后,所有网络都在 IN/OUT 工作。
我的 ifcfg-eth0:
DEVICE=eth0
BOOTPROTO=none
NM_CONTROLLED="no"
ONBOOT=yes
IPADDR=X.X.X.X
PREFIX=24
GATEWAY=X.X.X.X
DNS1=X.X.X.X
DNS2=8.8.8.8
SEARCH=xxx.xxx
IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6ADDR="X:X:X:X::X"
Run Code Online (Sandbox Code Playgroud)
我还注意到在一些双栈 IPv4/IPv6 部署系统中,IPv6 也需要更长的时间来初始化静态地址,这是由路由设置和其他一些新的 IPv6 内容引起的。
所以我的问题是,如何确保仅在将 IPv6 链路全局分配给接口后才启动服务单元?
编辑:在一些关于 DAD 的评论指向我之后,我认为 systemd-networkd 已经合并了 DAD 等待,但仅在主分支上,在系统 220 上不存在(Centos 7.2 有 systemd 219)。NetworkManager 似乎有一些补丁,但我没有使用任何补丁。
我在阅读后找到了可接受的临时解决方案,并进行了一些测试,对于我的服务器上的 IP …
假设我正在经营一项公共服务。一般来说,人们会表现得很好,但偶尔也会有人不表现,知道你从谁那里得到祝福通常是件好事。
因此,假设
扔掉 IPv6 地址的最后 64 位,只跟踪前 64 位是个好主意吗?
我们正在推出 IPv6,我正在考虑我们的 DNS 策略。这不是一个技术问题——它更像是一个“最佳实践”问题。
我们在内部拥有 Active Directory,域控制器处理我们“内部”区域(例如domain.local, 16.172.in-addr.arpa)的权威 DNS以及所有用户的递归。我们有大约 1200 个用户,因此 5 个域控制器可以轻松处理 DNS 递归,只需将其不授权的区域转发到Cisco Umbrella DNS。我们严重依赖动态 DNS,包括内部主机的 A 和 PTR 记录。对于我们的公共区域,我们使用DNS Made Easy。
现在我们正在研究 IPv6,我们希望保持在内部使用动态 DNS 的能力,包括 AAAA 和 PTR 记录。由于 IPv6 中不需要 NAT,因此给定主机的内部地址与外部地址相同。为 ip6.arpa 区域维护两个独立的数据库(一个内部一个和一个外部一个)仍然应该做什么?另一种方法是在我的防火墙中放置一个规则,允许公共 DNS 服务器成为 ip6.arpa 区域的辅助服务器。我不是在谈论允许整个 Internet 直接查询我的 DC——而是允许 DNS Made Easy 传输代理保留它的副本。
这样做会“泄露”我所有的内部 DNS 条目,但这真的有那么可怕吗?
当我打字时,我想最好只维护两个数据库——一个内部数据库和一个外部数据库,就像我过去一直做的那样。社区怎么看?
domain-name-system active-directory ipv6 reverse-dns internal-dns
我有一个大约有十几个 VLAN 的网络,大多数有 VLAN 间路由,有些没有。他们可能会互相交谈,但不会与对方的网关交谈。它不是因为安全或拥塞而划分的,更像是有 VLAN 用于服务器,一些从本地出口到我的 ISP,一些通过 VPN 进入另一个区域,一些受到限制,一些是 VPS 的 DMZ 登陆地点......当然有一个是公开的。因此,VLAN 对于在不分配固定 IP 地址的情况下将流量路由到正确位置至关重要。
刚才我意识到广播域实际上是这里的关键部分,但我仍然很困惑,所以我会继续。
我已经阅读了几天关于 IPv6 的文章,我想将一个 /64 块或多或少分成我没有的内容,但从我可以收集的阅读文章、论坛和一些论文来看,这是不可取的进入更小的区块。我确实阅读了一些关于如何在 IPv6 地址中内置子网标识符的内容。
如何在所有客户端获得相同的 /64 前缀的情况下划分 /64 块,并且我仍然可以像我现在所做的那样在分配有 RADIUS 的 VLAN 上将它们分开?
我希望每个客户端都获得或多或少相同的地址空间,而不必是固定 IP,无论它连接到哪个 AP 或以太网端口。
我是否应该只执行它并使用更长的前缀并让路由器或 L3 交换机执行繁重的工作,将选定的 VLAN 重新通信?我担心获得非对称路由和重置网络将是一个主要的 PITA,即使有备份;其中一些距离很远,通过长距离无线链路连接。
我感谢您的帮助; 我找不到与段的实际分离相关的足够具体的答案,大多数只与地址空间有关。
编辑:按照 Marco 的建议添加了额外的 .conf 文件管理器并稍微更改了措辞
我正在运行Fail2ban v0.10,它应该支持 IPv6。
我已经根据这些说明设置了带有 nftables 的 Fail2ban,但我对 nftables 使用了 'inet' 系列而不是 ip 系列,因为我想允许 IPv6 流量到我的服务器。
服务器可以通过 IPv6 访问,而且我的防火墙(nftables)似乎配置正确,就我所见(表 inet 过滤器)。
然而,'table inet fail2ban' 是我写这篇文章的原因,在我看来,Fail2ban 只读取 IPv4 日志,并阻止违规的 IPv4 主机。
我读对了吗?如果是这样,有谁知道我如何使 Fail2ban 也能处理 IPv6 流量?我知道 Fail2ban v0.10 更新日志指出,并非所有禁令行动都支持 IPv6,但我似乎找不到列表。
也欢迎提供指向我可以找到信息的链接,因为我自己似乎无法找到。
我只包含了 recidive jail 配置,因为我认为如果我可以让 jail 使用 IPv6,我可以对其他人做同样的事情,如果我误解了这个假设,请告诉我 :)
我的 nftables 规则集:
table inet filter {
chain input {
type filter hook input priority 0; policy accept;
ct state { related, …Run Code Online (Sandbox Code Playgroud)