Skip to content

修復工具

在 SimNet 的 網路修復(Network Repair) 類別中,網路一開始就是壞的——路由缺了一條、DNS 伺服器沒開機、IP 位址設錯了。你的任務是像個網路工程師一樣,找出問題、修好它、讓資料順利流通。

這就像你接手了一台剛買的二手車,發動之後才發現煞車線斷了、GPS 亂導航、輪胎壓力不對。你得一個一個排除。

路由管理 — 修復封包迷路問題

什麼時候用?

當你 ping 一台設備,得到 destination unreachable(目的地不可達)或完全沒回應時,很可能是 Router 上缺少通往目標網路的路由。封包到了路由器,路由器翻了翻路由表,發現沒有這條路,就只好把封包丟掉——就像 GPS 上找不到目的地。

指令

查看路由表:

bash
simnet@router1:~$ ip route
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.1

如果你期望 Router 能到達 10.0.1.0/24 這個子網路,但路由表裡沒有,那就是問題所在。

新增路由:

bash
simnet@router1:~$ ip route add 10.0.1.0/24 dev eth1
Route added: 10.0.1.0/24 dev eth1

這告訴 Router:「要去 10.0.1.0/24 這個網段的話,從 eth1 介面送出去。」

也可以透過另一台路由器轉送:

bash
simnet@router1:~$ ip route add 172.16.0.0/24 via 10.0.0.2
Route added: 172.16.0.0/24 via 10.0.0.2

via 表示「經由」——封包先送到 10.0.0.2,再由那台設備繼續轉發。

診斷流程

  1. 在 PC 上 ping 目標 → 失敗
  2. SSH 到 Router → ip route 檢查路由表
  3. 找出缺少的路由 → ip route add 新增
  4. 退回 PC → 再 ping 一次確認

怎麼知道該加什麼路由?

看拓撲圖。如果 Server 的 IP 是 10.0.1.3,它所在的子網路就是 10.0.1.0/24。找到 Router 上連到那個子網路的介面(例如 eth1),路由就是 ip route add 10.0.1.0/24 dev eth1

相關挑戰

範本內無內附 Network Repair 範例挑戰;下游採用本模板的專案可依 挑戰範例首頁 的 quickstart 自行新增。

DNS 服務管理 — 修復域名查詢故障

什麼時候用?

當你 curl http://flag.simnet.local/flag 失敗,錯誤訊息是 DNS 相關的(例如 Could not resolve host),表示 DNS 伺服器出問題了。常見原因:DNS 服務沒有啟動,或是 A Record(域名對應的 IP 記錄)不存在。

DNS 就像網路世界的電話簿——如果電話簿服務關門了,你就算知道朋友的名字也打不了電話。

指令

檢查 DNS 服務狀態:

bash
simnet@dns-server:~$ systemctl status dns
 dns.service - DNS Server
   Loaded: loaded
   Active: inactive (dead)

inactive (dead) 表示服務沒有在跑。

啟動 DNS 服務:

bash
simnet@dns-server:~$ systemctl start dns
 dns.service - DNS Server
   Active: active (running)

或者用簡化版:

bash
simnet@dns-server:~$ service dns start
Starting DNS server... OK

停止服務(如果需要重啟):

bash
simnet@dns-server:~$ systemctl stop dns
simnet@dns-server:~$ systemctl start dns

診斷流程

  1. 在 PC 上 nslookup flag.simnet.local → 查不到
  2. SSH 到 DNS Server → systemctl status dns 檢查狀態
  3. 如果服務沒跑 → systemctl start dns 啟動
  4. 退回 PC → 再 nslookup 確認能解析了
  5. curl 取得 Flag

相關挑戰

範本內無內附 Network Repair 範例挑戰;下游可自行新增。

IP 設定 — 修復位址錯誤

什麼時候用?

當一台設備的 IP 位址設定錯誤——例如 Server 本來應該在 10.0.1.0/24 這個子網路,但 IP 卻被設成 10.0.2.100——那其他設備就算路由正確,封包到了那個子網路也找不到這台 Server。

