🌐

네트워크 트러블슈팅 명령어 치트시트

이 트랙 35개 모듈의 핵심 명령어·단축키 342를 한 곳에 모았습니다. 실무 중 “그 명령어 뭐였지?” 할 때 검색해 바로 꺼내 쓰세요. 각 모듈 제목을 누르면 해당 강의로 이동합니다.

342개 명령 · 35개 모듈
명령어(계층)용도자주 쓰는 예
ip link show (L1/L2)인터페이스 UP/DOWN·MTU 확인ip link show eth0
arp -n (L2)같은 LAN의 MAC 학습 확인arp -n
ping -c <N> (L3)IP 도달성(ICMP) 검증ping -c 4 8.8.8.8
ip route get <IP> (L3)목적지로 나가는 경로 확인ip route get 8.8.8.8
nc -zv <host> <port> (L4)TCP 포트 열림 확인nc -zv 192.168.1.10 443
telnet <host> <port> (L4)포트 연결 수동 확인telnet 192.168.1.10 80
ss -tlnp (L4)로컬 리스닝 포트 확인ss -tlnp | grep :443
curl -I <url> (L7)HTTP 응답·헤더 확인curl -I http://example.com
ping -M do -s 1472 <host> (심화)경로 MTU(단편화 금지) 확인ping -M do -s 1472 대상
명령어용도자주 쓰는 예
ip addr showNIC의 IP·CIDR(prefix) 확인ip a, ip addr show eth0 (inet 10.0.1.25/24 형태)
ipcalc <IP/CIDR>네트워크·브로드캐스트·호스트 범위 계산ipcalc 192.168.10.50/24 (Network/Broadcast/HostMin~Max)
ip route show라우팅 테이블·기본 게이트웨이 확인ip rdefault via가 게이트웨이
ip route get <IP>직접 통신인지 게이트웨이 경유인지 판별ip route get 10.0.2.50via 있으면 라우터 경유
python3 -c "import ipaddress…"두 IP가 같은 서브넷인지 프로그램 판정ipaddress.ip_address('10.0.1.200') in ip_network('10.0.1.0/24')
ip addr add/del잘못 설정한 IP/CIDR 교정ip addr del 10.0.1.50/25 dev eth0 && ip addr add 10.0.1.50/24 dev eth0
명령어용도
ip route라우팅 테이블 확인
ip route show라우팅 테이블 확인
ip route get [목적지 IP]특정 목적지 경로 추적
ip route add [서브넷/prefix] via [게이트웨이] dev [인터페이스]정적 경로 추가 (임시)
ip route add default via [게이트웨이] dev [인터페이스]디폴트 게이트웨이 추가 (임시)
ip route del [서브넷/prefix] via [게이트웨이]경로 삭제
ip route change [서브넷/prefix] via [새 게이트웨이]경로 변경
ip rule show정책 라우팅 규칙 확인
명령어용도
$ systemd-resolve --status시스템이 실제 사용하는 DNS 확인
$ cat /etc/resolv.conf시스템이 실제 사용하는 DNS 확인
$ nmcli dev show | grep DNS시스템이 실제 사용하는 DNS 확인
$ dig @10.0.0.53 myapi.internal.com특정 DNS 서버로 직접 테스트
$ dig @8.8.8.8 myapi.internal.com특정 DNS 서버로 직접 테스트
명령어용도
nc -l [포트]nc 서버 모드 (포트 열기)
nc -l -p [포트] -vnc 서버 모드 (포트 열기)
nc [IP] [포트]nc 클라이언트 모드 (접속)
nc -zv [IP] [포트]nc 클라이언트 모드 (접속)
nc -zuv [IP] [포트]nc 클라이언트 모드 (접속)
ss -tlnp포트 현황 확인
ss -ulnp포트 현황 확인
ss -tnp포트 현황 확인
grep [서비스명] /etc/services서비스별 기본 포트 확인
명령어용도자주 쓰는 예
ip addr show인터페이스 IP·상태 확인ip a, ip addr show eth0 (state UP인데 inet 없으면 IP 미할당)
ip link show실제 인터페이스명·L2 상태 확인eth0 대신 ens3·enp2s0인지 대조, ip link set eth0 up/down
ip route show라우팅·기본 게이트웨이 확인ip rdefault via가 없으면 외부 통신 불가
nmcli con show연결 프로파일 목록·상세nmcli con show --active, nmcli con show "System eth0"
nmcli device status디바이스 관리 상태 확인connected/disconnected/unmanaged 구분
nmcli con modify … ipv4.method manualDHCP→고정 IP 전환auto(DHCP) ↔ manual(고정)
nmcli con modify … ipv4.addresses/gateway/dns고정 IP·GW·DNS 설정ipv4.dns "8.8.8.8,8.8.4.4"
nmcli con down/up변경 설정 적용(재부팅 없이)nmcli con down "System eth0" && nmcli con up "System eth0"
nmcli con add type ethernet새 프로파일 생성(기존 보존·롤백용)… con-name static-eth0 ifname ens3 ipv4.method manual …
nmcli con modify … +/-ipv4.addresses보조 IP(VIP) 추가/제거+ipv4.addresses 192.168.1.201/24(추가), -로 제거
nmcli con modify … ethernet.mtuMTU(점보프레임) 조정ethernet.mtu 9000 → 경로 전체가 지원해야 함
ip addr add/del … dev eth0임시 IP 추가/제거(재부팅 시 소멸)콘솔 복구 시 ip addr add 192.168.1.200/24 dev eth0
ping -M do -s <크기> <IP>경로 MTU(조각화 금지) 점검ping -M do -s 1472 IP(MTU 1500), -s 8972(9000)
arping -A -I eth0 <IP>IP 이전 후 ARP 캐시 갱신arping -A -I eth0 10.100.5.50 -c 3
명령어/단축키용도자주 쓰는 예
cat /etc/resolv.conf현재 nameserver·search·options 확인가장 먼저 — nameserver가 비었/틀렸는지
ls -la /etc/resolv.conf관리 주체(심볼릭 링크) 판별링크면 systemd-resolved가 덮어씀
ping (IP vs 도메인)DNS 문제 vs 네트워크 문제 분리ping -c2 8.8.8.8 성공 + ping -c2 google.com 실패 = DNS
nslookup <도메인> <서버>특정 DNS 서버로 직접 질의nslookup google.com 8.8.8.8 (성공=resolv.conf 문제)
dig질의 상세·특정 서버 지정dig @8.8.8.8 google.com
dig +trace루트→TLD→권한 위임 경로 추적dig +trace google.com (SERVFAIL 원인)
nmcli con mod ... ipv4.dns재부팅 후에도 유지되는 영구 DNSsudo nmcli con mod "ens3" ipv4.dns "8.8.8.8 8.8.4.4"
nmcli con mod ... ipv4.ignore-auto-dnsDHCP가 준 DNS 무시sudo nmcli con mod "ens3" ipv4.ignore-auto-dns yes
resolvectl statussystemd-resolved DNS 상태 확인적용된 nameserver·fallback 확인
resolvectl flush-cachesDNS 캐시 플러시이상한 해석 결과 나올 때
grep hosts /etc/nsswitch.conf이름 해석 순서(files/dns) 확인/etc/hosts가 DNS보다 우선하는지
netplan applyNetplan YAML DNS 반영(Ubuntu Server)sudo netplan applyresolvectl status
목적명령어
모든 리스닝 소켓 확인ss -tulnp
MySQL 바인딩 확인ss -tulnp | grep 3306
Redis 바인딩 확인ss -tulnp | grep 6379
MySQL bind-address 설정 위치/etc/my.cnf 또는 /etc/my.cnf.d/*.cnf
Redis bind 설정 위치/etc/redis/redis.conf
MySQL 재시작systemctl restart mysqld
Redis 재시작systemctl restart redis
방화벽에서 특정 IP만 3306 허용 (CentOS)firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="3306" protocol="tcp" accept' --permanent
명령어용도
ip route show조회
sudo ip route add default via [GW_IP] dev [INTERFACE]추가
sudo ip route del default삭제
sudo ip route replace default via [GW_IP] dev [INTERFACE]교체
명령어용도자주 쓰는 예
sysctl net.ipv4.ip_forwardIP 포워딩 활성 여부 확인/설정sudo sysctl -w net.ipv4.ip_forward=1 (0이면 DNAT해도 드랍)
iptables -t nat -A PREROUTING … -j DNAT포트 포워딩(목적지 변환)--dport 8080 -j DNAT --to-destination 10.0.0.2:80
iptables -t nat -A POSTROUTING … -j MASQUERADE동적 IP SNAT(내부→외부)-s 10.0.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING … -j SNAT고정 공인 IP SNAT-j SNAT --to-source 5.6.7.8
iptables -A FORWARD … -j ACCEPT포워딩 트래픽 허용(정책 DROP 대비)-d 10.0.0.2 --dport 80 -m state --state NEW,ESTABLISHED,RELATED
iptables -t nat -L -n -vNAT 룰·적중(pkts) 확인pkts=0이면 트래픽이 그 체인에 안 닿음
iptables -t nat -D / -F룰 삭제/초기화-D PREROUTING 2(번호 삭제), -F(nat 전체 초기화)
iptables -t nat -I PREROUTING 1 … -j LOG패킷 흐름 추적--log-prefix "NAT-PRE: "journalctl -f | grep NAT-PRE
iptables-save / -restore규칙 영구 저장·복원iptables-save > /etc/iptables/rules.v4
ss -tlnp대상 포트 LISTEN 교차 확인DNAT 대상 서버에서 해당 포트가 열렸는지
conntrack -S / -L -d <IP>SNAT 포트 고갈 진단conntrack -S | grep insert_failed, conntrack -L -d 203.0.113.50 | wc -l
명령어/옵션용도자주 쓰는 예
ping -c <N>지정 횟수만 보내고 종료(무한 방지)ping -c 4 8.8.8.8
ping -i <초>전송 간격 조절(촘촘히 관찰)ping -c 10 -i 0.2 8.8.8.8
ping -s <바이트>패킷 크기 지정(MTU 테스트)ping -c 4 -s 1400 8.8.8.8
ping -W <초>응답 대기(타임아웃) 제한ping -c 4 -W 1 192.168.1.1
mtr --report홉별 손실·지연 위치 추적mtr --report --report-cycles 100 8.8.8.8
traceroute <host>목적지까지 경로(홉) 추적traceroute 8.8.8.8
telnet <host> <port>포트 열림(L4) 확인 — ping 보완telnet 192.168.1.100 80
nc -zv <host> <ports>데이터 없이 포트 스캔(L4)nc -zv 192.168.1.100 80 443
curl -I <url>서비스 응답(L7) 확인curl -I http://my-server.example.com
iptables … --icmp-type echo-request호스트 방화벽에서 ICMP 허용sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
firewall-cmd --list-allfirewalld의 ICMP 차단 여부 확인sudo firewall-cmd --list-all | grep icmp
명령어/옵션용도자주 쓰는 예
telnet <host> <port>단발 TCP 포트 연결 확인(수동)telnet db-server 3306
nc -zv <host> <port>데이터 없이 열림/거부 판정nc -zv 192.168.1.10 443
nc -zv <host> <범위>여러 포트 한 번에 스캔nc -zv 10.0.0.1 20-100
nc -zv -u <host> <port>UDP 포트 점검(무응답 주의)nc -zv -u 8.8.8.8 53
nc -w <초>응답 없는 포트에서 무한 대기 방지nc -zv -w 3 10.0.0.1 8080
nc -l <port>임시 리스닝 서버(반대편 테스트)nc -l 9000
ss -tlnp로컬 LISTEN 포트·프로세스 확인ss -tlnp | grep 5432
iptables -I INPUT … -j DROP/REJECTRefused·Timeout 재현·차단sudo iptables -I INPUT -p tcp --dport 8080 -j DROP
iptables -L -nREJECT/DROP 규칙 확인(거부 출처 판별)sudo iptables -L -n | grep -i reject
traceroute <IP>timeout 시 어느 구간에서 막히는지traceroute 10.0.0.1
명령어용도
sudo ss -tulnp | grep :포트번호===== 포트 점유 확인 =====
sudo lsof -i :포트번호===== 포트 점유 확인 =====
fuser 포트번호/tcp===== 포트 점유 확인 =====
kill [PID]===== 프로세스 종료 =====
kill -9 [PID]===== 프로세스 종료 =====
sudo fuser -k 포트번호/tcp===== 프로세스 종료 =====
sudo systemctl stop 서비스명===== systemd 서비스 =====
sudo systemctl disable 서비스명===== systemd 서비스 =====
docker ps | grep 포트번호===== Docker =====
docker stop 컨테이너ID===== Docker =====
명령설명
traceroute 목적지기본 UDP 모드로 경로 추적
traceroute -n 목적지DNS 역조회 없이 IP로만 표시
traceroute -I 목적지ICMP 모드
traceroute -T -p 80 목적지TCP 80 포트 모드
traceroute -m 20 목적지최대 홉 수 20으로 제한
mtr 목적지실시간 대화형 추적
mtr --report -n 목적지비대화형 리포트 모드
mtr --report-cycles 100 목적지100개 패킷 후 리포트
mtr --tcp --port 443 목적지TCP 모드 mtr
명령설명
curl -I URLHEAD 요청으로 헤더만 확인
curl -v URL전체 HTTP 흐름 verbose 출력
curl -s -o /dev/null -w "%{http_code}" URL상태 코드만 출력
curl -L URL리다이렉트 자동 추적
curl -o 파일 URL응답을 파일로 저장
curl -k URLSSL 검증 건너뜀 (임시 테스트용)
curl -X POST -d '...' -H 'Content-Type: application/json' URLJSON POST 요청
curl --connect-timeout 3 --max-time 10 URL타임아웃 설정
명령어용도자주 쓰는 예
openssl s_client -connect host:443서버와 TLS 핸드셰이크·인증서 수신-servername host 로 SNI 명시(없으면 기본 vhost 인증서)
… x509 -noout -dates인증서 유효기간(만료일) 확인openssl s_client -connect host:443 </dev/null 2>/dev/null | openssl x509 -noout -dates
… x509 -noout -subject -subjectAltNameCN·SAN 도메인 일치 확인접속 도메인이 SAN(DNS:) 목록에 있는지 대조
openssl s_client … -showcerts인증서 체인 완전성 확인… -showcerts | grep "Certificate chain" (중간 CA 누락 탐지)
openssl s_client … -tls1_2/-tls1_3TLS 버전별 협상 테스트핸드셰이크 실패 시 어느 버전에서 되는지 특정
openssl x509 … -checkend만료 임박 여부 종료코드 판정… -checkend $((30*86400)) (30일 내 만료면 cron 알림)
curl -v https://hostTLS 핸드셰이크·인증서 로그curl -v https://host 2>&1 | grep -E 'TLS|subject|expire'
curl -k / --insecure인증서 검증 우회(개발 전용)프로덕션 금지 — 대신 curl --cacert ca.crt
curl --cert/--key/--cacertmTLS 양방향 인증 호출curl --cert client.crt --key client.key --cacert ca.crt https://svc/api
nc -zv host 443443 포트 도달(L4) 분리 확인succeeded면 TLS(L6)로, refused/timeout이면 포트 차단
nmap --script ssl-enum-ciphers서버 지원 TLS 버전·암호군 열거nmap --script ssl-enum-ciphers -p 443 host
certbot renewLet's Encrypt 인증서 갱신sudo certbot renew --dry-run 후 갱신, 반드시 systemctl reload nginx
명령어용도자주 쓰는 예
curl --connect-timeout NTCP 연결(핸드셰이크) 단계만 제한curl --connect-timeout 3 http://10.255.255.1/ (연결 안 되면 3초 컷)
curl --max-time N연결+응답 전체 시간 제한curl --connect-timeout 3 --max-time 10 URL (두 단계 분리 제어)
curl -w "@file"단계별 타이밍 측정-w "@/tmp/curl-format.txt" 로 time_connect·time_starttransfer 분해
curl -w "%{...}"특정 타이밍/코드만 출력-w "%{http_code}", -w "%{time_starttransfer}"
curl -v요청 단계·연결 상세 로그curl -v --connect-timeout 3 --max-time 10 URL
nc -zv -w N host portHTTP 없이 순수 TCP 연결만 점검nc -zv -w 3 httpbin.org 443 (succeeded면 L4 정상)
for port in …; nc -zv여러 포트 일괄 개방 점검for p in 80 443 8080; do nc -zv -w 2 host $p; done
ss -o state established유휴 established 소켓·타이머 확인ss -o state established '( dport = :443 )'
tcpdump -ni any재전송·무응답 패킷 확인sudo tcpdump -ni any 'tcp port 443 and host api...'
장애 신고확인 명령
"서버 접속이 안 돼요"ss -tlnp | grep 포트번호
"서버가 느려요"ss -antp | grep ESTAB | wc -l
"주기적으로 연결이 끊겨요"ss -antp | grep CLOSE-WAIT | wc -l
"새벽마다 장애가 나요"ss -s로 TIME_WAIT 추이 모니터링
"특정 IP에서만 접속 안 돼요"ss -antp | grep [IP]
명령어/단축키용도자주 쓰는 예
arp -anARP 캐시 스냅샷(IP↔MAC)arp -an | grep 192.168.1.50 (특정 IP MAC 확인)
ip neigh showneighbor 테이블 상태까지 확인REACHABLE/STALE/INCOMPLETE/FAILED 판독
watch arp -anMAC 펄럭임(충돌) 실시간 관찰watch -n1 'arp -an | grep 192.168.10.55'
arping -I -c같은 IP에 응답하는 MAC 수 확인sudo arping -I eth0 -c 5 192.168.1.50 (두 MAC=충돌)
arping -D배포 전 IP 중복 사전 점검sudo arping -D -I eth0 192.168.1.60 (응답=이미 사용 중)
ip neigh flush allARP 캐시 전체 초기화충돌 해결 후 옛 MAC 강제 갱신
ip neigh del / arp -d특정 항목만 삭제sudo ip neigh del 192.168.1.50 dev eth0
tcpdump -n arpARP 요청/응답 직접 캡처sudo tcpdump -i eth0 -n "arp and host 192.168.1.50"
ip neigh show | wc -l현재 엔트리 수 세기(포화 진단)gc_thresh3(기본 1024)과 비교
sysctl ...gc_thresh3neighbor 테이블 하드 상한 확인sysctl net.ipv4.neigh.default.gc_thresh3
dmesgneighbor table overflow 확인dmesg -T | grep 'table overflow'
목적명령어
빠른 아웃바운드 HTTP 점검curl -o /dev/null -s -w "%{http_code}" --connect-timeout 5 http://example.com
HTTPS 연결 및 응답 확인curl -v --connect-timeout 5 https://example.com
파일 다운로드 (curl)curl -O https://example.com/file.tar.gz
파일 다운로드 (wget)wget https://example.com/file.tar.gz
프록시를 통한 요청curl -x http://proxy:3128 https://example.com
SSL 검증 무시 (임시)curl -k https://internal.example.com
포트 아웃바운드 점검nc -zv -w 3 example.com 443
DNS 해석 확인nslookup example.com
명령어/단축키용도자주 쓰는 예
firewall-cmd --list-all현재 zone 규칙 전체 확인sudo firewall-cmd --zone=public --list-all
firewall-cmd --get-active-zones인터페이스·source의 zone 바인딩source zone 우선순위 함정 진단 시
firewall-cmd --add-service / --add-port서비스·포트 허용--zone=public --add-port=8080/tcp --permanent
firewall-cmd --add-rich-rule출발지 IP+포트+프로토콜 ACLrule family=ipv4 source address=203.0.113.10/32 service name=ssh accept
firewall-cmd --add-source대역을 zone에 바인딩--zone=internal --add-source=10.0.0.0/8 (trusted 금지)
firewall-cmd --reload--permanent 규칙 적용세션 끊김 주의 — 대안은 아래
firewall-cmd --runtime-to-permanent런타임 규칙을 무중단 영구화reload 없이 즉시 반영 후 저장
firewall-cmd --list-rich-rules등록된 rich rule 확인--zone=public --list-rich-rules
conntrack -L추적 중인 세션 조회conntrack -L | grep dport=22
conntrack -C현재 추적 연결 수nf_conntrack_max의 80%↑면 증설 신호
nft list rulesetfirewalld 백엔드 규칙 전체sudo nft list ruleset | grep -A5 output
iptables -L -n -v체인 기본정책·룰 적중 카운터iptables -L -n -v --line-numbers (pkts 0=미적중)
... | at now + 5 minutes실수 대비 자동 롤백 예약echo "firewall-cmd --reload" | sudo at now + 5 minutes
목적명령어
포트 추가 (영구)firewall-cmd --zone=public --add-port=8080/tcp --permanent && firewall-cmd --reload
포트 제거 (영구)firewall-cmd --zone=public --remove-port=8080/tcp --permanent && firewall-cmd --reload
포트 목록 확인firewall-cmd --list-ports
영구 설정 확인firewall-cmd --permanent --list-ports
전체 규칙 확인firewall-cmd --list-all
포트 허용ufw allow 8080/tcp
특정 IP에서만 허용ufw allow from 192.168.1.100 to any port 3306
포트 거부ufw deny 8080/tcp
상태 확인ufw status verbose
번호로 규칙 삭제ufw delete 규칙번호
명령어/옵션용도자주 쓰는 예
iptables -L <체인> -n -v --line-numbers규칙·카운터·줄번호 확인(진단 첫 명령)iptables -L INPUT -n -v --line-numbers
iptables -I INPUT 1 …맨 위에 규칙 삽입(policy DROP에선 필수)iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT …체인 맨 끝에 규칙 추가iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -D INPUT <번호>규칙 삭제(줄번호 기준)iptables -D INPUT 3
-s <CIDR>출발지 IP 제한(SSH 특정 대역만)iptables -I INPUT 1 -p tcp --dport 22 -s 203.0.113.0/24 -j ACCEPT
-m conntrack --ctstate ESTABLISHED,RELATED아웃바운드 응답 자동 허용(stateful)iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-j DROP조용히 폐기(외부 공격·스캔 차단)iptables -I INPUT 1 -s 45.142.212.100 -j DROP
-j REJECT --reject-with즉시 거부(내부·개발 디버깅)iptables -A INPUT -p tcp --dport 22 -j REJECT --reject-with tcp-reset
-j LOG --log-prefix차단 패킷 기록(-m limit로 폭주 방지)iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "DROP: "
iptables -P <체인> DROP체인 기본 정책 지정iptables -P FORWARD DROP
iptables-save > <파일>규칙 영구 저장iptables-save > /etc/iptables/rules.v4
iptables-restore < <파일>저장 규칙 일괄 복원iptables-restore < /etc/iptables/rules.v4
conntrack -L연결 추적 테이블 확인(포화 진단)conntrack -L | wc -l
iptables -F규칙 전체 삭제 — 운영/원격에서 직접 실행하지 말고 검증된 ruleset을 restore(직접 실행 금지)
명령어/단축키용도자주 쓰는 예
aws ec2 describe-security-groupsSG 인바운드/아웃바운드 규칙 조회--group-ids sg-xxx --query 'SecurityGroups[*].IpPermissions'
aws ec2 describe-instances인스턴스에 부착된 SG 확인--instance-ids i-xxx --query 'Reservations[*].Instances[*].SecurityGroups'
aws ec2 describe-network-acls서브넷 NACL 인/아웃 규칙 확인--filters "Name=association.subnet-id,Values=subnet-xxx"
aws ec2 describe-route-tables0.0.0.0/0 → igw/nat 경로 확인--filters "Name=association.subnet-id,Values=subnet-xxx"
aws ec2 describe-network-interfacesALB/RDS ENI 실제 부착 위치--filters "Name=group-id,Values=sg-xxx"
aws ec2 authorize-security-group-ingressSG ID를 소스로 포트 허용--group-id $DB_SG --protocol tcp --port 3306 --source-group $WEB_SG
aws logs filter-log-eventsFlow Logs에서 REJECT 필터--filter-pattern "8080 REJECT" (차단 지점 특정)
nc -zvEC2 내부 포트 도달성 테스트nc -zv 10.0.2.100 3306 -w 3 (timed out=방화벽 / refused=앱)
ss -tlnp포트 LISTEN 여부 확인sudo ss -tlnp | grep :8080 (refused 원인)
iptables -L INPUT -n -vOS 방화벽 차단 확인sudo iptables -L INPUT -n | grep 8080
ping -M do -s경로 MTU/PMTUD 블랙홀 확인ping -M do -s 1472 <대상> (큰 패킷만 멈출 때)
명령어/옵션용도자주 쓰는 예
modprobe 8021qVLAN(802.1Q) 커널 모듈 로드lsmod | grep 8021q || sudo modprobe 8021q
ip link add link <부모> name <이름> type vlan id <N>VLAN 서브인터페이스 생성sudo ip link add link eth0 name eth0.10 type vlan id 10
ip addr add <IP> dev <vlan-if>VLAN 인터페이스에 IP 할당sudo ip addr add 192.168.10.100/24 dev eth0.10
ip link set <if> up인터페이스 활성화sudo ip link set eth0.10 up
ip -d link show <if>VLAN 프로토콜·ID 상세 확인ip -d link show eth0.10
ip link set <if> mtu <N>태그 4B 오버헤드로 MTU 조정sudo ip link set eth0.10 mtu 1496
tcpdump -e -n vlan프레임의 실제 VLAN 태그 캡처sudo tcpdump -i eth0 -e -n vlan
ping -s 1472 -M do <host>단편화 금지 MTU 검증ping -c 4 -s 1472 -M do 192.168.10.1
ip neigh show / arp -nARP 학습 여부(단절 진단)ip neigh show
cat /proc/net/vlan/config구성된 VLAN 인터페이스 일람cat /proc/net/vlan/config
명령어/옵션용도자주 쓰는 예
tcpdump -i <iface>캡처할 인터페이스 지정sudo tcpdump -i eth0 -nn port 443
-n / -nnDNS·포트 역조회 끄기(빠른 분석)tcpdump -i eth0 -nn host 10.0.0.5
host <IP> and port <N>BPF로 특정 호스트·포트만sudo tcpdump -i eth0 -nn host 10.0.0.5 and port 443
src / dst출발지·목적지 방향 필터tcpdump -i eth0 -n dst port 22
not / or제외·다중 조건 결합tcpdump -i eth0 -n port 80 or port 443
'tcp[tcpflags] & tcp-syn != 0'SYN·RST만 골라 연결 시도·거부 추적sudo tcpdump -i eth0 -n 'tcp[tcpflags] & tcp-rst != 0'
-w <파일> / -r <파일>pcap 저장·재분석(Wireshark 연동)tcpdump -i eth0 -w cap.pcaptcpdump -r cap.pcap -n
-c <N> / -s <바이트>패킷 수·캡처 길이 제한tcpdump -i eth0 -c 10000 -s 0 port 443
-C <MB> -W <개수> / -G <초>파일 순환 저장(디스크 풀 방지)tcpdump -w rot.pcap -C 100 -W 5
-A / -X페이로드 ASCII·Hex 덤프sudo tcpdump -i eth0 -A port 80 | grep HTTP
tcpdump -D캡처 가능한 인터페이스 목록sudo tcpdump -D
ethtool -K <iface> …캡처 중 오프로드 끄기(cksum·거대세그먼트 착시 제거)ethtool -K eth0 gro off gso off tso off
명령어/설정용도자주 쓰는 예
haproxy -c -f <cfg>설정 문법 검증(재시작 전 필수)sudo haproxy -c -f /etc/haproxy/haproxy.cfg → Configuration file is valid
systemctl reload haproxy무중단 설정 반영haproxy -c … && sudo systemctl reload haproxy
balance <알고리즘>분산 방식 지정(설정)balance roundrobin / leastconn(편차 큼) / source(세션 고정)
option httpchk + http-check expectL7 헬스체크(설정)option httpchk GET /health + http-check expect status 200
server … check inter rise fall서버 등록·헬스체크 민감도(설정)server web1 127.0.0.1:8001 check inter 3000 rise 2 fall 3
cookie … insert쿠키 기반 세션 고정(설정)cookie SERVERID insert indirect nocache + server … cookie srv1
option forwardfor / http-reuse원본 IP 전달 / 백엔드 연결 재사용(설정)XFF로 진짜 IP 로깅, http-reuse로 소스 포트 고갈 완화
curl 반복 요청분산·Failover 동작 확인for i in $(seq 1 10); do curl -s http://localhost:80; done
tail -f /var/log/haproxy.log라우팅·헬스체크 로그 추적DOWN / Layer7 timeout 원인 확인
ss -tan state time-wait | wc -l소스 포트 고갈 진단sysctl net.ipv4.ip_local_port_range로 범위 확인
stats 페이지(stats uri /stats)실시간 서버 상태(UP/DOWN)·연결 수http://서버IP:8404/stats 접속
명령어용도자주 쓰는 예
apt-get install keepalivedKeepalived 설치(두 노드)sudo apt-get install -y keepalived (RHEL은 yum install -y keepalived)
sysctl -w net.ipv4.ip_nonlocal_bind=1VIP 바인딩 허용(nonlocal bind)net.ipv4.ip_forward=1 과 함께 설정
keepalived -t -f <conf>설정 파일 문법 검증sudo keepalived -t -f /etc/keepalived/keepalived.conf
systemctl status keepalivedMASTER/BACKUP 상태 확인출력에 Entering MASTER STATE 면 VIP 보유 노드
systemctl stop keepalivedVRRP 참여 중단(안전한 수동 절체)Active를 내려 Standby 승격 유도
ip addr showVIP 바인딩 위치 확인ip addr show eth0 | grep 192.168.1.100 (한 노드에만 있어야 정상)
ip link show실제 NIC 이름 확인interface eth0 오류 시 ens3·enp0s3 대조
journalctl -u keepalivedVRRP 로그·오류 추적sudo journalctl -u keepalived -n 50
tcpdump … vrrpVRRP 광고 패킷 캡처sudo tcpdump -i eth0 -n vrrp (split-brain·차단 확인)
tcpdump … arp / arp -nGARP 송출·ARP 캐시 확인절체 후 tcpdump -i eth0 arp, arp -n 으로 옛 MAC 확인
firewall-cmd --add-protocol=vrrpVRRP 방화벽 허용(firewalld)sudo firewall-cmd --add-protocol=vrrp --permanent && sudo firewall-cmd --reload
iptables -p vrrp -j ACCEPTVRRP 허용(iptables)sudo iptables -A INPUT -p vrrp -j ACCEPT
명령어/단축키용도자주 쓰는 예
curl --proxy프록시 경유 연결 테스트curl -v https://pypi.org/ --proxy http://dmz-proxy:3128
curl --connect-timeout직접 연결 차단(폐쇄망 격리) 확인curl -v --connect-timeout 5 https://pypi.org/ (타임아웃=격리 정상)
export http_proxy / https_proxy셸에 프록시 주입(HTTP·HTTPS 별도)export https_proxy=http://dmz-proxy:3128
squid -k parsesquid.conf 문법 검사재시작 전 항상 — 에러 없이 통과해야
squid -k reconfigure무중단 설정 재로드ACL 추가 후 sudo squid -k reconfigure
squid -z캐시 디렉토리 초기화sudo squid -z && sudo systemctl restart squid
tail .../squid/access.log프록시 요청·차단 감사tail -f /var/log/squid/access.log | grep DENIED
grep <도메인> squid.confACL에 도메인 등록됐는지 확인grep pythonhosted /etc/squid/squid.conf
getent hosts (프록시에서)목적지 이름 해석 주체 확인프록시에서 getent hosts pypi.org (NONE/503 진단)
apt 프록시 파일apt가 프록시 경유하게/etc/apt/apt.conf.d/01proxyAcquire::http::Proxy
strace -e trace=networkpip 접근 도메인 사전 파악strace -e trace=network pip install pandas 2>&1 | grep connect
명령어/단축키용도자주 쓰는 예
iftop -iIP별 실시간 대역폭 진단sudo iftop -i eth0 -f "port 443"
iftop 키 s/d/n출발지·목적지 집계·이름 전환s=출발지, d=목적지, n=IP/호스트명 토글
nload인터페이스 전체 대역폭(상·하행)nload eth0 / nload -u h (human)
vnstat누적 트래픽 통계(일/월/시)vnstat -d / vnstat -m / vnstat -l (라이브)
ss -tnp특정 IP 연결의 프로세스 찾기ss -tnp | grep 52.95.121.30 (범인 PID)
ss -tlnpexporter 포트 LISTEN 확인ss -tlnp | grep 9100 (node-exporter)
netstat -tnpss 대체(연결↔프로세스 매핑)netstat -tnp | grep <IP>
curl <target>:9100/metricsPrometheus 수집 대상 직접 확인connection refused=exporter 꺼짐/방화벽
aws cloudwatch put-metric-alarm임계값 알람 생성--metric-name TargetResponseTime --statistic p99 --threshold 1.0
aws cloudwatch list-metrics실제 수집된 메트릭 확인--namespace "MyApp/System" (No data 진단)
rate(...[5m]) (PromQL)초당 증가율(에러율·요청수)rate(http_requests_total{status=~"5.."}[5m])
histogram_quantile(...) (PromQL)P99 등 분위수 응답시간histogram_quantile(0.99, rate(...bucket[5m]))
명령어/단축키용도자주 쓰는 예
aws ec2 describe-vpcsVPC 목록·CIDR 확인--query 'Vpcs[*].{VpcId:VpcId,CIDR:CidrBlock}'
aws ec2 describe-subnets서브넷·AZ·MapPublicIp 확인--filters "Name=vpc-id,Values=$VPC_ID"
aws ec2 describe-route-tablesPublic/Private 판별(0.0.0.0/0 대상)--filters "Name=association.subnet-id,Values=subnet-xxx"
aws ec2 describe-nat-gatewaysNAT GW 존재·available 확인--filter "Name=vpc-id,Values=$VPC_ID" "Name=state,Values=available"
aws ec2 create-nat-gateway프라이빗 아웃바운드용 NAT 생성--subnet-id $PUBLIC_SUBNET --allocation-id $EIP
aws ec2 create-route라우트 테이블에 NAT/IGW 경로 추가--route-table-id $RT --destination-cidr-block 0.0.0.0/0 --nat-gateway-id $NAT
aws ec2 describe-security-groupsSG 인/아웃 규칙 확인--group-ids $SG_ID
aws ec2 describe-network-acls서브넷 NACL 규칙 확인--filters "Name=association.subnet-id,Values=subnet-xxx"
aws ec2 create-network-acl-entryNACL 규칙 추가(Stateless 양방향)--egress ... --port-range From=1024,To=65535 (응답용 ephemeral)
aws logs filter-log-eventsFlow Logs에서 REJECT 확인--log-group-name /vpc/flow-logs --filter-pattern REJECT
curl http://169.254.169.254/...인스턴스 메타데이터로 서브넷·공인IPcurl -s .../latest/meta-data/public-ipv4 (없으면 Private)
ping / curl (Private에서)NAT 경로 정상 여부 검증ping -c3 8.8.8.8, curl -I https://aws.amazon.com
목적명령어/표현
타임아웃 포함 포트 점검nc -zv -w 3 192.168.1.200 3306
종료 코드 확인echo $? (0=성공, 비0=실패)
타임스탬프 생성$(date '+%Y-%m-%d %H:%M:%S')
로그 파일에 기록echo "메시지" >> /var/log/netcheck.log
bash 배열 선언TARGETS=("host1:port1:desc1" "host2:port2:desc2")
배열 순회for item in "${TARGETS[@]}"; do ...; done
문자열 파싱echo "$item" | cut -d: -f1
cron 5분 주기*/5 * * * * /opt/scripts/netcheck.sh
cron 등록 확인crontab -l
단계목적명령어성공 기준
1단계L3 라우팅 확인ping -c 4 [DB_IP]0% packet loss
2단계L4 방화벽+포트nc -zv -w 3 [DB_IP] 3306succeeded!
3단계데몬 기동 확인ss -tulnp | grep 3306리스닝 항목 있음
4단계라우팅/DNS 설정ip route show + cat /etc/resolv.confdefault via 항목 있음
명령어/단축키용도자주 쓰는 예
docker network inspect두 컨테이너가 같은 네트워크인지docker network inspect debug-net (Containers·Subnet)
docker exec ... cat /etc/resolv.conf내장 DNS(127.0.0.11) 확인이름 해석 실패 시 nameserver 확인
docker exec ... getent hosts컨테이너 이름 DNS 해석 테스트docker exec api getent hosts db
docker inspect --format컨테이너 IP·네트워크 추출docker inspect db --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'
docker port호스트↔컨테이너 포트 바인딩docker port server (80/tcp -> 0.0.0.0:8080)
docker network connect컨테이너를 다른 네트워크에 추가docker network connect net-b web (no such host 해결)
iptables -t nat -L DOCKER포트포워딩(DNAT) 규칙 확인sudo iptables -t nat -L DOCKER --line-numbers | grep 8080
kubectl get endpointsService가 Pod에 연결됐는지<none>이면 selector 불일치/Pod 크래시
kubectl exec -it ... --Pod 안에서 직접 통신 검증kubectl exec -it debug-pod -- wget -qO- http://api-svc/
kubectl port-forwardService/Pod 우회 로컬 접근kubectl port-forward svc/api-svc 8080:80
nc -z -w3컨테이너 간 포트 도달성busybox sh -c "nc -z -w3 $DB_IP 5432"
ping -M do -s / ip link show오버레이 MTU 블랙홀 확인ping -M do -s 1472 <대상>, ip link show로 MTU 비교
명령어/옵션용도자주 쓰는 예
openvpn --config <파일>.ovpnOpenVPN 클라이언트 접속sudo openvpn --config client.ovpn
ip addr show tun0VPN 인터페이스·할당 IP 확인ip addr show tun0
ip route show | grep tun0내부 대역이 터널로 가는지 확인ip route show | grep tun0
ip route add <망> via <gw> dev tun0누락된 내부망 경로 수동 추가sudo ip route add 10.0.0.0/16 via 10.8.0.1 dev tun0
nc -u -z -v <host> 1194VPN UDP 포트 차단 여부 진단nc -u -z -w 5 -v vpn.company.com 1194
wg-quick up/down <if>WireGuard 연결·해제sudo wg-quick up wg0
wg show핸드셰이크·송수신 바이트 확인sudo wg show
wg genkey | wg pubkeyWireGuard 키페어 생성wg genkey | tee privatekey | wg pubkey > publickey
resolvectl statustun0에 내부 DNS·검색도메인 적용 확인resolvectl status
dig <도메인> @<내부DNS>내부 리졸버가 사설 IP 주는지 대조dig intranet.company.com @10.9.0.1