리눅스 서버를 운영하다 보면 가장 자주 마주치는 문제 중 하나가 네트워크 장애다. 서비스는 살아 있는 것 같은데 접속이 안 되거나, 핑은 되는데 웹이 안 열리거나, DNS만 유독 실패하는 식으로 증상이 제각각이라 당황하기 쉽다.

이럴 때 중요한 건 무작정 설정 파일부터 열어보는 게 아니라, 어느 구간에서 문제가 발생했는지 순서대로 좁혀가는 것이다. 이번 글에서는 리눅스 서버에서 네트워크 문제를 만났을 때 가장 기본적으로 확인해야 할 흐름을 정리해본다.

1. 먼저 IP와 인터페이스 상태부터 확인

가장 먼저 해야 할 일은 서버가 현재 어떤 IP를 가지고 있고, 네트워크 인터페이스가 살아 있는지 확인하는 것이다.

ip 명령어 : 네트워크 인터페이스와 IP 주소 상태를 확인합니다.

사용법: ip addr

예시:

ip addr

설명: 이 명령어는 현재 서버에 붙어 있는 네트워크 인터페이스와 IP 주소를 확인할 때 사용합니다.

여기서 봐야 할 것:

  • 인터페이스가 UP 상태인지
  • 예상한 IP가 실제로 붙어 있는지
  • Docker, VPN, 가상 인터페이스가 섞여 있지 않은지

2. 기본 게이트웨이와 라우팅 확인

IP가 있다고 해서 외부와 통신이 되는 건 아니다. 기본 게이트웨이나 라우팅 테이블이 잘못돼 있으면 외부 접속이 막힌다.

ip route 명령어 : 라우팅 테이블과 기본 게이트웨이를 확인합니다.

사용법: ip route

예시:

ip route

설명: 이 명령어는 패킷이 어떤 경로로 나가는지, 기본 게이트웨이가 어디인지 확인할 때 사용합니다.

확인 포인트:

  • default via 항목이 있는지
  • 게이트웨이 주소가 맞는지
  • 특정 대역이 이상한 경로로 빠지지 않는지

3. 외부 IP로 핑 테스트

DNS 문제와 네트워크 자체 문제를 구분하려면 도메인이 아니라 IP 주소로 먼저 확인하는 게 좋다.

ping 명령어 : 서버가 외부와 기본 통신이 되는지 확인합니다.

사용법: ping [대상]

예시:

ping 8.8.8.8

설명: 이 명령어는 외부 네트워크와 ICMP 통신이 되는지 확인할 때 사용합니다.

결과 해석:

  • 8.8.8.8 핑이 되면 기본 네트워크는 살아 있을 가능성이 높음
  • 안 되면 게이트웨이, 방화벽, 네트워크 정책 쪽을 먼저 의심

4. DNS 문제인지 따로 확인

IP는 되는데 도메인이 안 열리면 DNS 문제일 가능성이 높다.

dig 명령어 : 도메인 이름이 IP로 정상 변환되는지 확인합니다.

사용법: dig [도메인]

예시:

dig google.com

설명: 이 명령어는 DNS 질의 결과를 확인해 이름 해석이 정상인지 점검할 때 사용합니다.

nslookup 명령어 : 간단하게 DNS 응답을 확인합니다.

사용법: nslookup [도메인]

예시:

nslookup google.com

설명: 이 명령어는 DNS 서버 응답을 간단히 확인할 때 유용합니다.

추가로 /etc/resolv.conf도 함께 확인하면 좋다.

cat /etc/resolv.conf

5. 서비스가 실제 포트를 열고 있는지 확인

네트워크는 정상인데 접속이 안 된다면, 해당 서비스가 포트를 제대로 열지 않았을 수도 있다.

ss 명령어 : 현재 서버에서 열려 있는 포트와 소켓 상태를 확인합니다.

사용법: ss [옵션]

예시:

ss -tulpn

설명: 이 명령어는 어떤 포트가 열려 있는지, 어떤 프로세스가 바인딩하고 있는지 확인할 때 사용합니다.

체크 포인트:

  • nginx, apache, sshd 같은 서비스가 실제로 포트를 열었는지
  • 0.0.0.0 또는 특정 IP에 바인딩됐는지
  • localhost 전용으로만 떠 있진 않은지

6. 방화벽에서 막고 있지 않은지 확인

서비스가 포트를 열었더라도 방화벽이 막고 있으면 외부 접속은 실패한다.

ufw 명령어 : 우분투 계열 방화벽 상태를 확인합니다.

사용법: ufw status

예시:

sudo ufw status verbose

설명: 이 명령어는 허용/차단 정책과 열린 포트를 확인할 때 사용합니다.

firewall-cmd 명령어 : firewalld 환경에서 방화벽 정책을 확인합니다.

사용법: firewall-cmd [옵션]

예시:

sudo firewall-cmd --list-all

설명: 이 명령어는 RHEL 계열에서 현재 방화벽 정책과 허용 서비스 상태를 확인할 때 사용합니다.

7. 경로 문제는 traceroute로 확인

중간 어디선가 트래픽이 끊기는지 확인하고 싶을 때는 traceroute가 유용하다.

traceroute 명령어 : 패킷이 목적지까지 가는 경로를 추적합니다.

사용법: traceroute [대상]

예시:

traceroute google.com

설명: 이 명령어는 경로 중간에서 어느 구간이 끊기거나 지연되는지 볼 때 사용합니다.

특히 다음 경우에 유용하다.

  • 외부 회선 문제 의심
  • VPN 경로 꼬임
  • 특정 구간에서만 연결 장애 발생

8. 로그도 같이 봐야 한다

네트워크 문제는 서비스 로그에 단서가 남는 경우가 많다.

journalctl 명령어 : 서비스 로그와 시스템 로그를 확인합니다.

사용법: journalctl [옵션]

예시:

sudo journalctl -u nginx -n 100

설명: 이 명령어는 특정 서비스가 왜 포트를 못 열었는지, 설정 오류가 있는지 확인할 때 사용합니다.

예를 들어 이런 경우가 있다.

  • nginx 설정 오류로 재시작 실패
  • sshd 설정 문제로 포트 미오픈
  • 네트워크 매니저 재시작 실패

9. 실무에서 추천하는 점검 순서

실제로는 아래 순서로 보는 게 가장 효율적이다.

  1. ip addr 로 인터페이스/IP 확인
  2. ip route 로 기본 게이트웨이 확인
  3. ping 8.8.8.8 로 외부 통신 확인
  4. dig, nslookup 으로 DNS 확인
  5. ss -tulpn 으로 포트 오픈 확인
  6. ufw 또는 firewall-cmd 로 방화벽 확인
  7. journalctl 로 서비스 로그 확인
  8. 필요 시 traceroute 로 경로 추적

이 순서대로 보면 대부분의 네트워크 문제는 꽤 빠르게 범위를 줄일 수 있다.

마무리

리눅스 네트워크 장애 대응에서 중요한 건 지식을 많이 아는 것보다, 확인 순서를 잘 지키는 것이다. 인터페이스, 라우팅, 외부 통신, DNS, 포트, 방화벽, 로그를 차례대로 보면 문제를 훨씬 빨리 좁힐 수 있다.

특히 운영 환경에서는 한 가지 명령어만 보고 결론 내리기보다, 여러 신호를 조합해서 판단하는 습관이 중요하다. 네트워크는 복잡해 보여도, 순서대로 보면 의외로 단순하게 풀리는 경우가 많다.