DevOps와 Infra/Linux / / 2023. 11. 1. 11:15

Ping과 Telnet으로 troubleshooting

개요

DevOps 엔지니어로서 아마도 가장 많이 듣는 얘기 중 하나는
홈페이지가 안 뜬다는 요청일 것이다.
이런 상황의 troubleshooting 과정 중 가장 먼저, 또한 가장 많이 사용하는 command는 ping 과 telnet이 있다.
 

curl

ssh 접속이 되서 서버는 돌아가고 있어도, 예를들어 Apache httpd service만 죽었을 수도 있다.
GUI가 있을 때 브라우저에서 www.google.com을 치지만 
CLI 환경에서는 curl로 확인을 할 수가 있다.
예시:

$ curl www.google.com
$ curl http://website.com/path1

을 하게 되면 html 코드가 출력된다. 
위에는 확인 용도지만 -O 옵션을 붙이면 wget과 똑같은 기능으로 다운로드를 받을 수도 있다.
예시:

$ curl -O http://website.com/filename.tar.gz

 

ping

가장 널리 쓰이는 network utility이다.
1983년 12월 Mike Muuss에 의해 개발되었다.
사용 방법:

# ping <hostname or ip 주소>
$ ping www.google.com
$ ping 216.58.217.68

hostname과 ip주소 둘 다 입력이 가능하다는 이유 때문에

  • Network connectivity 테스트도 할 수 있고 (ip address 입력시)
  • DNS resolution 테스트도 할 수 있다. (hostname 입력시)

ping을 "때리면" 32 byte혹은 64 byte씩 데이터 패킷을 4번 보낸다.
정상 동작의 예시:

$ ping www.google.com

Ping www.google.com [142.250.76.132] 32바이트 데이터 사용:
142.250.76.132의 응답: 바이트=32 시간=35ms TTL=57
142.250.76.132의 응답: 바이트=32 시간=35ms TTL=57
142.250.76.132의 응답: 바이트=32 시간=36ms TTL=57
142.250.76.132의 응답: 바이트=32 시간=36ms TTL=57

142.250.76.132에 대한 Ping 통계:
    패킷: 보냄 = 4, 받음 = 4, 손실 = 0 (0% 손실),
왕복 시간(밀리초):
    최소 = 35ms, 최대 = 36ms, 평균 = 35ms

 
ping -t 옵션을 쓰면 4번이 아니고 Ctrl-C로 중지할 때까지 계속 보낸다.
 
위에는 서버 connection이 healthy한 경우의 사례이다.
참고로 네이버는 ping을 의도적으로 막아놓았다.

$ ping www.naver.com

Request timed out.
Request timed out.
Request timed out.
Request timed out.

Ping statistics for 223.130.200.104:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),

"Request timed out."이라는 메세지가 뜨는 경우는 2가지이다.
host가 다운 되었거나
host가 의도적으로 request를 block하는 firewall을 사용한다는 뜻이다.
네이버는 firewall(방화벽)에서 ping을 차단하고 있다.
 
다음 경우는 드물지만 만약

Destination host unreachable.

이 뜬다면 네트워크 라우터에서 destination을 못 찾는다는 뜻이다.
 

Loopback test with ping

만약 localhost를 ping 하면 내 NIC(Network Interface Card)가 제대로 동작하는지도 테스트할 수 있다.

ping localhost
ping 127.0.0.1

loopback test가 성공하면 내 네트워크 카드가 제대로 동작한다는 뜻
 

DNS resolution with ping

$ ping tech.team.plateer
Ping request could not find host tech.team.plateer. Please check the name and try again.

위처럼 네임서버에 없는 도메인을 ping하면 위와 같은 메세지가 출력된다. 그래서 DNS resolution 기능도 테스트할 수 있다.
 

traceroute

traceroute는 data packet이 도착지까지는 과정을 볼 수 있다.
라우터를 거칠때마다 response가 와서 라우터 정보를 보여준다.
 
 

telnet

telnet은 Teletype Network의 약자이다.
telnet에 대해 검색을 하면 항상 ssh에 대비해서 안전하지 않은 연결이라는 설명 주로 뜬다.
이는 1969년에 telnet이 최초 개발될 때 암호화되지 않은 상태로 컴퓨터 간의 unsecured connection으로
CLI 환경에서 완전한 원격 접속의 목적으로 개발되었기 떄문이다.
하지만 이제는 접속의 목적이 아닌
port connectivity 테스트의 목적으로 많이 쓰인다.
 
CentOS를 포함한 일부 Linux에는 기본적으로 설치가 되어있지는 않다.

$ yum install telnet

으로 설치하면 된다.
 
telnet도 ping처럼 <hostname 혹은 ip주소> 둘 다 가능하고 뒤에 port 번호를 적어준다.

$ telnet www.google.com 80
Trying 172.217.161.196...
Connected to www.google.com.
Escape character is '^]'.

위 처럼 뜨면 port 80이 열려있다는 뜻이다.
 
가끔 FTP 서버 접속할 때도 사용된다. FTP은 default port는 21번이고 

$ telnet flooreeda.com 21
Trying 173.236.140.85...
Connected to flooreeda.com.
Escape character is '^]'.
220 DreamHost FTP Server

접속이 된다. (위에서 빠져나올 때는 quit을 입력한다.)
 

ssh

그러나 진짜 접속의 목적이라는 telnet은 암호화되지 않은 plaintext로 접속하기 때문에 eavesdrop 해킹에 아주 취약하다는 이유로 요즘은 전부 ssh (secure shell)의 약자로 접속한다.

$ ssh <id>@<ip주소>

 

'DevOps와 Infra > Linux' 카테고리의 다른 글

VM 에 디스크 추가하기 (VMWare)  (2) 2024.01.15
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유