我在客户端使用(socks5)redsocks2(来自https://github.com/semigodking/redsocks)将所有数据包直接重定向到中间网关,而不是直接重定向到应用服务器。在tcp数据包的情况下,它运行良好。但是在UDP数据包的情况下它根本不起作用。问题是,一旦UDP数据包进入redsocks,目标地址和端口已更改为redsocks本地地址和端口。
我正在使用IPTable规则进行数据包转发: -
iptables -t nat -N REDSOCKS
iptables -t nat -A REDSOCKS -p tcp --dport 7 -j RETURN
iptables -t nat -A REDSOCKS -p tcp -d xxx.xxx.xxx.xxx --dport 1080 -j RETURN
iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 0.0.0.0 -j RETURN
iptables -t nat -A REDSOCKS -p udp --dport 53 -j RETURN
iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports YYYYY
iptables -t nat -A REDSOCKS -p udp -j REDIRECT --to-ports ZZZZZ
iptables -t nat -A OUTPUT -p tcp -j REDSOCKS
iptables -t nat -A OUTPUT -p udp -j REDSOCKS
** xxx.xxx.xxx.xxx = intermediate gateway server address
** YYYY, ZZZZ = local ports for redsocks in client device
我在redsocks conf文件下面使用:
base {
log_debug = off;
log_info = off;
daemon = on;
redirector = iptables;
}
redsocks {
local_ip = 127.0.0.1;
local_port = YYYYY;
ip = xxx.xxx.xxx.xxx;
port = MMMM;
type = socks5;
login = "login";
password = "password";
}
redudp {
local_ip = 0.0.0.0;
local_port = ZZZZZ;
ip = xxx.xxx.xxx.xxx;
port = MMMM;
type = socks5;
login = "login";
password = "password";
udp_timeout = 30;udp_timeout_stream = 180;
}
据我所知,TPROXY致力于PREROUTING。它不适用于从本地机器生成的数据包(我的意思是OUTPUT链)。 TPROXY可以在路由器上工作,但不能在原始机器上工作。
请建议我们如何通过redsocks2处理udp数据包转发的这种情况。
答案 0 :(得分:0)
尝试使用谷歌翻译阅读URL https://github.com/semigodking/redsocks/wiki
上的中文自述文件答案 1 :(得分:0)
如果使用重定向规则,数据包中的目标地址将被覆盖,如果您尝试使用IP_ORIGDSTADDR从数据包中读取目标地址,则只能读取环回地址。
要获取原始目标地址,您可以尝试解析/ proc / net / nf_conntrack(与源IP和端口匹配)文件,其中包含有关所有连接的信息。但是如果您有多个目标,则可能会出现问题相同(srcIP,srcPort)对,因此这不是最好的方法。 但如果你没有这种可能性,那值得试一试。