리눅스 서버를 운영하다 보면 가장 자주 마주치는 문제 중 하나가 네트워크 장애다. 서비스는 살아 있는 것 같은데 접속이 안 되거나, 핑은 되는데 웹이 안 열리거나, 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. 실무에서 추천하는 점검 순서
실제로는 아래 순서로 보는 게 가장 효율적이다.
- ip addr 로 인터페이스/IP 확인
- ip route 로 기본 게이트웨이 확인
- ping 8.8.8.8 로 외부 통신 확인
- dig, nslookup 으로 DNS 확인
- ss -tulpn 으로 포트 오픈 확인
- ufw 또는 firewall-cmd 로 방화벽 확인
- journalctl 로 서비스 로그 확인
- 필요 시 traceroute 로 경로 추적
이 순서대로 보면 대부분의 네트워크 문제는 꽤 빠르게 범위를 줄일 수 있다.
마무리
리눅스 네트워크 장애 대응에서 중요한 건 지식을 많이 아는 것보다, 확인 순서를 잘 지키는 것이다. 인터페이스, 라우팅, 외부 통신, DNS, 포트, 방화벽, 로그를 차례대로 보면 문제를 훨씬 빨리 좁힐 수 있다.
특히 운영 환경에서는 한 가지 명령어만 보고 결론 내리기보다, 여러 신호를 조합해서 판단하는 습관이 중요하다. 네트워크는 복잡해 보여도, 순서대로 보면 의외로 단순하게 풀리는 경우가 많다.