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

190 天前
 a90405
解释:
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
1060 次点击
所在节点    宽带症候群
5 条回复
dant
190 天前
也可以在 luci 中添加 firewall rule ,给特定 MAC 地址阻断 ICMPv6/DHCPv6
a90405
188 天前
@dant #1 我研究了一下,只要开了路由器定期发送的 RA ,客户端开了 SLAAC ,就没办法阻止客户获得 ipv6 地址,顶楼的防火墙只能阻挡客户端刚接入网络时候的请求 IPV6 地址发送的 RS ,从而让客户端立即接收不到路由器回播的单播 RA 消息,从而让客户端一开始没法获取 IPV6 地址,直到下一次的路由器主动发送的组播 RA 消息。

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

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

所以说本贴作废。
ranaanna
188 天前
@a90405 同意。不过在路由器上可以配置向其发送路由通告并接受路由请求的客户端列表,也就是 RADVD 的 clients{};。这样路由器只会发送 RA 到列表中的单播地址而不会发送到组播地址,来自其它地址的请求也会被拒绝。当然 OP 想要实现的,是一个黑名单,而这是个白名单
beyondstars
180 天前
如果不限定于纯软件方法的话,可以考虑 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
180 天前
有的交换机支持 IPv6 RA Guard 功能,可以屏蔽特定条件的 RA 帧,不过这个我没有仔细了解过。https://networklessons.com/cisco/ccie-routing-switching-written/ipv6-ra-guard

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/989561

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX