UCI Configuration

Most option names are the same as those used in json config files: server.json and local.json. Please check validate_xxx_options func definition of the service script and kcptun's own documentation for supported options and expected value types. And a sample config file is also provided for reference.

A kcptun config file can contain two types of config section: server and client, one of which represents a server or client instance. A server section can contain one or more options in Common options and Server options. And a client section can contain one or more options in Common options and Client options.

Every section has a disabled option to temporarily turn off the instance.

Common options

Name Type Option Description
disabled boolean disable current config section when set to 1 (default: 0)
key string --key pre-shared secret between client and server (default: "it's a secrect")
crypt enum --crypt aes, aes-128, aes-192, salsa20, blowfish, twofish, cast5, 3des, tea, xtea, xor, sm4, none (default: "aes")
mode enum --mode profiles: fast3, fast2, fast, normal, manual (default: "fast")
mtu integer --mtu set maximum transmission unit for UDP packets (default: 1350)
sndwnd integer --sndwnd set send window size(num of packets) (default: 1024 for server, 128 for client)
rcvwnd integer --rcvwnd set receive window size(num of packets) (default: 1024 for server, 512 for client)
datashard integer --datashard, --ds set reed-solomon erasure coding - datashard (default: 10)
parityshard integer --parityshard, --ps set reed-solomon erasure coding - parityshard (default: 3)
dscp integer --dscp set DSCP(6bit) (default: 0)
nocomp boolean --nocomp disable compression
sockbuf integer --sockbuf per-socket buffer in bytes (default: 4194304)
smuxver integer --smuxver specify smux version, available 1,2 (default: 1)
smuxbuf integer --smuxbuf the overall de-mux buffer in bytes (default: 4194304)
streambuf integer --streambuf per stream receive buffer in bytes, for smux v2+ (default: 2097152)
keepalive integer --keepalive seconds between heartbeats (default: 10)
snmplog string --snmplog collect snmp to file, aware of timeformat in golang, like: ./snmp-20060102.log
snmpperiod integer --snmpperiod snmp collect period, in seconds (default: 60)
tcp boolean --tcp to emulate a TCP connection(linux), need root privilege
quiet boolean --quiet suppress the 'stream open/close' messages
gogc integer set GOGC environment variable, see Memory Control.
syslog boolean redirect logs to syslog when set to 1, implemented by procd. (default: 0)
user string run as another user, implemented by procd.

Limitation

  • As kcptun outputs all logs to stderr by default, you may receive lots of LOG_ERR level message when set syslog to 1.

Server options

Name Type Option Description
listen port number --listen, -l kcp server listen port (default: ":29900")
target host --target, -t target server address (default: "127.0.0.1:12948")
target_port port number --target, -t target server port (default: "127.0.0.1:12948")
pprof boolean --pprof start profiling server on :6060

Client options

Name Type Option Description
bind_address IP address --localaddr, -l local listen address (default: ":12948")
local_port port number --localaddr, -l local listen port (default: ":12948")
server host --remoteaddr, -r kcp server address (default: "vps:29900")
server_port port number --remoteaddr, -r kcp server port (default: "vps:29900")
conn integer --conn set num of UDP connections to server (default: 1)
autoexpire integer --autoexpire set auto expiration time(in seconds) for a single UDP connection, 0 to disable (default: 0)
scavengettl integer --scavengettl set how long an expired connection can live(in sec), -1 to disable (default: 600)