Soru IPV6_V6ONLY bayrağı ekleme motivasyonu neydi?


IPv6 ağında IPV6_V6ONLY bayrağı, soketin sadece IPv6'yı kullanmasını ve özellikle de IPv6'dan IPv6 eşlemesinin bu soket için kullanılmamasını sağlamak için kullanılır. Birçok OS'de IPV6_V6ONLY varsayılan olarak ayarlanmamıştır, ancak bazı işletim sistemlerinde (ör. Windows 7), varsayılan olarak ayarlanır.

Sorum şu: Bu bayrağı tanıtmanın motivasyonu neydi? IPv4-to-IPv6 eşlemesiyle ilgili sorunlara neden olan bir şey var mı? Bu yüzden insanlar bunu devre dışı bırakmak için bir yola ihtiyaç duyuyorlardı. Birisi IPv4-to-IPv6 eşlemesini kullanmak istemediyse, IPv4 eşlemeli bir IPv6 adresi belirleyemezdi. Burada neyi özlüyorum?


22
2018-04-22 19:11


Menşei


@Eric Eijkelenboom: hayır, değil - Javier
Bu bir ağ sorusu olduğundan ve programlama ile ilgili olmadığı için, bunu kabul ettim. - Eric Eijkelenboom
Bu bayraklar, bir soket açmak için sistem çağrılarına verilen parametrelerdir. programlama yaparken, yapılandırırken veya korurken değil. IOW: geliştirici ve onu kullanan yönetici değil. - Javier


Cevaplar:


Neden varsayılan olacağını bilmiyorum; ama varsayılan olarak ne olursa olsun, her zaman açıkça ifade edeceğim türden bayraklar.

Neden ilk etapta var olduğu hakkında, mevcut IPv4 sadece sunucularını tutmanıza ve sadece aynı bağlantı noktasında sadece yeni IPv6 bağlantılarını çalıştırmanıza izin verdiğini tahmin ediyorum. Ya da belki de yeni sunucu eski müşterilere kolayca vekil verebilir, böylece IPv6 işlevselliği eski servislere eklenmesi kolay ve ağrısız hale gelir.


3
2018-04-22 19:32





IPv6 özellikli platformların tümü dualstack soketlerini desteklemez, bu nedenle soru, IPv6 uyumluluğunu en üst düzeye çıkarmak için ihtiyaç duyulan uygulamaların ya çift platformunun desteklenmediğini ya da ayrılmadan nasıl bağlanacağını bilmesini nasıl sağlar? Tek evrensel cevap IPV6_V6ONLY'dir.

IPv6_V6ONLY yok sayılan veya dualstack özellikli IP yığınlarından önce yazılan bir uygulama, IPv6 soket yuvasına IPv4 soketinin bağlanmasını engelleyen IPv6 dualstack soketi bağlandığı için çift platformlu ortamda V4 başarısızlıklarına ayırma yapabilir. Uygulama aynı zamanda, IPv4 üzerinden IPv6'nın endişeleri veya IP erişim kontrollerini ele alan protokol veya uygulama seviyesi nedeniyle beklemeyebilir.

Bu veya benzer durumlar büyük olasılıkla, MS ve diğerinin varsayılan olarak 1 RFC3493'ün 0 olduğunu beyan etmeleri için varsayılan olarak 1'e yönlendirdi. 1 teorik olarak geriye dönük uyumluluğu en üst düzeye çıkarır. Özellikle Windows XP / 2003, dualstack soketlerini desteklemez.

Ayrıca, maalesef doğru bir şekilde çalışması için alt katman bilgisini geçmesi gereken uygulama sıkıntısı da yoktur ve bu seçenek, gereksinimlere ve varolan kod tabanlarına en uygun IPv4 / IPv6 uyumluluk stratejisini planlamak için oldukça yararlı olabilir.


10
2018-05-10 16:41





En sık belirtilen neden, sunucunun bir tür ACL (Erişim Kontrol Listesi) olduğu durumdur. Örneğin, aşağıdaki gibi kuralları olan bir sunucu hayal edin:

