#key-file #p2p #node-key #tox #instant-messaging #networking #toxcore

app tox-node

运行 tox 节点的服务器应用程序

9 个版本

0.1.1 2020 年 12 月 27 日
0.1.0 2020 年 10 月 7 日
0.0.8 2019 年 5 月 27 日
0.0.7 2019 年 1 月 27 日
0.0.2 2018 年 3 月 6 日

多媒体 中排名第 386

每月下载量 28

GPL-3.0+

52KB
1K SLoC

Tox 引导节点

运行 tox 引导节点的服务器应用程序。

构建和运行

您需要 Rust >= 1.42.0。

使用以下方式构建

cargo build --release

使用以下方式运行

cargo run --release

如果您想更改默认日志级别,可以通过设置环境变量 RUST_LOG 来实现。例如,如果您想查看所有接收和发送的数据包,可以将日志级别更改为 trace 以适用于 tox

RUST_LOG=tox=trace cargo run --release

还可以通过 --log-type 参数使用 syslog。

在 Docker 中运行 tox-node

tox-node 有一个 Docker 仓库,其中暴露了 443/tcp 3389/tcp 33445/tcp 33445/udp 端口。您可以使用 Docker 运行 tox-node,如下所示

TOX_SECRET_KEY=<secret key> docker run -e TOX_SECRET_KEY toxrust/tox-node <ARGS>

docker run --mount type=bind,source=<path/to/config.yml>,target=<path/to/target/config.yml> \
    --mount type=bind,source=<path/to/keys>,target=/var/lib/tox-node/keys toxrust/tox-node config <path/to/config.yml>

示例命令

TOX_SECRET_KEY="4a2d4098e9d6ae6addb8035085cf1467fd7611edd2e22df2f1b60a71763b4ce4" \
    docker run -e TOX_SECRET_KEY toxrust/tox-node \
    --bootstrap-node 1D5A5F2F5D6233058BF0259B09622FB40B482E4FA0931EB8FD3AB8E7BF7DAF6F 198.98.51.198:33445 \
    --udp-address '0.0.0.0:33445' --tcp-address '0.0.0.0:33445' \
    --motd "{{start_date}} {{uptime}} Tcp: incoming {{tcp_packets_in}}, outgoing {{tcp_packets_out}}, Udp: incoming {{udp_packets_in}}, outgoing {{udp_packets_out}}"

docker run --mount type=bind,source=$PWD/dpkg/config.yml,target=/config.yml \
    --mount type=bind,source=$PWD/keys,target=/var/lib/tox-node/keys toxrust/tox-node config /config.yml

在 NixOS 上运行 tox-node

如果您正在使用 NixOS(不稳定频道),您可以通过将 services.tox-node.enable = true; 添加到您的 configuration.nix 来安装和运行 tox-node。

配置选项也可用。以下是一个配置示例

{
  services.tox-node = {
    enable = true;

    logType = "Syslog";
    keysFile = "/var/lib/tox-node/keys";
    udpAddress = "0.0.0.0:33445";
    tcpAddresses = [ "0.0.0.0:33445" ];
    tcpConnectionLimit = 8192;
    lanDiscovery = true;
    threads = 1;
    motd = "Hi from tox-rs! I'm up {{uptime}}. TCP: incoming {{tcp_packets_in}}, outgoing {{tcp_packets_out}}, UDP: incoming {{udp_packets_in}}, outgoing {{udp_packets_out}}";
  };
}

在 Arch Linux 上运行 tox-node

通过 AUR 以任何方便的方式安装 tox-node-rstox-node-rs-git。有关更多信息,请参阅 ArchWiki

公告

每日消息(MOTD)是“每日消息”的缩写。Tox引导节点有一个特殊的包类型,称为BootstrapInfo,可以同时获取MOTD和版本信息。我们的节点支持基本的MOTD模板,可以通过--motd键来指定。可以使用以下变量,这些变量被包围在{{ }}

  • start_date:节点启动的时间
  • uptime:以“XX天XX小时XX分钟”格式的运行时间
  • tcp_packets_in:TCP传入包的计数器
  • tcp_packets_out:TCP传出包的计数器
  • udp_packets_in:UDP传入包的计数器
  • udp_packets_out:UDP传出包的计数器

密钥生成

为了运行节点,您必须提供密钥或密钥文件的路径。

密钥文件

密钥文件是一个二进制文件,其中顺序存储了公钥和私钥。可以通过--keys-file参数指定密钥文件的路径。如果文件不存在,它将自动创建并使用自动生成的密钥。该文件的格式与tox-bootstrapd兼容。

您还可以从文件中提取密钥

hexdump -s32 -e '32/1 "%02x" "\n"' ./key

私钥

私钥是一个32字节的十六进制字符串。可以通过TOX_SECRET_KEY环境变量指定。任何随机字符串都适用,但请注意,只有强大的随机生成器才应该用于生成私钥。以下是在终端中执行的一些示例

openssl rand -hex 32
hexdump -n 32 -e '8 "%08x" 1 "\n"' /dev/random
od -vN 32 -An -tx1 /dev/random | tr -d " \n" ; echo

配置或CLI

要使用配置运行,请使用config子命令,例如tox-node config <file>。以下是一个示例config.yml。

log-type: Stderr
keys-file: ./keys
udp-address: 0.0.0.0:33445
tcp-addresses:
  - 0.0.0.0:33445
tcp-connections-limit: 512
motd: "{{start_date}} {{uptime}} Tcp: incoming {{tcp_packets_in}}, outgoing {{tcp_packets_out}}, Udp: incoming {{udp_packets_in}}, outgoing {{udp_packets_out}}"
bootstrap-nodes:
  - pk: 1D5A5F2F5D6233058BF0259B09622FB40B482E4FA0931EB8FD3AB8E7BF7DAF6F
    addr: 198.98.51.198:33445
  - pk: DA4E4ED4B697F2E9B000EEFE3A34B554ACD3F45F5C96EAEA2516DD7FF9AF7B43
    addr: 185.25.116.107:33445
threads: auto # or any u16 > 0
lan-discovery: True

或者您可以像这样使用CLI

tox-node --keys-file keys \
    --bootstrap-node 1D5A5F2F5D6233058BF0259B09622FB40B482E4FA0931EB8FD3AB8E7BF7DAF6F 198.98.51.198:33445 \
    --udp-address '0.0.0.0:33445' --tcp-address '0.0.0.0:33445' \
    --motd "{{start_date}} {{uptime}} Tcp: incoming {{tcp_packets_in}}, outgoing {{tcp_packets_out}}, Udp: incoming {{udp_packets_in}}, outgoing {{udp_packets_out}}"

构建Debian软件包

安装cargo-deb - 一个Cargo辅助命令,它可以从Cargo项目自动创建二进制Debian软件包(.deb)

cargo install cargo-deb

然后构建二进制Debian软件包

cargo deb

该命令将在target/debian目录中创建一个Debian软件包。软件包的描述

  • 二进制文件在/usr/bin/tox-node
  • 默认配置在/etc/tox-node/config.yml
  • Systemd配置在/lib/systemd/system/tox-node.service
  • postinstall将创建用户tox-node及其家目录在/var/lib/tox-node/
  • 如果服务启动期间缺少密钥,将在/var/lib/tox-node/keys中生成密钥

可以使用以下方法从config.yml生成引导节点

curl 'https://nodes.tox.chat/json' -s | jq -r '.nodes[] | .public_key + " " + .ipv4 + ":" + (.port | tostring)' | \
while read pk addr; do echo "  - pk: $pk"; echo "    addr: $addr"; done

依赖项

~31–42MB
~404K SLoC