
我想看看當收到 ICMP 重定向時,Linux 系統上的路由表如何變化。為此我使用
icmpush -v red -sp current-gateway -gw new-gateway -dest google.com -c host -prot tcp my-eth1-ip-address
(返回成功),但結果
route -n
保持不變。當然我已經檢查了輸出
cat /proc/sys/net/ipv4/conf/eth1/accept_redirects
1. 這是一台 Ubuntu 12 機器,具有最新穩定版本的內核,未安裝防火牆。
那麼問題來了:可能出了什麼問題?
答案1
根據文件/網路/ip-sysctl.txt,預設情況下,僅接受路由表中已列出的網關的重新導向。
secure_redirects - 布林值 僅接受網關的 ICMP 重定向訊息, 在預設網關清單中列出。 如果至少符合以下條件之一,將啟用介面的 secure_redirects: conf/{all,interface}/secure_redirects 設定為 TRUE, 否則它將被禁用 預設為真
答案2
一種假設: 的呼叫icmpush
不使用外部接口eth1
,而是使用 localhost 接口,lo
以便核心無法識別它是來自網關的正確重定向。此外,在非常舊的 Linux 核心版本中,這些路由不會顯示在route -n
.正如我所指出的,回應route -nC
可能是包含臨時重定向路由的正確方法。
@grawity,關於接受為回覆另一個資料包而發送的重定向:您在某處讀過嗎?因為我對此非常感興趣。