就像你的地址登記錯了,快遞員跑到正確的社區,卻找不到你家門牌。

指令

查看目前的 IP 設定:

bash
simnet@server1:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP>
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>
    link/ether aa:bb:cc:00:03:00
    inet 10.0.2.100/24 scope global eth0

如果拓撲圖顯示 Server 應該在 10.0.1.0/24 子網路,但這裡顯示 10.0.2.100/24,那 IP 就是錯的。

修改 IP 位址:

bash
simnet@server1:~$ ip addr set 10.0.1.3/24 dev eth0
IP address updated: eth0 10.0.1.3/24

診斷流程

  1. 看拓撲圖,確認每台設備「應該」有什麼 IP
  2. SSH 到可疑的設備 → ip addr 檢查實際設定
  3. 如果 IP 不對 → ip addr set 修正
  4. 回 PC 測試連通性

相關挑戰

範本內無內附 IP 設定錯誤的範例挑戰;下游可自行新增。

服務管理 — 重啟故障服務

什麼時候用?

Server 上跑著各種服務(HTTP Server、DNS Server 等),如果服務掛了或是設定檔不正確,你就算能連到 Server,也得不到你要的回應。

就像餐廳的廚房著火了——餐廳大門開著、客人坐著、服務生在場,但就是沒有菜出來。

指令

查看服務狀態:

bash
simnet@web-server:~$ systemctl status http
 http.service - HTTP Server
   Active: active (running)
   Listening: 0.0.0.0:80
bash
simnet@web-server:~$ systemctl status http
 http.service - HTTP Server
   Active: failed (exit code: 1)

啟動 / 停止 / 重啟服務:

bash
simnet@web-server:~$ systemctl start http     # 啟動
simnet@web-server:~$ systemctl stop http      # 停止
simnet@web-server:~$ systemctl start http     # 停了再開 = 重啟

簡化版:

bash
simnet@web-server:~$ service http start
simnet@web-server:~$ service http stop

查看設定檔:

bash
simnet@web-server:~$ cat /etc/nginx/nginx.conf

如果設定檔指向錯誤的目錄或監聽錯誤的通訊埠,那就算服務在跑,也不會正常工作。

診斷流程

  1. 在 PC 上 curlnslookup → 失敗
  2. SSH 到 Server → systemctl status <service> 看狀態
  3. 如果服務沒跑 → systemctl start <service>
  4. 如果服務跑了但不正常 → cat 設定檔看看有沒有問題
  5. 修好後退回 PC 驗證

相關挑戰

範本內無內附服務管理範例挑戰;下游可自行新增。

修復工作流程總覽

面對一個壞掉的網路,建議按照這個順序排查:

1. 從 PC ping 目標
   ├─ 連通 → 問題可能不在網路層,檢查應用層服務
   └─ 不通 → 繼續往下查

2. 檢查 PC 自己的設定
   └─ ip addr → IP 正確嗎?
   └─ ip route → 有 default route 嗎?

3. SSH 到 Router 檢查
   └─ ip route → 有沒有通往目標的路由?
   └─ show interfaces → 介面有 UP 嗎?

4. SSH 到目標 Server 檢查
   └─ ip addr → IP 正確嗎?
   └─ systemctl status → 服務有在跑嗎?

這個由近到遠的排查方法,在真實的網路管理中也是標準做法——先確認自己沒問題,再檢查中間的路由,最後看目的地。

速查表

工具指令在哪台設備上用修復什麼
查看路由ip routeRouter確認路由表是否完整
新增路由ip route add <net> dev <iface>Router修復封包無法到達的子網路
查看服務systemctl status <svc>Server確認服務是否在跑
啟動服務systemctl start <svc>Server重啟故障的服務
查看 IPip addr任何設備確認 IP 設定是否正確
修改 IPip addr set <ip>/<mask> dev <iface>目標設備修正錯誤的 IP 位址
查看設定cat <config-file>Server檢查服務設定檔