Linuxマシンでルーティングテーブルをデバッグするためのツールですか?


18

Linuxマシンでルーティングテーブルをデバッグするツールはありますか?

IPアドレスを入力することで使用できるものを意味します。既存のルーティングテーブルを考慮してテーブルから一致を出力しますので、パケットがどこに行くのかを知ることができますか?


1
ホストに定義されているルートとインターフェースのうち、特定のIPにどのルートが使用されるかを知りたいだけですか?クールなユーティリティのように聞こえます。存在しない場合は、bashでさえ、任意の数の言語で記述できます。
アンドリュー

Linuxマシンにはいくつのルーターが接続されていますか?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
ロアイマ

うーんそうOpenWrtの私にちょうどiproute2をインストールする必要があり、その後、多分私はこれを行うことができますか?ifconfigがデフォルトで付属しているので、opkgで追加できると確信しています...しかし、それがオプションではない場合、roaimaの答えが良いでしょう、iproute2が利用可能であれば、これは素晴らしい機能です、ありがとうあなた両方。
leeand00

1
私はOpenWrtのを持っていないが、彼らは今それを呼び出すような彼らのドキュメントを見てから、それが見えipたパッケージ。
マーク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.