2011. 8. 17. 04:04

♧ 네트워크 문제 해결은 일반적으로 하단 레이어에서 이루어진다.

 

호스트 연결 체크

♧ 링크와 듀플렉스가 불일치가 아니라는 것을 알 때, 다음 단계는 기본 게이트웨이로 ping을 한다.

/etc/network/interfaces 파일로 기본 게이트웨이(gw)를 구성하거나 시스템을 DHCP 같은 서비스로

기본 게이트웨이를 설정한다.

 

▶ 실제 라우팅 테이블의 기본 게이트웨이를 점검

$ ip route

192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.4 metric 1

169.254.0.0/16 dev eth0 scope link metric 1000

default via 192.168.0.1 dev eth0 proto static

☞ 위 예에서 기본 라우트를 위한 게이트웨이는 192.168.0.1 이다.

 

▶ ping 명령을 사용하여 게이트웨이의 IP접속을 확인

$ ping 192.168.0.1

PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.

64 bytes from 192.168.0.1: icmp_req=1 ttl=64 time=2.01 ms

64 bytes from 192.168.0.1: icmp_req=2 ttl=64 time=0.514 ms

64 bytes from 192.168.0.1: icmp_req=3 ttl=64 time=0.521 ms

64 bytes from 192.168.0.1: icmp_req=4 ttl=64 time=0.518 ms

 

--- 192.168.0.1 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3001ms

rtt min/avg/max/mdev = 0.514/0.890/2.010/0.647 ms

 

◎ ping 옵션

$ ping -a 192.168.0.1

ping 프로그레스에 audible ping 추가

$ ping -c 4 192.168.0.1

4번 ping 하고 종료

$ ping -q -c 5 192.168.0.1

ping 요약을 보여줌

$ sudo ping -f 192.168.0.1

ping의 흐름을 전송(root)

$ ping -i 3 192.168.0.1

3초 간격으로 패킷 전송

$ sudo ping -I eth0 192.168.0.1

eth0 설정(여러 가지 NICs를 사용하는 경우)

$ sudo ping -s 1500 192.168.0.1

1500 byte로 패킷 사이즈 설정

☞ 기본적으로 ping은 작은 패킷(56 byte)을 전송.

 

 

 

 

Address Resolution Protocol(ARP) 체크

♧ 게이트웨이에 ping을 할 수 없다면, 이더넷 MAC 레이어를 의심할 것이다.

Address Resolution Protocol(ARP)은 MAC 레이어 정보를 발견하는데 사용할 수 있다.

 

▶ 호스트 네임으로 ARP 캐시의 컴퓨터 목록 arp를 출력.

$ arp -v

이름 항목의 ARP 캐시 목록

$ arp -vn

IP 어드레스 항목의 ARP 캐시 목록

$ sudo arp -d 192.168.0.4

ARP 캐시에서 192.168.0.4 주소 삭제

$ sudo arp -s 192.168.0.4 00:0B:6A:02:EC:95

ARP에 IP와 MAC 어드레스 추가

 

arping명령을 사용하여 사용중인 IP를 보려고 서브넷 쿼리.

$ arping 192.168.0.50

사용중인 192.168.0.50을 보려고 서브넷 쿼리

$ arping -f 192.168.0.50

192.168.0.50 쿼리하고 첫 번째 응답에 멈춤

$ arping -c 2 192.168.0.50

해당주소를 쿼리하고 2회에 멈춤

 

 

 

 

호스트 경로 추적

♧ 게이트웨이 ping할 수 있고 심지어 네트워크 밖에 있는 컴퓨터에도 도달하는지 확인 후,

여전히 특정 호스트 혹은 네트워크에 도달하는데 문제를 가지고 있다면, 병목 혹은 실패지점을 발견하려고 traceroute를 사용할 수 있다.

 

$ traceroute boost.turbosphere.com

traceroute to boost.turbosphere.com (66.113.99.70), 30 hops max, 60 byte packets

6 203.248.238.37 (203.248.238.37) 4.497 ms 1.159 ms 3.815 ms

7 203.233.117.153 (203.233.117.153) 3.823 ms 3.841 ms 210.120.61.93 …

8 61.42.202.93 (61.42.202.93) 4.281 ms 4.353 ms 4.264 ms

9 210.120.105.145 (210.120.105.145) 3.770 ms 3.786 ms 3.804 ms

 

추적 끝에 애스터리스크(*) 라인은 그 대상의 트래픽을 차단하여 방화벽으로 인해 발생한다.

그러나 목적지 전에 몇 개의 애스터리스크(*)를 본다면, 무거운 혼잡, 장비 실패와 병목지점을 나타낼 수 있다.

 

기본적으로, traceroute는 ICMP보다 더 현실적인 성능 UDP패킷을 사용한다.

그 때문에 일부 인터넷 홉은 ICMP트래픽에 낮은 우선순위를 준다.

ICMP패킷을 사용하여 추적하는 경우가 여전히 같다면, 다음과 같이 명령어를 시도.

