traceroute 指令:安裝與用法、-n、-I、-T 選項

測試環境RHEL 系列AlmaLinux 9.8root 帳號Debian 12 · traceroute 2.1.2 一般帳號2026-10-29 確認
網路指令traceroute

想逐跳確認封包前往目的地時經過哪些路由器,就使用 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

  • ↪️ RHEL 系列用 dnf,Debian 系列用 apt

traceroute 是否預設安裝,要看發行版。在 AlmaLinux 9.8 伺服器上執行時出現 [traceroute: command not found],用 rpm 查詢也沒有已安裝的套件。

rpm -q traceroute
package traceroute is not installed

RHEL 系列用 dnf 安裝。安裝前加上 [--assumeno] 預覽,只有 baseos 儲存庫的 traceroute 套件一個要安裝,沒有其他一併安裝的套件。

dnf install --assumeno traceroute
Last 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 traceroute
Last 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 --version
Modern 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 --version
Modern traceroute for Linux, version 2.1.2
Copyright (c) 2016  Dmitry Butskoy,   License: GPL v2 or any later

Debian 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.com
traceroute 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 localhost
traceroute 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 選項

  • ↪️ -n、-q、-m 與傳送方式 -I、-T

traceroute 2.1.2 的 --help 列出 34 個選項。我們以 Debian 12 伺服器的一般帳號,實際執行了其中改變輸出的 -n、-q、-m,以及改變送出封包的 -I、-T。

[traceroute -n] 只輸出 IP 位址,不轉換成主機名稱。對同一個 localhost 加上 -n 後,跳點欄位只剩 127.0.0.1。

traceroute -n localhost
traceroute 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.1
traceroute to 127.0.0.1 (127.0.0.1), 30 hops max, 60 byte packets
 1  127.0.0.1  0.096 ms
traceroute -q 5 -n 127.0.0.1
traceroute 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.1
max hops cannot be more than 255

送出的封包預設是 UDP。-I 改用 ICMP ECHO,-T 改用 TCP SYN(預設 80 埠)送出。這兩個選項用於以其他封包重新確認 UDP 遭過濾的路徑。以一般帳號執行這兩個選項時,都留下權限不足的訊息,並以結束代碼 1 結束。

traceroute -I -n 127.0.0.1
You do not have enough privileges to use this traceroute method.
socket: Operation not permitted
traceroute -T -n 127.0.0.1
You 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_range
1	0

Debian 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。

traceroute 指令模擬器traceroute 2.1.2
[root@server work]#
只在瀏覽器內運作,不會送出實際封包。用 ↑↓ 可以叫回先前輸入的指令。

4️⃣ traceroute 沒有回應的跳點

  • ↪️ * * * 行與防火牆

就算能改變傳送方式,沒有回應的跳點仍會顯示為 [* * *]。依官方手冊,一個星號代表一個未在時限內得到回應的封包,等待時間最長 5 秒。

看到中間跳點的 * * *,很容易判斷路徑在該處中斷。以預設方式送往 example.com 的路徑中,只有第五跳是 * * *,但封包通過該跳,經過第六跳,抵達第七跳的目的地。

-U 是將目的地埠固定為 53 送出的方式。對同一個 example.com 以 -U 送出封包後,第六跳由目的地前的路由器回應,接著從第七跳到第十跳都是 * * *,沒有出現目的地位址。

traceroute -U -n -m 10 example.com
traceroute 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 & 推薦內容

結束代碼無法判斷。以預設方式在第七跳抵達 example.com 時,以及用 -U 到第十跳都未抵達時,結束代碼都是 0。錯誤的選項、超出範圍的 -m 值與名稱解析失敗以 2 結束,一般帳號的 -I 與 -T 以 1 結束。結束代碼只區分執行錯誤,是否抵達目的地要看最後一行有沒有出現目的地位址。

依 Microsoft 文件,Windows 的 tracert 會逐步增加 TTL 並送出 ICMP Echo Request,而 Linux 的 traceroute 預設送出 UDP 封包(依官方手冊)。要在 Linux 上以和 tracert 相同的 ICMP 方式確認時,請加上 -I。

用 -f 指定第一個送出的 TTL,就會從該跳開始輸出。依官方手冊預設值為 1,對 127.0.0.1 加上 -f 2 時,跳數編號從 2 開始。像 -m 0 這樣最大跳數小於起始跳數時,會被 [first hop out of range] 拒絕。

ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Prove your humanity: 1   +   7   =