Ubuntu

在機器(客戶端和路由器)之間標記數據包?

  • March 1, 2019

我可以在客戶端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 地址對路由器進行修改。

引用自:https://unix.stackexchange.com/questions/91790