Child pages
  • Java VM 의 DNS caching TTL

Java VM 은 DNS lookup 시 TTL(time-to-live) 전략을 쓰지 않고 한 번 lookup한 도메인 이름은 VM 이 내려갈때까지 계속 캐싱을 하고 있다. (DNS Spoofing 공격을 막기 위함이라고 한다..)

 

이때문에 외부에 있는 서버의 IP 가 변경되는 경우 예전 IP 로 접속하는 문제가 발생할 수 있으며(google의 reChPTCHA는 가끔 IP 를 변경한다고 한다.) 이를 해결하려면 VM 을 완전히 내렸다가 올려야 한다. (WAS 의 경우 WAS shutdown/restart)

 

또 다른 해결책은 TTL 을 사용하도록 SecurityManager의 policy를 수정한 후에 JVM 을 구동하는 방법이 있다.


networkaddress.cache.ttl

성공한 dns lookup 에 대해 cache 여부.

value의미비고
-1cache foreverdefault
0cache 하지 않음매번 DNS Server 에서 lookup
0 보다 큰 정수TTL 시간60으로 설정시 60초가 지났을 경우 다시 DNS Server를 통해 lookup


networkaddress.cache.negative.ttl (default: 10)

실패한 DNS lookup 에 대해 cache 여부

value의미비고
-1cache forever 
0cache 하지 않음매번 DNS Server 에서 lookup
0 보다 큰 정수정해진 시간이 지났을 경우 DNS에서 새로 lookup60으로 설정시 60초가 지났을 경우 다시 DNS Server를 통해 lookup

 

수정하려면 $JRE/lib/security/java.security 의 다음 항목 수정

networkaddress.cache.ttl=60

 

아니면 다음 code 로 SecurityManager 수정 가능

static {
    java.security.Security.setProperty ("networkaddress.cache.ttl" , "60");    
}

 

Ref