#c# #dns #ipv6
#c# #dns #ipv6
Вопрос:
Я сталкиваюсь с некоторыми необычными проблемами при переносе моего приложения для работы в средах IPv6.
Я использую .СЕТЕВОЕ удаленное подключение для подключения к удаленной службе, предоставляющей имя хоста. Это имя хоста (ipv6.dt112979.company) зарегистрировано на моем DNS-сервере (работающем на сервере Windows 2003 с включенным IPv6 на сетевой карте и в DNS) в качестве хоста AAAA.
Проблема в том, что каждый раз, когда я пытаюсь подключиться к этому серверу, я получаю сообщение «Такой хост не известен».. Я настроил Wireshark, и DNS-запрос не выдается. Я выполнил «ipconfig / flushdns», и наблюдается тот же результат.
Итак, я создал простое приложение, которое просто выполняет:
Dns.GetHostAddresses("ipv6.dt112979.company");
И результатом всегда будет «Такой хост не найден».
Я выполнил NSLOOKUP, и результат:
nslookup ipv6.dt112979.company
Server: company-dev03.company
Address: 10.200.10.207
Name: ipv6.dt112979.company
Address: fe80::a5c3:bfde:5ece:e833
Есть ли у вас какие-либо идеи о том, в чем может быть проблема?
Я тестировал это с .NET 3.5 и .NET 4.0, и проблема та же.
Тесты были выполнены на компьютере с Windows 7.
Если бы у меня была запись для ipv6.dt112979.company, то вызов был успешным, но возвращал только адрес IPv4.
С наилучшими пожеланиями, Нуно Сентейо
Комментарии:
1. Вы уверены, что IPV6 установлен и включен на вашем компьютере для разработки? Если нет, неудивительно, что вы возвращаете сообщение об исключении No Host.
2. @GregoryABeamer Да, я уверен. Я печатаю OSSupportsIPv6, и он возвращает True. Кроме того, я могу использовать «ping -6 ipv6.dt112979.company» и доказать с помощью Wireshark, что все коммуникации используют IPv6.
3. Мне интересно… Может быть, это потому, что у меня нет полностью включенной сети IPv6? Я думаю, что я использую Teredo на всех хостах…
Ответ №1:
Я понял проблему. Я не был в полностью включенной сети IPv6. Я полагался на частные адреса (FE80::) и, несмотря на возможность выполнения ping и nslookup, похоже, что Winsocks2 это не нравится.
Я настроил Cisco UBE на наличие реальной сети IPv6, и все начало работать, как ожидалось.
Спасибо за вашу помощь.
Ответ №2:
Dns.GetHostAddresses
возвращает массив значений IPAddress, вы уверены, что перебираете их все?
Кроме того, если локальный компьютер не поддерживает IPv6, результаты IPv6 фильтруются из списка результатов при использовании Dns.GetHostAddresses
. Вы упомянули, что вы убедились, что удаленный хост поддерживает IPv6, но вы уверены, что ваш локальный хост также поддерживает это?
Комментарии:
1. Я печатаю OSSupportsIPv6, и он возвращает True. Я не могу выполнить итерацию по результату, потому что функция выдает исключение SocketException. Мой хост поддерживает IPv6… Я могу пинговать удаленный хост с помощью IPv6 (проверено в Wireshark), также я могу подключать удаленный рабочий стол к другим хостам IPv6…