포트는 허용되지만 연결이 거부됩니까?
# sudo ufw allow 9999/tcp
Rule added
Rule added (v6)
상태를 확인해보니
# sudo ufw status
9999/tcp ALLOW Anywhere
9999/tcp (v6) ALLOW Anywhere (v6)
모든 것이 괜찮아 보이지만 연결이 여전히 거부됩니다. 로컬 컴퓨터에서 원격으로 로그인하려고 합니다.
# telnet 127.0.0.1 9999
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
및 외부 컴퓨터에서(실제 IP 편집됨)
# telnet 1.1.1.1 9999
Trying 1.1.1.1...
telnet: Unable to connect to remote host: Connection refused
다른 포트 연결이 가능하더라도 새로 추가된 이 포트는 작동하지 않습니다. 이유는 무엇입니까?
추신. 서버 운영 체제는 Ubuntu 16.04입니다.
답변1
연결하려면 이 포트에서 수신 대기해야 합니다. 간단한 테스트를 위해 nc
또는 다음 을 사용할 수 있습니다 netcat
.
nc -l -p 9999
이제 포트가 nc
수신 대기 중이므로 다른 터미널(또는 컴퓨터)에서 이 포트에 액세스 9999
할 수 있습니다 .telnet
$ telnet localhost 9999
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
연결되면 한 터미널에 입력하고 을 누르면 Enter다른 터미널에 텍스트가 나타납니다.
답변2
지금은 방화벽을 무시합시다. 클라이언트 프로세스가 호스트에 대한 TCP 연결을 생성하려고 시도할 때 호스트는 해당 포트에서 들어오는 연결을 "수신"하기 위해 일부 서버 프로세스를 실행해야 합니다. 포트가 "열려" 있지 않은 경우, 즉 포트에서 수신 대기 중인 프로세스가 없으면 클라이언트 프로세스가 연결을 시도할 때 호스트 커널은 포트에서 수신 대기 중인 프로세스가 없음을 나타내는 응답을 다시 보냅니다. Connection refused
클라이언트에서 볼 때 이것이 의미하는 바입니다.
방화벽을 입력하십시오. 호스트에 방화벽이 설치되어 있는 경우 방화벽은 호스트로 들어오고 나가는 네트워크 트래픽을 차단할 수 있습니다. 그런 다음 클라이언트 프로세스는 지정된 포트에서 서버 프로세스에 연결을 시도할 수 있으며, 해당 포트에서 수신 대기 중인 서버 프로세스가 있더라도 방화벽에 의해 연결이 거부됩니다. 그러나 이것은 당신이 가진 문제가 아닙니다.