REDIRECT 方式是通过 iptables 规则将流量重定向到代理服务器的本地端口。它是通过修改 IP 层的目标 IP 地址和端口号来实现的。当网络数据包经过 iptables 规则时,它们的目标 IP 地址和端口会被修改为代理服务器的 IP 地址和端口,从而将流量重定向到代理服务器。
然而,这种修改目标 IP 地址和端口的方式只适用于 TCP 协议,因为 TCP 是面向连接的协议,可以通过修改目标 IP 地址和端口来建立连接。而对于 UDP 协议,它是无连接的,没有建立连接的过程,因此无法通过修改目标 IP 地址和端口来实现透明代理。
我搜到的答案是这个,但是小弟理解能力比较差,有大佬解释一下吗?或者给一个例子
1
kyor0 130 天前
tproxy 是支持 udp 的。
我个人更想知道 tproxy 和 REDIRECT 有啥区别,之前倒腾 passwall 的时候查过,但没啥收获 |
2
ysc3839 130 天前 via Android
印象中在哪看过分析,就是因为 Linux 没有实现。好像是因为 TCP 有连接状态,所以 Linux 记下了原始的目标,重定向到代理程序后,程序可以获取到目标。而 UDP 获取不到目标,就不支持。
|
4
tool2d 130 天前
我一般 UDP 都是写死地址的,linux 可以针对 uid 单独进程做 iptables 规则,只要能确保进程只请求一个 udp 服务器,并且是固定的,那么 REDIRECT 就可以修改 nat ip4 头部信息。
TCP 转发是 iptables 记录下来源地址的。 |