Почему Java дает разные результаты DNS с IPv4Stack - PullRequest
2 голосов
/ 18 февраля 2010

У меня есть следующий код:

import java.net.InetAddress;

public class lookup {

  public static void main(String[] args) throws Exception {
    for(String host : args){
      for(InetAddress addr : InetAddress.getAllByName(host)){
      System.out.println(addr.getHostAddress());
    }
  }
}
}

Недавно мы изменили CNAME для хоста, который мы назовем foo.example.com, чтобы он указывал на bar.example.com на baz.example.com. Если я бегу:

java -Djava.net.preferIPv4Stack=true lookup foo.example.com

Я получаю IP-адрес baz.example.com, как и ожидалось. Однако, если я бегу:

java lookup foo.example.com

Я все еще получаю IP-адрес bar.example.com.

Я подтвердил, что ни bar.example.com, ни baz.example.com не имеют записей AAAA. dig и ping разрешают baz.example.com как и ожидалось. Как получить стек ipv6 Java для правильного решения этой проблемы?

Ответы [ 3 ]

1 голос
/ 18 февраля 2010

Проблема была в том, что nscd работал и кэшировал записи. Почему он не уважает TTL и почему ping не использует кеш, все еще остается загадкой.

0 голосов
/ 18 февраля 2010

Может ли быть так, что ваша операционная система знает о двух разных DNS-серверах, один из которых доступен по IPv4, другой - по IPv6 и предпочитаемый для IPv6, а предпочитаемый DNS-сервер по IPv6 все еще кэширует старую конфигурацию?

0 голосов
/ 18 февраля 2010

Хм, здесь происходит что-то странное. Я подозреваю, что это может быть связано с DNS-кэшированием выполненных поисков доменных имен. Измените следующие свойства в:

java.home / Библиотека / безопасность / java.security

и посмотрите, решает ли это проблему:

networkaddress.cache.ttl: 10
networkaddress.cache.negative.ttl: 10

Значение -1 (по умолчанию для networkaddress.cache) указывает на «кеширование навсегда», что может вызвать то, что вы видите выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...