Linux 的 IP Forward 到底是怎么一个流程, A 网卡流入需要 Forward 到 B 网卡的包, 对于 B 网卡来说是内核直接发给他的, 还是退回到 INPUT 之前再 Forward, 这个描述好像不是很恰当!
Linux 网络接口 SLAAC 模式下 IPv6 有子接口 ID 的参数吗? OpenWRT 中 ip6hint
参数
Linux 网络接口如何过滤不需要的 RA 消息, 只使用制定的 RA 消息. 及 OpenWRT 中 ip6class
参数
......
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 模块, 不知道咋实现区分了. 各位有建议吗?
1
yanqiyu 340 天前 via Android
1. 包进来先经过 prerouting hook ,然后对比路由表决定是流向本机还是流出去,相应决定走 input 还是 forward 的 hook ,文档可以看 nftable 的 hook 的文档
https://wiki.nftables.org/wiki-nftables/index.php/Netfilter_hooks 2-3.服务器的文档,dnsmasq 我记得超级难用,大概是类似于,::1, ::FFFF:FFFF:FFFF:FFFF 的语法指定 range 然后 dnsmasq 可以指定监听的接口,要我来折腾我会一个接口开一个 dnsmasq 然后 ra 不会被 forward 出去,你在别的接口看到的 ra (大概率)是 dnsmasq 被设置成了每个接口发包 |
2
pagxir 340 天前 via Android
如果你的每个接口都挂在一个网桥下,那么它本就该如此,跟转不转发没有关系。如果不是一个桥下的,那就是你的 ra 配置不对,你需要每个接口配置单独的前缀。
|
3
ac169 OP 谢谢!
@yanqiyu 1. 其实更多的是这个现象让我对以前的知识产生了怀疑. 2. " ... 多网卡 Linux 默认情况下, 自身也不开启任何 DHCP(v6)或 RA 服务, 只要任意一个接口上游有 RA 或 DHCP(v6)所有网卡都能获得或者是生成地址, 且之前使用的 radvd 实现 RA 服务也都有这个问题 ... " 所以我怀疑是系统方面的问题居多. 3. 另外, 不论是 radvd 还是 dnsmasq 官方文档和能找到的案例, 基本都没有涉及到多网口多子 IPv6 网的情况. 参数多少部分理解起来很抽象. dnsmasq 可以指定监听的接口, 好像还可以忽略某些端口, 但是现实是我这边是有多个端口,难道要启动多个监听吗? @pagxir "... 每个接口都挂在一个网桥下 ..." 这个问题如何判断! 我只知道网卡物理接口都是独立存在的,没有手动创建过桥接类型的网卡, 系统启动之后 lspci 识别的也是独立的, 且型号都不同. |
5
ac169 OP @yanqiyu
此前搜索料一番,又分别做如下尝试 1.RADVD 服务开启 UnicastOnly on; 2.dnsmasq 服务配置文件分开配置且加上 interface 等参数; 结果是没有任何改变, 在 Linux 和 局域网机器上都抓包过, 包括防火墙日志上都看过, 使用 radvd 也看过, 其实可以清晰的看到是两个接口分别发的.所以, 至少目前 " ... 你在别的接口看到的 ra (大概率)是 dnsmasq 被设置成了每个接口发包 ... " 这个猜测基本可以排除了 其实还有最重要的一点, 这点之前也提到过,那就是这个多网卡的机器在安装完系统后, 只将一个网口接到仅有 RA 模式的 IPv6 路由器上,其他所有也同时接口都获得了 IPv6 地址, 因为这个 RA 都不是机器自己产生的, 所以个人还是认为系统方面处理 RA 机制问题的可能性大, 防火墙/内核参数 |
6
mantouboji 339 天前
莫名其妙,我也有两个网卡的机器,咋就只有一个网卡能得到地址,另一个网卡就没呢? Fedora 39 。
你这什么具体信息也不给出来,谁知道你都设置了些什么? |
7
ac169 OP @mantouboji
其实, 我有描述过, 比如: " ... 多网卡 Linux 默认情况下, 自身也不开启任何 DHCP(v6)或 RA 服务, 只要任意一个接口上游有 RA 或 DHCP(v6)所有网卡都能获得或者是生成地址 ... " " ... 其实还有最重要的一点, 这点之前也提到过,那就是这个多网卡的机器在安装完系统后, 只将一个网口接到仅有 RA 模式的 IPv6 路由器上,其他所有接口也同时都获得了 IPv6 地址 ... " " ... 尝试 设置内核参数 net.ipv6.conf.*.forwarding = 0 问题依旧 ..." 其实, 这个系统就是新安装的, 没有做过什么设置, 如果非要说有设置顶多就是 net.ipv6.conf.*.forwarding = 0 我尝试过一些值, 包括也恢复过问题依旧. " ... 我也有两个网卡的机器,咋就只有一个网卡能得到地址,另一个网卡就没呢 ... " 你另外一个卡是接线或者说激活状态吗? 如果真的说是系统版本问题, 我觉得是我喜闻乐见的, 必将换一个版本再简单不过了. 我找时间换个版本试试吧 |