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 beží 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

3 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

Napsat komentář

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