DNS-Caching für JVM und OS

9

Ich habe ein Problem mit JVM und DNS.

Alles, was ich gerade lese (einschließlich den Dokumenten und < a href="http://www.verisigninc.com/assets/stellent/030957.pdf"> dies ) besagt, dass ich das JVM DNS-Caching mit networkaddress.cache.ttl deaktivieren kann, das mit java.security.Security.setProperties eingestellt werden kann. , aber durch den Standardansatz der Verwendung von Systemeigenschaften. Ich habe das erfolgreich auf 0 geändert, also kein Caching mehr in meiner JVM.

Aber jetzt, bei jedem Aufruf von InetAddress.getByName("mytest.com") , scheint es, dass meine JVM den System DNS-Cache verwendet (in meinem Fall Windows 8). In der Tat habe ich zwischen zwei Aufrufen der Methode die BIND9-Eigenschaften für "mytest.com" geändert, aber die IP-Rückgabe ist immer noch dieselbe. Hier ist der Workflow:

  1. setCachePolicyInJVM(0) in meinem Java-Code.
  2. setze mytest.com auf 192.168.1. 188 in BIND9, starte neu.
  3. InetAddress.getByName("mytest.com").getHostAddress(); - & gt; 192.168.1. 188
  4. set mytest.com - & gt; 192.168.1. 160 in BIND9, neu starten.
  5. InetAddress.getByName("mytest.com").getHostAddress(); - & gt; 192.168.1. 188 (sollte 160 sein, wenn kein Caching stattgefunden hat).
  6. Spülen Sie den Windows DNS
  7. InetAddress.getByName("mytest.com").getHostAddress(); - & gt; 192.168.1. 160

Ich habe mehrmals gelesen, dass die JVM den Systemcache nicht benutzt, aber das ist falsch: das tut es eindeutig.

Wie erzwingen wir bei jedem Aufruf eine neue DNS-Auflösung und umgehen dabei den OS DNS-Cache?

    
zeraDev 28.06.2013, 10:36
quelle

3 Antworten

3

Ich glaube, ich bin auf dieses Problem gestoßen oder ein sehr ähnliches. Was ich dann tat, war meinen eigenen DNS-Provider für die JVM zu implementieren, siehe Wie Sie den Java-DNS-Dienstanbieter ändern für Details. Du kannst das dort erwähnte Dnsjava benutzen oder selbst rollen.

    
Alexander Torstling 07.01.2014 17:45
quelle
1

Sie können Ihre $JAVA_HOME/jre/lib/security/java.security für Java 6-8 und $JAVA_HOME/conf/security/java.security Eigenschaftendatei bearbeiten, um die folgende Eigenschaft hinzuzufügen.

%Vor%

Es ist nicht möglich, es in der Befehlszeile zu setzen.

  

Da diese 2 Eigenschaften Teil der Sicherheitsrichtlinie sind, sind sie nicht   Dies wird stattdessen über die Option -D oder die API System.setProperty () festgelegt   Sie sind als Sicherheitseigenschaften festgelegt.

Um diese Eigenschaft innerhalb des Codes festzulegen, können Sie die folgende Methode verwenden.

%Vor%

Oder fügen Sie die folgende Eigenschaft in der Java-Befehlszeile hinzu.

%Vor%

Es ist auch wichtig zu beachten, dass Werte nur dann effektiv sind, wenn die entsprechenden networkaddress.cache.* -Eigenschaften nicht gesetzt sind.

Siehe Java 8-Netzwerkeigenschaften , Java 9 Netzwerkeigenschaften und VeriSign DNS-Caching in Java Virtual Machines für weitere Details.

Diese Antwort fügt auch einige Details hinzu.

    
Nicolas Henneaux 15.02.2018 13:41
quelle
0

Von hier scheint es, dass Sie sun.net.inetaddr.ttl einstellen sollten. Das hat für mich funktioniert.

Beispiel aus dem Link:

%Vor%     
tudor 03.03.2017 07:59
quelle

Tags und Links