EdgeRouter - 디버깅 목적으로 다수의 EdgeRouter 인터페이스에서 패킷 캡쳐하기

download at 2017-02-07T01:12:56Z origin

Kudos to our community member esprosenx 가 이 문서를 제공하였습니다!

저는 최근에 사설 네트워크 대역에 속한 랩톱이 특정 IP 주소로 인터넷 연결이 되지 않는 이슈를 경험하였습니다.

트러블슈팅하기 위해 패킷을 캡쳐하였고 다음의 과정을 거쳤습니다:

저의 경우에는 www.ups.com 로의 접근이 어려웠고 처음에는 DNS 룩업을 수행하였습니다. "dig" 명령어를 EdgeRouter 배포판 코드를 설치한 맥북프로 커맨드라인에서 수행하였습니다.

Erics-MacBook-Pro-2:~ erosenbe$ dig www.ups.com @4.2.2.1
; <<>> DiG 9.8.3-P1 <<>> www.ups.com @4.2.2.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14300
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.ups.com.INA
;; ANSWER SECTION:
www.ups.com.254INCNAMEwww.ups.com.akadns.net.
www.ups.com.akadns.net.254INCNAMEwww.upsprodcidr2.com.akadns.net.
www.upsprodcidr2.com.akadns.net. 30 INCNAMEorigin.www.ups.com.
origin.www.ups.com.2149INA153.2.224.50
origin.www.ups.com.2149INA153.2.228.50
;; Query time: 170 msec
;; SERVER: 4.2.2.1#53(4.2.2.1)
;; WHEN: Fri Apr 19 09:09:26 2013
;; MSG SIZE rcvd: 149
Erics-MacBook-Pro-2:~ erosenbe$

2개의 서로 다른 A 레코드로 주소가 매핑되는 것을 확인하였습니다. 2개 모두 올바르지 않은 주소였습니다.

다음으로는 특정 IP에서 발생, 도착하는 모든 패킷을 실제로 캡쳐할 수 있도록 장치를 설정하였습니다:

Erics-MacBook-Pro-2:~ erosenbe$ tcpdump -i en0 -s 0 -w UPSCapMac.cap host 153.2.224.50
tcpdump: listening on en0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C11 packets captured
1607 packets received by filter
0 packets dropped by kernel
Erics-MacBook-Pro-2:~ erosenbe$

-i 플래그는 사용하고 싶은 인터페이스를 명시하여습니다. "-s 0" 옵션은 tcpdump로 하여금 처음 "x" 바이트만 캡쳐하지 말고, "전체" 프레임을 스나핑 할 수 있도록 하는 매우 중요한 옵션입니다. -w 옵션은 출력 파일의 이름입니다. (기본 값으로는 실행한 디렉토리에 파일을 생성합니다.) 그리고 "host x.x.x.x"를 입력하여 특정 IP로 향하는 패킷을 필터링 하도록 합니다. 이 옵션은 인터페이스를 거쳐가는 모든 쓸모 없는 패킷을 필터링 할 수 있도록합니다.

같은 방법으로 EdgeRouter 자체 장비에 외부 인터페이스에 캡쳐 설정을 수행할 수 있습니다. 이 방법은 SSH 세션을 통해서 수행합니다.

ubnt@plunger:~$ sudo tcpdump -i eth0 -s 0 -w UPSCapPlungerETH0.cap host 153.2.224.50
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C29 packets captured
29 packets received by filter
0 packets dropped by kernel
ubnt@plunger:~$

추가적으로 다른 SSH 세션을 생성하여 내부 인터페이스에도 설정하여 NAT 수정 내역을 확인할 수 있도록 하였습니다.

ubnt@plunger:~$ sudo tcpdump -i eth1 -s 0 -w UPSCapPlungerETH1.cap host 153.2.224.50
tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
^C26 packets captured
26 packets received by filter
0 packets dropped by kernel
ubnt@plunger:~$

최소한의 테스트 케이스만 확인할 수 있도록 단순화 하였습니다. 맥에서 www.ups.com 주소로의 TCP 포트 80을 통한 세션을 확인하고 싶기 때문입니다. 가장 좋은 방법은 텔넷 애플리케이션을 사용하는 방법입니다.

Erics-MacBook-Pro-2:~ erosenbe$ telnet 153.2.224.50 80
Trying 153.2.224.50...
telnet: connect to address 153.2.224.50: Operation timed out
telnet: Unable to connect to remote host
Erics-MacBook-Pro-2:~ erosenbe$

캡쳐하려는 패킷을 생성하고 난 이후에는 모든 패킷 캡쳐 프로그램을 중단하고 EdgeRouter에서 랩탑으로 복사하였습니다:

Erics-MacBook-Pro-2:~ erosenbe$ scp ubnt@192.168.0.1:/home/ubnt/UPSCapPlungerETH0.cap .
Welcome to EdgeOS
By logging in, accessing, or using the Ubiquiti product, you
acknowledge that you have read and understood the Ubiquiti
License Agreement (available in the Web UI at, by default,
http://192.168.1.1) and agree to be bound by its terms.
ubnt@192.168.0.1's password:
UPSCapPlungerETH0.cap 100% 2100 2.1KB/s 00:00
Erics-MacBook-Pro-2:~ erosenbe$
Erics-MacBook-Pro-2:~ erosenbe$ scp ubnt@192.168.0.1:/home/ubnt/UPSCapPlungerETH1.cap .
Welcome to EdgeOS
By logging in, accessing, or using the Ubiquiti product, you
acknowledge that you have read and understood the Ubiquiti
License Agreement (available in the Web UI at, by default,
http://192.168.1.1) and agree to be bound by its terms.
ubnt@192.168.0.1's password:
UPSCapPlungerETH1.cap 100% 2100 2.1KB/s 00:00
Erics-MacBook-Pro-2:~ erosenbe$

파일을 다운로드 받고, 해당 파일을 WireShark를 통해서 확인하여 이슈를 확인하였습니다.

-Eric