Proxy 通过Dante socks5代理服务器进行的电报呼叫不工作

Proxy 通过Dante socks5代理服务器进行的电报呼叫不工作,proxy,telegram,socks,dante,Proxy,Telegram,Socks,Dante,我把Ubuntu 16.04上的Dante 1.4误认为是电报的socks5代理 聊天功能正常,但语音通话功能不正常,无法“连接” 为了代理电报语音通信,我需要配置一些特殊的东西吗 我使用一个非特权(>1024)TCP/UDP端口+登录名+密码进行连接 谢谢 UPD:当我打电话给某人时,那是一块木头: Apr 15 23:05:38 (1523736338.510915) danted[22977]: info: pass(1): udp/udpassociate [: username%USE

我把Ubuntu 16.04上的Dante 1.4误认为是电报的socks5代理

聊天功能正常,但语音通话功能不正常,无法“连接”

为了代理电报语音通信,我需要配置一些特殊的东西吗

我使用一个非特权(>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

我可以在目标设备上接听呼叫,但连接正在循环,30秒后出现错误。

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

允许客户端的语音通信 袜子通行证{ 从:0.0.0.0/0到:0.0.0.0/0 命令:udpreply 日志:连接断开连接错误 socksmethod:username }


iptables-A INPUT-p udp-m多端口--dports 1024:65535-j ACCEPT

我也遇到了同样的问题。找到了解决方案。 您必须向conf文件添加udpassociate bindpreply udpreply命令。这是我的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
}

用socks代理UDP比看起来要复杂一些,所以让我们从头开始

电报呼叫。Socks5定义了以下UDP中继顺序:

  • 客户端实例化TCP套接字5连接
  • 客户端发送一个
    UDP关联
    请求,其中包含客户端的源地址和端口,用于将UDP数据报发送到socks5服务器。它们可能是零(在电报中是)(第4节)
  • Socks5服务器绑定一个随机UDP端口,用于中继此TCP Socks5连接的数据报,并发送
    UDP关联
    响应,其中包含客户端应发送要中继的数据报的地址和端口(第6节)
  • 要发送数据报,客户机必须向有效负载添加一个包含目标地址和端口的头,服务器应在其中中继该数据报(第7节)
  • 服务器将保持UDP端口绑定,直到TCP socks5连接终止
  • 如您所见,仅打开一个TCP端口是不够的。要使UDP正常工作,客户端必须能够访问自动绑定的UDP端口。NAT和防火墙可能会使情况进一步复杂化

    使用Dante的UDP中继配置
  • 电报呼叫是对等的,因此应允许
    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
    }
    
  • udpreply
    (这是实际的中继,上面的第4步)也应该允许每个人:

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

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

    不幸的是,Dante使用TCP连接的目标地址作为客户端应向其发送UDP数据报的地址(请参阅)。NAT将该地址从外部地址更改为本地地址,因此Dante认为客户端可以使用该目标地址访问代理的假设被打破

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


  • 这个问题与编程有什么关系?我在谷歌上发现了一个被作者删除的问题。我在想他找到了解决办法。我在上注册,以便在私人信息中询问他,但发现没有PM。所以我问了同样但修改过的问题,仅此而已。我测试了其他socks5代理:V2ray和3proxy:everywhere调用不起作用。所以我想我可以在这里问低级网络开发人员,不要打我,你可以显示dante配置吗?你看到日志了吗?当然,我已经启用了它。但它阻碍了udp/udpassociate步骤。这里是它必须如何根据官方手册(最后一页)你的配置是不是为我工作。除了内部和外部接口之外,其他一切都是一样的。端口1080已打开。有什么想法吗?我也是。。。通话没有进展,只是打电话,交换钥匙,30秒超时后连接失败也许你们使用的是不同的版本?我的是1.4.1,我是从deb软件包安装的。
    # 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