Autor: sutrus

Datum: 24 lis 2021 19:35
Kategorie: DHCP

Zobrazení: 883
Komentáře: 0

DHCP klient

Popis: DHCP klient

Odkaz na článek (bb-code [URL]): Kopírovat

[url=https://spssoftware.cz/knowledgebase/article?k=50]DHCP klient[/url]

Přímý odkaz: Kopírovat

https://spssoftware.cz/knowledgebase/article?k=50

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
Option
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
Výchozí možnosti klienta DHCP zahrnují tyto výchozí hodnoty:
JménokódHodnota
clientid_duid610xff$(CLIENT_DUID)
clientid610x01$(CLIENT_MAC)
hostname12$(HOSTNAME)
IPv6
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
Po přidání klienta můžete pomocí příkazu "print" nebo "print detail" zjistit, jaké parametry klient DHCP získal:

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>
 ! Varování:
Pokud je rozhraní používané klientem DHCP součástí konfigurace VRF, pak se výchozí routa a ostatní přijaté od serveru DHCP přidají do směrovací tabulky VRF.


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
Abychom toto vyřešili, musíme přidat routa /32 pro překlad brány přes ether1, což lze provést pomocí níže uvedeného skriptu pokaždé, když klient DHCP získá adresu.

Kód: Vybrat vše

/system script add name="dhcpL" source={ /ip address add address=($"lease-address" . "/32") network=$"gateway-address" interface=$interface }
Nyní můžeme skript rozšířit, aby zkontroloval, zda adresa existuje, a v případě potřeby odstranil starou adresu.

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"
    }
  }
}