什麼是路由?
路由(Routing)是網路世界裡「決定資料封包要走哪條路」的機制。
每一筆網路請求——不管是你打開網頁、傳訊息還是下載檔案——背後都是一包一包的資料在傳送。
這些資料包不會自己知道要去哪,需要有人告訴它「往這個方向走」。這個「決定方向」的過程,就叫路由。

用生活類比理解路由:郵差怎麼決定走哪條路
想像你寄一封信給台北市大安區的朋友。
郵差不會隨機亂走,他會查地址,然後依照規則:
- 台北市的信先送到台北郵局
- 大安區的信再分配到大安郵局
- 最後才送到那條街
這個「查地址、決定往哪送」的流程,就是路由在做的事。
網路裡的路由器(Router)就是那個郵差。
它負責看每一個資料包的目的地 IP,然後決定要從哪個介面把它轉出去。

路由和交換器的差別:別再搞混了
很多新手會把路由器和交換器(Switch)搞混。這兩個東西做的事完全不同。
交換器工作在第二層(Layer 2)。
負責在同一個區域網路(LAN)內,根據 MAC 地址把資料送到對的設備。
路由器工作在第三層(Layer 3)。
負責在不同網路之間,根據 IP 地址決定資料要往哪個方向走。
簡單說:交換器負責同一棟大樓裡的傳遞,路由器負責跨城市的快遞。

路由器、路由表、路由協定:三個核心名詞一次搞懂
學路由會遇到三個常見名詞,先把它們搞清楚。
路由器(Router) 是負責轉發資料包的設備或系統,可以是實體硬體,也可以是軟體模擬的。
路由表(Routing Table) 是路由器內部存的一張「地圖」,記錄了「去哪個網段,要走哪個介面、經過哪個 Gateway」。路由器每次轉發資料包,都是查這張表做決定。
路由協定(Routing Protocol) 是路由器之間互相溝通、交換路由資訊的規則,常見的有 OSPF、BGP、RIP。這篇文章不深入這個主題,你只需要知道它的存在。

學路由對你的職涯有什麼幫助?
路由不是只有網路工程師才需要懂,它的應用範圍比你想的寬。
懂路由基礎,能讓你在排查問題、評估架構、技術面試這三個場景,明顯比不懂的人更有效率。
哪些工作會用到路由知識?
以下這些職位,在日常工作中都會直接或間接碰到路由。
IT 支援/網路管理員:
公司網路出問題,第一個被叫去查的就是這個職位。能看懂路由表、會用 traceroute 追蹤封包,排查速度至少快 3 倍。
後端工程師:
部署服務到雲端時,常遇到「服務起來了但連不到」的問題。這類問題中,超過 80% 和網路設定有關,路由是最常見的原因之一。
懂路由,能自己排查,不用每次都等網路部門。
DevOps/SRE 工程師:
管理 Kubernetes 叢集、設定 VPC、處理跨區域連線,每天都在和路由打交道。
這個職位對路由的要求是「不只懂概念,還要能動手設定」。
設計多雲或混合雲架構時,路由決定了不同環境之間怎麼互通。架構設計錯了,後面的問題會很難收拾。
資安工程師:
滲透測試、網路隔離、零信任架構,都需要理解路由才能判斷流量走向和攻擊面。
就算你現在的工作完全不碰網路,懂路由基礎也能讓你在跨部門溝通時更有效率。
你看得懂網路部門在說什麼,他們說的問題你能快速判斷是不是和你有關。

懂路由,能讓你在團隊裡做什麼?
懂路由不會讓你變成網路專家,但會讓你在以下 3 個場景明顯不同於不懂的人。
場景一:服務上線後出現連線問題
不懂路由的人:「我的程式沒問題,是網路的事,讓網路部門來看。」
懂路由的人:先跑 ip route show 和 traceroute,3 分鐘內確認問題是在路由層還是應用層,再決定要找誰。
這個差異在緊急事故(Incident)時非常明顯。
場景二:評估雲端架構方案
不懂路由的人:看著架構圖點頭,但不知道兩個 VPC 之間的流量怎麼走。
懂路由的人:能直接問「這兩個網段之間的路由是怎麼設定的?有沒有非對稱路由的風險?」,讓討論更具體。
場景三:技術面試
後端、MIS、網管 的技術面試,網路基礎幾乎是必考題。
能說「我實際操作過 ip route 和 traceroute」,比只說「我知道路由的概念」有說服力得多。

