Возврат IPv6-адресов с DNS-сервера на C#

#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…