我在腳本中遇到這兩行:
echo "1" > /proc/sys/net/ipv4/ip_forward/
echo "0" > /proc/sys/net/ipv4/conf/eth0/send_redirects
第一行打開 ip 轉發,這使我的機器充當路由器。
我想確切地了解第二行的作用。它send_redirects
在介面上關閉,eth0
但這是什麼意思?send_redirect
在這個背景下是什麼?
答案1
'ip_forward' 用於啟用 IPv4 封包轉送。
僅當節點充當路由器時才啟用「發送重定向」。也就是說,主機不應發送 ICMP 重定向訊息。路由器使用它來通知主機有關特定目的地可用的更好路由路徑的資訊。此後,主機更新路由快取條目,並直接透過 ICMP 重定向訊息建議的最佳路徑/路由轉送後續封包。
然而,這種路由資訊更新機制存在風險,並且是安全社群關注的問題,因為 ICMP 重定向可能會被惡意軟體/攻擊者篡改/偽造,以重定向到其所需的路徑。
請參閱RFC 1122(第3.3.1 節和附錄A)以了解更多詳細資訊和條款,例如「如果重定向訊息指定的新網關位址不在重定向訊息所通過的相同連接(子)網路上,則應靜默丟棄重定向訊息」已到達,或重定向來源不是指定目的地的當前第一跳網關'
答案2
當同一 LAN 上有多個路由器時,就會發生重新導向。例如,假設我們有一個包含一台主機和兩台路由器的網路。主機可能會向路由器 A 發送封包,然後路由器 A 可能需要透過相同 LAN 將該封包傳送到路由器 B,因為路由表告訴它要這樣做。然後,路由器 A 可以向主機發送重定向訊息,通知主機如果直接向路由器 B 發送特定目的地的封包,效率會更高。
當您關閉send_redirect
路由器時,不會發送此類重定向訊息。