Bagaimana mencegah penundaan terkait dengan catatan IPv6 AAAA?

11

Server Windows kami mendaftarkan AAAAcatatan IPv6 dengan server DNS Windows kami. Namun, kami tidak mengaktifkan perutean IPv6 di jaringan kami, jadi ini sering menyebabkan perilaku macet.

Microsoft RDP adalah pelaku terburuk. Saat menyambung ke server yang memiliki AAAAcatatan dalam DNS, klien desktop jarak jauh akan mencoba IPv6 terlebih dahulu, dan tidak akan kembali ke IPv4 sampai koneksi habis. Pengguna yang kuat dapat mengatasi ini dengan menghubungkan ke alamat IP secara langsung. Memecahkan alamat IPv4 dengan ping -4 hostname.fooselalu bekerja secara instan.

Apa yang bisa saya lakukan untuk menghindari keterlambatan ini?

  • Nonaktifkan IPv6 pada klien?
  • Nonaktifkan IPv6 di server?
  • Menyamarkan rekaman IPv6 pada kursor DNS pengguna-facnig?
  • Mencegah pendaftaran catatan IPv6 AAAA di server DNS Microsoft?
    • Saya pikir itu bahkan tidak mungkin.

Pada titik ini, saya sedang mempertimbangkan untuk menulis skrip yang membersihkan semua catatan AAAA dari zona DNS kami. Tolong, bantu saya menemukan cara yang lebih baik.


UPDATE: Resolusi DNS bukan masalah. Sebagaimana @joeqwerty tunjukkan dalam jawabannya, catatan DNS dikembalikan secara instan. Keduanya Adan AAAAcatatan segera tersedia. Masalahnya adalah bahwa beberapa klien ( mstsc.exe) akan lebih suka mencoba koneksi melalui IPv6, dan perlu beberapa saat untuk kembali ke IPv4.

Ini sepertinya masalah routing. The pingperintah menghasilkan "kegagalan Umum" pesan kesalahan karena alamat tujuan adalah unroutable.

C:\Windows\system32>ping myhost.mydomain
Pinging myhost.mydomain [2002:1234:1234::1234:1234] with 32 bytes of data:
General failure.
General failure.
General failure.
General failure.
Ping statistics for 2002:1234:1234::1234:1234:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),

Saya tidak bisa mendapatkan paket capture dari perilaku ini. Menjalankan perintah ping (gagal) ini tidak menghasilkan paket apa pun di Microsoft Network Monitor. Demikian pula, mencoba koneksi dengan mstsc.exeke host dengan AAAAcatatan tidak menghasilkan lalu lintas sampai melakukan fallback ke IPv4.

PEMBARUAN: Host kami semuanya menggunakan alamat IPv4 yang dapat dirutekan secara publik. Saya pikir masalah ini mungkin karena konfigurasi 6to4 yang rusak. 6to4 berperilaku berbeda pada host dengan alamat IP publik vs alamat RFC1918.

UPDATE: Pasti ada sesuatu yang mencurigakan dengan 6to4 di jaringan saya. Ketika saya menonaktifkan 6to4 pada klien Windows, koneksi langsung sembuh.

netsh int ipv6 6to4 set state disabled

Tapi seperti yang dikatakan @joeqwerty, ini hanya menutupi masalah. Saya masih mencoba mencari tahu mengapa komunikasi IPv6 di jaringan kami benar-benar tidak berfungsi.

Nic
sumber
11
Selesai menyebarkan IPv6 di jaringan Anda, tentu saja.
Michael Hampton
1
Sudahkah Anda menjalankan tangkapan jaringan pada klien untuk mengonfirmasi kegagalan / penundaan resolusi IPv6 ini?
joeqwerty
1
Selain itu, Microsoft menyediakan beberapa alat Fixit yang mudah untuk menonaktifkan / mengaktifkan berbagai komponen IPv6: support.microsoft.com/kb/929852
joeqwerty
1
@ joeqwerty Server dan pengguna berada di subnet yang terpisah, tetapi semuanya adalah satu situs besar. Kami tidak menggunakan DNS otak-terpisah, jadi tidak ada konsep "DNS internal".
Nic
2
Juga saya pikir Anda akan menemukan artikel ini dari RIPE serta RFC 6343 bacaan yang sangat menarik dan relevan. Rekomendasi pribadi saya kepada Anda adalah membuang 6to4 sepenuhnya.
Michael Hampton