為什麼要學路由指令?
工程師遇到網路問題,路由是第一個要查的地方
當你遇到「連不到某台主機」「某個服務突然無法訪問」這類問題,在 90% 的情況下可以用路由指令在 3 分鐘內縮小範圍。
不是說路由一定是問題所在,而是查路由表的成本最低、最快能排除或確認。
常見的排查邏輯是這樣:
- 查路由表,確認有沒有通往目標網段的路徑
- 如果路徑存在,用 traceroute 看封包卡在哪一跳
- 根據結果判斷是路由問題、防火牆問題還是目標主機問題
路由指令能幫你做什麼:診斷、追蹤、設定
路由指令不只能「查」,還能做 3 件事。
診斷:確認目前這台機器的路由表長什麼樣,有沒有缺少某個網段的路徑。
追蹤:用 traceroute 看資料包實際走了哪幾跳,每一跳花了多少時間,找出延遲或中斷的位置。
設定:手動新增或刪除靜態路由,讓特定流量走特定的路徑。
用 GCP Cloud Shell 練習路由指令:不用付費、不用安裝環境
什麼是 GCP Cloud Shell?
GCP Cloud Shell 是 Google Cloud Platform 提供的免費線上終端機環境,讓使用者直接在瀏覽器裡執行指令,不需要在自己的電腦安裝任何工具。它的底層是一台 Debian Linux 虛擬機,預裝了 gcloud、git、python、vim 等常用工具,每個 Google 帳號都可以免費使用,不需要信用卡。
如何開啟 GCP Cloud Shell:只需要 Google 帳號
不需要建立任何 GCP 專案,也不需要輸入付款資訊,只要有 Google 帳號就能開啟。
Step 1:登入 Google Cloud Console
打開瀏覽器,前往 console.cloud.google.com,用你的 Google 帳號登入。
如果是第一次使用,Google 會要求你同意服務條款,接受即可,不會產生任何費用。

Step 2:點擊右上角 Cloud Shell 圖示
登入後,畫面右上角有一個「>_」的圖示,點擊它。
這個圖示在通知鈴鐺的左邊,滑鼠移過去會顯示「啟用 Cloud Shell」。

Step 3:等待環境啟動
點擊後,畫面下方會出現一個終端機視窗,Cloud Shell 環境需要約 30 秒啟動。
啟動完成後,你會看到類似這樣的提示符:
user@cloudshell:~ (your-project-id)$

這代表你已經在 Cloud Shell 環境裡了,可以開始輸入指令。
Cloud Shell 的限制與注意事項:路由設定重啟後會還原
開始操作之前,有一件事要先說清楚。
Cloud Shell 是臨時環境,每次關閉視窗或閒置超過 20 分鐘後,系統可能會重置。
你用指令手動新增的路由,重啟後會消失。這是正常行為,不是你操作錯誤。
對學習來說這反而是好事:你可以放心嘗試各種指令,不用擔心把環境搞壞。
但如果你是要在正式環境設定路由,Cloud Shell 不適合,要改用固定的伺服器或網路設備。
安裝路由相關套件
確認環境:Cloud Shell 預裝了什麼
Cloud Shell 的底層是 Debian Linux,部分路由工具已經預裝,部分需要手動安裝。
先執行以下指令確認目前有哪些工具可用:
which ip route traceroute netstat

有出現路徑的代表已安裝,顯示空白的代表需要手動安裝。
安裝 net-tools(提供 route、netstat 指令)
net-tools 是舊版網路工具套件,提供 route 和 netstat 這兩個指令。
雖然這些指令在新版 Linux 上已被 iproute2 取代,但很多教學文件和舊系統還在用,學起來有備無患。
在 Cloud Shell 執行:
sudo apt-get install -y net-tools
-1024x393.png)
安裝完成後確認:
route --version

有顯示版本號代表安裝成功。
安裝 iproute2(提供 ip route 指令)
iproute2 是現代 Linux 的標準網路工具套件,提供 ip 這個主指令,包含路由管理、網路介面管理等功能。
Cloud Shell 通常已預裝 iproute2,但還是確認一下:
ip -V
目前看來應該已經有安裝了

如果顯示「command not found」,執行以下指令安裝:
sudo apt-get install -y iproute2
安裝 traceroute(提供封包追蹤功能)
traceroute 用來追蹤資料包從你的機器到目標 IP 經過了哪幾個節點。
Cloud Shell 不一定預裝這個工具,執行以下指令安裝:
sudo apt-get install -y traceroute

安裝完成後確認:
traceroute --version

基本路由指令實作
套件都裝好後,現在開始實際操作。
查看目前的路由表:ip route show
ip route show 是查看路由表最常用的現代指令,在 Cloud Shell 執行:
ip route show

