我在 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 位是个好主意吗?
编辑:按照 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) 我似乎无法在 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) 目前,在我的 IPv4-only 服务上,用户可以将他们的 IP 地址列入白名单,这允许他们在登录时绕过电子邮件 2 因素身份验证。当他们这样做时,我们只将该单个 IP 地址列入白名单,因为假设每个 ISP 客户都获得他们自己的 IPv4 地址(至少在美国)。
我们想要启用 IPv6 支持,在研究 IPv6 子网划分的工作原理后,我们发现我们需要将整个 IPv6 子网而不是单个地址列入白名单。
搜索有关 serverfault 的其他 IPv6 问题,似乎有关于将哪个子网委派给每个 ISP 最终用户的信息存在冲突。看到这个答案:
/56:256 个基本子网的块。尽管当前的政策允许 ISP 向每个最终用户分发大至 /48 的块,并且仍然认为他们的地址使用是合理的,但一些 ISP 可能(并且已经这样做)选择将 /56 分配给消费级客户作为妥协分配之间
/48:一个由 65536 个基本子网组成的块以及每个 ISP 客户端站点应接收的推荐块大小。
仅基于该答案,对于每个用户收到的 IPv6 块,已经有 3 个相互矛盾的陈述:
那么对于使用 IP 地址进行白名单的服务,哪个 IPv6 块适合列入白名单?我应该让用户决定吗?(用户相当精通技术并且知道子网是什么)
我想通过一个公共 IPv6 地址将多个设备(在 LAN 中)连接到 Internet。
不幸的是,我没有找到一个好的方法来做到这一点。我唯一的想法是在 Sense 之前通过 OpenVPN 将 PF/OPNsense 中的所有内容通过隧道传输到 Raspberry Pi 或类似设备,然后使用来自 Pi 的 IPv6 连接到 Internet。
计划的设置是 Internet (WAN) - Fritzbox (LAN1) - PFSense / OPNsense(带 WAN 接口)- LAN2
还有其他可能吗?VPN 解决方案不是很好。
为什么?为每个(私有)设备分配自己的公共 IP(也带有隐私扩展)可以简化跟踪。此外,某些设备没有隐私扩展或未激活。
我有一个在 Azure 中运行的 Centos7 VM 实例。它有一个可通过互联网访问的公共 IPv4 地址。我想向该实例的网络接口添加公共 IPv6 地址,但我不知道如何执行此操作。似乎没有办法将其从门户添加到界面。我查阅了文档,但似乎有冲突的信息表明这是不可能的,或者只能通过创建新的虚拟机来实现。我也尝试过这一点,但再次无法使其发挥作用。我在 Google 上找到的信息似乎已过时。
如果有人能建议是否可以将公共 IPv4 和 IPv6 地址分配给同一个虚拟机,以及如果可以的话如何实现,我将非常感激。谢谢!