简单用法
代理服务搭建
基本网络链路入上图,本地通过VPS访问其他网站。
Chisel代理搭建
服务端命令:
./chisel server --socks5 --port 8080 #端口可以自定义
./chisel server --socks5 --port 8080 --auth username:password #--auth开启服务端客户端的连接认证
客户端命令:
./chisel client [VPS-IP]:8080 127.0.0.1:1080:socks
./chisel client --auth "username:password" [VPS-IP]:8080 127.0.0.1:1080:socks #服务端开启--auth时客户端连接要加上--auth,注意这个--auth的账号密码不是socks5的账号密码,socks5的端口可以自己定义,默认1080
这条命令会将本地的 127.0.0.1:1080 设置为 SOCKS5 代理,所有通过此代理的流量都将经过你的服务器转发。
服务端客户端连接成功后,设置本地的代理服务器,这里使用浏览器进行验证。
浏览器代理设置:
设置完成后,进行验证,先使用直接访问查看浏览器当前IP地址。
然后选择设置好的代理再进行访问。
发现IP已经变成VPS的IP地址了。
反向Socks5代理
这种情况使用于内网穿透。
服务端命令:
./chisel server --reverse --port 8080
./chisel server --reverse --socks5 --port 8080 -auth [username]:[password]
客户端命令:
./chisel client 192.168.88.108:8080 R:192.168.88.108:8090:socks
./chisel client -auth [username]:[password] 192.168.88.108:8080 R:192.168.88.108:8090:socks
这条命令会告诉 chisel 客户端去连接位于192.168.88.108:8080 的服务端,并要求服务端开始监听服务器本地的 8090 端口(即 R:192.168.88.108:8090注:端口可以更改,默认是1080),然后将所有到达该端口的流量通过隧道转发给客户端,这里的 socks 表示这是个 SOCKS5 代理请求。
这样设置之后,任何连接到服务端 8090 端口的 SOCKS5 请求都会被转发到客户端的 SOCKS5 代理上处理。
proxifier代理服务器配置
proxifier代理规则配置
配置完成,并测试
至此本机可以通过Chisel与Target1搭建的Socks5代理访问Target2。
使用说明
Chisel是一个服务端客户端一体的代理工具。
Chisel server帮助:
使用方法: chisel server [选项]
选项:
--host, 定义HTTP监听主机 - 网络接口
(默认为环境变量HOST,若未设置则回退到0.0.0.0)。
--port, -p, 定义HTTP监听端口(默认为环境变量PORT,若未设置则回退到8080端口)。
--key, (已弃用,请使用--keygen和--keyfile代替)
一个可选字符串,用于生成ECDSA公钥和私钥对的种子。所有通信都将使用此密钥对进行加密。与客户端共享随后生成的指纹以启用中间人攻击检测(默认为CHISEL_KEY环境变量,如果没有设置,则每次运行时都会生成新密钥)。
--keygen, 新生成的PEM编码SSH私钥文件的保存路径。
如果用户依赖于你的--key指纹,你也可以包含你的--key来输出现有的密钥。使用-(破折号)将生成的密钥输出到标准输出。
--keyfile, 可选的PEM编码SSH私钥文件路径。当设置了此标志时,--key选项将被忽略,并使用提供的私钥来保护所有通信。(默认为CHISEL_KEY_FILE环境变量)。由于ECDSA密钥较短,您也可以将keyfile设置为内联的base64私钥(例如 chisel server --keygen - | base64)。
--authfile, 用户信息文件users.json的可选路径。该文件应该是一个对象,用户定义如下:
{
"<user:pass>": ["<addr-regex>","<addr-regex>"]
}
当<user>连接时,会验证其<pass>, 并将每个远程地址与地址正则表达式列表进行比较以查找匹配项。对于正常的远程服务,地址总是采用"<remote-host>:<remote-port>"的形式;对于反向端口转发远程服务,则采用"R:<local-interface>:<local-port>"形式。当此文件发生变化时,它将自动重新加载。
--auth, 单个拥有完全访问权限用户的可选字符串,格式为<user:pass>。这相当于创建了一个authfile,内容为{"<user:pass>": [""]}。如果未设置,则使用AUTH环境变量。
--keepalive, 可选的心跳间隔。由于底层传输是HTTP,很多时候我们将穿越代理,这些代理经常关闭空闲连接。你必须指定带有单位的时间,例如'5s'或'2m'。默认为'25s'(设置为0s禁用)。
--backend, 当chisel接收到正常HTTP请求时指定另一个要代理请求的HTTP服务器。用于隐藏chisel。
--socks5, 允许客户端访问内部SOCKS5代理。更多详情见chisel client --help。
--reverse, 允许客户端指定除正常远程外的反向端口转发远程。
--tls-key, 启用TLS并提供PEM编码TLS私钥的可选路径。设置此标志时,你还必须设置--tls-cert,且不能设置--tls-domain。
--tls-cert, 启用TLS并提供PEM编码TLS证书的可选路径。设置此标志时,你还必须设置--tls-key,且不能设置--tls-domain。
--tls-domain, 启用TLS并使用Let's Encrypt自动获取TLS密钥和证书。设置--tls-domain需要443端口。你可以指定多个--tls-domain标志来服务于多个域名。生成的文件缓存于"$HOME/.cache/chisel"目录中。你可以通过设置CHISEL_LE_CACHE变量修改此路径,或将该变量设置为"-"以禁用缓存。你可以选择性地通过设置CHISEL_LE_EMAIL提供证书通知电子邮件。
--tls-ca, PEM编码CA证书包的路径或持有多个PEM编码CA证书包文件的目录,用于验证客户端连接。所提供的CA证书将替代系统根证书使用。通常用于实现双向TLS。
--pid 在当前工作目录生成pid文件
-v, 启用详细日志记录
--help, 此帮助文本
信号:
chisel进程正在监听:
SIGUSR2信号打印进程统计信息,
SIGHUP信号绕过客户端重连计时器
版本:
X.Y.Z
了解更多:
https://github.com/jpillora/chisel
Chisel client帮助:
使用方法: chisel client [选项] <server> <remote> [remote] [remote] ...
<server> 是指向 chisel 服务器的 URL。
<remote> 是通过服务器隧道传输的远程连接,每个都采用如下形式:
<local-host>:<local-port>:<remote-host>:<remote-port>/<协议>
■ local-host 默认为 0.0.0.0(所有接口)。
■ local-port 默认为 remote-port。
■ remote-port 是必需的*。
■ remote-host 默认为 0.0.0.0(服务器本地主机)。
■ 协议默认为 tcp。
这会将 <remote-host>:<remote-port> 从服务器共享到客户端作为 <local-host>:<local-port>, 或者:
R:<local-interface>:<local-port>:<remote-host>:<remote-port>/<协议>
这实现了反向端口转发,将 <remote-host>:<remote-port> 从客户端共享到服务器的 <local-interface>:<local-port>。
示例远程连接
3000
example.com:3000
3000:google.com:80
192.168.0.5:3000:google.com:80
socks
5000:socks
R:2222:localhost:22
R:socks
R:5000:socks
stdio:example.com:22
1.1.1.1:53/udp
当 chisel 服务器启用了 --socks5 时,远程可以指定 "socks" 替代 remote-host 和 remote-port。对于 "socks" 远程,默认的本地主机和端口是 127.0.0.1:1080。对此远程的连接将在服务器的内部 SOCKS5 代理处终止。
当 chisel 服务器启用了 --reverse 时,远程可以用 R 前缀表示它们是反向的。也就是说,服务器将监听并接受连接,并通过指定远程的客户端进行代理。指定 "R:socks" 的反向远程将在服务器的默认 socks 端口 (1080) 监听,并在客户端的内部 SOCKS5 代理处终止连接。
当使用 stdio 作为 local-host 时,隧道会将此程序的标准输入/输出与远程连接起来。这在与 ssh ProxyCommand 结合使用时非常有用。你可以使用
ssh -o ProxyCommand='chisel client chiselserver stdio:%h:%p' \
[email protected]
来通过隧道连接到 SSH 服务器。
选项:
--fingerprint, 强烈建议提供一个指纹字符串,用于对服务器公钥执行主机密钥验证。指纹不匹配将会关闭连接。指纹是通过对 ECDSA 公钥使用 SHA256 哈希生成的,并以 base64 编码结果。指纹必须包含 44 个字符及末尾的等号 (=)。
--auth, 可选的用户名和密码(客户端身份验证),格式为 "<user>:<pass>"。这些凭据会与服务器 --authfile 中的凭据进行比较。默认为 AUTH 环境变量。
--keepalive, 可选的心跳间隔。由于底层传输是 HTTP,在很多情况下我们会穿过代理,而这些代理经常关闭空闲连接。你必须指定带有单位的时间,例如 '5s' 或 '2m'。默认为 '25s'(设置为 0s 禁用)。
--max-retry-count, 出错退出前重试的最大次数。默认为无限制。
--max-retry-interval, 断开连接后重试前的最大等待时间。默认为 5 分钟。
--proxy, 可选的 HTTP CONNECT 或 SOCKS5 代理,用于到达 chisel 服务器。可以在 URL 内指定认证信息。
例如,http://admin:[email protected]:8081 或 socks://admin:[email protected]:1080
--header, 设置自定义头部,格式为 "HeaderName: HeaderContent"。可以多次使用。(例如 --header "Foo: Bar" --header "Hello: World")
--hostname, 可选设置 'Host' 头部(默认为服务器 URL 中找到的主机名)。
--sni, 使用 TLS 时覆盖 ServerName(默认为 hostname)。
--tls-ca, 用于验证 chisel 服务器的可选根证书包。仅在使用 "https" 或 "wss" 连接服务器时有效。默认情况下,将使用操作系统的 CAs。
--tls-skip-verify, 跳过服务器 TLS 证书链和主机名的验证(如果使用 TLS 进行到服务器的传输连接)。如果设置了该选项,客户端接受服务器提供的任何 TLS 证书以及证书中的任何主机名。这只影响到服务器的 https (wss) 传输连接。Chisel 服务器的公钥仍然可以在建立内部连接后进行验证(参见 --fingerprint)。
--tls-key, 用于客户端身份验证(双向 TLS)的 PEM 编码私钥路径。
--tls-cert, 与提供的私钥匹配的 PEM 编码证书路径。证书必须启用客户端身份验证(双向 TLS)。
--pid 在当前工作目录生成 pid 文件
-v, 启用详细日志记录
--help, 此帮助文本
信号:
chisel 进程正在监听:
SIGUSR2 信号打印进程统计信息,
SIGHUP 信号绕过客户端重连计时器
版本:
X.Y.Z
了解更多:
https://github.com/jpillora/chisel
相关链接
https://github.com/jpillora/chisel
https://cloud.tencent.com/developer/article/1796773