- Yayın tarihi
- Okuma süresi
- 7 dk okuma
IPv6 Ters DNS (ip6.arpa) Nasıl Oluşturulur?
IPv6 ters DNS adı nasıl üretilir: 32 nibble'ı ters yazma, ön ek bölgeleri, hizasız /50 gibi uzunluklarda devir, PTR kaydı örneği ve sık hatalar.
IPv6 adresinin ters DNS adı, adresin 32 onaltılık basamağının (nibble) ters sırayla, noktalarla ayrılarak yazılması ve sonuna .ip6.arpa eklenmesiyle oluşur (RFC 3596 (yeni sekmede açılır) §2.5). En sık yapılan hata, basamak yerine 16 bitlik grupları ters çevirmektir. Bu yazı adı elle nasıl üreteceğinizi, ön ekler için bölge adının nasıl çıkarıldığını ve /50 gibi uzunluklarda neden birden çok bölge gerektiğini anlatır.
ip6.arpa adı nasıl çalışır
Ters çözümleme, adresten alan adına giden sorgudur ve PTR kaydıyla yapılır. İleri yöndeki AAAA kaydı bir adı IPv6 adresine bağlar (IANA tür değeri 28); PTR kaydı ise ters yönü ip6.arpa alanında tutar. Adın kuralları kısadır:
- Her onaltılık basamak, yani nibble, ayrı bir DNS etiketidir. Nibble, tek bir onaltılık basamaktır (4 bit); RFC 3596 bu terimi kullanır.
- Sıra tersinedir: adresin düşük anlamlı nibble'ı ilk etikettir.
- Sıkıştırma yoktur. Ad her zaman tam 32 nibble içerir; baştaki sıfırlar atılmaz,
::açılır. - Alan
ip6.arpa'dır. Eskiip6.intyerine bu alan kullanılır. - DNS adları harf büyüklüğüne duyarsızdır (RFC 4343 (yeni sekmede açılır)). RFC örneği büyük harf yazar, araçlar küçük harf üretebilir.
Bu kurallara göre her adresin adı 34 etiketten (32 nibble, ip6, arpa) ve 72 karakterden oluşur.
Ters sıranın nedeni DNS'in hiyerarşisidir: ad sağdan sola doğru genelden özele gider. Adresin en anlamlı nibble'ları, yani ağ ön eki, adın sağ tarafına gelir. Böylece bir ön ekin tüm adresleri ortak bir alt ağaçta toplanır ve o alt ağacın yönetimi bölge devriyle başka bir tarafa verilebilir. Her basamağın ayrı bir etiket olması da devrin 4 bitlik adımlarla yapılabilmesini sağlar.
Adım adım elle üretmek
Dört adım yeterlidir:
- Adresi tam biçime açın. Yöntem için kısaltma ve genişletme yazısına bakın.
- Sekiz hextet'i (16 bitlik grup) sondan başa doğru sıralayın.
- Her hextet'in dört basamağını kendi içinde tersine çevirin.
- Basamaklar arasına nokta koyun ve sona
.ip6.arpaekleyin.
İlk örnek 2001:db8::1:
Adres : 2001:db8::1
Tam biçim : 2001:0db8:0000:0000:0000:0000:0000:0001
Hextet ters : 0001 0000 0000 0000 0000 0000 0db8 2001
Basamak ters : 1000 0000 0000 0000 0000 0000 8bd0 1002Basamaklar noktayla ayrılıp sona .ip6.arpa eklenince ad şöyle olur:
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpaAynı sonuca başka bir yoldan da varabilirsiniz: tam biçimden iki nokta üst üsteleri silin, elinizde 32 basamaklı bir dize kalır; bunu sondan başa okuyup her basamağın arasına nokta koyun.
İkinci örnek 2001:db8:85a3::8a2e:370:7334 adresidir. Tam biçimi 2001:0db8:85a3:0000:0000:8a2e:0370:7334 olur. Hextet'leri sondan başa alıp her birinin basamaklarını çevirin:
| Hextet (sondan başa) | Basamakları ters |
|---|---|
7334 | 4.3.3.7 |
0370 | 0.7.3.0 |
8a2e | e.2.a.8 |
0000 | 0.0.0.0 |
0000 | 0.0.0.0 |
85a3 | 3.a.5.8 |
0db8 | 8.b.d.0 |
2001 | 1.0.0.2 |
Satırları alt alta birleştirdiğinizde ad şöyle çıkar:
4.3.3.7.0.7.3.0.e.2.a.8.0.0.0.0.0.0.0.0.3.a.5.8.8.b.d.0.1.0.0.2.ip6.arpaSon kontrol basittir: ip6.arpa ekinden önce tam 32 tek karakterlik etiket olmalıdır. IPv6 Ters DNS Oluşturucu aracı bu adı sizin yerinize üretir ve elle çıkardığınız sonucu karşılaştırmak için kullanılabilir.
Adı geri adrese çevirmek
Günlüklerde ve DNS sorgu kayıtlarında bir ip6.arpa adı görürseniz işlemi tersine çevirerek adrese ulaşabilirsiniz:
.ip6.arpaekini silin.- Nibble etiketlerinin sırasını tersine çevirin.
- Noktaları silin, basamakları dörderli gruplayın ve gruplar arasına iki nokta koyun.
- İsterseniz sonucu kısaltma kurallarıyla yazın.
Önceki bölümdeki ikinci örnekle gösterelim (ad, .ip6.arpa eki silinmiş halde):
Ad : 4.3.3.7.0.7.3.0.e.2.a.8.0.0.0.0.0.0.0.0.3.a.5.8.8.b.d.0.1.0.0.2
Ters : 2.0.0.1.0.d.b.8.8.5.a.3.0.0.0.0.0.0.0.0.8.a.2.e.0.3.7.0.7.3.3.4
Gruplu : 2001:0db8:85a3:0000:0000:8a2e:0370:7334
Kısa : 2001:db8:85a3::8a2e:370:7334Ad 32 nibble'dan kısaysa bir adresi değil, bir ön ek bölgesini gösterir. Örneğin 8.b.d.0.1.0.0.2.ip6.arpa adı 2001:db8::/32 ön ekine karşılık gelir; uzunluk, etiket sayısının 4 katıdır.
Ön ek için bölge adı
Bir ön ekin ters bölgesi, o ön ekteki tüm adreslerin PTR adlarının ortak sağ kısmıdır. Ön ek uzunluğu 4'ün katıysa bölge adı kolay çıkar: ön eke ait ilk uzunluk / 4 nibble'ı ters yazın ve sonuna .ip6.arpa ekleyin. 2001:db8::/48 için ilk 12 nibble 2001 0db8 0000 olur; ters hali 0.0.0.0.8.b.d.0.1.0.0.2 adını verir.
| Ön ek | Nibble | Bölge adı |
|---|---|---|
2001:db8::/32 | 8 | 8.b.d.0.1.0.0.2.ip6.arpa |
2001:db8::/48 | 12 | 0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa |
2001:db8::/56 | 14 | 0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa |
2001:db8::/64 | 16 | 0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa |
2001:db8:0:1::/64 | 16 | 1.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa |
Son satır, dördüncü hextet'in (1) bölge adının başına girdiğini gösterir. Ön ek uzunluklarının ve alt ağ mantığının ayrıntısı için IPv6 prefix yazısına bakın; bir ön eki alt ön eklere bölmek için IPv6 Prefix Hesaplama aracını kullanabilirsiniz.
Hizasız ön ekler ve bölge devri
Her nibble ayrı bir etiket olduğundan, ters bölge devri (delegasyon) nibble sınırlarında yapılır. Ön ek uzunluğu 4'ün katı değilse tek bir bölge adı yoktur. Ön ek, bir üst nibble sınırına yuvarlanır ve o sınırdaki ön eklerin sayısı kadar bölgeye bölünür.
2001:db8::/50 için sınır /52'dir ve 2(52−50) = 4 bölge gerekir:
2001:db8::/50 için bölgeler |
|---|
0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa |
1.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa |
2.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa |
3.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa |
Başka örnekler: bir /63 iki adet /64 bölgesine, bir /127 iki adet /128 bölgesine, bir /1 ise sekiz adet /4 bölgesine (8.ip6.arpa ile f.ip6.arpa arası) ayrılır. Pratik sonuç şudur: ters DNS devrini planlıyorsanız 4'ün katı olan ön ek uzunlukları (/32, /36, /40, /44, /48, /52, /56, /60, /64) işi tek bölgeye indirir. Hizasız uzunlukta ön ek sahibi, her bölge için ayrı devir yapmak zorunda kalır.
PTR kaydı örneği
Aşağıdaki örnekte host.example.com adı 2001:db8::1 adresine bağlanır ve ters kayıt 2001:db8::/64 bölgesinde tutulur (örnek adres, belgelendirme aralığı):
; example.com bölgesi (ileri kayıt)
host.example.com. IN AAAA 2001:db8::1
; 2001:db8::/64 için ters bölge
$ORIGIN 0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR host.example.com.Ters bölgedeki ilk etiket dizisi adresin son 16 nibble'ıdır (arayüz kimliği: 0000:0000:0000:0001 ters yazılmış hali). $ORIGIN satırı ise ilk 16 nibble'ı, yani /64 bölge adını taşır. İkisi birleşince 2001:db8::1 adresinin 32 nibble'lık tam adı oluşur.
Kaydı komut satırından sınamak için dig yeterlidir:
dig -x 2001:db8::1dig -x, adresi kendisi ip6.arpa adına çevirir ve soru bölümünde bu adı gösterir. Belgelendirme adresi için anlamlı bir PTR yanıtı beklemeyin; komutu kendi adresinizle deneyin. Aynı adı betikle üretmek için Python'un standart kütüphanesi yeterlidir:
import ipaddress
adres = ipaddress.ip_address("2001:db8::1")
print(adres.reverse_pointer)
# 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpaPython 3.13.14'te IPv6Network.reverse_pointer anlamsız bir çıktı verir; içinde / karakteri bulunan bir ad üretir. Bölge adını ağ nesnesinden değil, ağ adresinden türetin.
Bölge adını betikle üretmek
Birden çok ön ek için bölge adı üretecekseniz küçük bir işlev yeterlidir. Mantık yukarıdaki kuralın aynısıdır: ön eke ait nibble sayısı uzunluk // 4 olur ve ağ adresinin ters adından yalnızca o kadar nibble etiketi (bir de ip6.arpa) tutulur.
import ipaddress
def bolge_adi(ag: str) -> str:
ag_nesnesi = ipaddress.ip_network(ag)
if ag_nesnesi.prefixlen % 4:
raise ValueError("Ön ek uzunluğu 4'ün katı olmalı")
nibble = ag_nesnesi.prefixlen // 4
etiketler = ag_nesnesi.network_address.reverse_pointer.split(".")
return ".".join(etiketler[32 - nibble:])
for ag in ["2001:db8::/32", "2001:db8::/48", "2001:db8:0:1::/64"]:
print(ag, bolge_adi(ag))
# 2001:db8::/32 8.b.d.0.1.0.0.2.ip6.arpa
# 2001:db8::/48 0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa
# 2001:db8:0:1::/64 1.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpaİşlev, bölge adını ağ nesnesinin kendisinden değil, ağ adresinden türetir; yukarıdaki Python uyarısı bu yüzden önemlidir. /50 gibi hizasız bir uzunluk verirseniz işlev hata verir. Bu bilinçli bir tercihtir, çünkü tek bir doğru yanıt yoktur. Hizasız bir ön eki bir üst nibble sınırındaki alt ön eklere bölerek (örneğin /50 için dört adet /52) bölge listesini çıkarabilirsiniz; bunun için IPv6 Prefix Hesaplama aracından yararlanılabilir.
İleri ve ters kaydın tutarlılığını sınamak
Bir adresin PTR kaydı bir ad gösteriyorsa, o adın AAAA kaydının da aynı adresi göstermesi iki kaydın birbiriyle tutarlı olduğunu gösterir. Sınama iki sorgudur:
dig -x ADRES +short
dig AD AAAA +shortBirinci komut adresin PTR adını, ikincisi bu adın AAAA kaydını döndürür; ikinci çıktıda başlangıçtaki adresi görmeniz gerekir. ADRES ve AD yer tutucudur, kendi değerlerinizle değiştirin. Tutarlılık yalnızca iki kaydın aynı bilgiyi taşıdığını gösterir; adresin güvenilir olduğu anlamına gelmez.
Sorun giderme
Ters bölgelerde hata genellikle yazımdan kaynaklanır. Önce şu noktalara bakın:
- PTR hedefinin sonundaki nokta. Bölge dosyasında
host.example.comyazarsanız ad göreli sayılır ve bölge adı eklenir. Mutlak adı her zaman noktayla bitirin:host.example.com. - Bölge adının iki kez eklenmesi.
$ORIGINile bölge adını verdiyseniz kayıtta yalnızca kalan nibble'ları yazın. Tam adı yazıyorsanız sonuna nokta koyun. - Etiket sayısı. Kayıt adındaki ve bölge adındaki nibble sayılarının toplamı 32 olmalıdır. 31 ya da 33 nibble varsa kayıt hiçbir adresle eşleşmez.
- Eksik bölgeler. Hizasız bir ön ek devredildiyse yalnızca bir bölge tanımlanmış olabilir. Tanımlanmayan bölgelerdeki adresler çözümlenmez.
- Sorgu türü. Ters ad için PTR türünde sorgu yapın. A ya da AAAA türünde sorgu yapmak ters çözümleme kaydına ulaştırmaz.
- IPv4 gömülü adresler. IPv4-mapped adresin de adı 32 nibble'dır; noktalı IPv4 yazımı ad üretiminde işe yaramaz.
::ffff:192.0.2.1adresini önce sekiz hextet'e açın, sonra yukarıdaki yöntemi uygulayın. Sonuç şudur:
1.0.2.0.0.0.0.c.f.f.f.f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpaSık yapılan hata: nibble yerine hextet çevirmek
Ters adda her etiket tek bir basamaktır. Bu yüzden hextet'leri olduğu gibi tersine sıralamak ya da kısaltılmış metni çevirmek yanlış ad üretir.
| Hata | Yanlış ad | Neden yanlış |
|---|---|---|
2001:db8:85a3::8a2e:370:7334 için hextet sırasını ters çevirip içlerini düz bırakmak | 7334.0370.8a2e.0000.0000.85a3.0db8.2001.ip6.arpa | Etiketler dört karakterli; nibble'lar ters çevrilmemiş |
2001:db8::1 için kısaltılmış metni çevirmek | 1.8.b.d.1.0.0.2.ip6.arpa | Yalnızca 8 etiket; sıfırlar açılmamış, 32 nibble yok |
| Eski alanı yazmak | ...8.b.d.0.1.0.0.2.ip6.int | Güncel alan ip6.arpa |
2001:db8::/50 için tek bir bölge adı üretmek | 0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa yeterli sanılır | Dört bölge gerekir; yalnızca biri tanımlanmış olur |
Son bir uyarı: ters kaydın varlığından adresin güvenilir olduğu sonucunu çıkarmayın. PTR kaydı, ters bölgeyi yöneten tarafın yazdığı bir bilgidir.
Proxy kullanırken ters DNS
Ters kaydı, ters bölgeyi yöneten taraf düzenler. Bir proxy hizmetinden aldığınız adreslerde PTR kaydını değiştirip değiştiremeyeceğiniz, hizmetin sunduğu özelliklere bağlıdır. IPv6 Proxy ürün sayfasında bu yönde bir özellik belirtilmediğinden, ters DNS düzenlemesi gerekiyorsa sipariş öncesinde destekten teyit alın; kayıt düzenleme imkânını varsaymayın. Adres yapısını ve ön ek mantığını anlamak için adres türleri yazısı da yardımcı olur.
Kısa özet
- Ad, adresin 32 nibble'ının ters sırayla yazılması ve
.ip6.arpaeklenmesiyle oluşur. - Sıkıştırma yoktur; baştaki sıfırlar atılmaz,
::açılır. - Bölge adı, ön eke ait nibble'ların ters yazılmasıdır. Hizasız ön ekler birden çok bölge gerektirir.
- Ters çevrilen şey hextet değil nibble'dır.
- Betikte
IPv6Address.reverse_pointerkullanın,IPv6Network.reverse_pointerkullanmayın.
Sık sorulan sorular
ip6.arpa nedir?
ip6.arpa, IPv6 adreslerinin ters çözümlemesi, yani adresten ada sorgu için ayrılmış DNS alanıdır. Adresin 32 nibble'ı ters sırayla yazılıp sonuna .ip6.arpa eklenir ve bu ad için PTR kaydı sorgulanır.
Bir IPv6 adresinin ters DNS adı kaç etiketten oluşur?
34 etiketten oluşur; 32 nibble etiketi, ardından ip6 ve arpa. Örneğin 2001:db8::1 adresinin ters adı 72 karakterdir.
/50 gibi 4'ün katı olmayan bir ön ek için neden tek bölge adı yok?
Her nibble ayrı bir DNS etiketi olduğundan bölge devri nibble sınırlarında yapılır. 2001:db8::/50 için sınır /52'dir ve dört bölge gerekir; bunlar 0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa ile 3.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa arasındaki adlardır.
PTR kaydı komut satırından nasıl sorgulanır?
Komut satırında dig -x ADRES yazmanız yeterlidir; dig adresi ip6.arpa adına kendisi çevirir ve PTR sorgusu gönderir. Adı elle üretip PTR türünde sorgulamak da aynı sonucu verir.
Ters DNS kaydı olması adresin güvenilir olduğunu gösterir mi?
Hayır. PTR kaydının varlığı adresin gerçek ya da güvenilir olduğunu kanıtlamaz; kayıt, ters bölgeyi yöneten tarafın yazdığı bir bilgidir.
/112İlgili sayfalar
- AraçIPv6 Ters DNS Oluşturucuip6.arpa ters çözümleme adını üretir
- AraçIPv6 Adres GenişletmeKısaltılmış adresi 8 × 4 haneli tam biçime çevirir
- AraçIPv6 Prefix HesaplamaBir ön eki /48, /56, /64 gibi alt ön eklere böler
- RehberIPv6 Adresi Nasıl Kısaltılır? RFC 5952 KurallarıIPv6 adresini RFC 5952 kurallarıyla kısaltın: baştaki sıfırlar, en uzun sıfır dizisi, eşitlikte soldaki, küçük harf;…
- RehberIPv6 Adres Türleri: Global, Link-Local, ULA ve Çoklu YayınIPv6 adres türlerini tek tek anlatır: global tekil yayın, link-local, ULA, çoklu yayın, loopback, IPv4-mapped ve…