우분투 실전 명령어 | 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 refusedtimed 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