Checking Reachability and Paths
한국어 원문으로 표시합니다.
목표
인터페이스와 라우팅을 읽고, ping 통계를 해석하고, UDP 모드 traceroute 와 mtr 을 돌립니다. 마지막에는 ICMP 도달성과 TCP 도달성이 서로 다른 질문임을 직접 증명합니다.
왜 중요한가
ping 은 IP 계층까지만 증명합니다. 그 위의 포트도, 애플리케이션도, 심지어 큰 패킷이 지나갈 수 있는지도 증명하지 않습니다. 반대로 ping 실패가 서버 다운을 뜻하지도 않습니다 — 많은 조직이 ICMP echo 를 차단합니다. 이 실습 환경은 capability 가 제거돼 있어 traceroute 의 ICMP 모드와 mtr 의 기본 모드가 동작하지 않습니다. 이 제약 자체가 좋은 교재입니다: 어떤 진단 도구는 특권을 요구하고, 특권 없는 환경에서는 대체 모드를 알아야 한다.
단계
/root/reach디렉터리를 만들고, 인터페이스 한 줄 요약을/root/reach/iface.txt로 저장하세요.lo가 포함돼야 합니다.- 라우팅 테이블을
/root/reach/route.txt로 저장하세요.default로 시작하는 줄이 있어야 합니다. 127.0.0.1로 3회 ping 한 전체 출력을/root/reach/ping-loop.txt로 저장하세요. 패킷 손실이 0% 여야 합니다.- 자기 자신의 기본 인터페이스 IP 로 3회 ping 한 출력을
/root/reach/ping-self.txt로 저장하세요. 손실이 0% 여야 합니다. - 3번 결과에서 RTT 의 min / avg / max 세 값만 공백으로 구분해 한 줄로
/root/reach/rtt.txt에 적으세요. 127.0.0.1로 traceroute 를 실행해 출력을/root/reach/trace.txt로 저장하고, 사용한 모드를 소문자로/root/reach/trace-mode.txt에 한 줄(udp또는icmp또는tcp) 적으세요.127.0.0.1로 mtr 리포트를 3사이클 실행해/root/reach/mtr.txt로 저장하세요.Loss%머리글이 포함돼야 합니다./root/reach/summary.txt를 다음 3줄로 만드세요. 각 값은 실제로 시도해 본 결과여야 합니다.icmp=<ok|fail>/tcp2222=<ok|fail>/tcp9999=<ok|fail>(ICMP 는127.0.0.1로, TCP 는127.0.0.1의 해당 포트로 판단합니다.)
참고
ip -br addr,ip route,ping -c 3,traceroute -n -m 3,mtr --udp --report -n -c 3조합으로 대부분 해결됩니다.- 이 환경에서
traceroute -I와 옵션 없는mtr은 raw socket 권한이 없어 실패합니다. - TCP 포트 확인은
nc -zv -w 2 127.0.0.1 <포트>로 합니다. - 흔한 실수 1: 5번에서 mdev 까지 네 값을 적는 경우. 세 값만 필요합니다.
- 흔한 실수 2: 8번에서 실제로 시도하지 않고 짐작으로 적는 경우. 각 줄은 명령 출력으로 뒷받침돼야 합니다.
인터페이스 목록 확인
/root/reach 디렉터리를 만들고, 인터페이스 한 줄 요약을 /root/reach/iface.txt 로 저장하세요. lo 가 포함돼야 합니다.
ip 명령에는 한 줄 요약 형식(-br)이 있습니다. 루프백과 실제 인터페이스가 모두 보여야 합니다.
라우팅 테이블 확인
라우팅 테이블을 /root/reach/route.txt 로 저장하세요. default 로 시작하는 줄이 있어야 합니다.
기본 경로는 default 로 시작하는 줄입니다. 게이트웨이 주소는 via 뒤에 옵니다.
루프백 ping
127.0.0.1 로 3회 ping 한 전체 출력을 /root/reach/ping-loop.txt 로 저장하세요. 패킷 손실이 0% 여야 합니다.
-c 로 횟수를 정하면 통계 요약이 마지막에 출력됩니다. 손실률은 그 요약 줄에 있습니다.
자기 IP 로 ping
자기 자신의 기본 인터페이스 IP 로 3회 ping 한 출력을 /root/reach/ping-self.txt 로 저장하세요. 손실이 0% 여야 합니다.
01 단계에서 확인한 인터페이스 주소를 쓰세요. 자기 자신으로 가는 패킷도 손실이 없어야 합니다.
RTT 통계 읽기
3번 결과에서 RTT 의 min / avg / max 세 값만 공백으로 구분해 한 줄로 /root/reach/rtt.txt 에 적으세요.
통계 마지막 줄에 min/avg/max/mdev 가 슬래시로 구분돼 나옵니다. 앞의 세 값만 뽑으면 됩니다.
UDP 모드 traceroute
127.0.0.1 로 traceroute 를 실행해 출력을 /root/reach/trace.txt 로 저장하고, 사용한 모드를 소문자로 /root/reach/trace-mode.txt 에 한 줄(udp 또는 icmp 또는 tcp) 적으세요.
이 환경에는 raw socket 권한이 없어 ICMP 모드가 동작하지 않습니다. traceroute 의 기본 모드가 무엇인지 확인해 보세요.
mtr 리포트
127.0.0.1 로 mtr 리포트를 3사이클 실행해 /root/reach/mtr.txt 로 저장하세요. Loss% 머리글이 포함돼야 합니다.
mtr 도 같은 이유로 UDP 모드가 필요합니다. 한 번 돌고 끝나는 리포트 모드와 횟수 지정 옵션을 함께 쓰세요.
ICMP 와 TCP 비교
/root/reach/summary.txt 를 다음 3줄로 만드세요. 각 값은 실제로 시도해 본 결과여야 합니다.
icmp=<ok|fail> / tcp2222=<ok|fail> / tcp9999=<ok|fail>
(ICMP 는 127.0.0.1 로, TCP 는 127.0.0.1 의 해당 포트로 판단합니다.)
sshd 는 2222 에서 돌고 있고 9999 는 아무도 듣고 있지 않습니다. 세 결과가 각각 무엇을 증명하는지 생각해 보세요.