Manual:IP/DHCP Client
The MikroTik RouterOS DHCP client may be enabled on any Ethernet-like interface at a time. The client will accept an address, netmask, default gateway, and two dns server addresses. The received IP address will be added to the interface with the respective netmask. The default gateway will be added to the routing table as a dynamic entry. Should the DHCP client be disabled or not renew an address, the dynamic default route will be removed. If there is already a default route installed prior the DHCP client obtains one, the route obtained by the DHCP client would be shown as invalid.
RouterOS DHCP cilent asks for following options:
- option 1 — SUBNET_MASK,
- option 3 — GATEWAY_LIST,
- option 6 — TAG_DNS_LIST,
- option 33 — STATIC_ROUTE,
- option 42 — NTP_LIST,
- option 121 — CLASSLESS_ROUTE,
Option
DHCP client has a possibility to set up options that are sent to DHCP server. For example, hostname and MAC address. Syntax is same as for DHCP server options.
Note: This feature is available since RouterOS 6.0
Currently, there are three variables that can be used in options:
- HOSTNAME;
- CLIENT_MAC — client interface MAC address;
- CLIENT_DUID — client DIUD of the router, same as used for the DHCPv6 client. In conformance with rfc4361
DHCP client default options include these default Options:
Name | code | value |
---|---|---|
clientid_duid | 61 | 0xff$(CLIENT_DUID) |
clientid | 61 | 0x01$(CLIENT_MAC) |
hostname | 12 | $(HOSTNAME) |
IPv6
Starting from v5.8 DHCP Client can receive delegated prefixes from DHCPv6 server. Currently received prefix is added to IPv6 pool, which later can be used for example in pppoe server configuration. Starting from v5.9, DHCPv6 client configuration was moved to /ipv6 sub-menu. Read-more >>
Quick setup example
Add a DHCP client on ether1 interface:
/ip dhcp-client add interface=ether1 disabled=no
After interface is added, you can use «print» or «print detail» command to see what parameters DHCP client acquired:
[admin@MikroTik] ip dhcp-client> print detail Flags: X - disabled, I - invalid 0 interface=ether1 add-default-route=yes use-peer-dns=yes use-peer-ntp=yes status=bound address=192.168.0.65/24 gateway=192.168.0.1 dhcp-server=192.168.0.1 primary-dns=192.168.0.1 primary-ntp=192.168.0.1 expires-after=9m44s [admin@MikroTik] ip dhcp-client>
Note: If interface used by DHCP client is part of VRF configuration, then default route and other received routes from DHCP server will be added to VRF routing table.
Properties
Sub-menu: /ip dhcp-client
- yes — adds classless route if received, if not then add default route (old behavior)
- special-classless — adds both classless route if received and default route (MS style)
- bound — 1 — lease is added/changed; 0 — lease is removed
- server-address — server address
- lease-address — lease address provided by server
- interface — name of interface on which client is configured
- gateway-address — gateway address provided by server
- vendor-specific — stores value of option 43 received from DHCP server
- lease-options — array of received options
Status
Command /ip dhcp-client print detail will show current status of dhcp client and read-only properties listed in table below:
Property | Description |
---|---|
address (IP/Netmask) | IP address and netmask, which is assigned to DHCP Client from the Server |
dhcp-server (IP) | IP address of the DHCP server. |
expires-after (time) | Time when the lease expires (specified by the DHCP server). |
gateway (IP) | IP address of the gateway which is assigned by DHCP server |
invalid (yes | no) | Shows whether configuration is invalid. |
netmask (IP) | |
primary-dns (IP) | IP address of the first DNS resolver, that was assigned by the DHCP server |
primary-ntp (IP) | IP address of the primary NTP server, assigned by the DHCP server |
secondary-dns (IP) | IP address of the second DNS resolver, assigned by the DHCP server |
secondary-ntp (IP) | IP address of the secondary NTP server, assigned by the DHCP server |
status (bound | error | rebinding. | requesting. | searching. | stopped) | Shows the status of DHCP Client |
Menu specific commands
Property | Description |
---|---|
release (numbers) | Release current binding and restart DHCP client |
renew (numbers) | Renew current leases. If the renew operation was not successful, client tries to reinitialize lease (i.e. it starts lease request procedure (rebind) as if it had not received an IP address yet) |
Examples
Lease script example
Since RouterOS v6.39rc33, it is possible to execute a script when DHCP client obtains new lease or loses existing. This is an example script that automatically adds a default route with routing-mark=WAN1 and removes it when the lease expires or is removed.
/ip dhcp-client add add-default-route=no dhcp-options=hostname,clientid disabled=no interface=ether2 script=" else=\r\ \n > else=\r\ \n >\r\ \n > else=\r\ \n>\r\ \n"
Resolve default gateway when ‘router’ (option3) is from different subnet
In some cases administrators tend to set ‘router’ option which cannot be resolved with offered IP’s subnet. For example, DHCP server offers 192.168.88.100/24 to the client and option 3 is set to 172.16.1.1. This will result in unresolved default route:
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE 0 DS 0.0.0.0/0 172.16.1.1 1 1 ADC 192.168.88.0/24 192.168.88.100 ether1
To fix this we need to add /32 route to resolve the gateway over ether1, which can be done by running script below each time DHCP client gets an address
/system script add name="dhcpL" source= < /ip address add address=($"lease-address" . "/32") network=$"gateway-address" interface=$interface >
Now we can further extend the script, to check if address already exist, and remove the old one if changes are needed
/system script add name="dhcpL" source= < /ip address < :local ipId [find where comment="dhcpL address"] :if ($ipId != "") do=< :if (!([get $ipId address] = ($"lease-address" . "/32") && [get $ipId network]=$"gateway-address" )) do=< remove $ipId; add address=($"lease-address" . "/32") network=$"gateway-address" \ interface=$interface comment="dhcpL address" >> else= < add address=($"lease-address" . "/32") network=$"gateway-address" \ interface=$interface comment="dhcpL address" >> >