Linux 시스템에서 라우팅 테이블을 디버깅하기 위한 도구?

Linux 시스템에서 라우팅 테이블을 디버깅하기 위한 도구?

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

내 말은, IP 주소를 입력하여 사용할 수 있고 기존 라우팅 테이블을 고려하여 테이블의 일치 항목을 출력하므로 패킷이 어디로 가는지 알 수 있다는 것입니다.

답변1

사용 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 인터페이스로 전송됩니다.

답변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

관련 정보