iptables 从 udp 到 tcp
Iptables from udp to tcp
是否可以使用 iptables 将来自网关路由器的所有传出 udp 流量转换为同一端口上的 tcp。看过 mangle 但不确定如何使用它。
至少由于以下原因,这不可能以通用方式实现:
- UDP 是一种数据报协议,其中每个数据包都相互独立。相反,TCP 是一种流协议。虽然可以将 UDP 数据包连接到 TCP 流,但不清楚应该在哪些边界处拆分 TCP 流以生成数据包。
- 对于 UDP 重复项,可能会发生数据包丢失和数据包重新排序。如果您不能确定正确的顺序并且您收到了所有消息并且恰好一次您无法从中构建可靠的 TCP 流。
- TCP 在收到数据包时进行确认,如果缺少 ACK,则重新传输数据包。一旦将 TCP 转发到 UDP,这些 ACK 就无法完成,因为 UDP 没有这样的机制。
可能仍然可以进行特定于应用程序的转换,例如 UDP DNS 到 TCP DNS 或类似的转换。但是这种转换取决于应用程序协议,因此您需要有一个特定于应用程序的网关。 iptables 作为数据包过滤器工作在较低层,不提供此类功能。
是否可以使用 iptables 将来自网关路由器的所有传出 udp 流量转换为同一端口上的 tcp。看过 mangle 但不确定如何使用它。
至少由于以下原因,这不可能以通用方式实现:
- UDP 是一种数据报协议,其中每个数据包都相互独立。相反,TCP 是一种流协议。虽然可以将 UDP 数据包连接到 TCP 流,但不清楚应该在哪些边界处拆分 TCP 流以生成数据包。
- 对于 UDP 重复项,可能会发生数据包丢失和数据包重新排序。如果您不能确定正确的顺序并且您收到了所有消息并且恰好一次您无法从中构建可靠的 TCP 流。
- TCP 在收到数据包时进行确认,如果缺少 ACK,则重新传输数据包。一旦将 TCP 转发到 UDP,这些 ACK 就无法完成,因为 UDP 没有这样的机制。
可能仍然可以进行特定于应用程序的转换,例如 UDP DNS 到 TCP DNS 或类似的转换。但是这种转换取决于应用程序协议,因此您需要有一个特定于应用程序的网关。 iptables 作为数据包过滤器工作在较低层,不提供此类功能。