리눅스에서 네트워크를 확인하기 위한 명령어를 정리해봤다.
일단 네트워크가 이상 없는지 확인할 때
주로 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 명령어 등
네트워크를 확인할 수 있는 다양한 명령어가 있다.
물론 이런 명령어들을 적절한 상황에 맞게 사용할 수 있다면 좋겠지만
막상 상황이 닥치면 어떻게 확인해야하는지 어떤 명령어를 사용해야 하는지 생각 못하겠지?ㅎㅎ
그래도 이런 명령어들이 알고 있다는 것만으로 많은 도움이 될 거라고 생각한다.
'리눅스 > Linux' 카테고리의 다른 글
메모리 Buffer 와 Cache 이해하기 (0) | 2022.01.20 |
---|---|
리눅스 시스템 재시작 로그 확인 (0) | 2021.11.18 |
centos7 네트워크 설정 파일 - ifcfg 파일 (0) | 2021.09.12 |
centos7 yum update error - [Errno 14] HTTP Error 404 - Not Found (0) | 2020.12.16 |
리눅스 하드 링크(hard link)와 심볼릭 링크(symbolic link) (0) | 2020.12.14 |