你會看到類似這樣的輸出:
default via 10.88.0.1 dev eth0
10.88.0.0/16 dev eth0 proto kernel scope link src 10.88.0.4
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
輸出結果怎麼看:每個欄位的意思
這些看起來很陌生的文字,其實每個欄位都有明確意思:
第一段:如果包裹要寄到「外縣市」或「國外」怎麼辦?
當你的 Cloud Shell 需要連上網際網路(例如去 Google 抓資料),它通常不知道全世界每一台電腦的確切位置。這時候,它需要一個「預設」的處理方式,這就帶出了第一行輸出:
default via 10.88.0.1 dev eth0
- default(預設路由):這代表「其他所有不知道該送去哪裡的包裹」。只要目的地不在我們家附近,就套用這個規則。
- via 10.88.0.1(經由):把包裹交給
10.88.0.1這個 IP 位址。這個角色叫做 Gateway(通訊閘 / 閘道器),你可以把它想成是「郵件總處理中心」。你的電腦只要把包裹丟給總中心,總中心就會幫你轉送到外部網路。 - dev eth0(網路介面卡裝置):
dev是 device(裝置)的縮寫。eth0是你這台電腦主要對外的Network Interface(網路介面卡)。你可以把它想成是郵局的「大門」或「主要的送貨卡車」。
小結一下這行的意思:「只要不知道送去哪的資料,一律從大門 (eth0) 送出去,交給總中心 (10.88.0.1) 幫忙處理。」
第二段:如果包裹只是要寄給「同一個社區的鄰居」呢?
既然我們知道怎麼把資料送到外部網路了,那如果你的 Cloud Shell 只是想跟「同一個 GCP 內部網路」裡的其他機器講話呢?這時候把包裹送到「總中心」就太繞路了,我們應該直接走社區通道送過去就好。這就是第二行規則存在的目的:
10.88.0.0/16 dev eth0 proto kernel scope link src 10.88.0.4
- 10.88.0.0/16(目標網段):這代表你所在的「本地社區」,在網路術語中稱為 Subnet(子網路)。只要目標地址是
10.88開頭的,就代表是鄰居。 - dev eth0:一樣,要出門還是得走郵局的大門(主要的網路卡)。
- proto kernel(通訊協定):這表示這條規則是由作業系統的 Kernel(核心) 自動建立的,不是人類手動輸入的。
- scope link(範圍):這代表目的地跟我們是在同一個實體或虛擬網路上(Link-local),可以直接對話,不需要經過剛剛那個總中心(Gateway)。
- src 10.88.0.4(來源 IP):這個資訊非常關鍵!
src是 source(來源)的縮寫。它告訴我們,你現在正在使用的這台 Cloud Shell,它自己的 IP Address(IP 位址) 就是10.88.0.4。這就像是你寄信時,寫在信封背面的「寄件人地址」。
小結一下這行的意思:「如果資料是要寄給同社區的鄰居 (10.88.0.0/16),就直接從大門 (eth0) 送過去,並在信封寫上我的地址 (10.88.0.4)。」
第三段:電腦裡面如果還有「房中房」,該怎麼送信?
現在我們知道怎麼對外(第一行)和對鄰居(第二行)溝通了。但是,Cloud Shell 是一個專門給工程師用的環境,它裡面內建了一個叫做 Docker 的工具。Docker 可以在你的電腦裡面再切出很多個獨立的「虛擬小房間」(稱為 Container 容器)來跑程式。
既然是獨立的小房間,它們就需要專屬的內部信箱系統。這就自然接到了最後一行規則:
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
- 172.17.0.0/16:這是專門保留給 Docker 虛擬小房間(容器)使用的「內部專用網段」。
- dev docker0:這是一個 Virtual Bridge(虛擬網橋)。你可以把它想成通往那些內部小房間的「專屬內部門」。這扇門的名字叫
docker0。 - proto kernel scope link:跟上一段一樣,這是系統核心自動建立的直接連線規則。
- src 172.17.0.1:這是這扇「內部門」本身的 IP 位址,也就是小房間們的內部管理員地址。
- linkdown(連線狀態中斷):這是一個很重要的狀態提示。它代表
docker0這扇門目前是「關閉 / 未啟用」的狀態。為什麼呢?因為你現在可能還沒有在 Cloud Shell 裡面啟動任何 Docker 容器(小房間裡沒人),所以系統暫時把這個內部通道關閉以節省資源。
小結一下這行的意思:「如果要送信給內部的 Docker 小房間 (172.17.0.0/16),要走專屬的內部門 (docker0),不過這扇門目前是關著的 (linkdown)。」

