Authenticator

Trojan servers can authenticate users according to not only passwords in the config file but also entries in a MySQL (MariaDB) database. To turn this functionality on, set enabled field in the MySQL config to true and correctly configure the server address, credentials, and etc. If you would like to connect to the database securely, you can fill the ca field indicating the MySQL server’s CA file and optionally fill the key and cert fields indicating the client’s private key and certificate:

"mysql": {
    "enabled": true,
    "server_addr": "127.0.0.1",
    "server_port": 3306,
    "database": "trojan",
    "username": "trojan",
    "password": "",
    "key": "",
    "cert": "",
    "ca": ""
}

The table has to be named users. An example table structure could be:

CREATE TABLE users (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    username VARCHAR(64) NOT NULL,
    password CHAR(56) NOT NULL,
    quota BIGINT NOT NULL DEFAULT 0,
    download BIGINT UNSIGNED NOT NULL DEFAULT 0,
    upload BIGINT UNSIGNED NOT NULL DEFAULT 0,
    PRIMARY KEY (id),
    INDEX (password)
);

Note that trojan will only read/write the password, quota, download, and upload fields. Other fields exist for management convenience. The passwords stored in the table have to be hashed by SHA224 for efficiency and security reasons.

Upon receiving a Trojan Request, if the server fails to match the password with any passwords set in the config file, it will query the database for the user. If it succeeds, trojan will check whether download + upload < quota; if so, the connection is granted. A negative quota value means infinite quota. After a connection is closed, trojan will increment download and upload fields of that user by the amount of data the user has used.

The unit of quota, download, and upload fields is Byte.

Homepage Prev Page Next Page