如何强制 SOCKS 代理(Danted)打开 UDP 端口

如何强制 SOCKS 代理(Danted)打开 UDP 端口

我几乎为这个问题浪费了 1 天的时间。

我有 2 台电脑; 1. Windows 作为客户端,10.20.30.20 2. Debian(最新)作为服务器,10.20.30.10

我安装 Dante(SOCKS 代理)并配置/重新启动它。我可以从“1”使用这个 SOCKS 代理(10.20.30.10/1080TCP)。 (火狐浏览器,无授权)

所以我将此代理添加到 uTorrent 的连接设置中。代理服务器:类型 = SOCKS5,代理 = 10.20.30.10,端口 = 1080,无身份验证

uTorrent 开始使用我的 SOCKS 代理,但无法连接到 DHT/UDP。 uTorrent 建立这些连接(示例);

*65432 = uTorrent's Listening Port

TCP 10.20.30.20:(random)->10.20.30.10:1080 {Yeah, this is what I'm expected!}
UDP 10.20.30.20:65432->10.20.30.10:(random) {Huh?}

由于 uTorrent 生成 UDP 数据包,而 Dante 未打开 UDP 端口,因此 UDP 数据包被服务器忽略(丢弃)。 Dante 仅打开 1 个端口(TCP 1080),我不明白为什么 uTorrent 在中继 UDP 时不使用 TCP 协议。

我的问题是: 1. 当询问时,如何强制 Dante 动态打开 UDP 端口? 2. 如果“SOCKS5 支持UDP”为真,为什么uTorrent 无法将UDP 发送到TCP 端口?


但丁设置

logoutput: syslog
internal: 10.20.30.10 port = 1080
external: tun0
method: username none
clientmethod: none
user.privileged: root
user.notprivileged: nobody
user.libwrap: nobody
connecttimeout: 50

client pass {
from: 10.20.30.20/32 port 1024-65535 to: 0.0.0.0/0
}
client block {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect error
}

block {
from: 0.0.0.0/0 to: 127.0.0.0/8
log: connect error
}
pass {
from: 10.20.30.20/32 to: 0.0.0.0/0
protocol: tcp udp
#command: bind connect udpassociate
##^ I already tried Enable/Disable command, change from to 0.0.0.0/0, and so on, but no success!
}
block {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect error
}

答案1

即使我使用了 UDP,我也遇到了同样的问题,UDP 无法工作protocol: tcp udp。使用后,将以下更改为下面的袜子传递命令对我有用。

client pass...
client block...

socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    command: bind connect udpassociate
}
socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    command: bindreply udpreply
}

答案2

以防万一,除了@anonnecroguest的回答:

Dante SOCKS 服务器支持五个可在规则语句中使用的命令 ( bindconnectudpassociatebindrepyudpreply)。从概念上讲,它们分为两类:前三个对应于内部客户提出的请求。起始地址将是内部客户端的地址,终止地址将是客户端希望与之通信的外部计算机的地址。

其余两个 (bindreplyudpreply) 对应于外部主机进行通信的结果,或者是与使用 bind 创建的端口绑定建立的 TCP 连接,或者是发送到使用 udpassociate 绑定的端口的 UDP 数据包。对于这两个命令,from 地址将对应于外部主机,to 地址对应于内部客户端。因此,为两组命令创建了单独的规则。

来源:https://www.inet.no/dante/doc/1.3.x/config/server.html

对于 UDP,不支持绑定操作。 SOCKS 客户端必须发送第一个 UDP 数据包。 SOCKS 客户端也没有直接的方法来知道 SOCKS 服务器使用什么地址来转发它发送的 UDP 数据包...
第三,对于BINDUDPASSOCIATE操作,当远程主机尝试通过以下方式连接或发送 UDP 数据包到 SOCKS 客户端时:客户之前创建的关联。

来源:https://www.inet.no/dante/doc/1.4.x/config/socks.html

#generic pass statement - bind/outgoing traffic
socks pass {  
        from: 0.0.0.0/0 to: 0.0.0.0/0
        command: bind connect udpassociate
#        log: error # connect disconnect iooperation
        socksmethod: authmethod2
}

# ...

# generic pass statement for incoming connections/packets
socks pass {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        command: bindreply udpreply
#        log: error # connect disconnect iooperation
} ```

来源:https://www.inet.no/dante/doc/1.4.x/config/auth.html


有关的:
https://stackoverflow.com/a/49975561/5113030(使用 Dante 进行 UDP 中继配置...)
https://www.inet.no/dante/doc/1.4.x/config/session.html(本页描述了如何配置会话功能...)

相关内容