我正在尝试弄清楚如何配置需要跨多个不同物理子网接口路由的单个 ipv6 /64 前缀。问题说明如下:
/ Wi-Fi subnet 1
Internet - ISP -+ Router host (Linux) - LAN subnet 1
\ Wi-Fi subnet 2
这里的插图是 3 个子网,但实际上可以有更多的子网(就此而言,Wi-Fi 子网可以由将 Wi-Fi 桥接到 LAN 的 Linux 主机和一个连接到主路由器上的 1 个端口组成)并且路由器主机是多宿主的,具有多个独立端口。
问题是所有子网都需要共享从 ISP 路由的相同 /64 前缀。
虽然一种方法是简单地桥接所有子网(第 2 层),但我更喜欢在第 3 层(即 ipv6)进行所有路由,但在所有子网中使用来自 ISP 的一个可路由的 /64 前缀。
在搜索/研究解决方案时,我偶然发现:
- NDPPD github.com/DanielAdolfsson/ndppd
^ 我实际上正在尝试这个,但并没有取得多大成功。问题是如何定义 IP 路由,以便所有不同的子网在不同的网络接口上使用相同的 /64 前缀(在主路由器上)
^ 尚未尝试
使用 Babel 协议 (RFC 6126) 的动态路由
BIRD 路由器也支持
^ 这是最有希望的解决方案之一,但我偶然发现了
- 如何为多个“相同前缀” IPv6 网络配置路由/拓扑
- 如何动态地将主机注册到 Babel 路由器,因为相同的 64 位接口 ID 实际上可以漫游并连接到任何子网。问题是我无法将子网设置为小于 /64 的 SLAAC(https://datatracker.ietf.org/doc/html/rfc4862) 将自动修补 64 位接口 ID。所有 Android 手机都会这样做,我认为大多数 iPhone 和其他工作站(例如运行 Linux/Windows 的笔记本电脑)大多默认使用 SLAAC。
- RFC 7421 IPv6 寻址中 64 位边界的分析
^ 这是我偶然发现的最好的关于这个问题的 RFC 文档之一
在解决方案 NAT64 中 - 无状态 NAT64 [RFC6052] 和有状态 NAT64 [RFC6146] 几乎就像在具有单个 IPv4 地址的“所有”‘家庭’路由器上实际使用的“旧”NAT。
- https://gist.github.com/danderson/664bf95f372acf106982bcc29ff56b53
- https://ripe85.ripe.net/wp-content/uploads/presentations/78-ripe85-open-source-nat64.pdf
- NPTv6:IPv6 到 IPv6 网络前缀转换 [RFC6296] https://gist.github.com/inntran/4816f33d9230b0a31bea062fc21fcbd9
我现在似乎只剩下 NAT64 和 NPTv6 来尝试将其映射到可路由的设置中。
请让我知道您对此的想法,例如是否还有其他解决方案。
答案1
告诉您的 ISP 您需要更多 /64 路由给您。对于所有配备路由器的站点(包括住宅区),至少有一个 /56 是惯例。根据您的地址计划,可能需要更多。
如果您的 ISP 不赞成在商务级服务中使用多个 /64,请更换更好的 ISP。
如果没有更好的 ISP,请考虑从其他提供商引入足够的地址空间。例如 6in4 隧道或 VPN。经过另一跳和覆盖可能会带来一些性能下降的风险。但您的地址规划和 IP 路由将变得简单。
您引用了关于偏离 /64 对标准意味着什么的更好的分析之一,即 RFC 7421。“超过 64 位的子网前缀超出了当前的 IPv6 规范,因此结果可能会有所不同。”例如,在实践中,SLAAC 可能是某些主机唯一合理的地址机制,但如果您尝试使用 /80s,则实现可能不起作用。
绝对认为子网/接口 ID 是 64 位似乎很愚蠢。但是,我认为期望任何网络都只使用一个子网是很奇怪的。地址空间如此巨大,以至于地球上的每个人都可以分配几千个 /48。然后 IANA可能需要开始开辟下一个八分之一。