저는 Java로 서버 클라이언트 애플리케이션(명령줄 기반)을 개발 중입니다. 내 Raspberry Pi(RPi)에서 실행하고 싶지만 내 노트북에서 서버 부분에 로그인할 수 없는 것으로 나타났습니다. 문제는 내 애플리케이션의 서버 부분(소켓, 포트 4444)을 실행할 때 아무 문제 없이 RPi에서 텔넷을 통해 연결할 수 있다는 것입니다.
RPi에서 서버 부분을 실행하면 연결이 설정되지 않습니다. 저는 Linux에 익숙하지 않은데, 이것이 iptables에서 해야 할 일입니까? 다른 제안?
답변1
우선, 방화벽(iptables)이 문제가 아닌지 확인하겠습니다. RPi에서 다음 명령을 사용하여 이를 확인할 수 있습니다.
$ iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
위에서 언급한 대로 방화벽이 괜찮아 보이면 Java 애플리케이션을 시작하고 다음 명령을 사용하여 올바른 포트에서 수신 대기하고 있는지 확인하세요.
$ netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:9090 0.0.0.0:* LISTEN 970/xbmc.bin
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 970/xbmc.bin
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 936/sshd
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 1086/smbd
tcp 0 0 192.168.1.85:22 192.168.1.20:34971 ESTABLISHED 6762/0
tcp 0 0 :::53 :::* LISTEN 829/connmand
tcp 0 0 :::22 :::* LISTEN 936/sshd
tcp 0 0 :::445 :::* LISTEN 1086/smbd
이 명령은 각 데몬이 수신하는 IP 주소와 포트를 표시합니다. 예를 들어 다음 줄은 다음과 같습니다.
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 970/xbmc.bin
이는 프로세스 ID가 970(xbmc.bin)인 프로세스가 모든 인터페이스(0.0.0.0)의 포트 80에서 수신 대기하고 있음을 보여줍니다. 마지막 비트 "모든 인터페이스"는 여러 네트워크 인터페이스(이더넷, Wi-Fi 등)가 있는 경우 데몬이 이들 중 하나의 연결을 수락한다는 의미입니다.
단순히 192.168.1.10과 같은 IP 주소를 나타내는 경우 데몬은 해당 IP 주소가 할당된 인터페이스의 연결만 허용합니다.
마지막으로 주목해야 할 점은 위 데몬이 허용하는 연결 유형은 TCP라는 것입니다. 또 다른 유형은 이 데몬에서 허용되지 않는 UDP입니다.