<div align="center">
  <a href="https://rustvnt.com"><img src="https://socialify.git.ci/vnt-dev/vnt/image?description=1&logo=https%3A%2F%2Fraw.githubusercontent.com%2Fvnt-dev%2FVntApp%2Fmaster%2Fandroid%2Fapp%2Fsrc%2Fmain%2Fres%2Fmipmap-xxxhdpi%2Fic_launcher.png&name=1&pattern=Plus&theme=Auto" alt="" width="640" height="320" /></a>

### 参数介绍

</div>

-----------------------------------------------------

### -k `<token>`

一个虚拟局域网的标识，在同一服务器下，相同token的设备会组建一个局域网

### -n `<name>`

设备名称，方便区分不同设备

### -d `<id>`

设备id，每台设备的唯一标识，注意不要重复

### -c

关闭控制台交互式命令，后台运行时可以加此参数

### -s `<server>`

注册和中继服务器地址，注册和转发数据，以'TXT:'开头表示解析TXT记录，TXT记录内容必须是'host:port'形式的服务器地址

### -e `<stun-server>`

使用stun服务探测客户端NAT类型，不同类型有不同的打洞策略

### -a

加了此参数表示使用tap网卡，默认使用tun网卡，tun网卡效率更高

注意：仅在windows上支持使用tap，用于兼容低版本windows系统（低版本windows不支持wintun）

使用tap模式需要手动创建tap网卡，使用--nic参数指定已经创建好的tap网卡名称

### --nic `<tun0>`

指定虚拟网卡名称，默认tun模式使用vnt-tun，tap模式使用vnt-tap

### -i `<in-ip>`、-o  `<out-ip>`

配置点对网(IP代理)时使用，例如A(虚拟ip:10.26.0.2)通过B(虚拟ip:10.26.0.3,本地出口ip:192.168.0.10)访问C(
目标网段192.168.0.0/24)，

则在A配置 **'-i 192.168.0.0/24,10.26.0.3'** ,表示将192.168.0.0/24网段的数据都转发到10.26.0.3节点

在B配置 **'-o 192.168.0.0/24'**  ,表示允许将数据转发到 192.168.0.0/24 ,允许转发所有网段可以使用 **'-o 0.0.0.0/0'**

-i和-o参数均可使用多次，来指定不同网段，例如 **'-o 192.168.1.0/24 -o 192.168.2.0/24'**
表示允许转发目标为192.168.1.0/24或192.168.2.0/24这两个网段的数据

### -w `<password>`

提升通信安全性，使用该密码生成的密钥对客户端数据进行加密，并且服务端无法解密(包括中继数据)。使用相同密码的客户端才能通信

| 密码位数  | 加密算法       |  
|-------|------------| 
| 小于8   | AES128-GCM |
| 大于等于8 | AES256-GCM | 

### -W

开启和服务端通信的数据加密，采用rsa+aes256gcm加密客户端和服务端之间通信的数据，可以避免token泄漏、中间人攻击

注意：

1. -w `<password>`是用于客户端-客户端之间的加密，password不会传递到服务端，只添加这个参数不会加密客户端-服务端通信的数据
2. -W 用于开启客户端-服务端之间的加密

### -u `<mtu>`

设置虚拟网卡的mtu值，大多数情况下使用默认值效率会更高，也可根据实际情况微调这个值，不加密默认为1450，加密默认为1410

### ~~--tcp~~

~~和服务端使用tcp通信。有些网络提供商对UDP限制比较大，这个时候可以选择使用TCP模式，提高稳定性。一般来说udp延迟和消耗更低~~

新版本使用 `-s tcp://`的形式使用tcp

### --ip `<IP>`

指定虚拟ip,指定的ip不能和其他设备重复,必须有效并且在服务端所属网段下,默认情况由服务端分配

### --par `<parallel>`

任务并行度(必须为正整数),默认值为1,该值表示处理网卡读写的任务数,组网设备数较多、处理延迟较大时可适当调大此值

### --model `<model>`

加密模式，可选值
aes_gcm/aes_cbc/aes_ecb/sm4_cbc/chacha20_poly1305/chacha20/xor，默认使用aes_gcm，通常情况aes_gcm和chacha20_poly1305安全性高。
各种加密模式的安全性和速度都不相同，请按需选取

特别说明：xor只是对数据进行简单异或，仅仅避免了明文传输，安全性很差，同时对性能影响也极小；

| 密码位数   | model             | 加密算法              |  
|--------|-------------------|-------------------|
| `< 8`  | aes_gcm           | AES128-GCM        |
| `>= 8` | aes_gcm           | AES256-GCM        |
| `< 8`  | aes_cbc           | AES128-CBC        |
| `>= 8` | aes_cbc           | AES256-CBC        |
| `< 8`  | aes_ecb           | AES128-ECB        |
| `>= 8` | aes_ecb           | AES256-ECB        |
| `> 0`  | sm4_cbc           | SM4-CBC           |
| `> 0`  | chacha20_poly1305 | ChaCha20-Poly1305 |
| `> 0`  | chacha20          | ChaCha20          |
| `> 0`  | xor               | 简单异或混淆            |

### --finger

开启数据指纹校验，可增加安全性，如果服务端开启指纹校验，则客户端也必须开启，开启会损耗一部分性能

注意：默认情况下服务端不会对中转的数据做校验，如果要对中转的数据做校验，则需要客户端、服务端都开启此参数

