V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
ac169
V2EX  ›  Linux

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

  •  
  •   ac169 · 329 天前 · 1667 次点击
    这是一个创建于 329 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    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 条附言  ·  328 天前
    最新进展: Linux radvd DNSmasq 均没有问题, 是机器下面挂的交换机配置出了问题做了 RA 转发, 难怪在机器防火墙上看不到转发包!

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

    @yanqiyu

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

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

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


    @pagxir

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

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

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

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

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

    你这什么具体信息也不给出来,谁知道你都设置了些什么?
    ac169
        7
    ac169  
    OP
       328 天前
    @mantouboji

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

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

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

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


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


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

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

    我找时间换个版本试试吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2833 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:46 · PVG 21:46 · LAX 05:46 · JFK 08:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.