How can I assign an IP by MAC address in dhcpd

Solution 1:

This is perfectly fine format -- I use exactly the same. Only I append a comment in the end of line (in addition). This is excerpt from working dhcpd.conf:

host wrt45gl-etika  { hardware ethernet 00:21:29:a1:c3:a1; fixed-address ---.219.43.135; } # MSIE routeris WRT54GL

As @Christoph mentions, there may be global option declared (or service defaults used) which may impact a way IPs are assigned / may override it.

While migrating from dhcp3-server (v3) to isc-dhcp-server (v4) I needed to add some mandatory options and rewrite some declarations. But the structure of config file remained simple:

#
# Sample configuration file for ISC dhcpd for Debian
#

# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)

ddns-update-style none;

# option definitions common to all supported networks...

option domain-name "mf.vu.---";
option domain-name-servers ---.219.80.11, ---.219.80.2, ---.171.22.22;

default-lease-time 2678400;
max-lease-time 2678400;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.

authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).

log-facility local7;


# The subnet that shares this physical network

shared-network TOTAL_MF {
 server-name "letta.mf.vu.--";

 subnet ---.219.43.128 netmask 255.255.255.192 {
  option routers ---.219.43.190;
  option broadcast-address ---.219.43.191;

  group {
    host wrt45gl-etika  { hardware ethernet 00:21:29:a1:c3:a1; fixed-address ---.219.43.135; } # MSIE routeris WRT54GL
    # ...
    host saulute        { hardware ethernet 00:21:28:10:f4:16; fixed-address ---.219.43.189;  } # Virtual Qemu PC NIC
  }
 }

 subnet 172.16.43.128 netmask 255.255.255.192 {
  option routers 172.16.43.129;
  option broadcast-address 172.16.43.191;

  group{
    host ligo           { hardware ethernet 08:00:20:7A:E2:70; fixed-address 172.16.43.179;   } #a225 ligo
    # ...
    host vumfsa2        { hardware ethernet 00:80:48:8d:12:f0; fixed-address 172.16.43.140;   } # 118
  }
 }
}

There I used no pool, no range declarations. There are only two subnet declarations (one followed by another).

There I got no random IPs assigned to my hosts which are declared here (tied to MACs).

Solution 2:

There is no explicit mention anywhere in the dhcpd.conf man page (and I can't try it now), but I always assumed that there is only one statement allowed per line.

host blah { 
    hardware ethernet <mac address>; 
    fixed-address <ip address>;
}

Solution 3:

I don't know your dhcpd.conf, but if you have an allow unknown-clients statement, you should add allow known-clients.

If I recall correctly, the fixed IP should not be inside the range your DHCP-Server hands out to clients.

When the host has an old address from the same DHCP-Server, the server may hand out the old lease as long as it is valid, i.e. lease time not expired.

It would help, if you could provide more of your config.