Jawaban:

10

Pertanyaan ini cukup menarik dan saya harus mengakui bahwa saya belum pernah melihat perilaku ini. Dalam melakukan beberapa mengutak-atik untuk mencoba dan memahaminya dengan lebih baik, saya mengambil potongan nslookup yang menanyakan salah satu server W2K8R2 RDS saya dari server W2K8R2 lain dan saya juga menangkap cuplikan sesi RDP ke server RDS yang sama dari server uji yang sama dari server uji yang sama . Nslookup tidak menunjukkan penundaan dalam mengembalikan catatan IPv6 dan nslookup menunjukkan server pengujian saya meminta data IPv4 sebelum meminta catatan IPv6. Delta waktu dalam tangkapan tidak menunjukkan penundaan yang berarti (yang dapat saya pastikan) di salah satu kueri.


masukkan deskripsi gambar di sini


masukkan deskripsi gambar di sini


EDIT

Sekarang Anda ke sesuatu.

Pastikan Anda menangkap lalu lintas untuk adaptor Microsoft 6To4, jika tidak, Anda tidak akan melihat IPv6:

masukkan deskripsi gambar di sini


Inilah hasil nslookup untuk server RDS saya. Catat alamat IPv6:

masukkan deskripsi gambar di sini


Sekarang inilah cuplikan tangkapan saya:

masukkan deskripsi gambar di sini


Dan akhirnya, inilah cuplikan dari netstat yang menunjukkan koneksi:

masukkan deskripsi gambar di sini


Jadi jelas, seperti yang telah Anda konfirmasikan, resolusi DNS bukanlah masalahnya. Masalahnya adalah bahwa koneksi RDP lebih suka IPv6 daripada IPv4 (yang merupakan standar untuk Windows - Windows lebih suka IPv6 daripada IPv4) dan karena IPv6 tidak berfungsi dengan benar itu menyebabkan penundaan (seperti yang telah Anda sebutkan) ketika mundur dari IPv6 ke IPv4. Anda bisa memperbaikinya dengan mengkonfigurasi klien untuk lebih memilih IPv4 daripada IPv6, tapi saya pikir itu hanya akan menutupi masalah. Solusi yang lebih baik adalah mencari tahu mengapa IPv6 tidak berfungsi dan memperbaikinya. Saya tidak cukup tahu tentang IPv6 untuk membantu tetapi dugaan saya adalah bahwa catatan IPv6 yang dikembalikan oleh DNS adalah alamat "lokal" yang hanya berlaku pada subnet di mana host RDS ada dan karena klien berada dalam subnet yang berbeda, mereka dapat ' t mencapai alamat IPv6 tersebut.

joeqwerty
sumber
Bro, apakah Anda bahkan RFC 1918?
Ryan Ries
LOL. Mereka masuk lebih awal, dialokasikan / 24 blok mereka sendiri dan memilih untuk menggunakannya secara internal daripada berurusan dengan NAT. Mereka menggunakan sekitar 80% dari blok dan telah mengambil sikap "jika tidak rusak jangan memperbaikinya".
joeqwerty
@ joeqwerty Saya memperbarui pertanyaan saya dengan beberapa klarifikasi. nslookup berfungsi dengan baik tetapi ping gagal dengan Kegagalan Umum.
Nic
@joeqwerty Terima kasih atas semua masukan Anda. Saya telah memposting jawaban untuk pertanyaan ini yang menjelaskan apa yang terjadi di lingkungan saya, dan menyarankan apa yang mungkin dilakukan orang lain dalam situasi yang sama.
Nic
9

