求助: 搭建 IPv6 软路由遇到的问题 ( 主要是 RA 消息方面 ) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
ac169
V2EX    Linux

求助: 搭建 IPv6 软路由遇到的问题 ( 主要是 RA 消息方面 )

  •  
  •   ac169 2023-12-30 14:12:56 +08:00 2054 次点击
    这是一个创建于 725 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题总结(如果你时间宝贵直接看前三条即可)

    1. Linux 的 IP Forward 到底是怎么一个流程, A 网卡流入需要 Forward 到 B 网卡的包, 对于 B 网卡来说是内核直接发给他的, 还是退回到 INPUT 之前再 Forward, 这个描述好像不是很恰当!

    2. Linux 网络接口 SLAAC 模式下 IPv6 有子接口 ID 的参数吗? OpenWRTip6hint 参数

    3. Linux 网络接口如何过滤不需要的 RA 消息, 只使用制定的 RA 消息. 及 OpenWRTip6class 参数

    目标:

    • 基于 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 服务的问题).

    尝试:

    1. 设置内核参数 net.ipv6.conf.*.forwarding = 0 问题依旧

    2. 防火墙拦截: 很遗憾 FORWARD 链 filter 没有任何 RA 包, 只有 INPUT OUTPUT 链 filter 表中有, 测试 INPUT 链拦截无作用, 测试 OUTPUT 链能成功但是只能这个拦截, 无法分类只拦截其他接口, 因为 OUTPUT 链 ICMPv6 除了 --icmpv6-type router-advertisement 类似参数之外不能使用 mac-source 模块, 不知道咋实现区分了. 各位有建议吗?

    第 1 条附言    2023-12-31 15:54:44 +08:00
    最新进展: Linux radvd DNSmasq 均没有问题, 是机器下面挂的交换机配置出了问题做了 RA 转发, 难怪在机器防火墙上看不到转发包!

    1 3 问题没有了, 但 2 这个子接口 ID 的参数的问题, 还望有大老能说说
    7 条回复    2023-12-31 15:07:56 +08:00
    yanqiyu
        1
    yanqiyu  
       2023-12-30 16:07:46 +08:00 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 被设置成了每个接口发包
    pagxir
        2
    pagxir  
       2023-12-30 16:19:36 +08:00 via Android
    如果你的每个接口都挂在一个网桥下,那么它本就该如此,跟转不转发没有关系。如果不是一个桥下的,那就是你的 ra 配置不对,你需要每个接口配置单独的前缀。
    ac169
        3
    ac169  
    OP
       2023-12-30 18:00:54 +08:00
    谢谢!

    @yanqiyu

    1. 其实更多的是这个现象让我对以前的知识产生了怀疑.

    2. " ... 多网卡 Linux 默认情况下, 自身也不开启任何 DHCP(v6)或 RA 服务, 只要任意一个接口上游有 RA 或 DHCP(v6)所有网卡都能获得或者是生成地址, 且之前使用的 radvd 实现 RA 服务也都有这个问题 ... " 所以我怀疑是系统方面的问题居多.

    3. 另外, 不论是 radvd 还是 dnsmasq 官方文档和能找到的案例, 基本都没有涉及到多网口多子 IPv6 网的情况. 参数多少部分理解起来很抽象. dnsmasq 可以指定监听的接口, 好像还可以忽略某些端口, 但是现实是我这边是有多个端口,难道要启动多个监听吗?


    @pagxir

    "... 每个接口都挂在一个网桥下 ..." 这个问题如何判断! 我只知道网卡物理接口都是独立存在的,没有手动创建过桥接类型的网卡, 系统启动之后 lspci 识别的也是独立的, 且型号都不同.
    yanqiyu
        4
    yanqiyu  
       2023-12-30 19:58:17 +08:00 via Android
    @ac169 各开一个很合理,多个子网处理起来也和一个子网一样,各开各的 dnsmasq 能解决很多麻烦
    ac169
        5
    ac169  
    OP
       2023-12-30 22:08:30 +08:00
    @yanqiyu

    此前搜索料一番,又分别做如下尝试

    1.RADVD 服务开启 UnicastOnly on;
    2.dnsmasq 服务配置文件分开配置且加上 interface 等参数;

    结果是没有任何改变, 在 Linux 和 局域网机器上都抓包过, 包括防火墙日志上都看过, 使用 radvd 也看过, 其实可以清晰的看到是两个接口分别发的.所以, 至少目前 " ... 你在别的接口看到的 ra (大概率)是 dnsmasq 被设置成了每个接口发包 ... " 这个猜测基本可以排除了

    其实还有最重要的一点, 这点之前也提到过,那就是这个多网卡的机器在安装完系统后, 只将一个网口接到仅有 RA 模式的 IPv6 路由器上,其他所有也同时接口都获得了 IPv6 地址, 因为这个 RA 都不是机器自己产生的, 所以个人还是认为系统方面处理 RA 机制问题的可能性大, 防火墙/内核参数
    mantouboji
        6
    mantouboji  
       2023-12-31 12:58:27 +08:00
    莫名其妙,我也有两个网卡的机器,咋就只有一个网卡能得到地址,另一个网卡就没呢? Fedora 39 。

    你这什么具体信息也不给出来,谁知道你都设置了些什么?
    ac169
        7
    ac169  
    OP
       2023-12-31 15:07:56 +08:00
    @mantouboji

    其实, 我有描述过, 比如:

    " ... 多网卡 Linux 默认情况下, 自身也不开启任何 DHCP(v6)或 RA 服务, 只要任意一个接口上游有 RA 或 DHCP(v6)所有网卡都能获得或者是生成地址 ... "

    " ... 其实还有最重要的一点, 这点之前也提到过,那就是这个多网卡的机器在安装完系统后, 只将一个网口接到仅有 RA 模式的 IPv6 路由器上,其他所有接口也同时都获得了 IPv6 地址 ... "

    " ... 尝试 设置内核参数 net.ipv6.conf.*.forwarding = 0 问题依旧 ..."


    其实, 这个系统就是新安装的, 没有做过什么设置, 如果非要说有设置顶多就是 net.ipv6.conf.*.forwarding = 0 我尝试过一些值, 包括也恢复过问题依旧.


    " ... 我也有两个网卡的机器,咋就只有一个网卡能得到地址,另一个网卡就没呢 ... " 你另外一个卡是接线或者说激活状态吗?

    如果真的说是系统版本问题, 我觉得是我喜闻乐见的, 必将换一个版本再简单不过了.

    我找时间换个版本试试吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     919 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 20:58 PVG 04:58 LAX 12:58 JFK 15:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86