728x90
반응형

리눅스에서 네트워크를 확인하기 위한 명령어를 정리해봤다.
일단 네트워크가 이상 없는지 확인할 때
주로 ping, netstat, traceroute 등 많은 명령어를 통해 네트워크를 확인한다.

ping (Packet INternet Groper)

네트워크 상태를 확인할 때 정말 많이 사용하는 명령어다.
ping 명령어는 IP 네트워크를 통해 특정 목적지까지 네트워크가 잘 동작하고 있는지 확인하는 명령어다.
그래서 ping 명령어를 통해 서버로 패킷이 잘 보내지는지 확인해 서버 네트워크 상태를 확인한다.
잘 작동중이던 서버에 패킷이 가지 않는다면 보통 서버에 hung 이 걸려 다운되거나 다운되기 직전의 상황일 것이다.
ping 명령어는 이렇게 사용한다.

# ping [옵션] [목적지 IP 주소]

[옵션]
-c count : 패킷을 몇 번 보낼 지 설정, 기본 설정은 강제로 정지할 때까지 패킷을 보낸다.
-i interval : 패킷을 보내는 시간 간격, 기본 설정 값은 1초, 슈퍼 유저의 경우 0.2 이하로 설정 가능
-I interface : 패킷을 보낼 때 출발지 주소를 지정
-s packetsize : 패킷 크기 지정, 기본 설정 값은 56바이트

그럼 예를 들어, ping 명령어를 사용해 구글 DNS 로 패킷을 보내봤다.

# ping 8.8.8.8 -c 2
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=63 time=43.6 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=63 time=42.5 ms

--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 42.586/43.100/43.614/0.514 ms

-c 옵션으로 2번만 보내봤는데 잘 가는 것을 확인했다.

traceroute

명령어 그대로 route 를 추적하는 명령어다.
ping 명령어처럼 패킷을 보내 잘 도착하는지 확인해주는 명령어인데
ping 과는 다른 점이 있다면 패킷이 이동하는 경로를 보여준다는 것이다.

# traceroute [옵션] [목적지 IP 주소]

[옵션]
-I, --icmp : ICMP 기반으로 traceroute 수행
-T, --tcp : TCP SYN 으로 traceroute를 수행하면 기본 서비스 포트는 80
-n : IP 주소를 도메인이 아닌 숫자 형식으로 표시
-p port, --port=port : 특정 포트를 지정
-s src_addr, --source=src_addr : 패킷이 나가는 인터페이스가 아닌 별도 IP로 출발지 지정

이번에도 구글 DNS 로 가는 경로를 추적해봤다.

# traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  gateway (10.0.2.2)  0.283 ms  0.235 ms  0.200 ms
 2  172.30.1.254 (172.30.1.254)  5.894 ms  5.929 ms  7.056 ms
 3  * * *
 4  * * *
 5  * * *
 6  * 112.188.194.169 (112.188.194.169)  3.699 ms 112.188.194.57 (112.188.194.57)  4.479 ms
 7  * * *
 8  112.174.70.66 (112.174.70.66)  5.690 ms 112.174.5.238 (112.174.5.238)  6.747 ms 112.174.7.226 (112.174.7.226)  5.524 ms
 9  72.14.194.106 (72.14.194.106)  87.040 ms  62.010 ms  61.975 ms
10  108.170.242.97 (108.170.242.97)  41.646 ms 108.170.242.161 (108.170.242.161)  41.604 ms *
11  108.170.235.103 (108.170.235.103)  42.535 ms dns.google (8.8.8.8)  34.572 ms  34.378 ms

게이트웨이부터 경로를 거쳐가면서 시간들이 출력되고 구글 DNS 로 도착하기까지의 경로들이 출력되었다.

netstat (network statistic)

서버의 다양한 네트워크 상태를 확인할 수 있다.
netstat 명령어는 막힌 포트와 열린 포트를 확인할 때 많이 사용했던 것 같다.
포트를 확인할 수 있는 것 말고도 라우팅 테이블을 보여주기도 하고 인터페이스 패킷 통계정보를 확인할 수도 있다.

# netstat [옵션]

[옵션]
-a, --all : 모든 연결과 수신 대기 포트 표시
-n, --numeric : 주소와 포트 번호를 숫자 형식으로 표시
-r, --route : 라우팅 테이블 표시
-i, --interfaces : 인터페이스별 입출력 패킷 통계
-s, --statistics : 네트워크에 통계 데이터 출력
-p, --programs : PID와 프로그램 이름 출력
-t, --tcp : TCP만 출력
-l, --listening : LISTEN 하고 있는 포트 출력
-4/-6 : IPv4, IPv6에 대해 출력

