无法通过tsocks调用curl?socks5代理环境下tsocks curl连接超时问题求助
我来帮你排查这个问题——核心原因其实是DNS解析的处理方式不一样:
你用curl --socks5-hostname的时候,是让SOCKS5代理服务器帮你解析域名(也就是把gitlab.com这个域名交给代理去查IP);但默认配置的tsocks是先在你本地把域名解析成IP,再把IP地址的请求发给代理。如果你的本地环境没法正常解析gitlab.com,或者解析出来的IP没法通过代理访问,自然就会超时。
下面是几个解决方法,按优先级试试:
1. 修改tsocks配置,让它用代理做DNS解析
编辑你之前修改的/etc/socks/tsocks.conf,在现有配置后面添加一行:
proxy_dns = on
保存之后再运行tsocks curl $url,这时候tsocks就会和你直接用--socks5-hostname的行为一致,把DNS请求也交给SOCKS5代理处理,应该就能正常访问了。
2. 确认tsocks加载的是你编辑的配置文件
有些系统里tsocks的默认配置文件路径是/etc/tsocks.conf,而不是你编辑的/etc/socks/tsocks.conf。你可以用调试模式查看它实际读取的配置文件:
tsocks -d curl $url
在输出里找类似Loading config file XXX的行,如果路径不对,就用环境变量指定配置文件再尝试:
TSOCKS_CONF_FILE=/etc/socks/tsocks.conf tsocks curl $url
3. 备选:让curl在tsocks环境下强制用远程DNS
如果上面的方法都不行,你也可以在tsocks环境里直接让curl使用--socks5-hostname参数(相当于让curl自己控制代理解析逻辑):
tsocks curl --socks5-hostname 127.0.0.1:1080 $url
不过这只是临时的 workaround,更推荐前两种从tsocks配置层面解决的方案。
内容的提问来源于stack exchange,提问作者showkey