### --punch `<punch>`

取值ipv4/ipv6，选择只使用ipv4打洞或者只使用ipv6打洞，默认两者都会使用

### --ports `<port1,port2>`

指定本地监听的端口组，多个端口使用逗号分隔，多个端口可以分摊流量，增加并发、减缓流量限制，tcp会监听端口组的第一个端口，用于tcp直连

- 例1：‘--ports 12345,12346,12347’ 表示udp监听12345、12346、12347这三个端口，tcp监听12345端口
- 例2：‘--ports 0,0’ 表示udp监听两个未使用的端口，tcp监听一个未使用的端口

### --cmd

开启交互式命令，开启后可以直接在窗口下输入命令，如需后台运行请勿开启

### --first_latency

优先使用低延迟通道，默认情况下优先使用p2p通道，某些情况下可能p2p比客户端中继延迟更高，可使用此参数进行优化传输

### --no-proxy

关闭内置的ip代理，内置的代理较为简单，而且一般来说直接使用网卡NAT转发性能会更高，
有需要可以自行配置NAT转发，[可参考‘编译’小节中的NAT配置](https://github.com/vnt-dev/vnt#%E7%BC%96%E8%AF%91)

### --dns `<223.5.5.5>`

设置域名解析服务器地址，可以设置多个。如果使用TXT记录的域名，则dns默认使用223.5.5.5和114.114.114.114，端口省略值为53

当地址解析失败时，会依次尝试后面的dns，直到有A记录、AAAA记录(或TXT记录)的解析结果

### --mapping `<udp:0.0.0.0:80-10.26.0.10:80>`

端口映射,可以设置多个映射地址，例如 '--mapping udp:0.0.0.0:80-10.26.0.10:80 --mapping tcp:0.0.0.0:80-10.26.0.11:81'
表示将本地udp 80端口的数据转发到10.26.0.10:80，将本地tcp 80端口的数据转发到10.26.0.11:81，转发的目的地址可以使用域名+端口

### --compressor `<lz4>`

启用压缩，默认仅支持lz4压缩，开启压缩后，如果数据包长度大于等于128，则会使用压缩，否则还是会按原数据发送

也支持开启zstd压缩，但是需要自行编译，编译时加入参数--features zstd

如果宽度速度比较慢，可以考虑使用高级别的压缩

### -f `<conf>`

指定配置文件
配置文件采用yaml格式，可参考：

```yaml
# 全部参数
tap: false #是否使用tap 仅在windows上支持使用tap
token: xxx #组网token
device_id: xxx #当前设备id
name: windows 11 #当前设备名称
server_address: ip:port #注册和中继服务器
stun_server: #stun服务器
  - stun1.l.google.com:19302
  - stun2.l.google.com:19302
in_ips: #代理ip入站
  - 192.168.1.0/24,10.26.0.3
out_ips: #代理ip出站
  - 0.0.0.0/0
password: xxx #密码
mtu: 1420  #mtu
tcp: false #tcp模式
ip: 10.26.0.2 #指定虚拟ip
use_channel: relay #relay:仅中继模式.p2p:仅直连模式
server_encrypt: true #服务端加密
parallel: 1 #任务并行度
cipher_model: aes_gcm #客户端加密算法
finger: false #关闭数据指纹
punch_model: ipv4 #打洞模式，表示只使用ipv4地址打洞，默认会同时使用v6和v4
ports:
  - 0 #使用随机端口，tcp监听此端口
  - 0
cmd: false #关闭控制台输入
no_proxy: false #是否关闭内置代理，true为关闭
first_latency: false #是否优先低延迟通道，默认为false，表示优先使用p2p通道
device_name: vnt-tun #网卡名称
packet_loss: 0 #指定丢包率 取值0~1之间的数 用于模拟弱网
packet_delay: 0 #指定延迟 单位毫秒 用于模拟弱网
dns:
  - 223.5.5.5 # 首选dns
  - 8.8.8.8 # 备选dns
mapping:
  - udp:0.0.0.0:80-10.26.0.10:80 # 映射udp数据
  - tcp:0.0.0.0:80-10.26.0.10:81 # 映射tcp数据
  - tcp:0.0.0.0:82-localhost:83 # 映射tcp数据
disable_stats: false # 为true表示关闭统计
allow_wire_guard: false # 为true则表示允许接入wg
```

或者需要哪个配置就加哪个，当然token是必须的

```yaml
# 部分参数
token: xxx #组网token
```

### --use-channel `<relay/p2p>`

- relay:仅中继模式，会禁止打洞/p2p直连，只使用服务器转发
- p2p:仅直连模式，会禁止网络数据从服务器/客户端转发，只会使用服务器转发控制包

### --packet-loss `<0>`

模拟丢包，取值0~1之间的小数，程序会按设定的概率主动丢包。在模拟弱网环境时会有帮助。

### --packet-delay `<0>`

模拟延迟,整数,单位毫秒(ms),程序会按设定的值延迟发包,可用于模拟弱网

### --disable-stats

关闭流量统计

### --allow-wg

允许接入WireGuard客户端，和wg混用时必须开启此参数

### --list

在后台运行时,查看其他设备列表

### --all

在后台运行时,查看其他设备完整信息

### --info

在后台运行时,查看当前设备信息

### --route

在后台运行时,查看数据转发路径

### --stop

停止后台运行

-----------------------------------------------------