보통 열려있는 포트를 확인할 때 -a, -l, -p, -t 옵션을 사용해서 확인하곤 했는데
풀어써보면 모든 포트 중에서 LISTEN 상태인 포트를 PID와 프로그램 이름을 TCP만 출력한다.
그럼 LISTEN 인 포트, 열려있는 포트만 보여준다.

# netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:31200           0.0.0.0:*               LISTEN      3934/kube-proxy     
tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:10248         0.0.0.0:*               LISTEN      991/kubelet         
tcp        0      0 0.0.0.0:47496           0.0.0.0:*               LISTEN      992/rpc.statd       
tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN      3934/kube-proxy     
tcp        0      0 127.0.0.1:9099          0.0.0.0:*               LISTEN      4222/calico-node    
tcp        0      0 0.0.0.0:30155           0.0.0.0:*               LISTEN      3934/kube-proxy     
tcp        0      0 192.168.1.10:2379       0.0.0.0:*               LISTEN      2870/etcd           
tcp        0      0 127.0.0.1:2379          0.0.0.0:*               LISTEN      2870/etcd           
tcp        0      0 192.168.1.10:2380       0.0.0.0:*               LISTEN      2870/etcd           
tcp        0      0 127.0.0.1:2381          0.0.0.0:*               LISTEN      2870/etcd           
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      662/rpcbind         
tcp        0      0 192.168.1.10:7472       0.0.0.0:*               LISTEN      4010/speaker        
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      1003/rpc.mountd     
tcp        0      0 127.0.0.1:10257         0.0.0.0:*               LISTEN      2084/kube-controlle 
tcp        0      0 127.0.0.1:32882         0.0.0.0:*               LISTEN      991/kubelet         
tcp        0      0 0.0.0.0:179             0.0.0.0:*               LISTEN      4339/bird           
tcp        0      0 127.0.0.1:10259         0.0.0.0:*               LISTEN      2823/kube-scheduler 
tcp        0      0 0.0.0.0:31957           0.0.0.0:*               LISTEN      3934/kube-proxy     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      996/sshd            
tcp        0      0 0.0.0.0:8443            0.0.0.0:*               LISTEN      1378/docker-proxy   
tcp        0      0 0.0.0.0:43708           0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::2049                 :::*                    LISTEN      -                   
tcp6       0      0 :::35177                :::*                    LISTEN      -                   
tcp6       0      0 :::10250                :::*                    LISTEN      991/kubelet         
tcp6       0      0 :::6443                 :::*                    LISTEN      3004/kube-apiserver 
tcp6       0      0 :::10251                :::*                    LISTEN      2823/kube-scheduler 
tcp6       0      0 :::9100                 :::*                    LISTEN      3964/node_exporter  
tcp6       0      0 :::10252                :::*                    LISTEN      2084/kube-controlle 
tcp6       0      0 :::111                  :::*                    LISTEN      662/rpcbind         
tcp6       0      0 :::10256                :::*                    LISTEN      3934/kube-proxy     
tcp6       0      0 :::20048                :::*                    LISTEN      1003/rpc.mountd     
tcp6       0      0 :::22                   :::*                    LISTEN      996/sshd            
tcp6       0      0 :::52381                :::*                    LISTEN      992/rpc.statd

예전에 쿠버네티스 클러스터 실습 환경 만든다고 쿠버네티스 포트들이 열려있는 것이 보이고
sshd 22번 포트도 열려있는 것을 확인해볼 수 있다.
여기서 grep 명령어를 사용해서 원하는 포트를 더 쉽게 찾을 수 있다.

이렇게 3개의 명령어 말고도
소켓 정보를 확인할 수 있는 ss 명령어와
다양한 도메인 관련 내용을 확인할 수 있는 nslookup 명령어
네트워크 인터페이스로 오가는 패킷을 캡처해 볼 수 있는 tcpdump 명령어 등
네트워크를 확인할 수 있는 다양한 명령어가 있다.

물론 이런 명령어들을 적절한 상황에 맞게 사용할 수 있다면 좋겠지만
막상 상황이 닥치면 어떻게 확인해야하는지 어떤 명령어를 사용해야 하는지 생각 못하겠지?ㅎㅎ
그래도 이런 명령어들이 알고 있다는 것만으로 많은 도움이 될 거라고 생각한다.

728x90
반응형
복사했습니다!