Souhrn
Protokol DHCP (Dynamic Host Configuration Protocol) slouží ke snadné distribuci IP adres v síti. Implementace systému MikroTik RouterOS zahrnuje serverovou i klientskou část a je v souladu s RFC 2131.
Klient DHCP systému MikroTik RouterOS může být v daném okamžiku povolen na libovolném rozhraní typu Ethernet. Klient přijme adresu, masku sítě, výchozí bránu a dvě adresy serveru DNS. Přijatá IP adresa bude přidána k rozhraní s příslušnou maskou sítě. Výchozí brána bude přidána do směrovací tabulky jako dynamická položka. Pokud bude klient DHCP zakázán nebo nebude obnovena adresa, budou dynamická výchozí routa odstraněna. Pokud již byla výchozí routa přidána před získáním z klienta DHCP, pak routa získaná klientem DHCP se zobrazí jako neplatná.
Klient DHCP systému RouterOS se ptá na následující volby(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
Klient DHCP má možnost nastavit volby, které jsou odesílány serveru DHCP. Například název hostitele a adresu MAC. Syntaxe je stejná jako u možností serveru DHCP.
V současné době lze v možnostech použít tři proměnné:
- HOSTNAME
- CLIENT_MAC - MAC adresa klientského rozhraní
- CLIENT_DUID - DIUD klienta směrovače, stejný jako u klienta DHCPv6. V souladu s RFC4361
Jméno | kód | Hodnota |
---|---|---|
clientid_duid | 61 | 0xff$(CLIENT_DUID) |
clientid | 61 | 0x01$(CLIENT_MAC) |
hostname | 12 | $(HOSTNAME) |
Klient DHCP může přijímat delegované prefixy od serveru DHCPv6. Aktuálně přijatý prefix je přidán do poolu IPv6, který lze později použít například při konfiguraci serveru PPPoE. Konfiguraci klienta DHCPv6 naleznete v podnabídce /ipv6
Příklad nastavení
Přidání klienta DHCP na rozhraní ether1:
Kód: Vybrat vše
/ip dhcp-client add interface=ether1 disabled=no
Kód: Vybrat vše
[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>
Příklady
Příklad skriptu pronájmu
Je možné spustit skript, když klient DHCP získá nové parametry nebo ztratí stávající. Toto je příklad skriptu, který automaticky přidá výchozí routa se značkou routing-mark=WAN1 a odstraní ji po vypršení platnosti nebo po jeho odstranění.
Kód: Vybrat vše
/ip dhcp-client
add add-default-route=no dhcp-options=hostname,clientid disabled=no interface=ether2 script="{\r\
\n :local rmark \"WAN1\"\r\
\n :local count [/ip route print count-only where comment=\"WAN1\"]\r\
\n :if (\$bound=1) do={\r\
\n :if (\$count = 0) do={\r\
\n /ip route add gateway=\$\"gateway-address\" comment=\"WAN1\" routing-mark=\$rmark\r\
\n } else={\r\
\n :if (\$count = 1) do={\r\
\n :local test [/ip route find where comment=\"WAN1\"]\r\
\n :if ([/ip route get \$test gateway] != \$\"gateway-address\") do={\r\
\n /ip route set \$test gateway=\$\"gateway-address\"\r\
\n }\r\
\n } else={\r\
\n :error \"Multiple routes found\"\r\
\n }\r\
\n }\r\
\n } else={\r\
\n /ip route remove [find comment=\"WAN1\"]\r\
\n }\r\
\n}\r\
\n"
Řešení výchozí brány, pokud je 'router' (option 3) z jiné podsítě
V některých případech mají správci tendenci nastavit možnost "router", kterou není součástí podsítě nabízené IP adresy. Například server DHCP nabídne klientovi 192.168.88.100/24 a option 3 je nastavena na 172.16.1.1. Výsledkem bude nevyřešená výchozí trasa:
Kód: Vybrat vše
# 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
Kód: Vybrat vše
/system script add name="dhcpL" source={ /ip address add address=($"lease-address" . "/32") network=$"gateway-address" interface=$interface }
Kód: Vybrat vše
/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"
}
}
}