简单用法

代理服务搭建

基本网络链路入上图,本地通过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