heiher/hev-socks5-tproxy

请问这里发行的版本是否可以直接用在openwrt上?

eroica-zhao opened this issue · 16 comments

我直接将命令复制到了op里面,配合socks5客户端使用,但一直无法成功,不知道是什么原因。
执行 hs5t CONFIG_FILE,得到如下输出,不知道是否正常?
之所以这么问是看到您还有一个库是专门针对openwrt的版本,不过似乎很久没更新。

[2023-04-29 15:20:13] [E] 0x7f4c3ceb5e00 socks5 client read response
[2023-04-29 15:20:13] [E] 0x7f4c3ceb5e00 socks5 session handshake
[2023-04-29 15:20:13] [E] 0x7f4c3cece6b0 socks5 client read response
[2023-04-29 15:20:13] [E] 0x7f4c3cece6b0 socks5 session handshake
[2023-04-29 15:20:13] [E] 0x7f4c3ceb5c20 socks5 client read response
[2023-04-29 15:20:13] [E] 0x7f4c3ceb5c20 socks5 session handshake
[2023-04-29 15:20:13] [E] 0x7f4c3cece750 socks5 client read response
[2023-04-29 15:20:13] [E] 0x7f4c3cece750 socks5 session handshake

单独使用socks5客户端,经测试是可用的。
op上使用nftables,防火墙规则用其他代理redir没问题,不太熟tproxy规则,不过也是参照了您的教程和网上的教程,感觉是对的。
尝试过这里的多个版本,都不成功,盼指教。

heiher commented

hs5t的配置文件贴出来看看

# Main configuration for hev-socks5-tproxy

socks5:
  # Socks5 server port
  port: 10801
  # Socks5 server address
  address: 127.0.0.1
  # Socks5 UDP relay mode (tcp|udp)
  #udp: 'tcp'
  # Socks5 server username
  #username: 'username'
  # Socks5 server password
  #password: 'password'

tcp:
  # TCP port
  port: 12345
  # TCP address
  address: '0.0.0.0'

#udp:
#  # UDP port
#  port: 1088
#  # UDP address
#  address: '::'
#
## Redirect DNS to local server on gateway
##   [address]:port <-> [upstream]:53 (dnsmasq)
#dns:
#  # DNS port
#  port: 1053
#  # DNS address
#  address: '::'
#  # DNS upstream
#  upstream: 127.0.0.1

#misc:
   # task stack size (bytes)
#  task-stack-size: 8192
   # udp recv buffer size (bytes)
#  udp-recv-buffer-size: 1048576
   # connect timeout (ms)
#  connect-timeout: 5000
   # read-write timeout (ms)
#  read-write-timeout: 60000
   # stdout, stderr or file-path
  log-file: stdout
   # debug, info, warn or error
  log-level: info
   # If present, run as a daemon with this pid file
#  pid-file: /run/hev-socks5-tproxy.pid
   # If present, set rlimit nofile; else use default value
#  limit-nofile: 65535

heiher commented

试试改下udp模式:

socks5:
  udp: 'udp'

还是不行。。。
输出和上面贴的一样,不知道是什么意思?是成功和客户端连接上了吗?
还有就是hs5t版本,否需要专门针对op的版本?
请问mangle表下面这样设置规则对吗?
同时还运行着针对tcp的redir规则。

    chain output {
       type route hook output priority mangle;policy accept;
		ip daddr @rsvips  return
		ip daddr @cnips  return
		meta l4proto { tcp, udp } mark set 1
    }
    chain prerouting {
        type filter hook prerouting priority mangle; policy accept;
		ip daddr @rsvips return
		ip daddr @cnips return
		meta l4proto { tcp, udp } counter tproxy to :12345 mark set 1 nftrace set 1
    }
heiher commented

输出和上面贴的一样,不知道是什么意思?是成功和客户端连接上了吗?

读取socks5服务端的响应失败。

还有就是hs5t版本,否需要专门针对op的版本?

openwrt是可用的。

请问mangle表下面这样设置规则对吗?

看上去没有问题。

同时还运行着针对tcp的redir规则。

要看命中优先级,不确定是否影响。

可能是与socks5服务端适配问题,上面的信息看不出问题原因,可以抓包再看看。

谢谢答复。
我把nat表的redir相关规则注释掉,只剩mangle表之后,启动后的输出只有这个了,没有了滚动输出。

[2023-04-29 15:55:08] [E] socks5 tproxy udp addr
[2023-04-29 15:55:08] [E] socks5 tproxy udp addr

这里说的socks5服务器,就是配置文件里面的这个部分对吧?不是远端vps的server吧?

socks5:
  # Socks5 server port
  port: 10801
  # Socks5 server address
  address: 127.0.0.1

抓包只会tcpdump,具体需要看哪个端口?12345还是10801?

heiher commented

只关注与直接提供socks5服务的握手,不知道你的环境中socks5服务器是部署在远端vps上。抓包只要10801端口就行。

谢谢,我抓包看看。
嗯,我的环境是op上安装了某个socks5的客户端,远端vps上安装这个socks5的服务器端。
理想状态是这个op的socks5客户端直接支持redir,但作者目前不考虑添加,只能借助第三方软件实现。
另外突然发现启动hs5t后的输出时间有问题,和op的系统时间不一致。。
这个socks5软件好像提到client-server时间同步的问题,不知道这个有没有关系。。。
只能逐个排错。。。
另外提一句,之前用您老版本的时候,启动之后好像很快就会消耗大量资源,导致系统停止响应,top命令查看出现很多dnsmasq的进程,一直无法使用。最近2.4之后好像没有这个问题。

heiher commented

好,你再看看吧,多数是与socks5服务端的兼容问题,很可能是socks5服务端不支持udp吧?

消耗资源的问题猜测可能与之前没有在程序中默认配置较高的ulimit open files有关,我自用是在systemd.service文件中配置的65535,直接运行的话很可能只有1024,连接稍微多一点就很容易达到限制,触发异常。

输出的时间很是奇怪,为什么会跟系统时间不一致呢?
另外,的确,远端vps和op客户端都设置为tcp,因为国内运营商的qos因素,并没有启用udp。
这个会有影响吗?我应该怎么调整设置?
#udp: 'tcp'
这句命令注释掉的话,默认使用哪种模式?
输出不滚动又代表什么呢?没有活跃连接的意思?

heiher commented

时间差异可能是不同程序显示不同时区的导致的,应该不是当前问题的原因。

如果需要代理udp(包括dns,而不采用hs5t的dns配置),则需要socks5服务端支持udp代理,否则nftables里tproxy应该只配置tcp协议。

不显示指定 socks5.udp,默认是 tcp。

当默认的 log-level 下,没有输出,不好判断原因,可能是没有访问进入,也可能有访问但没有错误。

其实我不需要代理udp,dns采用了dnscrypt proxy2。
op端使用别的代理软件时,也只需要转发tcp流量。您可以看到我的hs5t配置文件里面没有udp的设置。
但是您的教程里面只提到了使用tproxy规则,然后我对nftables(包括iptables)不熟悉,只能依葫芦画瓢。
如果不需要代理udp,是不是其实不需要mangle表和tproxy规则?
换句话说,hs5t支持redir吗?还是只能用tproxy?

heiher commented

试试这样吧:

    chain output {
       type route hook output priority mangle;policy accept;
		ip daddr @rsvips  return
		ip daddr @cnips  return
		meta l4proto tcp mark set 1
    }
    chain prerouting {
        type filter hook prerouting priority mangle; policy accept;
		ip daddr @rsvips return
		ip daddr @cnips return
		meta l4proto tcp counter tproxy to :12345 mark set 1 nftrace set 1
    }

您上面的修改没有起作用,依旧无法建立连接。

即使配置文件注释掉#udp: 'tcp',输出内容还是出现udp
[E] socks5 tproxy udp addr
不知道是什么意思?这里的tproxy,是否也意味着hs5t只支持tproxy,而不支持redirect?

另外我注释掉mangle表的全部规则,只启用nat表和redir规则的情况下,tcpdump抓包10801端口得到很多类似的滚动信息,不知道您有什么发现吗?

01:01:49.051684 lo In IP localhost.33820 > localhost.10801: Flags [.], ack 3, win 512, options [nop,nop,TS val 3911558156 ecr 3911558156], length 0
01:01:49.052223 lo In IP localhost.33826 > localhost.10801: Flags [S], seq 2519653046, win 65495, options [mss 65495,sackOK,TS val 3911558157 ecr 0,nop,wscale 7], length 0
01:01:49.052256 lo In IP localhost.10801 > localhost.33826: Flags [S.], seq 1994803421, ack 2519653047, win 65483, options [mss 65495,sackOK,TS val 3911558157 ecr 3911558157,nop,wscale 7], length 0
01:01:49.052288 lo In IP localhost.33826 > localhost.10801: Flags [.], ack 1, win 512, options [nop,nop,TS val 3911558157 ecr 3911558157], length 0
01:01:49.052348 lo In IP localhost.33826 > localhost.10801: Flags [P.], seq 1:14, ack 1, win 512, options [nop,nop,TS val 3911558157 ecr 3911558157], length 13
01:01:49.052365 lo In IP localhost.10801 > localhost.33826: Flags [.], ack 14, win 512, options [nop,nop,TS val 3911558157 ecr 3911558157], length 0
01:01:49.192052 lo In IP localhost.10801 > localhost.33826: Flags [P.], seq 1:3, ack 14, win 512, options [nop,nop,TS val 3911558297 ecr 3911558157], length 2
01:01:49.192076 lo In IP localhost.33826 > localhost.10801: Flags [.], ack 3, win 512, options [nop,nop,TS val 3911558297 ecr 3911558297], length 0
01:01:49.257715 lo In IP localhost.10801 > localhost.54944: Flags [.], ack 14, win 512, options [nop,nop,TS val 3911558362 ecr 3911543002], length 0
01:01:49.257690 lo In IP localhost.10801 > localhost.59132: Flags [.], ack 14, win 512, options [nop,nop,TS val 3911558362 ecr 3911543243], length 0

heiher commented

hs5t 应该只支持 tproxy 方式

hs5t 应该只支持 tproxy 方式

谢谢,大概明白了,我再试试看。