记一次Trojan服务的搭建

Author Avatar
LittleBlack 5月 31, 2020
  • 在其它设备中阅读本文章

更新信息

我累死累活的从安装Trojan到安装Panel做了一遍,摸爬滚打加上写博客花了四个小时。(见下文)

然后我突然发现还有自动脚本的存在!!!!

image-20200531221414644

傻瓜安装一遍下来不超过两分钟,管理页面还高级

揉着我为这破事辛劳了一天的手指头,我当时的心情啊…草泥马…算是体验生活吧…

读者们要记好了,在亲自体验任何教程前先搜一下有没有自动安装脚本。

自动脚本github: https://github.com/Jrohy/trojan

image-20200531221928590

又到了六七月份,机场纷纷都挂掉了。感觉很不爽,于是和同学一合计,买一个月服务器先用着,也算是涨一个经验吧。

翻墙方式的话,因为只有两个人用,因此选择比较灵活。我不想惹什么麻烦比如封ip之类的,还是用Trojan比较稳妥。

Trojan工作原理

本篇文章作为日志,可读性极差,主要是真实的记录下操作过程。强烈建议访问原网站:Trojan-tutor (需代理访问)

服务器购买

注册vulr

vultr.com,注册就可以了。

充值

和其他的服务器商差不多,vultr会送你100美元的限时优惠给你随意购买产品,前提是随便支付十美刀验证支付方式。

Vultr可以使用支付宝,这很好。我因为已经支付过了,所以界面有些许不一样,选择支付就可以了。

image-20200531132930089

选购服务器

充值完成后应该会自动跳转到选购服务器的界面。如果没有,点击蓝色加号即可。

addServer

选择云计算

image-20200531133232396

往下翻,选择硅谷(离Google最近)

image-20200531133301099

选择乌班图19.1 X64

image-20200531133356023

可以看到,2.5美刀的选项没了,因为是自用,所以选择最便宜的5美刀一个月。

image-20200531133456383

继续往下翻,选择开启IPV6.

image-20200531133533630

最后输入VPS名称,点击部署(Deploy now)

image-20200531133702601

现在vultr会为你配置服务器。等待服务器变为”running”,就可以了!

image-20200531133941707

伪装域名选择

从Freenom白嫖一个

首先,关掉你的代理。(Freenom会自动检测你的信息和区域是否一致)

使用Chrome访问Freenom

随便输入一个域名。注意,要带上后缀,比如fuckit.tk,然后选择“完成即可”。(不带后缀会提示不可用)

image-20200531135706655

选择12Mo Free,点击继续.

image-20200531135814684

接着验证邮件

image-20200531140056263

image-20200531140114225

接着验证信息。(使用和你的IP一致的地址。如果你之前挂了美国的VPN就去生成一个美国人信息吧)

image-20200531140749225

image-20200531140830469

登录之后应该可以在域名列表里看到域名,那么域名的配置就先告一段落。

image-20200531141437903

将嫖来的域名和服务器ip挂钩

image-20200531193931321

部署VPS

最激动人心的时刻到了。如果你之前在选择服务器的时候确实是按照步骤(特别是系统和版本!)做的,那么下面的步骤理应成功!

连接到VPS

本文使用Xshell链接服务器, 点击此链接可以白嫖到Xshell正版许可(仅限非商用)。

在VPS的详情页中复制IP和密码,粘贴到Xshell里面,连接。

image-20200531171409188

image-20200531172239343

这就连接上了。

接下来的每一步都是按照trojan-tutor作者的指示走的。建议访问原网站,体验更加明白的过程。

创建用户账户

sudo useradd -m -s /bin/bash trojanuser
sudo passwd trojanuser
sudo usermod -G sudo trojanuser
su -l trojanuser

创建服务账户

sudo groupadd certusers
sudo useradd -r -M -G certusers trojan
sudo useradd -r -m -G certusers acme

安装依赖

更新源

sudo apt update
sudo apt upgrade -y

image-20200531183609366

安装acme.sh所需依赖

sudo apt install -y socat cron curl
systemctl reboot -i

启动crontab

sudo systemctl start cron
sudo systemctl enable cron

安装trojan所需依赖

sudo apt install -y libcap2-bin xz-utils nano

安装Nginx

sudo apt install -y nginx

配置Nginx

关闭默认虚拟主机

sudo rm /etc/nginx/sites-enabled/default

写入虚拟主机到Nginx配置文件

将【fuckit.cf】替换为你自己的域名。

sudo vim /etc/nginx/sites-available/【fuckit.cf】

复制以下内容到文件。

  • 第4行的server_name的值【fuckit.cf】改为你自己的域名;
  • 第7行的proxy_pass随便指向一个没有敏感信息的网站都可以,这就是你要反向代理的网站,这里我是用了xkcd的地址;
  • 第15行的server_name的值【10.10.10.10】改为你自己的IP;
  • 第17行的【fuckit.cf】改为自己的域名,注意别填错了。
server {
    listen 127.0.0.1:80 default_server;

    server_name 【fuckit.cf】;

    location / {
        proxy_pass https://xkcd.com;
    }

}

server {
    listen 127.0.0.1:80;

    server_name 【10.10.10.10】;

    return 301 https://【fuckit.cf】$request_uri;
}

server {
    listen 0.0.0.0:80;
    listen [::]:80;

    server_name _;

    location / {
        return 301 https://$host$request_uri;
    }

    location /.well-known/acme-challenge {
       root /var/www/acme-challenge;
    }
}

【esc】 :wq保存并退出VIM。

使配置文件生效(注意修改为你自己的域名)

sudo ln -s /etc/nginx/sites-available/【fuckit.cf】 /etc/nginx/sites-enabled/

启动Nginx

sudo systemctl restart nginx
sudo systemctl status nginx

配置证书

sudo mkdir -p /etc/letsencrypt/live
sudo chown -R acme:acme /etc/letsencrypt/live

创建webroot并修改所有者

sudo mkdir -p  /var/www/acme-challenge
sudo chown -R acme:certusers /var/www/acme-challenge

安装acme.sh自动管理CA证书脚本

sudo su -l -s /bin/bash acme
curl  https://get.acme.sh | sh
exit

image-20200531193327708

sudo su -l -s /bin/bash acme

注意,exit不能省略,安装完acme需要重新登陆。

申请证书(注意修改域名)

acme.sh --issue -d 【fuckit.cf】 -w /var/www/acme-challenge

image-20200531194930895

如图即配置成功。 在配置前先ping一下你的域名,如果可以ping通,那么这一步应该不会失败。如果不可以,请检查一下域名DNS服务器是否正常运转(freenom.com)

安装证书(注意修改域名)

acme.sh --install-cert -d 【fuckit.cf】 --key-file /etc/letsencrypt/live/private.key --fullchain-file /etc/letsencrypt/live/certificate.crt
acme.sh  --upgrade  --auto-upgrade

修改权限

chown -R acme:certusers /etc/letsencrypt/live
chmod -R 750 /etc/letsencrypt/live
exit

配置Trojan

安装trojan

sudo bash -c "$(curl -fsSL https://raw.githubusercontent.com/trojan-gfw/trojan-quickstart/master/trojan-quickstart.sh)"
sudo chown -R trojan:trojan /usr/local/etc/trojan
sudo cp /usr/local/etc/trojan/config.json /usr/local/etc/trojan/config.json.bak
sudo vim /usr/local/etc/trojan/config.json

第四个命令执行完之后屏幕会显示Trojan的配置文件,定位到passwordcertkey并修改。密码按自己喜好,certkey分别改为/etc/letsencrypt/live/certificate.crt/etc/letsencrypt/live/private.key。修改之后的config文件如图所示。另外,因为我们在购买服务器时选择了IPv6地址,将local_addr0.0.0.0改为::才可以使用。

image-20200531200312491

启动Trojan

修改Trojan启动用户

sudo vim /etc/systemd/system/trojan.service

如图,在光标处加入User=trojan一行。

image-20200531200507395

保存退出,重新加载配置文件。

sudo systemctl daemon-reload

赋予trojan监听443端口能力

sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/trojan

使用systemd启动trojan

sudo systemctl restart trojan
sudo systemctl status trojan

更新证书

sudo -u trojan crontab -e

在文末添加

0 0 1 * * killall -s SIGUSR1 trojan

更新trojan

如果Trojan版本有更新(可以去这里查看是否有更新),那么使用本教程搭建的服务器端更新Trojan版本只需要三条命令即可,不过要注意的是,第一条命令会提示是否覆盖配置文件,如果没有必要请回答n,否则配置文件将会被覆盖(如果不小心覆盖了就得自己重新编辑了)。第二条命令重新赋予Trojan监听443端口的能力。第三条命令重启Trojan。

sudo bash -c "$(curl -fsSL https://raw.githubusercontent.com/trojan-gfw/trojan-quickstart/master/trojan-quickstart.sh)"
sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/trojan
sudo systemctl restart trojan

配置trojan和nginx开机自启

sudo systemctl enable trojan
sudo systemctl enable nginx

检测服务器是否配置成功

下面是原作者的忠告

