Trojan 是近期出现在的一款翻墙神器,由大神使用 C++ 语言开发,服务端模拟 Web 服务器接收 HTTPS 请求,并将代理结果包装成 HTTPS 响应返回给客户端。由于代理数据同 HTTPS 数据一致,从而有效避开国内防火墙的侦测,达到科学上网的目的。

本文将详细讲解如何在 CentOS  系统免域名配置 Trojan 代理服务器,主要内容包括:

  • CA 证书以及域名证书的制作
  • 安装 Trojan 服务器软件
  • 添加 Trojan 为服务

PS:由于 CentOS 8 使用了全新的包管理工具,本文在命令行存在差异时会特别注明。

1] CA 证书及域名证书的制作

Trojan 服务端模拟 Web 服务器,同客户端建立 TLS 连接,此过程与域名及证书密切相关。Trojan 可以使用专门的证书颁发机构(CA 服务器)提供的域名证书来启动服务,这样做的好处是证书真实有效,数据更加不容易被拦截;不过缺点也十分明显,就是证书颁发机构不会为 IP  地址颁发证书,这就需要在使用 Trojan 时具有域名,并且这些域名证书有效期都较短,需要定期更新证书。

所谓的免域名就是不需要域名而直接通过 VPS 主机的 IP 地址来生成 Trojan 所需的域名证书,而做法就是让 VPS 主机来充当 CA 服务器并对自身来颁发 IP 地址域名证书。

首先安装证书工具:

# yum install gnutls-utils -y      //CentOS 6、7
OR
# dnf install gnutls-utils -y      //CentOS 8

安装完成后,可以使用如下命令查看证书工具是否安装成功:

# certtool --version

图.1 查看证书工具版本

出现如图.1 所示的信息,则表示证书工具已经成功安装,则可以往下进行。

创建两个文本文件”ca.txt”和”trojan.txt”,作为证书模板来使用,文件内容分别如下:

/* ca.txt */
cn = "192.168.1.1"
organization = "GlobalSign RULTR"
serial = 1
expiration_days = 3650
ca
signing_key
cert_signing_key
crl_signing_key

/* trojan.txt */
cn = "192.168.1.1"
organization = "GlobalSign RULTR"
expiration_days = 3650
signing_key
encryption_key
tls_www_server

注意要将模板文件中 cn = “192.168.1.1” 部分修改为 Trojan 服务器的实际 IP 地址,否则生成的域名证书不可用。

然后使用如下命令生成 CA 证书和 IP 地址域名证书:

# certtool --generate-privkey --outfile ca-key.pem
# certtool --generate-self-signed --load-privkey ca-key.pem --template ca.txt --outfile ca-cert.pem
# certtool --generate-privkey --outfile trojan-key.pem
# certtool --generate-certificate --load-privkey trojan-key.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem --template trojan.txt --outfile trojan-cert.pem

此时,就生成了 CA 服务器证书文件以及 Trojan 服务器使用的 IP 地址域名证书。其中:

  • ca-key.pem:为 CA 服务器私钥,用于生成域名证书
  • ca-cert.pem:为 CA 服务器公钥,Trojan 客户端需要使用
  • trojan-key.pem:为 Trojan 服务器使用的私钥
  • trojan-cert.pem:为 Trojan 服务器使用的公钥。

2] 安装 Trojan 服务器软件

Trojan 事实上是一个可执行文件,根据其配置文件内容来确定工作方式是服务器或是客户端。使用如下命令下载 Trojan 发行版可执行文件,并将文件分别拷贝到对应位置,就完成了软件的安装(Trojan 发行版可以从GitHub下载,方便起见,示例使用本站下载。本站将保持发行版同 GitHub 保持一致,方便下载使用):

# wget https://www.rultr.com/rultr-content/trojan-1.14.0-linux-amd64.tar.xz
# tar -xvf trojan-1.14.0-linux-amd64.tar.xz -C /etc/
# mv /etc/trojan/trojan /usr/bin/
# trojan -v

图.2 CentOS 系统安装 Trojan

从图.2 可以看出,Trojan 发行版压缩包中包含几个文件,最重要的是”trojan”和”config.json”。”trojan”是 Trojan 的可执行文件,而”config.json”是 Trojan 的配置文件。

虽然 Trojan 程序可以执行了,但是需要修改配置文件来让它使用之前的域名证书工作于代理服务器模式。

首先将 IP 地址域名证书拷贝到正确位置:

# cp trojan-key.pem /etc/trojan
# cp trojan-cert.pem /etc/trojan

然后修改配置文件为如下内容:

{
    "run_type": "server",
    "local_addr": "0.0.0.0",
    "local_port": 443,
    "remote_addr": "127.0.0.1",
    "remote_port": 80,
    "password": [
        "Your_Password_Here",
        "Password_Here_Too"
    ],
    "log_level": 1,
    "ssl": {
        "cert": "/etc/trojan/trojan-cert.pem",
        "key": "/etc/trojan/trojan-key.pem",
        "key_password": "",
        "cipher": "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHA
CHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256",        "prefer_server_cipher": true,
        "alpn": [
            "http/1.1"
        ],
        "reuse_session": true,
        "session_ticket": false,
        "session_timeout": 600,
        "plain_http_response": "",
        "curves": "",
        "dhparam": ""
    },
    "tcp": {
        "prefer_ipv4": false,
        "no_delay": true,
        "keep_alive": true,
        "fast_open": false,
        "fast_open_qlen": 20
    },
    "mysql": {
        "enabled": false,
        "server_addr": "127.0.0.1",
        "server_port": 3306,
        "database": "trojan",
        "username": "trojan",
        "password": ""
    }
}

配置文件中需要修改的内容不多,主要为:

  • “password”:Trojan 服务器同客户端的认证密码,可设置多个,以逗号隔开
  • “cert”:Trojan 服务器的公钥文件
  • “key”:Trojan 服务器的私钥文件
  • “key_password”:证书密码,如果在生成域名证书时设置了密码,则在此处填入,示例在生成证书时没有设置,则保留为空即可

其余内容保持默认即可。如果有其他功能需求,可自行修改配置文件进行设置。

至此,Trojan 服务器就已经搭建完成,运行 Trojan 命令就可以提供代理服务了。

3] 添加 Trojan 为服务

使用方便起见,常常将可执行文件添加到 systemd 服务,Trojan 当然也可以。

新建一个 Trojan 服务文件”/usr/lib/systemd/system/trojan.service”,内容如下:

[Unit]
Description=trojan
Documentation=man:trojan(1) https://trojan-gfw.github.io/trojan/config https://trojan-gfw.github.io/trojan/
After=network.target mysql.service mariadb.service mysqld.service

[Service]
Type=simple
StandardError=journal
User=trojan
AmbientCapabilities=CAP_NET_BIND_SERVICE
ExecStart=/usr/bin/trojan /etc/trojan/config.json
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

配置文件中使用非 root 用户 trojan 来启动 Trojan  服务器,可以提高系统的安全性。于是使用如下命令创建用户并授权:

# groupadd -g 12345 trojan
# useradd -g 12345 -s /usr/sbin/nologin trojan
# chown -R trojan:trojan /etc/trojan

最后,启动 Trojan 服务并查看状态,如果见到下图所示内容,则表示服务安装成功,Trojan 服务器可以正常工作了。

图.3 查看 Trojan 服务状态

以上就是关于 CentOS 系统安装 Trojan 服务器的全部内容,如果其他问题,可留言交流。

2 thoughts on “CentOS 系统免域名配置 Trojan 代理”

    1. iOS 客户端我没用过,不知道有没有开发出来,如果有的话,应该用法和 Android 客户端类似,本站有 Android 客户端的用法,可以参考。

发表评论

电子邮件地址不会被公开。 必填项已用*标注