NAT64 - Zkušenosti s Taygou

NAT64

Serverů a projektů, které nemají zřízenou IPv6 konektivitu nebo po ní z nějakého důvodu nejsou dostupné, je bohužel stále velmi mnoho. Pro naše servery, které mají pouze IPv6 adresu, jsme museli implementovat jeden z přechodových mechanismů, abychom jim zpřístupnili obsah, který je dostupný jen v IPv4.

Z dostupných řešení nám přišel nejjednodušší na implementaci NAT64. Hlavně tedy z důvodu, že server bude mít vždy jen jednu IPv6 adresu a můžeme selektivně vybrat pouze servery, které budou přechodový mechanismus používat.

NAT64 je definován v rámci RFC6146 a princip fungování je parádně popsán od Pavla Satrapy v článku na lupa.cz nebo v jeho knize o IPv6.

NAT64 používáme v kombinaci s vyhrazenými DNS64 servery, o kterých jsme psali již dříve v souvislosti se zahazováním požadavků na A záznamy.

Omezení

Je potřeba si dát pozor na fakt, že NAT64 neumožňuje provoz všech protokolům. Některé aplikace v tomto režimu nemusí fungovat - například IPsec.

NAT64 neumožňuje přímý přístup k IPv4 síti. Je nutné jej tedy používat v kombinaci s DNS64 nebo IPv6 adresami, u kterých dojde ke správnému spojení s IPv4 světem.

Běžné aplikace používající TCP nebo UDP a využívající DNS by s přístupem z IPv6 sítě do IPv4 neměly mít problém.

Tayga

Jedná se o stabilní userspace implementaci NAT64 přechodového mechanismu mezi IPv6 a IPv4 sítěmi. Tayga implementuje pouze stateless režim NAT64. Pro plný statefull režim používáme ještě klasický SNAT pomocí MASQERADE. Zároveň tím šetříme IPv4 adresy, které bychom jinak museli každému IPv6 serveru rezervovat.

Taygu jsme si vybrali díky velmi jednoduché instalaci. V provozu se následně ukázala i také jako velmi spolehlivá.

Konfigurace našich NAT64 serverů

Hardwarová konfigurace serveru

Pro provoz NAT64 serveru využíváme virtuální servery s 2GB RAM a 2vCPU. Tayga dokáže využít pouze výkon jednoho jádra, takže z pohledu procesoru se dá výkon jedné instance škálovat jen frekvencí procesoru. Druhé jádro procesoru dáváme serveru na obsluhu ostatních částí systému. Paměť je důležitá jen pro tabulku sledující spojení (connection tracking).

Síťová konfigurace

Z pohledu sítě mají NAT64 přiřazený 2 síťová zařízení.

ens3 má přiřazenou jednu veřejnou IPv6, přes kterou máme naroutovaný rozsah 64:ff9b::/96. DNS64 servery jsou nakonfigurované tak, že využívají tento rozsah k překladu zařízení dostupných pouze přes IPv4. Výhodou použítí rozsahu 64:ff9b::/96 je, že jej používají například i servery googlu, takže pro otestování řešení není potřeba instalovat vlastní DNS64 servery.

ens4 má přiřazenou jednu veřejnou IPv4 adresu, která slouží pro všechnu komunikaci s IPv4 světem.

Instalace

V Debianu (od verze 8) je Tayga dostupná jako balíček přímo v repozitářích. Stačí tedy nainstalovat:

apt-get install tayga

Minimální konfigurace

tun-device nat64
ipv4-addr 192.168.255.1
ipv6-addr 2001:0db8:ffff::64
prefix 64:ff9b::/96
dynamic-pool 192.168.255.0/24
data-dir /var/spool/tayga

Je důležité upravit ipv6-addr tak, aby obsahovala správnou IPv6 adresu (v našem případě rozhraní enc3). Velikost interního IPv4 rozsahu je potřeba zvolit podle počtu IPv6 zařízení, která budou NAT64 používat.

Před spuštěním je ještě potřeba vytvořit tun zařízení, které Tayga ke svému provozu potřebuje:

/usr/sbin/tayga --mktun

Službu je povolit v /etc/default/tayga parametrem RUN=yes.

Pro provoz statefull režimu je potřeba zapnout SNAT:

sysctl -w net.ipv4.conf.all.forwarding=1
sysctl -w net.ipv6.conf.all.forwarding=1
iptables -A POSTROUTING -o ens4 -j MASQUERADE

Výkon

Tayga bohužel umí využít pouze jedno jádro. V našem případě je většinou navíc na serverech s procesory s malým TDP a tím pádem i malou frekvencí na jádro.

Provedli jsme rychlý test výkonu na virtuálním serveru s procesorem E5-2650Lv2 s frekvencí 1,7GHz. Při použítí 1450 bytových packetů byla propustnost 450Mbps. U 64 bytových packetů byla propustnost 40Mbps.

Režimy sítě na serverech

Aktuálně používáme na serverech jeden ze 3 režimů síťování:

Pouze IPv6

Servery mají pouze IPv6 adresu a mají přístup pouze ke zdrojům, které jsou přes IPv6 dostupné. Tuto konfiguraci používá většina našich serverů.

IPv6 s NAT64

Servery mají IPv6 adresu a nastavené DNS64 servery. Mají tak přístup přímý přístup do IPv6 sítě a přístup do IPv4 sítě jde přes NAT64. Tuto konfiguraci používá minorita našich serverů.

Dualstack

Servery mají IPv4 i IPv6 adresu. Tuto konfiguraci používájí primárně servery, ke kterým přímo přistupují uživatelé nebo jinak poskytují veřejné služby bez předřazených proxy serverů. Dualstack používáme také u serverů, které mají velký provoz do IPv4 sítě, abychom nemuseli škálovat naše NAT64 servery.

Závěr

Tayga je skvělý nástroj na rychlou implementaci NAT64, který používáme již několik let bez jakéhokoliv zádrhelu. S ohledem na velmi malé množství provozu, který vyžaduje NAT64, nám zatím ani nevadí malý výkon tohoto řešení. Při větším deploymentu by toto omezení už bylo zásadní.

Do budoucna máme naplánované otestovat alternativní Jool, který funguje jako modul jádra a měl by mít výrazně vyšší výkon.

V dlouhodobé vizi bychom chtěli zrušit všechny dualstack servery a mít na serverech pouze IPv6 adresy. IPv4 síť mít dostupnou přes překladové boxy. S ohledem na desítky Gbps provozu, který v současné době odbavujeme, bychom ale plýtvali zdroji a proti současnému stavu bychom toho moc nezískali, takže s touto vizí počkáme až na dobu, kdy IPv6 bude využívat majorita uživatelů a IPv4 začne upadávat.