到这里服务器就配置完成了。此时你可以在浏览器里面访问你的网站看是否能够访问,如果你的网站可以访问了,那么就一切正常啦。

另外,基于以上考虑到的可能的恶意探测,可以验证一下以下情况是否正常。

启用BBR(可选、建议)

uname -a

如果显示的系统版本>=4.10,可以继续安装

sudo sysctl net.ipv4.tcp_congestion_control

image-20200531202239247

如果得到如上述图片,那么恭喜,你不用装BBR了,已经给你装好了。

sudo bash -c 'echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf'
sudo bash -c 'echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf'
sudo sysctl -p

配置防火墙(可选)

sudo apt install -y ufw

我们的服务器有ipv6,所以可以跳过下一步,否则执行

sudo nano /etc/default/ufw

执行如下命令可成功配置防火墙

sudo ufw disable
sudo ufw allow ssh
sudo ufw allow https
sudo ufw allow http
sudo ufw enable

其他

作者教程里还有关于客户端等的配置,和SSR差不多,所以就不费笔墨列出来了,可以回原网站阅读。

image-20200531203750590

image-20200531204402036

image-20200531204813547

Trojan-Panel配置

这个教程是在上一个的基础上继续的。如果你没有照着做上一个教程,这一个你不能原样照搬。强烈建议访问原文

安装依赖

安装基础依赖

sudo apt install -y git unzip
sudo apt install -y mariadb-server

安装PHP

sudo apt install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install -y php7.2-fpm php7.2-mysql php7.2-cli php7.2-xml php7.2-json php7.2-mbstring php7.2-tokenizer php7.2-bcmath

配置数据库

sudo mysql_secure_installation
  • 这里要输入数据库的root用户的密码,由于是新安装的数据库,故直接回车就好;

  • y,设置数据库密码,一会儿要用,建议与Trojan的全局密码相同,方便记忆,因为配置完Panel之后Trojan的全局密码就没用了。

  • 数据库密码;

  • 确认数据库密码;

  • 四个y。

sudo mysql -u root -p

注意将【password】改为你自己的密码。

CREATE DATABASE trojan;
GRANT ALL PRIVILEGES ON trojan.* to trojan@'localhost' IDENTIFIED BY '【password】';
FLUSH PRIVILEGES;
SHOW DATABASES;
SELECT User,Host FROM mysql.user;
quit

安装PHP软件包管理系统

cd /var/www
sudo curl -sS https://getcomposer.org/installer -o composer-setup.php
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

安装Nodejs和NPM

curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt install -y nodejs

安装TrojanPanel

sudo git clone https://github.com/trojan-gfw/trojan-panel.git
sudo chown -R $USER:$USER trojan-panel
cd trojan-panel
composer install
npm install

配置Trojan-Panel运行环境

cp .env.example .env
php artisan key:generate
sudo vim .env

image-20200531210632784

php artisan migrate

赋予权限

cd
sudo chown -R www-data:www-data /var/www/trojan-panel

配置Nginx

注意修改域名。

sudo vim /etc/nginx/sites-available/【fuckit.cf】

新增的修改有:

  • 这段代码中的config关键字,你大可以修改为你自己喜欢的而且不易被猜中的;

  • 第18行的PHP版本修改为系统中安装的PHP版本,PHP版本号用php -v命令查看。

server {
    listen 127.0.0.1:80 default_server;

    server_name <tdom.ml>;

    location / {
        proxy_pass https://www.ietf.org;
    }

    location /config {
        alias /var/www/trojan-panel/public;
        index index.php;
        try_files $uri $uri/ @config;

        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }

        location ~ /\.(?!well-known).* {
            deny all;
        }
    }

    location @config {
        rewrite /config/(.*)$ /config/index.php?/$1 last;
    }

}

server {
    listen 127.0.0.1:80;

    server_name <10.10.10.10>;

    return 301 https://<tdom.ml>$request_uri;
}

server {
    listen 0.0.0.0:80;
    listen [::]:80;

    server_name _;

    location / {
        return 301 https://$host$request_uri;
    }

    location /.well-known/acme-challenge {
       root /var/www/acme-challenge;
    }
}

image-20200531211723407

image-20200531211421542

更新Trojan配置文件

sudo vim /usr/local/etc/trojan/config.json

image-20200531212709984

重启Trojan

sudo systemctl restart trojan

测试

在浏览器中访问 fuckit.cf/【关键字】,访问并注册账户。第一个注册的是管理员账户,用户如要使用需要经过管理员审核,*即将用户的Quota设为 -1 *

image-20200531213005135

本篇日志到此结束,感谢观看,我去揉揉手指头先。