Jak nakonfigurovat DHCPv6 server v Linuxu

By | 16/06/2019

Jak nakonfigurovat DHCPv6 server v Linuxu

Motivace:

Návod níže popisuje DHCPv6 Stateful konfiguraci, která umožňuje rozdávat konkretní rozsah IPv6 adres a udržovat tak jejich živostnost. Díky tomu DHCPv6 server ví, jaká IP adresa byla přiřazena jakému hostiteli podobně jako tomu je u DHCPv4 serveru.

OS:

Implementace byla prováděna na Ubuntu 18.04 LTS, postup může být aplikovatelný na Ubuntu 17.10 a nižší.

Implementace:

Aktualizace seznamu balíčků z repozitářů:

sudo apt-get update

Instalace DHCPv6 serveru:

sudo apt-get install isc-dhcp-server

Přejít do konfigurace DHCPv6 serveru v dhcpd6.conf:

sudo vim /etc/dhcp/dhcpd6.conf

Zakomentovat option dhcp6.name-servers a option dhcp6.domain-search:

#option dhcp6.name-servers 3ffe:501:ffff:100:200:ff:fe00:3f3e;
#option dhcp6.domain-search "test.example.com","example.com";

Vytvořit nový DHCPv6 pool v dhcpd6.conf (příklad konfigurace byl nakopírovaný nakonec configu):

subnet6 2001:cafe:cafe:cafe::/64 {
        range6 2001:cafe:cafe:cafe::100 2001:cafe:cafe:cafe::200;
        option dhcp6.name-servers 2001:4860:4860::8888, 2001:4860:4860::8844;
        option dhcp6.domain-search "martinuvzivot.cz";
}

Legenda:

subnet – definice podsítě
range6 – rozsah adres pro přidělení klientům
option dhcp6.name-servers – DNS servery
option dhcp6.domain-search – doménové jméno

Pozn 1. Výchozí bránu v podobě link-local IPv6 adresy zasílá automaticky router ve zprávě ICMPv6 RA (Router Advertisement), čili výchozí brána se nekonfiguruje.

Pozn 2. Další DHCP volby (options) lze najít zde: http://www.ipamworldwide.com/ipam/isc-dhcpv6-options.html.

Statické mapování IPv6 adresy na základě MAC adresy se provede také v dhcpd6.conf. Příklad konfigurace:

host PC1 {
        hardware ethernet 28:D2:44:0F:41:3B;
        fixed-address6 2001:cafe:cafe:cafe::3000;
}

Pozn. I přestože IPv6 adresa 2001:cafe:cafe:cafe::3000 není v rozsahu adres (range6) pro přidělení z příkladu výše, bude přidělena stanici 28:D2:44:0F:41:3B.

Příkaz níže otestuje chyby a syntaxi v dhcpd6.conf:

dhcpd -t -6

Výpis příkazu dhcpd -t -6:

Internet Systems Consortium DHCP Server 4.3.5
Copyright 2004-2016 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Config file: /etc/dhcp/dhcpd.conf
Database file: /var/lib/dhcp/dhcpd6.leases
PID file: /var/run/dhcpd6.pid

V některých případech se nemusí nevytvořit soubor, kde se zapisují vypůjčené IPv6 adresy a to v dhcpd6.leases. To se dá ověřit ve složce /var/lib/dhcp/dhcpd6.leases. Pokud neexistuje, vytvořit jej a změnit práva, podle návodu níže.

sudo touch /var/lib/dhcp/dhcpd6.leases
sudo chown dhcpd:dhcpd /var/lib/dhcp/dhcpd6.leases

Definovat rozhraní na kterém bude DHCPv6 server naslouchat. To se ověří příkazem:

ifconfig

Výpis příkazu ifconfig:

enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.88.15  netmask 255.255.255.0  broadcast 192.168.88.255
        inet6 fe80::227:eff:fe0e:c6e5  prefixlen 64  scopeid 0x20
        inet6 2001:cafe:cafe:cafe::1001  prefixlen 128  scopeid 0x0
        ether 00:27:0e:0e:c6:e5  txqueuelen 1000  (Ethernet)
        RX packets 1554  bytes 200918 (200.9 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1406  bytes 130131 (130.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo:     flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 198  bytes 17846 (17.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 198  bytes 17846 (17.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

V tomto případě se jedná o rozhraní enp0s3.

Definice rozhraní pro DHCPv6 server se provede v /etc/default/isc-dhcp-server:

sudo vim /etc/default/isc-dhcp-server

Do souboru isc-dhcp-server dopsat:

INTERFACESv6="enp0s3"

Aby se aplikovaly změny udělat restart DHCPv6 služby:

sudo service isc-dhcp-server6 restart

Ačkoliv se po rebootu Ubuntu serveru nenahodí DHCPv6 server automaticky, je nutné vytvořit script níže:

sudo vim /etc/rc.local

Do souboru rc.local dopsat:

#!/bin/bash
sleep 10
service isc-dhcp-server6 restart

Povolit práva pro spouštění:

chmod 744 /etc/rc.local

Ověření DHCPv6 serveru:

sudo service isc-dhcp-server6 status

Výpis příkazu sudo systemctl status isc-dhcp-server:

● isc-dhcp-server6.service - ISC DHCP IPv6 server
   Loaded: loaded (/lib/systemd/system/isc-dhcp-server6.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-06-16 14:07:02 CEST; 1min 20s ago
     Docs: man:dhcpd(8)
 Main PID: 1067 (dhcpd)
    Tasks: 1 (limit: 4662)
   CGroup: /system.slice/isc-dhcp-server6.service
           └─1067 dhcpd -user dhcpd -group dhcpd -f -6 -pf /run/dhcp-server/dhcpd6.pid -cf /etc/dhcp/dhcpd6.conf

Alternativní ověření:

ps -A | grep dhcp

Výpis příkazu ps -A | grep dhcp:

  581 ?        00:00:00 dhcpd
  772 ?        00:00:00 dhcpd

Pokud běží navíc DHCPv4 server spolu s DHCPv6 serverem, měly by se objevit 2 procesy.

Logy:

grep "dhcp" /var/log/syslog

Výpis příkazu grep “dhcp” /var/log/syslog:

Jun 16 14:07:49 jesterka dhcpd[1067]: Solicit message from fe80::fd1d:2049:7eff:8130 port 546, transaction ID 0xDD268A00
Jun 16 14:07:49 jesterka dhcpd[1067]: Advertise NA: address 2001:cafe:cafe:cafe::3000 to client with duid 00:01:00:01:23:5f:00:54:28:d2:44:0f:41:3b iaid = 204001860 static
Jun 16 14:07:49 jesterka dhcpd[1067]: Sending Advertise to fe80::fd1d:2049:7eff:8130 port 546
Jun 16 14:07:57 jesterka dhcpd[1067]: Solicit message from fe80::fd1d:2049:7eff:8130 port 546, transaction ID 0xDD268A00
Jun 16 14:07:57 jesterka dhcpd[1067]: Advertise NA: address 2001:cafe:cafe:cafe::3000 to client with duid 00:01:00:01:23:5f:00:54:28:d2:44:0f:41:3b iaid = 204001860 static
Jun 16 14:07:57 jesterka dhcpd[1067]: Sending Advertise to fe80::fd1d:2049:7eff:8130 port 546
Jun 16 14:08:13 jesterka dhcpd[1067]: Solicit message from fe80::fd1d:2049:7eff:8130 port 546, transaction ID 0xDD268A00
Jun 16 14:08:13 jesterka dhcpd[1067]: Advertise NA: address 2001:cafe:cafe:cafe::3000 to client with duid 00:01:00:01:23:5f:00:54:28:d2:44:0f:41:3b iaid = 204001860 static
Jun 16 14:08:13 jesterka dhcpd[1067]: Sending Advertise to fe80::fd1d:2049:7eff:8130 port 546
Jun 16 14:08:45 jesterka dhcpd[1067]: Solicit message from fe80::fd1d:2049:7eff:8130 port 546, transaction ID 0xDD268A00
Jun 16 14:08:45 jesterka dhcpd[1067]: Advertise NA: address 2001:cafe:cafe:cafe::3000 to client with duid 00:01:00:01:23:5f:00:54:28:d2:44:0f:41:3b iaid = 204001860 static
Jun 16 14:08:45 jesterka dhcpd[1067]: Sending Advertise to fe80::fd1d:2049:7eff:8130 port 546
Jun 16 14:08:45 jesterka dhcpd[1067]: Request message from fe80::fd1d:2049:7eff:8130 port 546, transaction ID 0xDD268A00
Jun 16 14:08:45 jesterka dhcpd[1067]: Reply NA: address 2001:cafe:cafe:cafe::3000 to client with duid 00:01:00:01:23:5f:00:54:28:d2:44:0f:41:3b iaid = 204001860 static
Jun 16 14:08:45 jesterka dhcpd[1067]: Sending Reply to fe80::fd1d:2049:7eff:8130 port 546

Tipy:

TIP 1: Vymazání vypůjčené adresy na DHCPv6 serveru:

1. Stopnout DHCPv6 server

sudo service isc-dhcp-server6 stop

2. Smazání konkrétního uživatele:

sudo vim /var/lib/dhcp/dhcpd6.leases
ia-na "fl`\015\000\001\000\001#_\000T(\322D\017A;" {
  cltt 0 2019/06/16 11:30:37;
  iaaddr 2001:cafe:cafe:cafe::200 {
    binding state active;
    preferred-life 604800;
    max-life 2592000;
    ends 2 2019/07/16 11:30:37;
  }
}

3. Restart DHCPv6 serveru

sudo service isc-dhcp-server6 restart

TIP 2: Smazání všech rezervovaných adres:

1. Vymazat soubory dhcpd6.leases a dhcpd6.leases~:

sudo rm /var/lib/dhcp/dhcpd6.leases
sudo rm /var/lib/dhcp/dhcpd6.leases~

2. Restartovat DHCPv6 server

sudo service isc-dhcp-server6 restart

3. Po restartu si DHCPv6 server automaticky vytvoří nový soubor dhcpd6.leases.

Test získání IP adresy v Linuxu:

sudo dhclient -6 enp0s3

Ověření získání IP adresy:

ip a

Výpis konfigurace ip a:

2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:95:14:07 brd ff:ff:ff:ff:ff:ff
    inet 192.168.88.43/24 brd 192.168.88.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 2001:cafe:cafe:cafe::105/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 2001:cafe:cafe:cafe::11a/128 scope global dynamic noprefixroute 
       valid_lft 2591816sec preferred_lft 604616sec
    inet6 fe80::f549:9c45:434a:98f0/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

První přidělená IPv6 je nastálo (valid_lft forever preferred_lft forever). Další IPv6 je dočasná (valid_lft 2591816sec preferred_lft 604616sec).

Test získání IP adresy ve WIN:

WIN DHCPv6

Ověření získání IPv6 adresy:

ipconfig /all

Částečný výpis příkazu ipconfig /all:

Ethernet adapter Local Area Connection:

   Physical Address. . . . . . . . . : 28-D2-44-0F-41-3B
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
   IPv6 Address. . . . . . . . . . . : 2001:cafe:cafe:cafe::3000(Preferred)
   Lease Obtained. . . . . . . . . . : Sunday, June 16, 2019 13:35:22
   Lease Expires . . . . . . . . . . : Tuesday, July 16, 2019 13:35:21
   Link-local IPv6 Address . . . . . : fe80::fd1d:2049:7eff:8130%12(Preferred)
   Default Gateway . . . . . . . . . : fe80::52c7:bfff:fe61:82b8%12
   DHCPv6 IAID . . . . . . . . . . . : 204001860
   DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-23-5F-00-54-28-D2-44-0F-41-3B

   DNS Servers . . . . . . . . . . . : 2001:4860:4860::8888
                                       2001:4860:4860::8844
   NetBIOS over Tcpip. . . . . . . . : Enabled
   Connection-specific DNS Suffix Search List :
                                       martinuvzivot.cz

Řešení problémů – chyby:

a) Problém “Not configured to listen on any interfaces!”:

I přes tuto hlášku by měl DHCPv4 server přidělovat IP adresy, jelikož je proces aktivní.

service isc-dhcp-server6 status

Výpis příkazu service isc-dhcp-server6 status ukazuje chybovou hlášku Not configured to listen on any interfaces!:

● isc-dhcp-server6.service - ISC DHCP IPv6 server
   Loaded: loaded (/lib/systemd/system/isc-dhcp-server6.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sun 2020-08-30 12:06:54 CEST; 2s ago
     Docs: man:dhcpd(8)
  Process: 5415 ExecStart=/bin/sh -ec      CONFIG_FILE=/etc/dhcp/dhcpd6.conf;      if [ -f /etc/ltsp/dhcpd6.conf ]; then CONFIG_FILE=/etc/ltsp/dhcpd6.conf; fi;      [ -e /var/lib/dhcp/dhcpd6.leases ] || touch /var/lib/dhcp/dhcp
 Main PID: 5415 (code=exited, status=1/FAILURE)

srp 30 12:06:54 jesterka dhcpd[5415]:
srp 30 12:06:54 jesterka dhcpd[5415]: Not configured to listen on any interfaces!
srp 30 12:06:54 jesterka dhcpd[5415]:
srp 30 12:06:54 jesterka dhcpd[5415]: If you think you have received this message due to a bug rather
srp 30 12:06:54 jesterka dhcpd[5415]: than a configuration issue please read the section on submitting
srp 30 12:06:54 jesterka dhcpd[5415]: bugs on either our web page at www.isc.org or in the README file
srp 30 12:06:54 jesterka dhcpd[5415]: before submitting a bug.  These pages explain the proper
srp 30 12:06:54 jesterka dhcpd[5415]: process and the information we find helpful for debugging..
srp 30 12:06:54 jesterka dhcpd[5415]:
srp 30 12:06:54 jesterka dhcpd[5415]: exiting.

Řešení problému [1]:

Může se jednat o problém kdy na rozhraní chybí nakonfigurovaná statická IPv6 adresa. Zda je nakonfigurovaná se zjistí příkazem níže:

ip -a

Výpis příkazu ip -a jen ukazuje, že je jen automaticky přiřazena link-local IPv6 adresa (fe80), což nestačí k tomu aby se rozjela služba DHCPv6 serveru:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:27:0e:0e:c6:e5 brd ff:ff:ff:ff:ff:ff
inet 192.168.88.15/24 brd 192.168.88.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::227:eff:fe0e:c6e5/64 scope link
valid_lft forever preferred_lft forever

Tento článek popisuje jak IPv6 adresu nakonfigurovat.

Po konfiguraci IPv6 adresy by se měla objevit ve výpisu příkazu ip -a:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:27:0e:0e:c6:e5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.88.15/24 brd 192.168.88.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2001:cafe:cafe:cafe::2/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::227:eff:fe0e:c6e5/64 scope link
       valid_lft forever preferred_lft forever

5 thoughts on “Jak nakonfigurovat DHCPv6 server v Linuxu

  1. Pavel Šimůnek

    Pokouším se to rozjet na Debianu 10. Bohužel potřebuji aby mi tam souběžně přiděloval i IPV4 adresy. IPV4 běží v pohodě, nicméně IPV6 ne. Někde jsem četl, že standardně neumí běžet IPV4 a IPV6 souběžně. A není ještě potřeba mít na serveru rozjetý nějaký RA nástroj, jako např. RADVD?

    Reply
    1. administrator Post author

      Zdravim,

      Konkretne s rozjetim DHCP na Debianu nemam zkusenosti. Nicmene pod Ubuntu 18.04 bezi oba DHCPv4 a DHCPv6 servery a bez problemu zaroven a dostavam z obou IP adresy

      root@jesterka:~# service isc-dhcp-server status
      ● isc-dhcp-server.service – ISC DHCP IPv4 server
      Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor preset: enabled)
      Active: active (running) since Mon 2020-08-10 18:32:43 CEST; 3min 7s ago
      Docs: man:dhcpd(8)
      Main PID: 1625 (dhcpd)
      Tasks: 1 (limit: 2319)
      CGroup: /system.slice/isc-dhcp-server.service
      └─1625 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf

      srp 10 18:32:43 jesterka sh[1625]: Wrote 39 leases to leases file.
      srp 10 18:32:43 jesterka dhcpd[1625]: Listening on LPF/eth0/00:27:0e:0e:c6:e5/192.168.88.0/24
      srp 10 18:32:43 jesterka sh[1625]: Listening on LPF/eth0/00:27:0e:0e:c6:e5/192.168.88.0/24
      srp 10 18:32:43 jesterka sh[1625]: Sending on LPF/eth0/00:27:0e:0e:c6:e5/192.168.88.0/24
      srp 10 18:32:43 jesterka sh[1625]: Sending on Socket/fallback/fallback-net
      srp 10 18:32:43 jesterka dhcpd[1625]: Sending on LPF/eth0/00:27:0e:0e:c6:e5/192.168.88.0/24
      srp 10 18:32:43 jesterka dhcpd[1625]: Sending on Socket/fallback/fallback-net
      srp 10 18:32:43 jesterka dhcpd[1625]: Server starting service.
      srp 10 18:35:20 jesterka dhcpd[1625]: DHCPREQUEST for 192.168.88.30 from 28:d2:44:0f:41:3b via eth0
      srp 10 18:35:20 jesterka dhcpd[1625]: DHCPACK on 192.168.88.30 to 28:d2:44:0f:41:3b via eth0

      root@jesterka:~# service isc-dhcp-server6 status
      ● isc-dhcp-server6.service – ISC DHCP IPv6 server
      Loaded: loaded (/lib/systemd/system/isc-dhcp-server6.service; enabled; vendor preset: enabled)
      Active: active (running) since Mon 2020-08-10 18:32:27 CEST; 3min 26s ago
      Docs: man:dhcpd(8)
      Main PID: 1616 (dhcpd)
      Tasks: 1 (limit: 2319)
      CGroup: /system.slice/isc-dhcp-server6.service
      └─1616 dhcpd -user dhcpd -group dhcpd -f -6 -pf /run/dhcp-server/dhcpd6.pid -cf /etc/dhcp/dhcpd6.conf

      srp 10 18:32:27 jesterka dhcpd[1616]: Listening on Socket/5/eth0/2001:cafe:cafe:cafe::/64
      srp 10 18:32:27 jesterka dhcpd[1616]: Sending on Socket/5/eth0/2001:cafe:cafe:cafe::/64
      srp 10 18:32:27 jesterka dhcpd[1616]: Server starting service.
      srp 10 18:35:15 jesterka dhcpd[1616]: Solicit message from fe80::2c39:5b1f:1a96:2042 port 546, transaction ID 0x6F46C000
      srp 10 18:35:15 jesterka dhcpd[1616]: Picking pool address 2001:cafe:cafe:cafe::200
      srp 10 18:35:15 jesterka dhcpd[1616]: Advertise NA: address 2001:cafe:cafe:cafe::200 to client with duid 00:01:00:01:25:5f:cc:c2:28:d2:44:0f:41:3b iaid = 153670212 valid for 2592000 seconds
      srp 10 18:35:15 jesterka dhcpd[1616]: Sending Advertise to fe80::2c39:5b1f:1a96:2042 port 546
      srp 10 18:35:16 jesterka dhcpd[1616]: Request message from fe80::2c39:5b1f:1a96:2042 port 546, transaction ID 0x6F46C000
      srp 10 18:35:16 jesterka dhcpd[1616]: Reply NA: address 2001:cafe:cafe:cafe::200 to client with duid 00:01:00:01:25:5f:cc:c2:28:d2:44:0f:41:3b iaid = 153670212 valid for 2592000 seconds
      srp 10 18:35:16 jesterka dhcpd[1616]: Sending Reply to fe80::2c39:5b1f:1a96:2042 port 546

      Reply
    2. administrator Post author

      Zdravim,
      jeste me napada, takova malickost, presto se na to muze zapomenout, nebot IPv6 adresy jsou i automaticky generovany.
      Je fajn se mrknout se na “ip -a” zda je konfigurovaná staticky IPv6 adresa na rozhraní. Totiz jinak me DHCPv6 hazel hlasku “Not configured to listen on any interfaces!”
      Ted jsem k tomuto clanek pridal popis chyby a reseni. Treba se bude hodit.
      Diky

      Reply
  2. Marek Zettík

    Ahoj, pěkný článek. Řeším však problém s přidělováním IPv6 dle MAC adresy…
    Na notebooku s Ubuntu 16.04 i Live 20.04 (jiný NB) dostávám IP jen z range, nikoli fixní, byť je nastavená, skrze WiFi. Notebook navíc, když změním range na serveru, tak po aktualizaci WiFi (Ubuntu 16.04) dostanu novou adresu, ale opět z range a nikoli fixní a navíc zůstává i adresa z původního range.
    Tablet (Acer) s Androidem dostává fixní IP, i když změním definici a restartuji dhcpd, tak po obnovení Wifi se přidělí nové IP dle configu. Ale třeba telefon Xiaomi Remi Note 8T nedostane IPv6 vůbec, leč má link adresu fe80:….
    IPv4 je všude ok.
    radvd mám nahozený, abych vysílal i routy
    dhcpd tedy IPv6 posílá, ale každému jinak. Už nevím, co hledat po několika dnech laborování 🙁
    Děkuji za připadnou radu, kde se podívat.

    Reply
    1. administrator Post author

      Zdravím Marku,

      omlouvám se za pozdní odpověď. přiznám se, že tuto problematiku jsem řešil jen u svého Lenovo laptopu kde fixní přiřazení IPv6 adresy mohlo i nemuselo být v rozsahu IPv6 adres.

      Úplně běžná věc jen co mě napadá (a pravděpodobně jste ji již zkoušel), je aktualizovat drivery na Vašem notebooku či zkusit stáhnout nejnovější aktualizaci pro Xiaomi Remi Note 8T.

      Pokud bych měl tento týden čas, zkusil bych rozjet DHCPv6 server a odzkoušet to také na mé Xiaomi Mi 9 Lite, případně i na HP notebooku.

      Martin

      Reply

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *