Redsocks2无法转发udp数据包

时间:2015-08-05 09:00:29

标签: udp socks

我在客户端使用(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数据包转发的这种情况。

2 个答案:

答案 0 :(得分:0)

尝试使用谷歌翻译阅读URL https://github.com/semigodking/redsocks/wiki

上的中文自述文件

答案 1 :(得分:0)

如果使用重定向规则,数据包中的目标地址将被覆盖,如果您尝试使用IP_ORIGDSTADDR从数据包中读取目标地址,则只能读取环回地址。

要获取原始目标地址,您可以尝试解析/ proc / net / nf_conntrack(与源IP和端口匹配)文件,其中包含有关所有连接的信息。但是如果您有多个目标,则可能会出现问题相同(srcIP,srcPort)对,因此这不是最好的方法。 但如果你没有这种可能性,那值得试一试。