V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
a90405
V2EX  ›  宽带症候群

分享:允许或者拒绝特定的设备获取 IPV6 地址, ip6tables / nftables 规则

  •  
  •   a90405 · 2023-11-07 16:20:33 +08:00 · 1323 次点击
    这是一个创建于 378 天前的主题,其中的信息可能已经有所发展或是发生改变。
    解释:
    mac1 mac2 mac3 自己替换成需要获取 ipv6 地址的设备 mac ,你可以继续添加按格式添加 mac4 mac5 之类的
    如果你要拒绝你设置的 mac 获取 ipv6 地址:
    iptables 规则,请把 -m set 后面的 ! 号删掉
    nftables 规则,请把 != 删掉
    如果你的 lan 口设备不是 br-lan ,你把代码的 br-lan 替换成相应的设备名

    iptables 规则:下面的代码放到 防火墙自定义规则 里面
    ipset create ipv6macs hash:mac
    ipset add ipv6macs mac1
    ipset add ipv6macs mac2
    ipset add ipv6macs mac3

    ip6tables -t mangle -I PREROUTING -i br-lan -p ipv6-icmp -m set ! --match-set ipv6macs src -j DROP
    ip6tables -t mangle -I PREROUTING -i br-lan -p udp --dport 547 -m set ! --match-set ipv6macs src -j DROP

    nftables: 新建一个 xxx.nft 文件,复制下面代码进去,放到/usr/share/nftables.d/chain-pre/mangle_prerouting/ ,没有目
    录就新建,注意 xxx.nft 的换行格式要换成 linux 的,否则会报错。

    iifname br-lan meta nfproto ipv6 udp dport 547 ether saddr !={ mac1, mac2, mac3 } counter drop comment
    iifname br-lan icmpv6 type { 133-143 } ether saddr !={ mac1, mac2, mac3 } counter drop comment
    5 条回复    2023-11-17 12:21:52 +08:00
    dant
        1
    dant  
       2023-11-07 17:19:03 +08:00
    也可以在 luci 中添加 firewall rule ,给特定 MAC 地址阻断 ICMPv6/DHCPv6
    a90405
        2
    a90405  
    OP
       2023-11-09 19:51:35 +08:00
    @dant #1 我研究了一下,只要开了路由器定期发送的 RA ,客户端开了 SLAAC ,就没办法阻止客户获得 ipv6 地址,顶楼的防火墙只能阻挡客户端刚接入网络时候的请求 IPV6 地址发送的 RS ,从而让客户端立即接收不到路由器回播的单播 RA 消息,从而让客户端一开始没法获取 IPV6 地址,直到下一次的路由器主动发送的组播 RA 消息。

    路由器定期的 RA 组播消息,它发送到 FF02::1 这个目标地址的,这个地址是所有 ipv6 客户端所在的组播地址,所有只要开了 ipv6 协议,有链路本地 ipv6 FE80 开头的那个地址的机器都能收到。

    所以说,在路由器上阻止特定客户端获取 Ipv6 地址是没办法的,至少 openwrt 的 odhcpd 是没有办法的。

    所以说本贴作废。
    ranaanna
        3
    ranaanna  
       2023-11-09 22:53:52 +08:00
    @a90405 同意。不过在路由器上可以配置向其发送路由通告并接受路由请求的客户端列表,也就是 RADVD 的 clients{};。这样路由器只会发送 RA 到列表中的单播地址而不会发送到组播地址,来自其它地址的请求也会被拒绝。当然 OP 想要实现的,是一个黑名单,而这是个白名单
    beyondstars
        4
    beyondstars  
       2023-11-17 12:17:01 +08:00
    如果不限定于纯软件方法的话,可以考虑 VLAN ,主路由器的 LAN 口连接到 port 0, 一个 IPv4 only 的路由器接到 port 1 ,不允许获取 IPv6 地址到机器接到 port 2, 然后 port 0, port 1 属于 VLAN 1, port 1, port 2 属于 VLAN 2, port 1 设定为汇聚端口。这时如果在主路由 ping ff02::1 这个地址应该只收到连接到 port 0, port 1 两台主机的回复。

    这样从主路由发出的 RA 广播帧就不会到达受限制获取 IPv6 地址的那台机器了。
    beyondstars
        5
    beyondstars  
       2023-11-17 12:21:52 +08:00
    有的交换机支持 IPv6 RA Guard 功能,可以屏蔽特定条件的 RA 帧,不过这个我没有仔细了解过。https://networklessons.com/cisco/ccie-routing-switching-written/ipv6-ra-guard
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3658 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:45 · PVG 18:45 · LAX 02:45 · JFK 05:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.