Hlavní navigace

Pozor na tentative IPv6

Ondřej Caletka

Na blogu Spoofedpacket vyšel zajímavý zápisek o problémů s použitím IPv6 adresy těsně po jejím přiřazení k síťové kartě. Problém způsobuje detekce duplicitních adres (DAD), která je v IPv6 povinná. Během této detekce je IPv6 adresa označena příznakem tentative a aplikace ji dosud nemohou používat. To způsobuje problémy především ve spouštěcích skriptech, kdy se těsně po nastavení adresy spouští služby.

Autor blogu doporučuje nejjednodušší řešení – vložit do bootovací sekvence příkaz sleep. O něco sofistikovanější řešení je vestavěné ve spouštěcích skriptech distribuce Gentoo:

_iproute2_ipv6_tentative()
{
        # Only check tentative when we have a carrier.
        LC_ALL=C ip link show dev "${IFACE}" | grep -q "NO-CARRIER" && return 1
        LC_ALL=C ip addr show dev "${IFACE}" | \
                grep -q "^[[:space:]]*inet6 .* tentative"
}

iproute2_post_start()
{
        local n=5
…
        if _iproute2_ipv6_tentative; then
                ebegin "Waiting for IPv6 addresses"
                while [ $n -ge 0 ]; do
                        _iproute2_ipv6_tentative || break
                        sleep 1
                        n=$(($n - 1))
                done
                [ $n -ge 0 ]
                eend $?
        fi

        return 0
}

Tato zprávička byla zaslána čtenářem serveru Root.cz pomocí formuláře Přidat zprávičku. Děkujeme!

Našli jste v článku chybu?