xmrig-proxy 使用教程

就像前面写的那样,有些时候 ISP 屏蔽了矿池,需要使用代理才能挖矿,这种情况下,使用其他代理也可以:只是加密/包装,绕过防火墙而已。但是真正的矿机代理,还有其他功能,比如减少矿池连接数:假如一个黑客,黑了全球几亿台机器,用来挖矿,如果没有代理,那么几亿台设备都连接某个矿池,首先这么多的连接,可能会被服务器当成 DDos 攻击,而且这么多的连接,矿池能不能带动也是个问题。还有,黑客也想隐藏自己有这么多矿机的事实,不想暴露。加入代理,就可以很好的解决这个问题:代理对矿机来说,就是矿池,对矿池来说,就是矿机。矿机通过代理后,对矿池不可见。同时,代理也有一定的管理功能,比如可以批量的换矿池。

代理作为中间层,矿池看它是矿机,矿机看它是矿池

xmrig-proxy 不仅能作为 Monero 的代理,还支持 Electroneum 等,详情见 github xmrig-proxy

但是,这个工具连个文档也没有(至少我目前没找到),官方生成配置的网站也是两年前的,不适用最新的版本,网上也没搜到最新的配置方法,只能用命令行一点点摸索着用。


自行编译xmrig-proxy

sudo apt update && sudo apt full-upgrade -y
sudo apt install git build-essential cmake libuv1-dev uuid-dev libmicrohttpd-dev libssl-dev
git clone https://github.com/xmrig/xmrig-proxy.git
mkdir xmrig-proxy/build
cd xmrig-proxy/build
cmake ..
make -j$(nproc)

然后在 screen 里执行,完整的参数在后面,下面这个是我使用的参数,测试正常。-o是矿池地址, --bind是本地绑定的地址,--tls-bind是绑定的 tls 域名。挖矿难度,至少设置为 hashrate 的 30 倍,一般1分钟有 1,2 个提交为好。理论上,连接 p2pool 矿池不需要在矿机上设置钱包地址,实际上单台矿机也的确如此。但是不加上 xmrig-proxy 报错(现在可能不报错了,没试)

screen -S proxy

./xmrig-proxy -o 127.0.0.1:3333 --coin monero --tls-bind p2p.acytoo.com --bind 0.0.0.0:34512 --custom-diff 55001 --custom-diff-stats -u [钱包地址]

下面是矿机的配置文件,矿池 url 指向了代理地址

{
    "autosave": true,
    "cpu": true,
    "opencl": false,
    "cuda": false,
    "pools": [
        {
            "url": "p2p.acytoo.com:34512",
            "rig-id": "proxied-miner",
            "tls": true
        }
    ]
}

在 Github 上找到了 xmrig-proxy 关于 tls 的文档,原来是新版本太简单,不需要复杂的配置,全自动化了。


完整的 xmrig-proxy 参数。不同版本,可能不同。

Usage: xmrig-proxy [OPTIONS]

Network:
  -o, --url=URL                 URL of mining server
  -a, --algo=ALGO               mining algorithm https://xmrig.com/docs/algorithms
      --coin=COIN               specify coin instead of algorithm
  -u, --user=USERNAME           username for mining server
  -p, --pass=PASSWORD           password for mining server
  -O, --userpass=U:P            username:password pair for mining server
  -x, --proxy=HOST:PORT         connect through a SOCKS5 proxy
  -k, --keepalive               send keepalived packet for prevent timeout (needs pool support)
      --rig-id=ID               rig identifier for pool-side statistics (needs pool support)
      --tls                     enable SSL/TLS support (needs pool support)
      --tls-fingerprint=HEX     pool TLS certificate fingerprint for strict certificate pinning
      --dns-ipv6                prefer IPv6 records from DNS responses
      --dns-ttl=N               N seconds (default: 30) TTL for internal DNS cache
      --daemon                  use daemon RPC instead of pool for solo mining
      --daemon-poll-interval=N  daemon poll interval in milliseconds (default: 1000)
      --self-select=URL         self-select block templates from URL
      --submit-to-origin        also submit solution back to self-select URL
  -r, --retries=N               number of times to retry before switch to backup server (default: 5)
  -R, --retry-pause=N           time to pause between retries (default: 5)
      --user-agent              set custom user-agent string for pool
      --donate-level=N          donate level, default 0%%

Options:
  -b, --bind=ADDR               bind to specified address, example "0.0.0.0:3333"
  -m, --mode=MODE               proxy mode, nicehash (default) or simple
      --custom-diff=N           override pool diff
      --custom-diff-stats       calculate stats using custom diff shares instead of pool shares
      --reuse-timeout=N         timeout in seconds for reuse pool connections in simple mode
      --no-workers              disable per worker statistics
      --access-password=P       set password to restrict connections to the proxy
      --no-algo-ext             disable "algo" protocol extension

API:
      --api-worker-id=ID        custom worker-id for API
      --api-id=ID               custom instance ID for API
      --http-host=HOST          bind host for HTTP API (default: 127.0.0.1)
      --http-port=N             bind port for HTTP API
      --http-access-token=T     access token for HTTP API
      --http-no-restricted      enable full remote access to HTTP API (only if access token set)

TLS:
      --tls-bind=ADDR           bind to specified address with enabled TLS
      --tls-gen=HOSTNAME        generate TLS certificate for specific hostname
      --tls-cert=FILE           load TLS certificate chain from a file in the PEM format
      --tls-cert-key=FILE       load TLS certificate private key from a file in the PEM format
      --tls-dhparam=FILE        load DH parameters for DHE ciphers from a file in the PEM format
      --tls-protocols=N         enable specified TLS protocols, example: "TLSv1 TLSv1.1 TLSv1.2 TLSv1.3"
      --tls-ciphers=S           set list of available ciphers (TLSv1.2 and below)
      --tls-ciphersuites=S      set list of available TLSv1.3 ciphersuites

Logging:
  -S, --syslog                  use system log for output messages
  -l, --log-file=FILE           log all output to a file
  -A  --access-log-file=FILE    log all workers access to a file
      --no-color                disable colored output
      --verbose                 verbose output

Misc:
  -c, --config=FILE             load a JSON-format configuration file
  -B, --background              run the proxy in the background
  -V, --version                 output version information and exit
  -h, --help                    display this help and exit
      --dry-run                 test configuration and exit