![标记机器(客户端和路由器)之间的数据包?](https://linux22.com/image/50244/%E6%A0%87%E8%AE%B0%E6%9C%BA%E5%99%A8%EF%BC%88%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%92%8C%E8%B7%AF%E7%94%B1%E5%99%A8%EF%BC%89%E4%B9%8B%E9%97%B4%E7%9A%84%E6%95%B0%E6%8D%AE%E5%8C%85%EF%BC%9F.png)
我可以在客户端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 地址在路由器上执行额外的修改。