Teknologi transisi IPv6 yang disebut 6to4 terkenal karena menyebabkan masalah seperti ini. Ada beberapa faktor yang bekerja. Secara individual mereka tidak berbahaya, tetapi efek gabungannya adalah pengguna akhir dapat mengalami penundaan koneksi.

Daftar faktor-faktor dan pemikiran yang memungkinkan dalam mitigasi mereka disajikan di bawah ini.


Windows mengaktifkan 6to4 secara default

Jika host Anda menjalankan versi Windows terbaru (Vista atau yang lebih baru), Windows secara oportunistik akan mengaktifkan tunneling 6to4 ketika alamat IPv4 yang dapat dirutekan secara publik tersedia. Secara kritis, ini berlaku untuk server dan klien.

Untuk mengetahui apakah suatu sistem menggunakan 6to4, jalankan ipconfigdan cari alamat IPv6 yang dimulai dengan awalan 6to4 2002:. Akan terlihat seperti ini.

C:\> ipconfig
Tunnel adapter 6TO4 Adapter:
IPv6 Address. . . . . . . . . . . : 2002:1111:2222::1111:2222
  • Jika titik akhir Anda terhubung ke Active Directory, Anda dapat menggunakan Kebijakan Grup untuk menonaktifkan protokol transisi seperti 6to4 dan Teredo. Ini didokumentasikan dengan baik di KB929852 . (Menerapkan ini ke klien atau server Anda sudah cukup, tetapi jika Anda mengambil langkah ini mungkin masuk akal untuk menonaktifkannya di mana-mana, baik pada klien maupun server.)
  • Jika Anda hanya mengelola beberapa host, Anda dapat menonaktifkan 6to4 berdasarkan kasus per kasus. Ini jauh lebih baik daripada menonaktifkan IPv6 sepenuhnya.netsh int ipv6 6to4 set state disabled
  • Gunakan sistem operasi klien yang berbeda. Misalnya, Mac OS X tidak mengaktifkan 6to4 secara default.

Alamat IPv4 yang dapat dirutekan secara publik sedang digunakan

6to4 hanya berfungsi pada host yang memiliki alamat IPv4 yang dapat dirutekan secara publik sehingga masalah ini tidak pernah memengaruhi host di belakang firewall NAT.

  • Anda dapat memindahkan klien dan / atau server di belakang firewall NAT dan mulai menggunakan pengalamatan RFC1918. Namun dalam beberapa kasus, alamat yang dapat dirutekan secara publik sebenarnya lebih disukai. Mengubah pengalamatan seluruh jaringan juga bisa menjadi pilihan yang tidak realistis.

6to4 tidak berfungsi dengan benar di jaringan

Sangat sulit untuk memecahkan masalah 6to4 dalam mode anycast. Sangat merepotkan bahwa ada permintaan resmi kepada IETF bahwa 6to4 harus diklasifikasikan sebagai historis . Menurut pendapat penulis ini, 6to4 telah ditinggalkan.

Secara singkat, 6to4 bekerja dengan mengenkapsulasi paket IPv6 ke dalam paket IPv4 menggunakan protokol yang disebut 6in4 (protokol IP = 41). Paket IPv4 ditujukan ke alamat broadcast mana saja 192.88.99.1dengan harapan akan tiba pada relay 6to4 yang bekerja di suatu tempat di internet. Bahkan mungkin secara geografis terdekat, jika Anda beruntung.

