これは、なにをしたくて書いたもの?
タイトルとおりなのですが、ついついtcpdumpあたりを使って他の用途と一緒に見るのが癖になっていたので。
もっと簡単な方法はないのかな?と思って調べてみました。
環境
今回の環境はこちら。
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 24.04.3 LTS Release: 24.04 Codename: noble $ uname -srvmpio Linux 6.8.0-71-generic #71-Ubuntu SMP PREEMPT_DYNAMIC Tue Jul 22 16:52:38 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
ipコマンドとインターフェース。
$ ip -V
ip utility, iproute2-6.1.0, libbpf 1.3.0
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:91:4b:07 brd ff:ff:ff:ff:ff:ff
altname enp0s5
inet 192.168.121.176/24 metric 100 brd 192.168.121.255 scope global dynamic ens5
valid_lft 3328sec preferred_lft 3328sec
inet6 fe80::5054:ff:fe91:4b07/64 scope link
valid_lft forever preferred_lft forever
3: ens6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:ec:b2:10 brd ff:ff:ff:ff:ff:ff
altname enp0s6
inet 192.168.121.10/24 brd 192.168.121.255 scope global ens6
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:feec:b210/64 scope link
valid_lft forever preferred_lft forever
ip route get
結論を言うと、ip route getを使います。
Ubuntu Manpage: ip-route - routing table management
たとえば192.168.0.3という宛先への確認。
$ ip route get 192.168.0.3
192.168.0.3 via 192.168.121.1 dev ens5 src 192.168.121.176 uid 1000
cache
この場合、ens5というネットワークインターフェースを使用するようです。
ちなみに、IPアドレスではなく名前を渡すとダメなので
$ ip route get google.com Error: any valid prefix is expected rather than "google.com".
この場合は名前解決をした後で使いましょう。
$ ip route get $(dig +short google.com)
172.217.175.46 via 192.168.121.1 dev ens5 src 192.168.121.176 uid 1000
cache