【问题标题】:How to drop the specific dhcp response?如何删除特定的 dhcp 响应?
【发布时间】:2016-05-25 22:48:10
【问题描述】:

我想从 mac addr 为 3c:e3:c9:64:3b:f7 的 dhcp 服务器中删除 dhcp 响应,所以我可以使用以下命令:iptables -t raw -A PREROUTING -p udp --sport 67 -m mac --mac-source 3c:e3:c9:64:3b:f7 -j DROP

我从这里学习:https://serverfault.com/questions/302445/how-do-i-mac-filter-with-dhcp-server

但我的接口使用 802.1q 协议,我希望 vlan20(eth0.20) 无法接收来自 3c:a3:c9:a4:3b:f7 的 dhcp 响应,而是从 00:30:67:00:38 接收:CF.vlan20中有2个dhcp服务器,其中一个是被动的,它只响应列表中的特定mac地址,被动的一个是我自己使用的,另一个是公共的。那样的话,我就放弃了来自 3c:a3:c9:a4:3b:f7 的响应,那么它只会从 00:30:67:00:38:CF 接收。

另外一个vlan30(eth0.30),只有一个dhcp server 3c:e3:c9:64:3b:f7,所以没什么可做的。

我试过这个iptables -t raw -A PREROUTING -i eth0.121 -m mac --mac-source 3c:e3:c9:64:3b:f7 -j DROP,但没用。

我错过了什么?

【问题讨论】:

    标签: linux iptables dhcp


    【解决方案1】:

    您的网卡只有一个 MAC 地址,但有多个 IP 接口。他们需要静态分配地址。

    DHCP 是一种不理解虚拟地址的广播协议。

    DHCP 服务器发送一个 DHCPOFFER,它是如何被传送到 eth0:30 而不是 eth0 的? eth0:20 通过广播发送 DHCPDISCOVER 或 DHCPREQUEST。

    DHCP 服务器以 DHCPOFFER 响应以通知客户端其 IP 地址。如果 eth0:20 还没有 IP 地址,DHCPOFFER 可能不会到达。

    DHCP 服务器发回广播并依靠链路层将以太网帧(以及堆叠在其上的其他相关层)正确传送到协调 MAC 地址。这就是 DHCP 分配的工作原理。

    DHCPOFFER 的问题在于,从第 2 层的角度来看,两个“设备”(eth0 和 eth0:30)无法区分,因此(从第 3 层的角度来看)DHCPOFFER 的目标地址为 255.255.255.255。

    虽然 VLAN 可以工作,但您必须确保您有一个实际支持 802.1q 的 NIC。

    我会确保你的网卡支持 VLAN,我会检查内核是否加载了 vlan 模块

    检查是否加载

    lsmod | grep 8021q

    如果没有加载,让我们加载它

    modprobe 8021q

    至于 Iptables 命令,这应该是最后的手段,因为上述需要正常工作。

    iptables -I INPUT -p udp -m udp --sport 68 -m mac --mac-source 3c:e3:c9:64:3b:f7 -j DROP

    【讨论】:

    • 我确定它支持 8021q 协议,因为我可以手动给 eth0.20 一个 IP 地址并且它运行良好。你的命令 iptables -I INPUT -p udp -m udp --sport 68 -m mac --mac-source 3c:e3:c9:64:3b:f7 -j DROP 将丢弃来自 3c:e3:c9 的 dhcp 响应: 64:3b:f7 在任何界面中。我想我可以添加-i eth0.20 来指定一个界面,但没有奏效。
    • 对于你正在尝试做的事情,它不是基于 IP,而是基于 MAC 地址。
    猜你喜欢
    • 2011-06-01
    • 2022-10-16
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多