Dalam praktiknya, beberapa relai 6to4 dibuat secara tidak benar, dan banyak jaringan bahkan tidak mengizinkan lalu lintas 6in4 untuk melewati firewall. Biasanya ini terjadi ketika firewall memungkinkan semua lalu lintas keluar, tetapi tidak secara eksplisit mengizinkan paket protokol IP 41 kembali melalui firewall. (TODO perhatikan RFC yang relevan untuk pemecahan masalah.) Kegagalan ini ("lubang hitam masuk") dan banyak lainnya dijelaskan dalam RFC 6343 .

  • Atur firewall Anda untuk menolak keras protokol IP 41 (dengan TCP reset) ketika dikirim dari host internal ke jaringan Anda. Ini akan menghasilkan perilaku "gagal cepat" yang lebih masuk akal daripada penundaan koneksi non-deterministik. Ini telah terbukti bekerja di lingkungan uji terbatas .
  • Mintalah ISP atau penyedia transit lompat pertama Anda untuk mengatur relai 6to4 yang berfungsi. Jika ini dilakukan dengan benar, itu akan menghasilkan pengalaman terbaik bagi pengguna akhir. Setiap pengguna akhir dengan alamat IPv4 yang dapat dirutekan secara publik akan dapat berpartisipasi dalam internet IPv6.

Registrasi DNS dinamis

Dalam lingkungan Active Directory yang khas, setiap komputer diizinkan untuk mendaftarkan alamatnya sendiri dengan server DNS. Ketika sebuah host multihomed, ia akan mendaftarkan semua alamatnya, bahkan dari terowongan 6to4.

Sebagian besar layanan internet tidak menggunakan DNS dinamis, jadi masalah ini biasanya terbatas pada situs perusahaan di mana klien dan server semuanya "internal" ke jaringan yang sama.

  • Anda dapat memilih untuk menonaktifkan pembaruan DNS dinamis. Kemudian jika Anda tidak memasukkan catatan sumber daya AAAA ke file zona, mereka tidak akan pernah dilayani. Namun, DNS dinamis sering diinginkan untuk server DNS internal. (Jika Anda melakukan ini, pastikan juga menghapus catatan AAAA yang mungkin sudah ada.)
  • Siapkan server DNS untuk tidak memberikan jawaban untuk catatan sumber daya AAAA. Tapi jangan lakukan ini, karena itu akan benar-benar memberi Anda kesulitan ketika Anda ingin mulai menerapkan IPv6. (Apakah ada yang tahu tentang firewall DNS sumber bebas / terbuka?)

Aplikasi klien tidak gagal dengan anggun

Klien RDP Microsoft adalah salah satu contoh aplikasi klien yang tidak menangani masalah routing IPv6 dengan anggun. Sebagian besar browser web lebih baik dalam menangani kasus tepi IPv6 seperti ini, sehingga mereka cenderung tidak menunjukkan perilaku ini.

  • Coba gunakan klien lain. Mungkin Anda akan beruntung.
Nic
sumber
Saya akan memperpanjang diskusi tentang masalah 6to4 dengan menyebutkan bagaimana alamat RFC 6598 dapat memperburuk masalah. Sebagian besar perangkat lunak yang secara otomatis mengaktifkan 6to4 jika alamat IPv4 publik tersedia ditulis sebelum RFC itu. Karenanya alamat RFC 6598 secara alami akan terdeteksi seolah-olah itu adalah alamat IPv4 publik. Tapi ternyata tidak, dan menjalankan 6to4 pada alamat RFC 6598 tidak akan berhasil. Jika Anda melihat alamat IPv6 dari 2002: 6440 :: / 26, maka Anda telah mengalami masalah 6to4 + RFC 6598.
kasperd
Relay 6to4 anycast hanya relavent ketika berkomunikasi antara host 6to4 dan host IPv6 asli, itu tidak relavent ketika berkomunikasi antara dua host 6to4 (ironisnya ini berarti menambahkan IPv6 asli ke beberapa tetapi tidak semua host dapat memperburuk keadaan).
Peter Green
2

Saya menyadari itu tidak sangat membantu untuk situasi ini, tetapi untuk implementator yang menghadapi dilema yang sama, ada teknik implementasi yang dikenal sebagai "Happy Eyeballs" (RFC 6555) yang menentukan teknik untuk menghubungkan ke ipv4 dan ipv6 secara bersamaan dan memilih mana yang terhubung terlebih dahulu.