$ traceroute -I boost.turbosphere.com

ICMP 패킷을 사용하여 경로 추적

$ traceroute -p 25 boost.turbosphere.com

25번 포트 접속하여 추적

$ traceroute -n boost.turbosphere.com

name resolution을 해제하여 추적

☞ 대안으로 tracepath 명령으로 UDP를 추적하는데 사용 : $ tracepath boost.turbosphere.com

 

커널 라우팅 테이블을 보고 조작하려면, route 명령어를 사용.

 

▶ route 명령어를 사용하여 로컬 라우팅 테이블 표시

$ route

로컬 라우팅 테이블 정보 표시

Kernel IP routing table

Destination     Gateway         Genmask            Flags   Metric Ref    Use Iface

192.168.0.0     *                       255.255.255.0   U          1          0        0 eth0

link-local          *                       255.255.0.0        U          1000   0        0 eth0

default             192.168.0.1     0.0.0.0                UG        0          0        0 eth0

$ route -n

DNS 검색 없이 라우팅 테이블 표시

 

▷ gw 옵션을 사용하여 기본 게이트웨이를 추가

$ sudo route add default gw 192.168.0.1

기본 게이트웨이 192.168.0.1 추가

▷ 새로운 라우트 추가.

$ sudo route add -net 192.168.0.0 netmask 255.2855.255.0 eth0

$ sudo route add -net 192.168.0.0 netmask 255.2855.255.0 gw 10.0.0.100

▷ 라우트 삭제.

$ sudo route del -net 192.168.0.0 netmask 255.255.255.0

 

새로운 ip 명령어를 사용하면, route 명령어에서 보여줬던 것처럼 똑같이 할 수 있다.

▶ 같은 기본 라우팅 정보를 보여주는 세가지 다른 방법.

$ ip route show

기본 라우팅 정보 표시

192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.4 metric 1

169.254.0.0/16 dev eth0 scope link metric 1000

default via 192.168.0.1 dev eth0 proto static

$ ip route

기본 라우팅 표시 (예 #2)

$ ip r

기본 라우팅 표시 (예 #3)

▶ ip로 라우트를 삭제하고 추가

$ sudo ip r add 192.168.0.0/24 via 10.0.0.100 dev eth0

인터페이스 라우트 추가

$ sudo ip r add 192.168.0.0/24 via 10.0.0.100

인터페이스 없이 라우트 추가

$ sudo ip r del 192.168.0.0/24

라우트 삭제

 

영구적인 새로운 라우트를 만들려면, /etc/network/interfaces 파일을 편집하고 그 파일에 새로운

라우트 정보를 배치하라. 위의 ip 명령어는 라우트를 추가하고 add, /etc/network/interfaces

다음과 같은 라인을 추가.

iface eth0 inet static

address 192.168.0.0

netmask 255.255.255.0

gateway 10.0.0.100

 

 

 

 

netstat 연결 및 통계 표시

♧ 앞의 툴은 네트워크 레이어(레이어 3)에서 대부분 네트워크 문제가 커버되었다.

패킷에 관한 정보를 표시하기 위해 전송-레이어 프로토콜과 ICMP 사이로 전송하려면,

netstat 명령어 사용.

$ netstat -s | less

활성화된 TCP, ICMP, UDP 요약을 보여줌

$ sudo netstat -tanp

활성화된 TCP 연결을 보여줌

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 786/mysqld

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 374/sshd

tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1097/cupsd

$ sudo netstat -uanp

활성화된 UDP 연결 보기

☞ netstat 데몬 범위에서 TCP 포트까지 출력을 좁히려면, listen 단어 검색

$ sudo netstat -tanp | grep -i listen

 

 

 

 

기타 네트워크 툴 (tcpdump, nmap)

♧ 시스템에서 송신, 수신 패킷의 헤더 정보를 보길 원한다면, tcpdump를 사용.

tcpdump 명령어는 haystack의 패킷 안에 needle을 찾고 필터링을 선회하는 고급 기능이 많이 있다.

원격시스템에서 tcpdump를 실행한다면, 화면 클라이언트와 원격시스템 사이의

모든 ssh 트래픽이 넘쳐날 것이다.

 

tcpdump 필터링이 어떻게 작동 되는지 많이 배울 필요없이 시작

$ sudo tcpdump | grep -v ssh

ssh와 연관된 것을 제외하고 패킷을 찾음

 

▶ nmap로 기본적인 호스트를 스캔

$ sudo nmap 10.0.0.1

컴퓨터의 10.0.0.1 포트 스캔

$ sudo nmap -vv 10.0.0.1

nmap 출력에서 최대 다변을 보여줌

$ sudo nmap -vv -sP 10.0.0.0/24

전체 너트워크의 호스트 스캔

$ sudo nmap -vv -P0 -O -p 100-200 10.0.0.1

ping 없이, OS fingerpint, 100-200포트 ping

 

 

Posted by devanix