2010-01-29

Debian 6.0 (squeeze) 에서 tomcat 원격접속 안되는 문제

어제(2010년 1월 28일) Debian 에서 이것저것 설치/업데이트하고 재부팅을 한 뒤로 이상하게도 원격에서 톰캣으로 접속이 되지 않는 현상이 발견되었다.

netstat 로 확인을 해보면 8080이 열려있는 것도 확인할 수 있다.

w3m 으로 아래와 같이 접속을 해보니, localhost 로의 접속은 정상적으로 되는 것을 확인하였고, 공인 IP로의 접속은 실패하였다. 원격에서 telnet 으로 접속하여도 포트가 죽어있는 것처럼 접속이 되지 않았다.

도대체 이해가 안되는 현상이었다. 결국 원인을 찾긴했는데, 좀 당황스럽다. 이번 업데이트부터 IPv4,IPv6에 대한 정책이 바뀐것 같다. 원인은 IPv4와 IPv6가 동시에 설치된 경우, 일부 프로그램에서 IPv6에 우선권을 주고 IPv4는 사용하지 않는 듯 하다. 여기에서는 Java가 그렇다. 요즘 대부분의 OS가 그렇듯이 Debian 을 설치하면 IPv4 와 IPv6 프로토콜 스택이 함께 설치된다. ifconfig 를 쳐보면 아래처럼 lo 인터페이스에 IPv4, IPv6에 대한 로컬주소가 매핑되어 있는 것을 확인할 수 있다. 아직까지는 IPv4로 거의 모든 서비스를 하고 있는데, IPv6가 우선권이 있게끔 하는 것은 문제가 있지 않은가?

이것을 해결하기 위해서는 몇가지 방법이 있는데, 하나씩 알아보자.

(1) IPv6 스택 disable 시키기
터미널에서 다음과 같이 실행하면 IPv6가 멈출 것이다. 이 설정을 /etc/sysctl.conf 에 넣어두면 재부팅되도 적용될 것이다.
# sysctl net.ipv6.conf.all.disable_ipv6=1

(2) IPv6 only disable
이번 문제의 주범으로 보이는 설정이다. 이것을 아래와 같이 0으로 변경해주면, 프로그램에서 IPv4와 IPv6를 동시에 사용한다. 프로그램이 설정값을 확인하고 IPv4를 사용할지 말지를 결정하는 것 같다.
# sysctl net.ipv6.bindv6only=0

(3) tomcat 실행시 Java 옵션 변경
/etc/init.d/tomcat6 파일을 열어서, JAVA_OPTS를 아래와 같이 변경해준다.
JAVA_OPTS="-Djava.awt.headless=true -Xms512m -Xmx512m -Djava.net.preferIPv4Stack=true"


이 문제로 원인찾고 해결하는데 하루를 삽질하였군요. 혹시라도 같은 고민을 하고 있던 분들은 참고하세요.

댓글 없음:

댓글 쓰기