Ubuntu
在機器(客戶端和路由器)之間標記數據包?
我可以在客戶端
OUTPUT
鏈上標記一個數據包並在路由器上添加一個 iproute 策略以通過特定網關路由它們嗎?這是我試圖做的,但它不起作用。我客戶的 mangle 表轉儲:
Chain OUTPUT (policy ACCEPT 13884 packets, 2327K bytes) pkts bytes target prot opt in out source destination 13917 2330K MARK all -- * * 0.0.0.0/0 0.0.0.0/0 MARK set 0x2 Chain POSTROUTING (policy ACCEPT 13889 packets, 2328K bytes) pkts bytes target prot opt in out source destination 13889 2328K LOG all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0x2 LOG flags 0 level 4
iptables
路由器上的 mangle 表的 INPUT 鏈轉儲:Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0x2 LOG flags 0 level 4 2074 196K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 88 14890 ACCEPT all -- ethint * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- eth0 * 0.0.0.0/0 0.0.0.0/0
過了一會兒並發送測試數據包(來自通過 wifi 連接到路由器的客戶端的 ping,發送到 Intranet 外部的主機),路由器上的 LOG 計數器保持為零。
問題
- 我的包裹怎麼了?
- 我的包裹在哪裡失去了標記?
數據包上的標記是儲存在核心資料結構中的值。它在核心處理數據包時跟隨數據包。它不是數據包本身的一部分。它不是通過網路發送的。您不能在一台主機上設置標記並在另一台主機上讀取它。
相反,要做什麼取決於您要實現的目標。如果可以,請在同一主機上進行過濾和修改。如果您必須在路由器上進行修改,您可以安排應用程序在數據包中包含一些您可以過濾的內容。
有時您將無法逃脫在客戶端進行過濾(例如,如果它取決於外部因素,例如發送數據包的使用者)和路由器上的損壞(例如,如果您需要將數據包重新路由到路由器不路由的地址)。在這種情況下,有一種通用的方法來“標記”一個 IP 數據包:為您的客戶端分配多個 IP 地址,根據您用於標記的條件在客戶端上修改數據包以使用不同的傳出 IP 地址,然後執行附加的根據客戶端的 IP 地址對路由器進行修改。