我想从dhcp服务器中删除dhcp响应,其中mac addr为3c:e3:c9:64:3b:f7,所以我可以使用以下命令: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接收dhcp响应:a3:c9:a4:3b:f7,但是从00:30:67:00接收:38:CF.vlan20中有2个dhcp服务器,其中一个是被动的,它只响应列表中的特定mac地址,被动的是我自己使用的,另一个是pubilc。在这种情况下,我只是从3c中删除响应:a3:c9:a4:3b:f7然后它只会收到00:30:67:00:38:CF。
另一个vlan30(eth0.30),它只有一个dhcp服务器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
,但没有用。
我错过了什么?
答案 0 :(得分:0)
您的卡只有一个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