ISC DHCP 服务器侦听虚拟接口

use*_*127 1 alias isc-dhcp debian-wheezy

我有一个 ISC DHCP 服务器 4.2.2 (Debian Wheezy) 在工作。我需要为未知客户端添加第二个范围,为他们提供虚假地址(主要用于故障排除目的)。但是,我尝试的任何方法似乎都不起作用。使用下面的新子网声明截断下面的 dhcpd4.conf 文件。

subnet 10.111.111.0 netmask 255.255.255.0 {
        range 10.111.111.5 10.111.111.250;
        allow unknown-clients;
}

subnet 192.168.XXX.0 netmask 255.255.255.0 {
  range 192.168.XXX.194 192.168.XXX.200;
  range 192.168.XXX.100 192.168.XXX.109;
  range 192.168.XXX.215 192.168.XXX.250;

        ignore unknown-clients;
  option routers 192.168.XXX.XXX;
<lots more options>
}
Run Code Online (Sandbox Code Playgroud)

我知道 DHCP 服务器将忽略 10.111.111.0 子网,如果它在该子网上没有与 IP 的接口,所以我首先尝试了一个虚拟的。在 /etc/network/interfaces 中,我添加了:

up ip addr add 10.111.111.1/24 dev eth0 label eth0:1
Run Code Online (Sandbox Code Playgroud)

然后调出界面。ifconfig 确认它已启动。然后我将 eth0:1 添加到 /etc/default/isc-dhcp-server :

INTERFACES="eth0 eth0:1"
Run Code Online (Sandbox Code Playgroud)

然后我重新启动了 DHCP 服务器,但只有以下内容:

...WARNING: Host declarations are global.  They are not limited to the scope you declared them in.
Wrote 0 deleted host decls to leases file.
Wrote 0 new dynamic host decls to leases file.
Wrote 53 leases to leases file.
Listening on LPF/eth0/00:50:XX:XX:XX:71/192.168.220.0/24
Sending on   LPF/eth0/00:50:XX:XX:XX:71/192.168.220.0/24
Sending on   Socket/fallback/fallback-net
Run Code Online (Sandbox Code Playgroud)

收听 192.168.220.0,但不收听 10.111.111.0。然后我尝试了一个更明确的命令行:

/usr/sbin/dhcpd -cf /etc/dhcp/dhcpd4.conf eth0:1
Run Code Online (Sandbox Code Playgroud)

但这只是让我一个

No subnet declaration for eth0:1 (no IPv4 addresses).
 ** Ignoring requests on eth0:1.  If this is not what
    you want, please write a subnet declaration
    in your dhcpd.conf file for the network segment
    to which interface eth0:1 is attached. **
Run Code Online (Sandbox Code Playgroud)

在互联网上搜索,我找到了一个线程(Aliased network interfaces and isc dhcp server),Zoredache的回答让我在没有虚拟接口的情况下尝试了它。我已经设置好了,ip addr show 显示接口在那里(但 ifconfig 没有 - 我应该担心吗?)。

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:50:XX:XX:XX:71 brd ff:ff:ff:ff:ff:ff
    inet 192.168.XXX.XXX/24 brd 192.168.220.255 scope global eth0
    inet 10.111.111.1/24 scope global eth0
    inet 192.168.XXX.XXX/24 scope global secondary eth0:0  
Run Code Online (Sandbox Code Playgroud)

但是,在重新启动 DHCP 服务器后,我没有侦听 10.111.111.1 消息,只是侦听 192.168.XXX.XXX。

任何想法我做错了什么?

use*_*127 6

好的,我想通了。如果您将多个 IP 地址分配给同一个接口,则所有子网声明必须组合到另一个声明中。例如,Linux 机器在 eth0 上有 192.168.1.1 和 10.10.10.1(均为 /24)IP。那么一个简单的范围是:

shared-network mynet {
  subnet 10.10.10.0 netmask 255.255.255.0 {
      range 10.10.10.5 10.10.10.250;
      allow unknown-clients;
  }

  subnet 192.168.1.0 netmask 255.255.255.0 {
     range 192.168.1.194 192.168.1.200;
     ignore unknown-clients;
  }
}
Run Code Online (Sandbox Code Playgroud)

共享网络 {} 必须围绕这两个子网声明。然后当你启动 dhcp 服务器时,它会说在 mynet 上侦听而不是一个 IP 地址。