问题总结(如果你时间宝贵直接看前三条即可)
-
Linux 的 IP Forward 到底是怎么一个流程, A 网卡流入需要 Forward 到 B 网卡的包, 对于 B 网卡来说是内核直接发给他的, 还是退回到 INPUT 之前再 Forward, 这个描述好像不是很恰当!
-
Linux 网络接口 SLAAC 模式下 IPv6 有子接口 ID 的参数吗? OpenWRT 中
ip6hint参数 -
Linux 网络接口如何过滤不需要的 RA 消息, 只使用制定的 RA 消息. 及 OpenWRT 中
ip6class参数
目标:
- 基于 Linux(CentOS 7)搭建一个 IPv6 软路由, 且实现多网口独立 IPv6 网段(子网)功能
参考:
问题:
- 内网地址分配目前打算只开启 RA, 不开启 DHCPv6. RA 通过 DNSmasq 但现状是每个接口下的的设备都能收到配置中全部 IPv6 网段(子网)RA 消息,且会生成所有 IPv6 网段(子网)的多个地址. 配置文件如下:
......
ra-param=ens1, 120, 3600
dhcp-range=ens1, ::, constructor:ens1, ra-only, 1h
ra-param=ens*, 120, 3600
dhcp-range=ens*, ::, constructor:ens*, ra-only, 1h
enable-ra
......
分析:
多网卡 Linux 默认情况下, 自身也不开启任何 DHCP(v6)或 RA 服务, 只要任意一个接口上游有 RA 或 DHCP(v6)所有网卡都能获得或者是生成地址, 且之前使用的 radvd 实现 RA 也都有这个问题, 所以我怀疑是系统方面的问题居多(不排除 RA 服务的问题).
尝试:
-
设置内核参数
net.ipv6.conf.*.forwarding = 0问题依旧 -
防火墙拦截: 很遗憾 FORWARD 链 filter 没有任何 RA 包, 只有 INPUT OUTPUT 链 filter 表中有, 测试 INPUT 链拦截无作用, 测试 OUTPUT 链能成功但是只能这个拦截, 无法分类只拦截其他接口, 因为 OUTPUT 链 ICMPv6 除了 --icmpv6-type router-advertisement 类似参数之外不能使用 mac-source 模块, 不知道咋实现区分了. 各位有建议吗?