我可以在客户端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 计数器保持为零。
问题
- 我的包裹怎么了?
- 我的包裹在哪里丢失了标记?
答案1
数据包上的标记是存储在内核数据结构中的值。当内核处理数据包时,它会跟随数据包。它不是数据包本身的一部分。它不通过网络发送。您不能在一台主机上设置标记并在另一台主机上读取它。
相反,做什么取决于您想要实现的目标。如果可以的话,请在同一主机上进行过滤和修改。如果您必须在路由器上进行修改,您可以安排应用程序在数据包中包含一些您可以过滤的内容。
有时,您将无法避免在客户端上进行过滤(例如,如果它取决于外部因素,例如发送数据包的用户)和路由器上的损坏(例如,如果您需要将数据包重新路由到某个路由器不路由的地址)。在这种情况下,有一种通用方法来“标记”IP 数据包:为您的客户端分配多个 IP 地址,将客户端上的数据包修改为使用不同的传出 IP 地址根据您用于标记的条件,并根据客户端的 IP 地址在路由器上执行额外的修改。