CLOVER🍀

That was when it all began.

Ubuntu Linux 24.04 LTSで、特定の宛先へのパケットがどのインターフェースを使うのかを確認する

これは、なにをしたくて書いたもの?

タイトルとおりなのですが、ついつい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