joe miller
sumber
0

Inilah solusi saya. Secara default Windows memberikan rute IPv6 prioritas yang lebih tinggi daripada rute IPv4. Jika Anda mengedit kebijakan awalan IPv6, Anda dapat mengubah perilaku ini untuk membuatnya menggunakan IPv4 dalam preferensi untuk IPv6.

Untuk memastikan semua sistem di jaringan saya diatur dengan cara yang sama, saya memasukkan perintah berikut ke dalam skrip .bat yang dijalankan selama instalasi perangkat lunak setelah membuat atau memperbarui mesin.

netsh int ipv6 isatap set state disabled
netsh int ipv6 6to4 set state disabled
netsh interface teredo set state disable

netsh interface ipv6 delete prefixpolicy ::1/128
netsh interface ipv6 delete prefixpolicy ::/0
netsh interface ipv6 delete prefixpolicy 2002::/16
netsh interface ipv6 delete prefixpolicy ::/96
netsh interface ipv6 delete prefixpolicy ::ffff:0:0/96
netsh interface ipv6 delete prefixpolicy 2001::/32

netsh interface ipv6 add prefixpolicy ::1/128 50 0
netsh interface ipv6 add prefixpolicy ::ffff:0:0/96 40 1
netsh interface ipv6 add prefixpolicy ::/0 30 2
netsh interface ipv6 add prefixpolicy 2002::/16 20 3
netsh interface ipv6 add prefixpolicy ::/96 10 4
netsh interface ipv6 add prefixpolicy 2001::/32 5 5

Untuk menjelaskan apa yang dilakukannya:

3 baris pertama menonaktifkan antarmuka builtin tunneling, karena mereka berlebihan untuk sebagian besar jaringan. Anda mungkin ingin tidak menggunakan 3 baris itu jika Anda tidak memberikan alamat IPv6 mesin Anda sendiri, dalam kasus saya, saya memiliki server DHCPv6 dan infrastruktur terkait yang menetapkan IPv6 untuk konektivitas tunneled

Blok perintah kedua menghapus semua kebijakan awalan routing IPv6 yang ada.

Blok ketiga kemudian membuat ulang kebijakan awalan IPv6, tetapi menggunakan serangkaian prioritas yang berbeda. Seperti halnya awalan yang sesuai dengan IPv4 diberikan preferensi lebih dari IPv6, dan mesin kemudian akan ingin menggunakan IPv4 kecuali aplikasi menentukan penggunaan IPv6.

Solusi ini mempertahankan kapabilitas dual-stack fungsional, tetapi preferensi untuk menggunakan IPv4 berarti bahwa situs dengan IPv6 yang tidak lengkap, tidak dapat diandalkan, atau berkinerja buruk akan menghindari menggunakannya kecuali diperintahkan oleh program pada sistem.

Ini adalah pendapat saya bahwa membuat sistem operasi menggunakan IPv6 daripada IPv4 sebenarnya menghambat adopsi. Selama masa transisi, akan ada saat-saat di mana host berpikir itu memiliki konektivitas IPv6 tetapi sebenarnya tidak memiliki koneksi yang berfungsi penuh, yang menyebabkan kegagalan fungsi perangkat lunak dan penundaan yang besar. Banyak orang yang saya kenal telah menonaktifkan IPv6 sepenuhnya di router mereka sebagai solusi untuk ISP yang menyebarkan IPv6 dengan cara yang rusak pada awalnya sebelum membangun konektivitas penuh, dan orang-orang ini hanya akan lupa untuk mengaktifkannya lagi meninggalkan mereka tanpa IPv6 sampai mereka mengkonfigurasi ulang router mereka.

OdinYggd
sumber
+1 untuk menonaktifkan tunneling, -1 untuk memilih IPv4. Ini bukan masalah bagi kebanyakan orang, dan seharusnya hanya diterapkan untuk pengguna tertentu dalam keadaan tertentu.
Michael Hampton