Интернетдаги қурилмалар сони IPv4 манзиллари сиғимидан аллақачон ошиб кетган, шунинг учун мобил операторлар ва провайдерлар аста-секин IPv6'га ўтмоқда. Кўп фойдаланувчилар ҳозирча иккала протоколдан ҳам фойдаланади ва сайтингиз фақат IPv4'да бўлса ҳам очилади. Лекин IPv6'ни тўғри ёқиш келажакка тайёргарлик бўлиб, айрим тармоқларда уланишни соддалаштиради. Нотўғри ёқилган IPv6 эса сайтни бир қисм фойдаланувчилар учун секин ёки умуман очилмайдиган қилиб қўйиши мумкин, шунинг учун бу ишни босқичма-босқич бажариш муҳим.
IPv6 манзил қандай кўринади ва DNS'да қандай ёзилади
IPv6 манзили 128 битли бўлиб, икки нуқта билан ажратилган саккизта ўн олтилик гуруҳдан иборат. Кетма-кет ноллар қисқартирилади, масалан 2001:db8:10::25. Бу мақолада 2001:db8::/32 диапазони ишлатилган, у фақат ҳужжатлар ва мисоллар учун ажратилган ва реал тармоқда учрамайди. IPv4 учун DNS'да A ёзуви ишлатилса, IPv6 учун AAAA ёзуви қўшилади. Иккала ёзув бир вақтда мавжуд бўлиши мумкин ва бу "dual-stack" деб аталади: мижоз ўзи қайси протокол орқали уланишни танлайди.
example.uz. 3600 IN A 203.0.113.10
example.uz. 3600 IN AAAA 2001:db8:10::25
www.example.uz. 3600 IN CNAME example.uz.
Биринчи қадам: сервер ҳақиқатан IPv6'га эгами
AAAA ёзуви қўшишдан олдин серверда ишлайдиган, ташқаридан кириш мумкин бўлган IPv6 манзил борлигига ишонч ҳосил қилинг. Фақат fe80:: билан бошланадиган локал манзил етарли эмас, у фақат бир сегмент ичида ишлайди. Глобал манзил одатда 2 ёки 3 билан бошланади. Қуйидаги буйруқлар манзилни ва ташқи уланишни текширади:
ip -6 addr show scope global
ping -6 -c 3 2001:4860:4860::8888
curl -6 -I https://example.uz
Агар сервер умумий хостингда бўлса, IPv6 мавжудлиги хостинг провайдерига боғлиқ. sayt.uz хостинги ёки VPS учун бу имкониятни кабинетдан ёки техник ёрдам орқали аниқлаш мумкин. Манзил бўлмаса, AAAA ёзувини умуман қўшманг: нотўғри ёки ишламайдиган AAAA ёзуви унинг йўқлигидан анча ёмонроқ.
Веб-серверни IPv6'да тинглашга созлаш
Кўп веб-серверлар стандарт ҳолатда фақат IPv4 портларини тинглайди. Nginx'да ҳар бир server блокига IPv6 учун алоҳида listen қатори қўшилади. Бу қаторларсиз AAAA ёзуви ишласа ҳам, сервер IPv6 уланишларини қабул қилмайди ва браузер кутиб қолади.
server {
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name example.uz www.example.uz;
# ...
}
Ўзгаришдан кейин nginx -t билан синтаксисни текшириб, сўнг systemctl reload nginx бажаринг. ss -tlnp | grep ':443' буйруғи натижасида [::]:443 қатори кўринса, сервер IPv6'да тинглаяпти. Apache'да эса Listen 443 кўрсатмаси одатда иккала протоколни ҳам қамраб олади, лекин виртуал хостлар аниқ IPv4 манзилга боғланган бўлса, уларга IPv6 манзилни ҳам қўшиш керак бўлади.
Хавфсизлик девори ва бошқа унутиладиган жойлар
Энг кўп учрайдиган хато шуки, IPv4 учун созланган firewall қоидалари IPv6'га автоматик ўтмайди. iptables ва ip6tables алоҳида қоидалар тўпламига эга, шунинг учун 80 ва 443 портларни IPv6 учун ҳам очиш керак. UFW ишлатилса, /etc/default/ufw файлида IPV6=yes турганини текширинг. Тескари ҳолат ҳам хавфли: IPv4'да ёпилган маълумотлар базаси ёки SSH порти IPv6'да очиқ қолиб кетиши мумкин.
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ip6tables -L -n
Илова даражасида ҳам текширадиган нарсалар бор. IP манзил бўйича рухсат бериш рўйхатлари, масалан админ панелга фақат офис IP'сидан кириш, IPv6 манзилларни ҳисобга олмаса, офис ходимлари IPv6 орқали келганда блокланади. Маълумотлар базасида IP сақланадиган устун VARCHAR(15) бўлса, IPv6 манзил сиғмайди, камида 45 белги керак. Лог таҳлил қилувчи скриптлар ва fail2ban каби воситалар ҳам IPv6 манзилларни тўғри ажрата олиши керак.
Почта: SPF, PTR ва эҳтиёткорлик
Агар почта сервери ҳам IPv6'дан хат юборса, SPF ёзувига ip6: механизми қўшилади, акс ҳолда қабул қилувчи сервер хатни шубҳали деб белгилайди. Бундан ташқари, IPv6 манзил учун тескари DNS, яъни PTR ёзуви созланган бўлиши керак: йирик почта хизматлари IPv6 орқали келган хатларга PTR ва аутентификация бўйича анча қаттиқ талаб қўяди. PTR созлаш имкони бўлмаса, почтани ҳозирча фақат IPv4 орқали юборган маъқул.
example.uz. 3600 IN TXT "v=spf1 ip4:203.0.113.10 ip6:2001:db8:10::25 -all"
Текшириш тартиби ва реал мисол
Тошкентдаги бир хусусий клиника сайти VPS'га кўчирилганда администратор IPv6'ни қуйидаги тартибда ёқди. Аввал серверда глобал манзил борлигини ва ташқи тармоққа пинг ўтишини текширди. Кейин Nginx'га listen [::] қаторларини қўшди ва firewall'да портларни очди. Шундан сўнг AAAA ёзувини қисқа TTL билан, масалан 300 сония, қўшди ва IPv6 уланиши бор тармоқдан текширди. Бир неча кун муаммо бўлмагач, TTL одатий қийматга қайтарилди.
dig AAAA example.uz +short
curl -6 -sS -o /dev/null -w '%{http_code}\n' https://example.uz
curl -4 -sS -o /dev/null -w '%{http_code}\n' https://example.uz
Иккала curl буйруғи ҳам бир хил жавоб кодини қайтариши керак. SSL сертификати домен номига берилади, IP манзилга эмас, шунинг учун IPv6 қўшилиши билан сертификатни қайта чиқариш шарт эмас. Лекин Let's Encrypt HTTP текшируви AAAA ёзуви бор доменга IPv6 орқали ҳам мурожаат қилиши мумкин, шунинг учун сертификат янгиланиши ишлаши учун 80-порт IPv6'да ҳам очиқ бўлиши керак. Домен DNS ёзувларини sayt.uz кабинетидаги DNS бўлимида бошқариш мумкин.
Қачон IPv6'ни вақтинча ўчириб қўйиш керак
Агар AAAA ёзуви қўшилгандан кейин баъзи фойдаланувчилар сайт "узоқ ўйлаб қолади" деб шикоят қилса, IPv6 йўналишида муаммо бўлиши мумкин. Замонавий браузерлар иккала протоколни параллел синаб, тезроғини танлайди, лекин эски иловалар ва айрим API мижозлари бундай қилмайди. Муаммонинг сабаби аниқлангунча AAAA ёзувини олиб ташлаш энг хавфсиз йўлдир, чунки IPv4 орқали сайт барибир ишлашда давом этади.