리눅스에서 서비스에 접속하려는 순간 'No route to host(호스트에 대한 경로 없음)' 오류 메시지를 마주하면 답답해질 수밖에 없습니다. 이 오류는 컴퓨터가 대상 서버에 도달하지 못한다는 의미로, 로컬 시스템의 서버 데몬이든 원격 서버든 접근이 불가능한 상황을 나타냅니다. 이 글에서는 리눅스에서 발생하는 'No route to host' 연결 오류를 단계별로 진단하고 해결하는 방법을 소개합니다.
'No route to host' 오류가 발생하는 이유
이 오류를 유발하는 원인은 매우 다양합니다. 리눅스 네트워킹은 여러 계층으로 구성된 복잡한 스택 구조이기 때문에 문제의 정확한 위치를 파악하기가 쉽지 않습니다. 아래에서 가장 흔한 원인들을 하나씩 살펴보겠습니다.
호스트가 오프라인 상태이거나 서비스가 실행 중이 아닌 경우
너무나 당연하게 들릴 수 있지만, 먼저 접속하려는 서버 자체가 온라인 상태인지 확인해야 합니다. 서버가 점검 중이거나 장애를 겪고 있을 가능성도 있습니다.
또한 서비스 자체가 시작되지 않았을 수도 있습니다. 본인이 관리하는 서버라면 해당 서비스가 정상적으로 실행 중인지 확인할 수 있습니다. Systemd 환경이라면 다음 명령어로 확인하세요.
sudo systemctl status SERVICENAME
잘못된 포트 사용
접속 시도에 잘못된 포트를 사용하고 있을 가능성도 있습니다. 많은 시스템 관리자들이 SSH처럼 공격 표적이 되기 쉬운 서비스를 기본 포트가 아닌 다른 포트로 운영하여 공격을 방어하기도 합니다.
본인 소유가 아닌 서버라면 제공되는 문서를 확인하거나 지원팀에 문의하세요.
직접 운영하는 서버라면 NMAP을 활용해 서비스가 어떤 포트에서 실행 중인지 찾아볼 수 있습니다.
sudo nmap -sS your.server.ip
만약 매우 생소한 포트를 사용했다고 생각된다면 -p- 플래그를 추가해 모든 포트를 스캔할 수 있습니다. 다만 스캔에 시간이 다소 걸린다는 점은 감안해야 합니다.
Iptables가 연결을 차단하는 경우
실수로 iptables 설정에서 해당 포트의 연결을 차단했을 수도 있습니다. iptables는 서버와 클라이언트 어느 쪽에 설정되어 있어도 동일한 오류 메시지를 출력하므로 양쪽 모두 확인하는 것이 좋습니다. 현재 iptables 규칙을 보려면 다음 명령어를 실행하세요.
sudo iptables -S
DNS 설정이 잘못된 경우
위 방법들로 해결되지 않는다면 접속하려는 IP 주소에 직접 ping을 날려보세요. 컴퓨터가 DNS 서버에 제대로 연결되지 못하고 있을 가능성이 있습니다.
ping -c3 your.server.ip
IP 주소로 ping은 성공하는데 도메인 이름으로는 접속되지 않는다면 DNS 문제일 확률이 높습니다.
Systemd 사용자는 systemd-resolve --status 명령으로 시스템이 사용 중인 DNS 서버를 확인할 수 있습니다. 결과가 인터페이스별로 구분되어 표시되므로 실제 접속에 사용하는 인터페이스를 반드시 확인하세요.
대부분의 경우 컴퓨터는 DHCP를 통해 DNS 정보를 자동으로 받아옵니다. 하지만 고정 IP를 사용하거나 네트워크 설정이 특수하게 구성되어 있다면 DNS를 수동으로 설정해야 할 수 있습니다.
Systemd 환경에서 DNS 수동 설정
"/etc/systemd/resolved.conf" 파일을 열고 DNS 항목의 주석을 해제한 뒤 라우터의 IP 또는 신뢰할 수 있는 다른 DNS 서버 주소를 입력합니다. 참고로 Systemd의 기본 폴백 DNS는 FallbackDNS 항목에 구글 DNS 서버가 지정되어 있습니다.
DNS=192.168.1.1
OpenRC 등 기타 환경에서 DNS 수동 설정
OpenRC나 Systemd 외의 초기화 시스템을 사용한다면 "/etc/resolv.conf" 파일에서 DNS 정보를 찾을 수 있습니다.
nameserver 192.168.1.1
파일이 비어 있다면 라우터의 IP 주소나 선호하는 DNS 서버 주소를 입력하세요. 설정 후에는 네트워크 서비스를 재시작하거나 시스템 전체를 재부팅해야 변경 사항이 적용됩니다.
GUI로 DNS 설정하기
Network Manager가 탑재된 그래픽 데스크톱 환경을 사용한다면 GUI를 통해 연결 정보를 수정할 수 있습니다. 네트워크 애플릿을 열거나 시스템 설정 메뉴로 이동한 뒤, 사용 중인 연결을 선택하고 'IPv4' 탭을 찾으세요. 연결 방식을 '수동(Manual)'으로 변경한 후 컴퓨터의 IP 주소와 게이트웨이로 사용할 라우터 IP를 입력합니다. 그다음 아래 DNS 필드에 라우터 IP 또는 다른 DNS 서버 주소를 입력하면 됩니다.
네트워크 및 호스트 설정 오류 점검
그 밖에도 잘못될 수 있는 설정 항목이 여러 가지 있습니다. 이 중 하나라도 문제가 있다면 컴퓨터가 서버에 접속하는 것이 불가능해집니다.
먼저 컴퓨터의 네트워크 설정 자체가 올바른지 확인하세요. 설정 파일을 꼼꼼히 검토하고, 다른 경로로 인터넷에 접속할 수 있는지도 함께 테스트해 보는 것이 좋습니다.
특정 호스트명으로 접속하거나 서버·클라이언트 어느 한쪽에 hosts 파일을 설정해 두었다면 두 머신이 서로 통신할 수 있는지 반드시 확인해야 합니다. "/etc/hosts", "/etc/hosts.allow", "/etc/hosts.deny" 파일의 설정 내용을 점검하세요.
마지막으로 서버 측 설정도 확인이 필요합니다. 서버의 설정이 부적절하게 되어 있으면 클라이언트가 정상적으로 접속하지 못할 수 있습니다.
위의 팁들을 활용하면 'No route to host' 오류를 유발하는 원인을 찾아 해결할 수 있을 것입니다. 더 나아가 리눅스에서 Wi-Fi 네트워크를 관리하는 방법이나 방화벽이 들어오고 나가는 연결을 차단하고 있는지 확인하는 방법도 함께 익혀두면 큰 도움이 됩니다.