traceroute 指令:安裝與用法、-n、-I、-T 選項
想逐跳確認封包前往目的地時經過哪些路由器,就使用 traceroute 指令。AlmaLinux 9.8 伺服器上沒有安裝 traceroute,所以我們用 dnf 安裝;在內含 traceroute 2.1.2 的 Debian 12 伺服器上追蹤到 example.com 的路徑,結果在第七跳抵達目的地。
以下輸出是 Debian 12 伺服器以一般帳號執行的結果,只有安裝章節的 rpm 與 dnf 輸出取自 AlmaLinux 9.8 伺服器(root 帳號)。伺服器主機名稱改為 server1,路徑中的路由器與目的地位址改為範例位址(192.0.2.x、198.51.100.x、203.0.113.x)。安裝套件的發行編號(主版本 2.1 不變)與 dnf 中繼資料時間也是範例值,回應時間則保留實測數字。
1️⃣ 安裝 traceroute
traceroute 是否預設安裝,要看發行版。在 AlmaLinux 9.8 伺服器上執行時出現 [traceroute: command not found],用 rpm 查詢也沒有已安裝的套件。
rpm -q traceroutepackage traceroute is not installedRHEL 系列用 dnf 安裝。安裝前加上 [--assumeno] 預覽,只有 baseos 儲存庫的 traceroute 套件一個要安裝,沒有其他一併安裝的套件。
dnf install --assumeno tracerouteLast metadata expiration check: 0:05:00 ago on Thu Oct 29 09:00:00 2026.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
traceroute x86_64 3:2.1.0-9.el9 baseos 56 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 56 k
Installed size: 107 k
Operation aborted.下載大小為 56k,安裝後大小為 107k。[--assumeno] 會對所有詢問回答 no,因此不會安裝,並以 [Operation aborted.] 結束(依 dnf 官方文件)。
實際安裝是去掉 [--assumeno],以 [dnf install traceroute] 進行。
dnf install tracerouteLast metadata expiration check: 0:20:00 ago on Thu Oct 29 09:00:00 2026.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
traceroute x86_64 3:2.1.0-9.el9 baseos 56 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 56 k
Installed size: 107 k
Downloading Packages:
traceroute-2.1.0-9.el9.x86_64.rpm 3.6 MB/s | 56 kB 00:00
--------------------------------------------------------------------------------
Total 97 kB/s | 56 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : traceroute-3:2.1.0-9.el9.x86_64 1/1
Running scriptlet: traceroute-3:2.1.0-9.el9.x86_64 1/1
Verifying : traceroute-3:2.1.0-9.el9.x86_64 1/1
Installed:
traceroute-3:2.1.0-9.el9.x86_64
Complete![Installed:] 底下只有 traceroute 套件,沒有相依套件,安裝以 [Complete!] 結束。
安裝後用 [traceroute --version] 確認版本。
traceroute --versionModern traceroute for Linux, version 2.1.0
Copyright (c) 2016 Dmitry Butskoy, License: GPL v2 or any later用 [command -v traceroute] 找到的執行檔路徑是 [/usr/bin/traceroute]。
Debian 系列用 [apt install traceroute] 安裝發行版儲存庫中的 traceroute 套件(依 Debian 官方套件資訊)。已安裝的版本用 --version 確認。
traceroute --versionModern traceroute for Linux, version 2.1.2
Copyright (c) 2016 Dmitry Butskoy, License: GPL v2 or any laterDebian 12 伺服器已經安裝 traceroute 套件,版本顯示為 [Modern traceroute for Linux] 2.1.2。
2️⃣ traceroute 指令用法
traceroute 接收一個目的地名稱或 IP 位址,送出 TTL 從 1 開始逐一增加的封包。TTL 為 1 的封包在第一台路由器失效,TTL 為 2 的封包在第二台路由器失效。traceroute 根據這些路由器回傳的 [time exceeded] 回應,輸出每一跳的位址與往返時間(依官方手冊)。
抵達目的地後,目的地會回應 [port unreachable],追蹤在該跳結束;若未抵達,就持續到最大跳數。依官方手冊,每一跳送出三個封包,因此一行會出現三個時間,預設最多確認 30 跳。
對 example.com,我們用 -n 只輸出位址,並用 -m 10 只確認到第十跳。
traceroute -n -m 10 example.comtraceroute to example.com (203.0.113.154), 10 hops max, 60 byte packets
1 192.0.2.1 0.110 ms 0.083 ms 0.067 ms
2 192.0.2.2 0.348 ms 0.273 ms 0.263 ms
3 198.51.100.77 0.426 ms 0.337 ms 198.51.100.13 1.251 ms
4 198.51.100.49 0.968 ms 1.264 ms 198.51.100.53 1.148 ms
5 * * *
6 203.0.113.19 1.631 ms 203.0.113.25 2.549 ms 203.0.113.14 1.543 ms
7 203.0.113.154 1.544 ms 1.656 ms 1.607 ms第一行顯示目的地名稱、實際送出的位址、最大跳數與封包大小 60 位元組。第七跳的目的地位址回應後就結束,沒有走到第十跳,從執行到結束不到 1 秒。
| 輸出 | 說明 |
|---|---|
| traceroute to example.com (203.0.113.154) | 目的地名稱,以及解析名稱後實際送出的位址 |
| 10 hops max | 確認的最大跳數 — 用 -m 指定,預設值為 30 |
| 60 byte packets | 送出的封包大小 — IPv4 預設 60 位元組,IPv6 預設 80 位元組(依官方手冊) |
| 1 | 跳數編號 — 該封包設定的 TTL 值 |
| 192.0.2.1 | 在該跳回應的路由器位址 |
| 0.110 ms 0.083 ms 0.067 ms | 送往一跳的三個封包的往返時間 |
| 198.51.100.77 … 198.51.100.13 | 同一跳中不同封包由不同路由器回應,因此出現兩個位址的那一行 |
| * * * | 三個封包都沒有在時限內得到回應 — 一個星號代表一個封包 |
| !H · !N · !P · !X | 時間後面的無法抵達標記 — 主機、網路、通訊協定無法抵達,或遭管理性禁止(依官方手冊) |
第三跳與第四跳一行出現兩個位址,第六跳出現三個。送往一跳的三個封包由不同路由器回應時,traceroute 會如官方手冊所述,將回應的位址全部接著輸出。
不加 -n 執行時,會把回應的位址轉換成主機名稱再輸出。
traceroute localhosttraceroute to localhost (127.0.0.1), 30 hops max, 60 byte packets
1 server1 (127.0.0.1) 0.068 ms 0.048 ms 0.028 ms對 localhost 執行時,跳點欄位出現 Debian 12 伺服器的主機名稱,括號內附上位址 127.0.0.1。
3️⃣ traceroute 選項
traceroute 2.1.2 的 --help 列出 34 個選項。我們以 Debian 12 伺服器的一般帳號,實際執行了其中改變輸出的 -n、-q、-m,以及改變送出封包的 -I、-T。
[traceroute -n] 只輸出 IP 位址,不轉換成主機名稱。對同一個 localhost 加上 -n 後,跳點欄位只剩 127.0.0.1。
traceroute -n localhosttraceroute to localhost (127.0.0.1), 30 hops max, 60 byte packets
1 127.0.0.1 0.073 ms 0.075 ms 0.025 ms-q 是指定每一跳送出封包數的選項,預設值為 3。減為 -q 1 時只出現一個時間,增為 -q 5 時出現五個。
traceroute -q 1 -n 127.0.0.1traceroute to 127.0.0.1 (127.0.0.1), 30 hops max, 60 byte packets
1 127.0.0.1 0.096 mstraceroute -q 5 -n 127.0.0.1traceroute to 127.0.0.1 (127.0.0.1), 30 hops max, 60 byte packets
1 127.0.0.1 0.083 ms 0.028 ms 0.024 ms 0.022 ms 0.022 ms-m 是變更最大確認跳數的選項。輸入 256 時被 [max hops cannot be more than 255] 拒絕。
traceroute -m 256 -n 127.0.0.1max hops cannot be more than 255送出的封包預設是 UDP。-I 改用 ICMP ECHO,-T 改用 TCP SYN(預設 80 埠)送出。這兩個選項用於以其他封包重新確認 UDP 遭過濾的路徑。以一般帳號執行這兩個選項時,都留下權限不足的訊息,並以結束代碼 1 結束。
traceroute -I -n 127.0.0.1You do not have enough privileges to use this traceroute method.
socket: Operation not permittedtraceroute -T -n 127.0.0.1You do not have enough privileges to use this traceroute method.
socket: Operation not permitted官方手冊將預設方式與 -U(目的地埠固定為 53)列為一般帳號可用的方式。-I 只有在核心設定 ping_group_range 允許該帳號的群組時,才能以一般帳號執行。
cat /proc/sys/net/ipv4/ping_group_range1 0Debian 12 伺服器的值是 [1 0],依 Linux 核心文件表示不允許任何群組。-T 不論此設定為何,都不屬於一般帳號可用的方式,因此這兩個選項要在具有 root 權限的帳號下執行。
📌 主要選項:本文實際執行的結果
| 選項 | 作用 | 本文看到的結果 |
|---|---|---|
| -n | 只輸出 IP 位址,不轉換成主機名稱 | 對 localhost 使用時,跳點欄位只剩 127.0.0.1 |
| -q | 指定每一跳送出的封包數(預設 3) | -q 1 出現一個時間,-q 5 出現五個時間 |
| -m | 指定確認的最大跳數(預設 30) | -m 10 時 example.com 在第七跳結束,-m 256 被 [max hops cannot be more than 255] 拒絕 |
| -I | 以 ICMP ECHO 送出封包 | 一般帳號出現權限不足訊息,結束代碼為 1 |
| -T | 以 TCP SYN(預設 80 埠)送出封包 | 一般帳號出現權限不足訊息,結束代碼為 1 |
| -U | 將目的地埠固定為 53,以 UDP 送出 | example.com 從第七跳到第十跳都是 * * *,沒有出現目的地位址 |
📎 其他選項:依官方手冊
| 選項 | 作用 |
|---|---|
| -w | 指定等待回應的最長時間(預設 5 秒) |
| -p | 指定連接埠(UDP 為起始埠,TCP 為固定目的地埠,ICMP 為起始序號) |
| -f | 指定起始 TTL(預設 1) |
| -N | 指定同時送出的封包數(預設 16,遇到限制回應速度的路由器時調低) |
| -s | 將來源位址改為伺服器其他介面的位址 |
| -i | 指定封包送出的網路介面(預設依路由表) |
| -4 | 只用 IPv4 送出(名稱同時回傳 IPv4 與 IPv6 位址時,預設為 IPv4) |
| -6 | 只用 IPv6 送出 |
🔲 traceroute 指令模擬器
在下方模擬器中,你可以用 -m 縮短 example.com 的路徑,或對 127.0.0.1 與 localhost 直接輸入 -n、-q、-f(起始跳點)以及需要權限的 -I、-T。
4️⃣ traceroute 沒有回應的跳點
就算能改變傳送方式,沒有回應的跳點仍會顯示為 [* * *]。依官方手冊,一個星號代表一個未在時限內得到回應的封包,等待時間最長 5 秒。
看到中間跳點的 * * *,很容易判斷路徑在該處中斷。以預設方式送往 example.com 的路徑中,只有第五跳是 * * *,但封包通過該跳,經過第六跳,抵達第七跳的目的地。
-U 是將目的地埠固定為 53 送出的方式。對同一個 example.com 以 -U 送出封包後,第六跳由目的地前的路由器回應,接著從第七跳到第十跳都是 * * *,沒有出現目的地位址。
traceroute -U -n -m 10 example.comtraceroute to example.com (203.0.113.154), 10 hops max, 60 byte packets
1 192.0.2.1 0.176 ms 0.096 ms 0.661 ms
2 * * *
3 198.51.100.13 0.622 ms 0.586 ms 0.562 ms
4 198.51.100.49 0.898 ms 1.314 ms 198.51.100.53 1.159 ms
5 * * *
6 203.0.113.9 3.773 ms 203.0.113.27 3.275 ms 203.0.113.14 8.973 ms
7 * * *
8 * * *
9 * * *
10 * * *官方手冊說明,以 -U 送出時,目的地端的程式通常不會回應,因此看不到最後一跳。在防火牆過濾 traceroute 的 UDP 埠或 ICMP ECHO 的路徑上,該防火牆後方同樣不會有回應,只會持續出現 * * *。
| 出現 * * * 的位置 | 讀法 | 重新確認 |
|---|---|---|
| 中間的一個跳點 | 該跳點沒有回應 — 後面的跳點有回應,代表封包已通過該跳點 | 保持不動,繼續看後面的跳點 |
| 從目的地前到 -m | 目的地或其前方的防火牆過濾了該封包或連接埠(依官方手冊) | 預設方式 · -T(root)· [-T -p 埠] |
| 每次執行都會改變的跳點 | 路由器限制 ICMP 回應速度時,部分回應可能遺失(依官方手冊) | [-N 1] · [-w 5] |
如果在目的地前停住,就改變傳送方式重新確認。官方手冊介紹 -T 是為了穿過防火牆而設計的方式。對於郵件伺服器這類連接埠明確開放的目的地,手冊說明像 [-T -p 25] 這樣指定該埠,即使 -I 到不了也可能抵達。
中間跳點的 * 也可能隨傳送方式或每次執行而改變。第二跳以預設方式執行時有回應,以 -U 執行時卻顯示為 * * *。官方手冊表示,路由器限制 ICMP 回應速度時,部分回應可能遺失,並建議用 [-N 1] 減少同時送出的封包數。traceroute 也會參考先前收到的回應時間縮短等待時間,如果因此 * 提早出現,可以像 [-w 5] 這樣只指定一個等待時間來關閉這項計算(依官方手冊)。
5️⃣ 用 tracepath 取代 traceroute
在無法安裝套件的伺服器上,就用 tracepath 指令確認同一條路徑。AlmaLinux 9.8 伺服器沒有 traceroute,但有 iputils 20210202 內含的 tracepath。相反地,Debian 12 伺服器沒有 tracepath。依 tracepath 官方手冊,tracepath 不需要 root 權限就能執行,但選項較少,送出的封包也只有 UDP。因此需要用 -I、-T 改變傳送方式,或用 -q 每跳送出多個封包比較時,請安裝並使用 traceroute。
🔢 FAQ & 推薦內容
ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。