톰캣 서버에 java.net.preferIPv4Stack 옵션을 적용하면 실제 ipv6로 들어오는 클라이언트가 접근이 가능한지에 대한 테스트를 해보았다
리눅스에서 nic를 확인을 위해서 ifconfig 를 확인 해본다.
inet6 fe80::22a:4aff:fe16:183 prefixlen 64 scopeid 0x20<link>
위에 보이는 거와 inet6가 보이고
/etc/sysctl.conf 파일에 보면
net.ipv6.conf.all.disable_ipv6 = 0 (disable 0이기때문에 ipv6가 활성화 되었다)
net.ipv6.conf.eth0.disable_ipv6 = 0 (disable 0이기때문에 ipv6가 활성화 되었다)
net.ipv6.conf.all.disable_ipv6 = 1 (disable 0이기때문에 ipv6가 비활성화 되었다)
net.ipv6.conf.eth0.disable_ipv6 = 1 (disable 0이기때문에 ipv6가 비활성화 되었다)
아무 내용 없다면 default 는 0이다
활성화가 되어 있는 상태에서 curl을 통해 톰켓을 호출해본다.
java.net.preferIPv4Stack false 경우
$ curl -g -6 "http://[::1]:8180/clientip.jsp"
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>client ip</title>
</head>
<body>
<p>client Addr: 0:0:0:0:0:0:0:1</p><p>client Host: 0:0:0:0:0:0:0:1</p><p>X-Forwarded-For: null</p>
</body>
</html>
호출이 된다.
java.net.preferIPv4Stack ture 경우
$ curl -g -6 "http://[::1]:8180/clientip.jsp"
curl: (7) Failed connect to ::1:8180; Connection refused
결론적으로 java.net.preferIPv4Stack 을 사용할 경우에는 ipv6는 사용이 불가능하다
설정 예)
JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"