總結
這三行連貫起來,就是你的 Cloud Shell 完整的網路溝通藍圖:
- 對外交給閘道器(Gateway)。
- 對鄰居自己直接送(並秀出了你自己的 IP 是
10.88.0.4)。 - 對內部虛擬容器有專屬通道,但目前沒在使用中。
查看路由表(舊指令):route -n
route -n 是舊版的路由表查詢指令。-n 代表不要解析 hostname,直接顯示 IP 數字,速度比較快。
route -n
輸出格式像這樣:
-route-n-1024x184.png)
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.88.0.1 0.0.0.0 UG 0 0 0 eth0
10.88.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
ip route 和 route -n 的差別
這兩個指令看的是同一份路由表,只是顯示格式不同。
ip route show 是現代指令,輸出用 CIDR 格式(如 /28),功能更完整,建議優先使用。
route -n 是舊指令,輸出用傳統子網路遮罩格式(如 255.255.255.240),在舊系統或舊教學文件上比較常見。
兩個都會,在任何環境下都不會被卡住。
新增靜態路由:ip route add
靜態路由(Static Route)是指你手動告訴系統「去這個網段,要走這個 Gateway」,不透過任何路由協定自動學習。
Step 1:確認目標網段
假設你要新增一條路由,讓去 192.168.100.0/24 這個網段的流量,走 Gateway 10.88.0.1。
先確認這個網段目前沒有路由:
ip route show | grep 192.168.100

如果沒有輸出,代表目前沒有這條路由,可以新增。
Step 2:指定 Gateway
確認你的 Gateway IP 是否可以到達:
ping -c 3 10.88.0.1

看到 3 packets transmitted, 3 received 代表 Gateway 可以連通。
Step 3:執行新增指令並確認結果
執行以下指令新增路由:
sudo ip route add 192.168.100.0/24 via 10.88.0.1

新增後,立刻確認有沒有成功加進路由表:
ip route show | grep 192.168.100
如果看到:

192.168.100.0/24 via 10.88.0.1 dev eth0
代表新增成功。
刪除路由:ip route del
刪除路由的語法和新增幾乎一樣,只是把 add 換成 del:
sudo ip route del 192.168.100.0/24 via 10.88.0.1
刪除後確認:
ip route show | grep 192.168.100

沒有輸出代表刪除成功。
追蹤封包走哪條路:traceroute
traceroute 會顯示封包從你的機器出發,每經過一個路由節點就記錄一次,讓你看到完整的路徑。
試著追蹤到 Google DNS 的路徑:
traceroute 8.8.8.8
輸出:

每一行是一個「跳」(hop),左邊的數字是第幾跳,後面是那個節點的 IP 和三次往返時間。
* * * 代表那個節點沒有回應,可能設定了不回應 ICMP,不一定是問題。
實際案例:用路由指令診斷網路問題
情境:連不到某個 IP,怎麼用路由指令找出問題
假設你在 Cloud Shell 裡 ping 192.168.50.1 完全沒有回應,不知道問題出在哪。
以下是標準的排查流程。
Step 1:先查路由表,確認有沒有對應路徑
ip route show | grep 192.168.50

如果沒有輸出,代表路由表裡根本沒有去 192.168.50.0/24 的路徑。
這時封包會走 default 路由(default via 10.88.0.1)。
但如果 default Gateway 也不知道怎麼到那個網段,封包就會被丟棄。
這種情況下,問題就是「缺少路由」。解法是新增一條靜態路由,或確認這個網段是否真的可達。
Step 2:用 traceroute 找出封包卡在哪一跳
如果路由表有對應路徑,但還是連不到,執行:
traceroute 192.168.50.1
看封包在哪一跳停下來(顯示連續的 * * *)。
如果第 1 跳就是 * * *,問題在 Gateway 這層。
如果走了幾跳後才停,問題在中間某個路由節點或目標主機。
Step 3:根據結果判斷是路由問題還是其他問題
排查路由問題後,如果路徑是通的但還是連不到,問題通常在以下 3 個地方:
- 目標主機的防火牆擋掉了 ICMP(ping 不通但服務可能正常)
- 目標主機根本沒有在監聽
- 兩邊的路由不對稱(你能到它,但它的回程路由不知道怎麼回到你)
路由指令能幫你排除「路徑本身」的問題,剩下的就要用其他工具(如 curl、telnet、nmap)繼續追查。
常見錯誤與排查
指令找不到(command not found):套件沒裝好
執行指令時出現 command not found,代表那個套件還沒安裝。
對照前面「安裝路由相關套件」的章節,確認對應套件有沒有裝好。
如果安裝過程中出現錯誤,先執行:
sudo apt-get update
更新套件清單後再重新安裝。
新增路由後 ping 還是不通:Gateway 設定錯誤
新增路由成功,但目標還是 ping 不通,最常見的原因是 Gateway IP 設錯了。
確認你指定的 Gateway 在路由表裡是可達的:
ip route get <你的 Gateway IP>
正常會看到像這樣:

如果顯示 RTNETLINK answers: Network is unreachable,代表這個 Gateway 本身就不可達,路由設定沒有意義。
Cloud Shell 重啟後路由消失:這是正常行為
手動新增的路由,Cloud Shell 重啟後會消失。
這是 Cloud Shell 的設計限制,不是你的操作問題。
如果你需要每次啟動 Cloud Shell 都自動套用路由設定,可以把指令寫進 ~/.bashrc:
echo "sudo ip route add 192.168.100.0/24 via 10.88.0.1" >> ~/.bashrc
這只適合學習和測試用途,正式環境不應該這樣做。
總結:路由指令你只需要記住這幾條
學路由不需要記很多東西。把這 5 條指令在 GCP Cloud Shell 跑過一遍,下次遇到網路問題,你就有具體的排查起點。
ip route show— 查看路由表route -n— 查看路由表(舊格式,舊系統適用)sudo ip route add <網段> via <Gateway>— 新增靜態路由sudo ip route del <網段> via <Gateway>— 刪除路由traceroute <目標 IP>— 追蹤封包路徑

常見問題(FAQ)
Q1:我沒有 GCP 帳號,可以用 Cloud Shell 嗎? A:只要有 Google 帳號(例如 Gmail)就可以使用 GCP Cloud Shell,不需要額外申請 GCP 帳號,也不需要信用卡。前往 console.cloud.google.com 登入後,點右上角「>_」圖示即可開啟,整個流程不會產生任何費用。
Q2:Cloud Shell 的免費額度會用完嗎? A:Cloud Shell 每個月提供 50 小時的免費使用時間,一般學習和練習完全夠用。這篇文章示範的所有路由指令都在免費額度內,不會產生任何費用。
Q3:ip route 和 route -n 哪一個比較建議用? A:優先使用 ip route show。它是現代 Linux 的標準路由查詢指令,輸出格式更清楚、功能更完整。route -n 在舊系統或舊文件上還是很常見,兩個都知道,在任何環境下都不會被卡住。
Q4:靜態路由和動態路由有什麼差別? A:靜態路由是你手動設定的,告訴系統「去這個網段走這條路」,不會自動更新。動態路由透過路由協定(如 OSPF、BGP)讓路由器之間自動學習路徑,網路拓撲改變時會自動調整。學習階段用靜態路由就夠了,大型正式環境幾乎都用動態路由。
Q5:traceroute 輸出中的 * * * 是什麼意思? A:* * * 代表那個節點在規定時間內沒有回應。這不一定是問題——很多路由器或防火牆設定為不回應 traceroute 的封包。如果最終能到達目標,中間出現 * * * 通常不影響實際連線。
Q6:怎麼知道我的預設 Gateway 是什麼? A:執行 ip route show,找開頭是 default via 的那一行,後面的 IP 就是預設 Gateway。例如 default via 10.88.0.1 dev eth0,預設 Gateway 就是 10.88.0.1。
Q7:新增路由時出現 Error: any valid prefix is expected rather than,是什麼問題? A:這個錯誤代表網段格式有誤。路由指令的網段必須用 CIDR 格式,例如 192.168.100.0/24,不能只寫 192.168.100。確認網段後面有加 /數字 的子網路遮罩,再重新執行。
Q8:可以用 Cloud Shell 練習路由以外的網路指令嗎? A:可以。Cloud Shell 是完整的 Linux 環境,ping、curl、nslookup、dig、netstat、ss 等常見網路指令都能在這裡使用,部分需要先安裝套件。對於想從零學習 Linux 網路指令的人,Cloud Shell 是免費又方便的練習環境。
Q9:路由表裡的 Metric 數字代表什麼? A:Metric 是路由的優先權分數,數字越小代表優先權越高。當路由表裡有超過 2 條都能到達同一目標的路由時,系統會選擇 Metric 較小的那條。在有多張網路卡或多個 Gateway 的環境裡,Metric 的設定會直接影響流量走向。
Q10:這篇文章的路由指令可以直接用在 GCP 的 VM 上嗎? A:可以,但要注意:GCP VM 的網路由 VPC 管理,單純在 VM 內新增路由不一定能讓流量真正改道,還需要在 GCP Console 的 VPC 路由設定裡同步調整。Cloud Shell 適合學習路由指令語法,正式環境需要搭配 GCP 網路架構一起考慮。