Server Windows kami mendaftarkan AAAA
catatan 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 AAAA
catatan 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.foo
selalu bekerja secara instan.
Apa yang bisa saya lakukan untuk menghindari keterlambatan ini?
- Nonaktifkan IPv6 pada klien?
- Tidak, Microsoft mengatakan IPv6 adalah bagian wajib dari sistem operasi Windows.
- Terlalu banyak klien untuk memastikan ini diatur di mana-mana secara konsisten.
- Akan menyebabkan lebih banyak masalah nanti ketika kami akhirnya mengimplementasikan IPv6.
- Nonaktifkan IPv6 di server?
- Tidak, Microsoft mengatakan IPv6 adalah bagian wajib dari sistem operasi Windows.
- Membutuhkan peretasan registri yang tidak nyaman untuk menonaktifkan seluruh tumpukan IPv6.
- Memastikan ini diatur dengan benar pada semua server tidak nyaman.
- Akan menyebabkan lebih banyak masalah nanti ketika kami akhirnya mengimplementasikan IPv6.
- Menyamarkan rekaman IPv6 pada kursor DNS pengguna-facnig?
- Tidak, kami menggunakan NLNet Unbound dan tidak mendukungnya .
- 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 A
dan AAAA
catatan 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 ping
perintah 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.exe
ke host dengan AAAA
catatan 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.
Jawaban:
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.
EDIT
Sekarang Anda ke sesuatu.
Pastikan Anda menangkap lalu lintas untuk adaptor Microsoft 6To4, jika tidak, Anda tidak akan melihat IPv6:
Inilah hasil nslookup untuk server RDS saya. Catat alamat IPv6:
Sekarang inilah cuplikan tangkapan saya:
Dan akhirnya, inilah cuplikan dari netstat yang menunjukkan koneksi:
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.
sumber
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
ipconfig
dan cari alamat IPv6 yang dimulai dengan awalan 6to42002:
. Akan terlihat seperti ini.netsh int ipv6 6to4 set state disabled
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.
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.1
dengan 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 .
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.
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.
sumber
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.
sumber
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.
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.
sumber