Allow 192.0.2.4
Deny all

IPv4'te çalışır. Şimdi, bir kişi IPv6 ile bir makinede çalıştırıyor ve bazı parametrelere bağlı olarak IPv4 istekleri IPv6 soketinde kabul edildi, :: 192.0.2.4 olarak eşleştirildi ve artık ilk ACL ile eşleşmiyor. Aniden, erişim reddedilirdi.

İşletim sisteminizde varsayılan olan her ne olursa olsun uygulamanızda açık olmak (IPV6_V6ONLY kullanarak) sorunu çözecektir.


4
2018-05-09 17:04



Sunucu, eşlenen formda IPv4 ACL'lerini IPv4 adreslerine uygulayamazsa eşlenen adreslere sahip çift yığınlı soketleri kullanmamalıdır. - Pavel Šimerda


Linux için, hem IPv4 hem de IPv6 soketlerini dinleyen bir servis yazarken aynı servis portu, ör. port 2001, setsockopt (s, SOL_IPV6, IPV6_V6ONLY, & one, sizeof (one)); IPv6 soketinde. Bunu yapmazsanız, IPv4 soketi için bind () işlemi "Kullanılmakta olan adres" ile başarısız olur.


2
2018-03-28 16:16





Kötü yapılandırılmış sistemleri veya kötü yığınları atlatmak için (zayıf adıyla adlandırılan) "IPv4 haritalı" adreslerin kullanılabileceği ve iyi yapılandırılmış bir sistemde bile çok fazla miktarda hata gidermeyi gerektiren makul yollar vardır. Bir geliştirici, API'nın bu bölümünü kullanmadan uygulamalarını daha güvenli hale getirmek için bu bayrağı kullanmak isteyebilir.

Görmek: http://ipv6samurais.com/ipv6samurais/openbsd-audit/draft-cmetz-v6ops-v4mapped-api-harmful-01.txt


1
2018-04-25 00:50





Konuşmada bir ağ adresini içeren bir protokol düşünün, ör. FTP için veri kanalı. IPv6 kullanırken, IPv6 adresini gönderirsiniz, alıcı IPv4 eşlenen bir adresse, bu adrese bağlanma yolu yoktur.


0
2018-05-02 10:18





Davranış ikiliğinin bir sorun olduğu çok yaygın bir örnek var. Standart getaddrinfo() ile ara AI_PASSIVE bayrak geçmek için bir fırsat sunuyor düğümadı parametresi ve dinlenecek adreslerin listesini döndürür. NULL dizesi biçiminde özel bir değer kabul edilir. düğümadı ve joker karakterleri dinlemeyi ima eder.

Bazı sistemlerde 0.0.0.0 ve :: bu sırayla iade edilir. Çift yığınlı soket varsayılan olarak etkinleştirildiğinde ve soketi ayarlamadığınızda IPV6_V6ONLY, sunucu bağlanır 0.0.0.0 ve daha sonra çift yığına bağlanamaz :: ve bu nedenle (1) sadece IPv4 üzerinde çalışır ve (2) hata bildirir.

IPv6'nın tercih edilmesinin beklendiği gibi siparişin yanlış olduğunu düşünürdüm. Ancak ilk kez çift yığınını denediğinizde bile :: ve daha sonra sadece IPv4 0.0.0.0Sunucu hala ikinci arama için bir hata bildiriyor.

Ben şahsen çift yığınlı bir soket fikrini bir hata olarak kabul ediyorum. Projemde her zaman açıkça ayarlamayı tercih ederim IPV6_V6ONLY bunu önlemek için. Bazı insanlar görünüşe göre bunu iyi bir fikir olarak görüyorlardı ama bu durumda muhtemelen açıkça belirsiz olurdum. IPV6_V6ONLY ve çevir NULL doğrudan 0.0.0.0 atlayarak getaddrinfo() mekanizması.


0
2017-10-12 10:25