Manual:IP/DHCP Server
Applies to RouterOS: v3, v4, v5+
Summary
Standards: RFC 2131
Package: dhcp
The DHCP (Dynamic Host Configuration Protocol) is needed for easy distribution of IP addresses in a network. The MikroTik RouterOS implementation includes both server and client parts and is compliant with RFC 2131.
The router supports an individual server for each Ethernet-like interface. The MikroTik RouterOS DHCP server supports the basic functions of giving each requesting client an IP address/netmask lease, default gateway, domain name, DNS-server(s) and WINS-server(s) (for Windows clients) information (set up in the DHCP networks submenu)
In order DHCP server to work, you must set up also IP pools (do not include the DHCP server's own IP address into the pool range) and DHCP networks.
It is also possible to hand out leases for DHCP clients using the RADIUS server, here are listed the parameters for used in RADIUS server.
Access-Request:
- NAS-Identifier - router identity
- NAS-IP-Address - IP address of the router itself
- NAS-Port - unique session ID
- NAS-Port-Type - Ethernet
- Calling-Station-Id - client identifier (active-client-id)
- Framed-IP-Address - IP address of the client (active-address)
- Called-Station-Id - name of DHCP server
- User-Name - MAC address of the client (active-mac-address)
- Password - ""
Access-Accept:
- Framed-IP-Address - IP address that will be assigned to client
- Framed-Pool - ip pool from which to assign ip address to client
- Rate-Limit - Datarate limitation for DHCP clients. Format is: rx-rate[/tx-rate] [rx-burst-rate[/tx-burst-rate] [rx-burst-threshold[/tx-burst-threshold] [rx-burst-time[/tx-burst-time][priority] [rx-rate-min[/tx-rate-min]]]]. All rates should be numbers with optional 'k' (1,000s) or 'M' (1,000,000s). If tx-rate is not specified, rx-rate is as tx-rate too. Same goes for tx-burst-rate and tx-burst-threshold and tx-burst-time. If both rx-burst-threshold and tx-burst-threshold are not specified (but burst-rate is specified), rx-rate and tx-rate are used as burst thresholds. If both rx-burst-time and tx-burst-time are not specified, 1s is used as default. Priority takes values 1..8, where 1 implies the highest priority, but 8 - the lowest. If rx-rate-min and tx-rate-min are not specified rx-rate and tx-rate values are used. The rx-rate-min and tx-rate-min values can not exceed rx-rate and tx-rate values.
- Ascend-Data-Rate - tx/rx data rate limitation if multiple attributes are provided, first limits tx data rate, second - rx data rate. If used together with Ascend-Xmit-Rate, specifies rx rate. 0 if unlimited
- Ascend-Xmit-Rate - tx data rate limitation. It may be used to specify tx limit only instead of sending two sequential Ascend-Data-Rate attributes (in that case Ascend-Data-Rate will specify the receive rate). 0 if unlimited
- Session-Timeout - max lease time (lease-time)
Quick Setup Guide
RouterOS has built in command that lets you easily set up DHCP server. Lets say we want to configure DHCP server on ether1 interface to lend addresses from 192.168.0.2 to 192.168.0.254 which belong to the 192.168.0.0/24 network. The gateway and DNS server is 192.168.0.1.
From /ip dhcp-server
menu run setup command and follow instructions:
[admin@MikroTik] ip dhcp-server> setup Select interface to run DHCP server on dhcp server interface: ether1 Select network for DHCP addresses dhcp address space: 192.168.0.0/24 Select gateway for given network gateway for dhcp network: 192.168.0.1 Select pool of ip addresses given out by DHCP server addresses to give out: 192.168.0.2-192.168.0254 Select DNS servers dns servers: 192.168.0.1 Select lease time lease time: 3d [admin@MikroTik] ip dhcp-server>
The wizard has made the following configuration based on the answers above:
[admin@MikroTik] ip dhcp-server> print Flags: X - disabled, I - invalid # NAME INTERFACE RELAY ADDRESS-POOL LEASE-TIME ADD-ARP 0 dhcp1 ether1 0.0.0.0 dhcp_pool1 3d no [admin@MikroTik] ip dhcp-server> network print # ADDRESS GATEWAY DNS-SERVER WINS-SERVER DOMAIN 0 192.168.0.0/24 192.168.0.1 192.168.0.1 [admin@MikroTik] ip dhcp-server> /ip pool print # NAME RANGES 0 dhcp_pool1 192.168.0.2-192.168.0.254 [admin@MikroTik] ip dhcp-server>
IPv6
Starting from v5.8 RouterOS supports IPv6 prefix delegation.
DHCPv6 server works in parallel with regular DHCP server when address-pool6
option is set.
DHCPv6 uses following options:
- authoritative
- lease-time
- address-pool6
- interface
- name
General
Sub-menu: /ip dhcp-server
Property | Description |
---|---|
add-arp (yes | no; Default: no) | Whether to add dynamic ARP entry. If set to no either ARP mode should be enabled on that interface or static ARP entries should be administratively defined in /ip arp submenu. |
address-pool (string | static-only; Default: static-only) | IP pool, from which to take IP addresses for the clients. If set to static-only, then only the clients that have a static lease (added in lease submenu) will be allowed. |
address-pool6 (string | static-only; Default: static-only) | IPv6 pool, from which to take IPv6 prefix for the clients. If set to static-only, then only the clients that have a static binding (added in bindings submenu) will be allowed. |
always-broadcast (yes | no; Default: no) | Always send replies as broadcasts. |
authoritative (after-10sec-delay | after-2sec-delay | yes | no; Default: after-2sec-delay) | Whether the DHCP server is the only one DHCP server for the network:
|
boot-support (none | static | dynamic; Default: static) | Support for BOOTP clients:
|
delay-threshold (time | none; Default: none) | If secs field in DHCP packet is smaller than delay-threshold, then this packet is ignored. If set to none - there is no threshold (all DHCP packets are processed) |
interface (string; Default: ) | Interface on which server will be running. |
lease-time (time; Default: 72h) | The time that a client may use the assigned address. The client will try to renew this address after a half of this time and will request a new address after time limit expires. |
name (string; Default: ) | Reference name |
relay (IP; Default: 0.0.0.0) | The IP address of the relay this DHCP server should process requests from:
|
src-address (IP; Default: 0.0.0.0) | The address which the DHCP client must send requests to in order to renew an IP address lease. If there is only one static address on the DHCP server interface and the source-address is left as 0.0.0.0, then the static address will be used. If there are multiple addresses on the interface, an address in the same subnet as the range of given addresses should be used. |
use-radius (yes | no; Default: no) | Whether to use RADIUS server for dynamic leases |
Menu specific commands
Property | Description |
---|---|
setup () | Start DHCP server setup wizard, which guides you through the steps to easily create all necessary configuration. Read more>> |
Bindings
Sub-menu: /ip dhcp-server bindings
This menu shows IPv6 prefixes assigned to the clients. Static bindings are matched against MAC address not by full DUID.
DUID is used only for dynamic bindings, so if it changes then client will receive different prefix than previously.
[admin@RB493G] /ip dhcp-server binding> print detail Flags: X - disabled, D - dynamic 0 D address=2a02:610::/62 mac-address=00:24:1D:17:81:F7 server=local-dhcp life-time=3d status=bound expire-time=2d22h46m21s last-seen=1h13m39s
Property | Description |
---|---|
address (IPv6 prefix | Pool name; Default: ) | IPv6 prefix that will be assigned to the client |
comment (string; Default: ) | Short description of an item. |
disabled (yes | no; Default: no) | Whether item is disabled |
life-time (time; Default: 3d) | Time period after which binding expires/ |
mac-address (MAC; Default: ) | |
server (string | all; Default: all) | Name of the server |
Read-only properties
Property | Description |
---|---|
dynamic (yes | no) | Whether item is dynamically created. |
expire-time (time) | Time period after which binding expires. |
iaid () | |
last-seen (time) | Time period since client was last seen. |
status (waiting | offered | bound) | Three status vales are possible:
|
type () |
Menu specific commands
Property | Description |
---|---|
make-static () | Set dynamic binding as static. |
Lease Store Configuration
Sub-menu: /ip dhcp-server config
This sub-menu allows to configure how often DHCP leases will be stored on disk. If they would be saved on disk on every lease change, a lot of disk writes would happen which is very bad for Compact Flash (especially, if lease times are very short). To minimize writes on disk, all changes are saved on disk every store-leases-disk
seconds.
Additionally leases are always stored on disk on graceful shutdown and reboot.
This sub-menu has only one configurable property:
Property | Description |
---|---|
store-leases-disk (time | immediately | never; Default: 5m) | How frequently lease changes should be stored on disk |
Networks
Sub-menu: /ip dhcp-server network
Property | Description |
---|---|
address (IP/netmask; Default: ) | the network DHCP server(s) will lend addresses from |
boot-file-name (string; Default: ) | Boot file name |
dhcp-option (string; Default: ) | Add additional DHCP options from option list. |
dns-server (string; Default: ) | the DHCP client will use these as the default DNS servers. Two comma-separated DNS servers can be specified to be used by DHCP client as primary and secondary DNS servers |
domain (string; Default: ) | The DHCP client will use this as the 'DNS domain' setting for the network adapter. |
gateway (IP; Default: 0.0.0.0) | The default gateway to be used by DHCP Client. |
netmask (integer: 0..32; Default: 0) | The actual network mask to be used by DHCP client. If set to '0' - netmask from network address will be used. |
next-server (IP; Default: ) | IP address of next server to use in bootstrap. |
ntp-server (IP; Default: ) | the DHCP client will use these as the default NTP servers. Two comma-separated NTP servers can be specified to be used by DHCP client as primary and secondary NTP servers |
wins-server (IP; Default: ) | The Windows DHCP client will use these as the default WINS servers. Two comma-separated WINS servers can be specified to be used by DHCP client as primary and secondary WINS servers |
Leases
Sub-menu: /ip dhcp-server lease
DHCP server lease submenu is used to monitor and manage server's leases. The issued leases are showed here as dynamic entries. You can also add static leases to issue a particular client (identified by MAC address) the desired IP address.
Generally, the DHCP lease it allocated as follows:
- an unused lease is in waiting state
- if a client asks for an IP address, the server chooses one
- if the client will receive statically assigned address, the lease becomes offered, and then bound with the respective lease time
- if the client will receive a dynamic address (taken from an IP address pool), the router sends a ping packet and waits for answer for 0.5 seconds. During this time, the lease is marked testing
- in case, the address does not respond, the lease becomes offered, and then bound with the respective lease time
- in other case, the lease becomes busy for the lease time (there is a command to retest all busy addresses), and the client's request remains unanswered (the client will try again shortly)
A client may free the leased address. The dynamic lease is removed, and the allocated address is returned to the address pool. But the static lease becomes busy until the client will reacquire the address.
Note: that the IP addresses assigned statically are not probed.
Properties
Property | Description |
---|---|
address (IP; Default: ) | Specify ip address (or ip pool) for static lease. If set to 0.0.0.0 - pool from server will be used |
always-broadcast (yes | no; Default: ) | Send all repies as broadcasts |
block-access (yes | no; Default: no) | Block access for this client |
client-id (string; Default: ) | If specified, must match DHCP 'client identifier' option of the request |
lease-time (time; Default: 0s) | Time that the client may use the address. If set to 0s lease will never expire. |
mac-address (MAC; Default: 00:00:00:00:00:00) | If specified, must match the MAC address of the client |
src-mac-address (MAC; Default: ) | Source MAC address |
use-src-mac (MAC; Default: ) | Use this source MAC address instead |
Read only properties
Property | Description |
---|---|
active-address (IP) | Actual IP address for this lease |
active-client-id (string) | Actual client-id of the client |
active-mac-address (MAC) | Actual MAC address of the client |
active-server (list) | Actual dhcp server, which serves this client |
agent-circuit-id (string) | Circuit ID of DHCP relay agent |
agent-remote-id (string) | Remote ID, set by DHCP relay agent |
blocked ( flag ) | Whether the lease is blocked |
expires-after (time) | Time until lease expires |
host-name (text) | Shows host name option from last received DHCP request |
radius (yes | no) | Shows, whether this dynamic lease is authenticated by RADIUS or not |
rate-limit (string) | Sets rate limit for active lease. Format is: rx-rate[/tx-rate] [rx-burst-rate[/tx-burst-rate] [rx-burst-threshold[/tx-burst-threshold] [rx-burst-time[/tx-burst-time]]]]. All rates should be numbers with optional 'k' (1,000s) or 'M' (1,000,000s). If tx-rate is not specified, rx-rate is as tx-rate too. Same goes for tx-burst-rate and tx-burst-threshold and tx-burst-time. If both rx-burst-threshold and tx-burst-threshold are not specified (but burst-rate is specified), rx-rate and tx-rate is used as burst thresholds. If both rx-burst-time and tx-burst-time are not specified, 1s is used as default |
server (string) | Server name which serves this client |
status (waiting | testing | authorizing | busy | offered | bound) | Lease status:
|
Menu specific commands
Property | Description |
---|---|
check-status (id) | Check status of a given busy dynamic lease, and free it in case of no response |
make-static (id) | Convert a dynamic lease to a static one |
Alerts
Sub-menu: /ip dhcp-server alert
To find any rogue DHCP servers as soon as they appear in your network, DHCP Alert tool can be used. It will monitor ethernet for all DHCP replies and check, whether this reply comes from a valid DHCP server. If reply from unknown DHCP server is detected, alert gets triggered:
[admin@MikroTik] ip dhcp-server alert>/log print 00:34:23 dhcp,critical,error,warning,info,debug dhcp alert on Public: discovered unknown dhcp server, mac 00:02:29:60:36:E7, ip 10.5.8.236 [admin@MikroTik] ip dhcp-server alert>
When the system alerts about a rogue DHCP server, it can execute a custom script.
As DHCP replies can be unicast, rogue dhcp detector may not receive any offer to other dhcp clients at all. To deal with this, rogue dhcp detector acts as a dhcp client as well - it sends out dhcp discover requests once a minute
Properties
Property | Description |
---|---|
alert-timeout (none | time; Default: none) | Time, after which alert will be forgotten. If after that time the same server will be detected, new alert will be generated. If set to none timeout will never expire. |
interface (string; Default: ) | Interface, on which to run rogue DHCP server finder. |
on-alert (string; Default: ) | Script to run, when an unknown DHCP server is detected. |
valid-server (string; Default: ) | List of MAC addresses of valid DHCP servers. |
Read only properties
Property | Description |
---|---|
unknown-server (string) | List of MAC addresses of detected unknown DHCP servers. Server is removed from this list after alert-timeout |
Menu specific commands
Property | Description |
---|---|
reset-alert (id) | Clear all alerts on an interface |
DHCP Options
Sub-menu: /ip dhcp-server option
With help of DHCP Option list, it is possible to define additional custom options for DHCP Server to advertise.
According to the DHCP protocol, a parameter is returned to the DHCP client only if it requests this parameter, specifying the respective code in DHCP request Parameter-List (code 55) attribute. If the code is not included in Parameter-List attribute, DHCP server will not send it to the DHCP client.
Properties
Property | Description |
---|---|
code (integer:1..254; Default: ) | dhcp option code. All codes are available at http://www.iana.org/assignments/bootp-dhcp-parameters |
name (string; Default: ) | Descriptive name of the option |
value (string; Default: ) | Parameter's value in form of a string. If the string begins with "0x", it is assumed as a hexadecimal value |
Example
Classless route adds specified route in clients routing table. In our example it will add dst-address=160.0.0.0/24 gateway=10.1.101.1
/ip dhcp-server option add code=121 name=classless value=0x18A000000A016501000A016501 /ip dhcp-server network set 0 dhcp-option=classless
Result:
[admin@MikroTik] /ip route> print Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, B - blackhole, U - unreachable, P - prohibit # DST-ADDRESS PREF-SRC GATEWAY DISTANCE 0 ADS 0.0.0.0/0 10.1.101.1 0 1 ADS 160.0.0.0/24 10.1.101.1 0
Configuration Examples
Enabling IPv6 Prefix delegation
Lets consider that we already have running DHCP server.
To enable IPv6 prefix delegation, first we need to create address pool
/ipv6 pool add name=myPool prefix=2001:db8:7501::/60 chunk-size=2
Notice that chunk size is 2 bits, it means that clients will receive /62 prefixes from the pool.
Next step is to enable DHCPv6. It is done simply by adding address-pool6 in servers configuration
/ip dhcp-server set myServer address-pool6=myPool
Since RouterOS does not support DHCPv6 client yet, to test our server we will set up wide-dhcpv6 on ubuntu machine:
- install wide-dhcpv6-client
- edit "/etc/wide-dhcpv6/dhcp6c.conf" as above
interface eth2{ send ia-pd 0; }; id-assoc pd { prefix-interface eth3{ sla-id 1; sla-len 2; }; };
- Run DHCPv6 client
sudo dhcp6c -d -D -f eth2
- Verify that prefix was added to eth3
mrz@bumba:/media/aaa$ ip -6 addr .. 2: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000 inet6 2a02:610:0:1:200:ff:fe00:0/64 scope global valid_lft forever preferred_lft forever inet6 fe80::224:1dff:fe17:81f7/64 scope link valid_lft forever preferred_lft forever
[ Top | Back to Content ]