Linux 컴퓨터에서 라우팅 테이블을 디버깅하기위한 도구?


18

Linux 시스템에서 라우팅 테이블을 디버깅하는 도구가 있습니까?

IP 주소를 입력하여 사용할 수있는 것을 의미합니다. 기존 라우팅 테이블을 고려하고 테이블에서 일치 항목을 출력하므로 패킷이 어디로 갈지 알 수 있습니까?


1
호스트에 대해 정의 된 경로 및 인터페이스 중에서 주어진 IP로 어떤 경로가 사용되는지 알고 싶습니까? 멋진 유틸리티처럼 들립니다. 존재하지 않는 경우 bash를 포함하여 여러 언어로 작성할 수 있습니다.
Andrew

리눅스 머신에 몇 개의 라우터가 연결되어 있습니까? 당신은 traceroute대신 의미 했습니까 ?
ott--

답변:


36

사용하십시오 ip route get. 네트워크 라우팅 구성 에서 :

ip route get명령은 시스템이 지정된 IP 주소에 도달하기 위해 패킷을 전송할 경로를 쿼리 할 수있는 유용한 기능입니다. 예를 들면 다음과 같습니다.

# ip route get 23.6.118.140
23.6.118.140 via 10.0.2.2 dev eth0 src 10.0.2.15
cache mtu 1500 advmss 1460 hoplimit 64

이 예에서, 23.6.118.140에 대한 패킷은 게이트웨이 10.0.2.2를 통해 eth0 인터페이스 밖으로 전송됩니다.


오, 난 그렇게 좋아 +1
roaima

흠 그래서 OpenWRT에서 iproute2를 설치해야하며 어쩌면이 작업을 수행 할 수 있습니까? ifconfig가 기본적으로 제공되는 모든 것이라면 opkg으로 추가 할 수 있다고 확신합니다 ...하지만 옵션이 아닌 경우 roaima의 대답이 더 좋을 것입니다 .iproute2를 사용할 수 있다면 잘 작동합니다. 감사합니다. 둘 다
leeand00

1
OpenWRT는 없지만 설명서를 보면 이제 ip패키지 라고 부르는 것처럼 보입니다 .
Mark Plotnick

다음은 도구 세트의 일부입니다. en.wikipedia.org/wiki/Iproute2
leeand00

음 ... 정책 기반 라우팅에서 작동합니까? iptables, FWMARK 규칙을 사용하여 포트 별 라우팅을 어떻게 추적합니까?
mlt

2

다음 스크립트를 유용한 곳에 저장하십시오. 테스트하려는 IP 주소로 전화하면 해당 경로를 알려줍니다.

#!/bin/bash
#
# Find the appropriate routing entry for a given IP address
########################################################################

########################################################################
# Calculate the base network address for a given addres and netmask
#
baseNet() {
    local ADDRESS="$1" NETMASK="$2"
    ipcalc -nb "$ADDRESS" "$NETMASK" | awk '$1=="Network:"{print $2}'
}

########################################################################
# Go
#
for IPADDRESS in "$@"
do
    netstat -rn |
        tac |
        while read DESTINATION GATEWAY GENMASK FLAGS MSS WINDOW IRTT IFACE
        do
            NSBASENET=$(baseNet "$DESTINATION" "$GENMASK")
            IPBASENET=$(baseNet "$IPADDRESS" "$GENMASK")
            if test "X$NSBASENET" = "X$IPBASENET"
            then
                if test '0.0.0.0' = "$GATEWAY"
                then
                    echo "Matches $DESTINATION with netmask $GENMASK directly on $IFACE"
                else
                    echo "Matches $DESTINATION with netmask $GENMASK via $GATEWAY on $IFACE"
                fi
                break
            fi
        done
done

# All done
#
exit 0

사용법 예

./what-route.sh 10.0.5.6
Matches 0.0.0.0 with netmask 0.0.0.0 via 10.0.2.2 on eth0
./what-route.sh 10.0.2.6
Matches 10.0.2.0 with netmask 255.255.255.0 directly on eth0
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.