电报通过Dante socks5代理服务器无法正常工作

Ste*_*ler 8 proxy socks telegram dante

我已经将Dante 1.4在Ubuntu 16.04上作为电报的socks5代理进行了调查.

聊天工作正常,但语音呼叫不是,"连接"失败.

为了代理Telegram语音流量,我需要配置一些特殊的东西吗?

我正在使用单个非priveleged(> 1024)TCP/UDP端口+登录+密码进行连接.

谢谢!

UPD:当我试图打电话给某人时,这是一块日志:

Apr 15 23:05:38 (1523736338.510915) danted[22977]: info: pass(1): udp/udpassociate [: username%USER@0.0.0.0.0 192.168.1.30.36562

Apr 15 23:08:33 (1523736513.020190) danted[22989]: info: pass(1): udp/udpassociate [: username%USER@0.0.0.0.0 192.168.1.30.49065
Run Code Online (Sandbox Code Playgroud)

我可以在目标设备上接听电话但连接正在循环并在30秒后收到错误.

小智 5

我有同样的问题。找到了解决办法。 您必须将 udpassociate bindreply udpreply 命令添加到 conf 文件。这是我的 conf 文件,适用于语音通话。

logoutput: syslog /var/log/danted.log
internal: ip port = 1080
external: ip
socksmethod: username

user.privileged: root
user.unprivileged: nobody


client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: error connect


}
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bind connect udpassociate bindreply udpreply
log: error connect
}
Run Code Online (Sandbox Code Playgroud)


Kos*_*kov 5

用袜子代理UDP比看起来要复杂一些,因此让我们从头开始。

电报呼叫将UDP与袜子一起使用。Socks5 RFC1928定义了以下中继UDP的顺序:

  1. 客户端实例化一个TCP socks5连接。
  2. 客户端发送一个UDP ASSOCIATE包含客户端源地址和端口的请求,该请求将用于将UDP数据报发送到socks5服务器。它们可能为零(在电报中为零)(第4节)。
  3. Socks5服务器绑定了一个随机UDP端口以中继此TCP socks5连接的数据报,并发送一个UDP ASSOCIATE响应,其中包含客户端应将要中继的数据报发送到的地址和端口(第6节)。
  4. 要发送数据报,客户端必须在有效负载中添加一个标头,其中包含目标地址和端口,服务器应在其中转发该数据报(第7节)。
  5. 服务器将保持UDP端口绑定,直到TCP socks5连接终止。

如您所见,仅打开一个TCP端口是不够的。为了使UDP正常工作,客户端必须可以访问自动绑定的UDP端口。NAT和防火墙可能会使情况进一步复杂化。

Dante的UDP中继配置

  1. 电报呼叫是对等的,因此udpassociate应允许该命令0/0

    socks pass {
        from: 0.0.0.0/0
        to: 0.0.0.0/0
        # udp.portrange: 40000-45000
        command: udpassociate
        log: error connect disconnect
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. udpreply (对于实际的中继,上面的第4步)也应该允许所有人使用:

    socks pass {
        from: 0.0.0.0/0
        to: 0.0.0.0/0
        command: udpreply
        log: error connect disconnect
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果您的socks5服务器在防火墙后面,请打开一系列UDP端口(例如40000-45000),并将该udp.portrange: 40000-45000行添加到udpassociate块中(请参阅第一点中注释掉的示例)。然后,Dante仅绑定该范围内的UDP端口。

  4. 如果您的socks5服务器在NAT之后,则响应UDP ASSOCIATE请求中返回的目标地址将是本地IP,而不是外部IP。客户端不太可能访问该本地IP,因此发送的数据报将被静默丢弃。

    不幸的是,Dante使用TCP连接的目标地址作为客户端应向其发送UDP数据报的地址(请参阅源代码中的注释)。NAT将该地址从外部地址转换为本地地址,因此Dante关于客户端可以使用该目标地址到达代理的假设被打破了。

    一个不涉及修补Dante的可能解决方案是使用iptables将目标地址从本地地址更改为外部地址(假设它是已知的且不会更改):

    # 203.0.113.12 – the external IP
    # 1080/tcp - Dante TCP port
    # 40000:45000 – Dante UDP portrange
    iptables -t nat -A PREROUTING -p tcp --dport 1080 -j DNAT --to-destination 203.0.113.12
    iptables -t nat -A PREROUTING -p udp --dport 40000:45000 -j DNAT --to-destination 203.0.113.12
    
    # If external address is not added to any network device on that 
    # machine, then add it to the loopback interface, so the kernel 
    # would know where to route the DNATed packets:
    ip addr add 203.0.113.12/32 dev lo
    
    Run Code Online (Sandbox Code Playgroud)


小智 -2

您应该在电报设置中启用通过代理进行呼叫。