Networking
在路由器上,是什麼決定了數據包是否應該轉發或定向到路由器本身?
我正在嘗試了解數據包路由如何在基於 linux 的路由器(在我的情況下為 OpenWRT)上工作,以便更好地設置一些項目/只是學習。參考下面的圖表,我將把它分成兩個問題
- 我想知道在 iptables 之外,什麼(如程序、其他類型的路由表或我可以編輯的東西?)具體負責在下面的節點中製定/指導“路由決策”。請注意,我說的是下圖中標記為“路由決策”的實際節點,而不是 iptables。IE 在數據包通過 nat PREROUTING 之後,必須告訴數據包天氣接下來進入本地程序的輸入過濾器鏈,還是進入轉發鏈,對嗎?對於這個問題的兩個部分,我想說我們可以堅持使用最頂部的“路由決策”節點,因為我猜較低的節點包含更多的可能性和過程。
- 另外/或,如何做出決定?是不是很簡單,如果傳入的數據包的目的地是它進入的介面 ip(例如來自 LAN 連接的 192.168.1.1),那麼它應該進入這台機器本身並通過輸入表發送,否則它應該被轉發到另一個介面去外部網路(在這種情況下只是網際網路),所以將它轉發到任何其他接受轉發的介面。或者,是否有其他可能的方式可以將數據包定向到路由器,由 DNS 伺服器等某些程序處理,而不是直接轉發到連接網際網路的介面。
是否應將傳入數據包路由到本地系統僅取決於目標 IP 地址是否是本地系統任何介面上的 IP 地址之一。請注意,數據包進入哪個介面並不重要。您可以有一個
eth0
帶有 IP 地址的介面,並在該介面上添加192.168.1.1
一個額外的 IP 地址:到達目的地地址的數據包將在本地處理。192.168.1.2``lo``192.168.1.2``eth0
路由決策是根據 IP 路由表和 IP 路由規則表進行的。這些表格用於在介面上設置 IP 地址時自動填寫的部分。
ip rule show
可以通過命令(可以縮寫)查看路由規則:$ ip ru sh 0: from all lookup local 32766: from all lookup main 32767: from all lookup default
ip route show table xxx
您可以使用命令(也可以縮寫)檢查每個路由表。該local
表涉及應發送到本地系統的數據包:$ ip ro sh table local broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1 local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1 local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1 broadcast 192.168.1.0 dev eth0 proto kernel scope link src 192.168.1.1 local 192.168.1.1 dev eth0 proto kernel scope host src 192.168.1.1 broadcast 192.168.1.255 dev eth0 proto kernel scope link src 192.168.1.1
該
main
表是您在使用時通常會看到route
的(已棄用,就像 一樣ifconfig
),因此您不必指定其名稱:$ ip ro sh default via 192.168.1.254 dev eth0 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.1
該
default
表通常為空,但可用於保存預設路由,例如,如果您有多個網關。有關更多資訊,請閱讀策略路由書