git
的自带命令git --config 'http.proxy=socks5://127.0.0.1:4444'
或者通过ssh_config
中的proxycommand
使用socat
和nc
成功地将git
命令重新路由到SOCKS代理。
但问题可能在于DNS查找失败,因为查找是在本地而不是远程的SOCKS代理上进行的。例如,在内部网络的情况下,服务器可能没有互联网上的域名(只能在内部网络DNS中知道)。
有两种方法可以解决这个问题。第一种方法我见过多次推荐,但它假定您控制远程服务器。
将本地的53流量(DNS)重定向到端口X,将其转发到端口Y的服务器,将端口Y转发到服务器上的53。通常情况下,X=Y以简化处理。
截获检索名称的IP地址的本地系统调用。
我认为2更好,因为它从源头解决了问题,并且只假设您控制本地机器,这比控制远程服务器更可能。
proxychains-ng
在访问本地nss之前截获了getaddrinfo系统调用。
步骤:
打开一个SOCKS5端口
ssh -v -NT -D 127.0.0.1:4444 intranethost
设置proxychains
以使用该端口。
〜/ .proxychains / proxychains.conf
strict_chain
proxy_dns
tcp_read_time_out 150000
tcp_connect_time_out 80000
[ProxyList]
socks5 127.0.0.1 4444
使用 proxychains 封装 git。
alias gitproxy='proxychains git'
gitproxy clone intranethost:path/to/repo.git
采用这种方法的优点在于,这对Git及其远程操作都是透明的。
方法4
成功了! - spike014ncat
:ProxyCommand ncat --proxy <proxy>:<port> --proxy-type socks5 --proxy-auth <user>:<pass> %h %p
。 - Héctor Valverde