우분투 실전 명령어 | nc(netcat) 포트 연결 점검
언제 쓰는가
내 서버는 떠 있는데 외부에서 접속이 안 될 때, 방화벽 문제인지 서비스 미기동인지 먼저 가려내야 합니다. 이럴 때 nc(netcat)로 포트 열림 상태와 TCP 핸드셰이크 여부를 빠르게 확인하면 원인 범위를 바로 줄일 수 있습니다.
바로 쓰는 명령어
# 특정 호스트의 단일 포트 접속 확인 (성공/실패 즉시 확인)
nc -vz 10.0.1.25 443
# 여러 포트를 한 번에 스캔 (운영 중 자주 보는 포트)
nc -vz 10.0.1.25 22 80 443 3306
# 타임아웃 2초로 짧게 설정해 헬스체크 속도 개선
nc -vz -w 2 api.internal.local 443
# 로컬에서 포트 리스너 임시 실행 (양쪽 테스트용)
nc -lv 9000
핵심 옵션
-v: 연결 시도 결과를 자세히 보여줘서 실패 원인을 파악하기 쉽습니다.-z: 실제 데이터 전송 없이 포트 열림 여부만 확인합니다.-w <초>: 타임아웃을 제한해 장애 점검 시간을 줄입니다.-l: 리슨 모드로 테스트 서버를 임시로 띄울 때 사용합니다.
명령 출력 예시
$ nc -vz 10.0.1.25 443
Connection to 10.0.1.25 443 port [tcp/https] succeeded!
$ nc -vz -w 2 10.0.1.25 3306
nc: connect to 10.0.1.25 port 3306 (tcp) failed: Connection refused
$ nc -vz -w 2 api.internal.local 8443
nc: connect to api.internal.local port 8443 (tcp) timed out: Operation now in progress
자주 하는 실수
Connection refused와timed out를 같은 의미로 해석하는 경우- DNS 이름 해석 실패를 포트 문제로 오해하는 경우
- 서버 쪽 리슨 주소(127.0.0.1 바인딩)를 확인하지 않고 네트워크만 의심하는 경우
- 보안그룹/방화벽 정책 반영 지연 시간을 고려하지 않는 경우
검증 방법
# 1) 서버에서 실제 리슨 상태 확인
sudo ss -lntp | grep -E ':443|:8443|:3306'
# 2) 방화벽 정책 확인 (UFW 사용 시)
sudo ufw status verbose
# 3) DNS 해석 확인
getent hosts api.internal.local
클라이언트의 nc 결과와 서버의 리슨 상태(ss), 방화벽 정책(ufw)이 함께 맞아야 원인 판단이 정확해집니다.
운영 팁
장애 대응 중에는 먼저 nc -vz -w 2로 핵심 포트만 빠르게 확인하고, 실패 유형(refused/timeout)별로 담당 영역을 바로 분기하면 커뮤니케이션 비용이 크게 줄어듭니다. 점검 대상 포트가 고정돼 있다면 쉘 함수로 묶어 두고 팀 공용으로 쓰는 게 가장 실용적입니다.
출처
- OpenBSD netcat 매뉴얼
- Ubuntu Server Guide
- Linux man-pages project