两个 DHCP 服务器,阻止其中一个的客户端?

两个 DHCP 服务器,阻止其中一个的客户端?

我正在构建一个位于不同 VLAN 上的 kickstart 网络,使用自己的 DHCP 服务器。出于某种原因,我的 kickstart 客户端不断从我的主 DHCP 服务器获取分配 IP。

我的设置方式是,在此路由器上有一个主 DHCP 服务器:

192.168.15.1

连接到该 DHCP 服务器的是一台 IP 为 192.168.15.2 的交换机。我的 kickstart (Scientific Linux) 服务器通过两个端口连接到该交换机:

端口 2 - kickstart 服务器通过 eth0 与生产网络的其余部分进行通信。该接口上分配给服务器的 IP 是 192.168.15.100(在 eth0 上)。详细信息如下:

Interface: eth0
IP: 192.168.15.100
Netmask: 255.255.255.0
Gateway: 192.168.15.1

端口 7 - 有自己的 VLAN ID(与端口 8 一样)。kickstart 服务器连接到该端口,IP 为 172.16.15.100(在 eth1 上)。同样,详细信息如下:

Interface: eth1
IP: 172.16.15.100
Netmask: 255.255.255.0
Gateway: none

kickstart 服务器运行自己的 DHCP 服务器并通过 eth1 分配地址。大多数 kick start 都是通过端口 8 在 kickstart VLAN 上构建的。为了防止 kickstart DHCP 服务器通过生产网络分配地址,我设置了如下路由:

route add -host 255.255.255.255 dev eth1

此时,客户端不断从 192.168.15.1 DHCP 服务器获取分配的 IP。我需要想办法阻止客户端请求到达该 DHCP。需要注意的是,我也在 kickstart 服务器上构建了 KVM 主机,因此一旦我解决了这个特定问题,我需要这些 KVM 能够通过桥接网络从 192.168.15.1 DHCP 服务器获取 DHCP 请求。(目前,它们通过 NAT 进行通信)。

那么该怎么做才能解决这个问题?通过 iptables 还是我需要放入某种路由?

我尝试限制通过该接口上的 IPtables 发出的请求,允许 172.16.15.x 网络的 DHCP 请求:

-A INPUT -i eth1 -s 172.16.15.0/24 -p udp -m udp --dport 69 -j ACCEPT
-A INPUT -i eth1 -s 172.16.15.0/24 -p tcp -m tcp --dport 69 -j ACCEPT
-A INPUT -i eth1 -s 172.16.15.0/24 -p udp -m udp --dport 68 -j ACCEPT
-A INPUT -i eth1 -s 172.16.15.0/24 -p tcp -m tcp --dport 68 -j ACCEPT
-A INPUT -i eth1 -s 172.16.15.0/24 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i eth1 -s 172.16.15.0/24 -p tcp -m tcp --dport 67 -j ACCEPT

并拒绝来自 192.168.15.x 网络的 eth1 上的分配:

-A FORWARD -o eth1 -s 192.168.15.0/24 -p udp -m udp --dport 69 -j REJECT
-A FORWARD -o eth1 -s 192.168.15.0/24 -p tcp -m tcp --dport 69 -j REJECT
-A FORWARD -o eth1 -s 192.168.15.0/24 -p udp -m udp --dport 68 -j REJECT
-A FORWARD -o eth1 -s 192.168.15.0/24 -p tcp -m tcp --dport 68 -j REJECT
-A FORWARD -o eth1 -s 192.168.15.0/24 -p udp -m udp --dport 67 -j REJECT
-A FORWARD -o eth1 -s 192.168.15.0/24 -p tcp -m tcp --dport 67 -j REJECT

没有。 :(

答案1

好的,我明白了 - 我没有取消标记默认 vlan,这导致来自默认 vlan 的流量流入我的 kickstart vlan。

这个问题已经解决了。DHCP 分配在这些端口上不再起作用,但至少我现在知道问题所在了。:)

答案2

我很高兴您解决了 VLAN 问题,但您可能有兴趣知道可以使用 ebtables 来过滤 DHCP 流量。

例如,如果你在 Linux 服务器上有两个 DHCP 服务器,它们位于两个不同的 LAN 中,由设备 tap0 桥接,你可以通过运行以下命令来隔离它们,同时仍保持 TCP/IP 和 ARP 流量畅通:

modprobe ebtables && modprobe ebtable_filter && modprobe ebt_ip
ebtables -A INPUT --in-interface tap0 \
   --protocol ipv4 --ip-protocol udp --ip-source-port 67:68 -j DROP
ebtables -A INPUT --in-interface tap0 \
   --protocol ipv4 --ip-protocol udp --ip-destination-port 67:68 \
   -j DROP
ebtables -A FORWARD --in-interface tap0 \
   --protocol ipv4 --ip-protocol udp --ip-destination-port 67:68 \
   -j DROP
ebtables -A FORWARD --in-interface tap0 \
   --protocol ipv4 --ip-protocol udp --ip-source-port 67:68 -j DROP

在这个例子中,您应该在两端运行 ebtables 以免浪费带宽,但只需一个就可以解决 DHCP 问题。

相关内容