神秘菜鸟

好吧其实一点也不神秘,但菜是真的

Trojan搭建过程记录

大纲
  1. 1. 前置条件
  2. 2. 准备工作
    1. 2.1. 申请域名
    2. 2.2. 把域名放到DNSPod解析
    3. 2.3. 杂项
  3. 3. 安装并配置nginx
    1. 3.1. 安装nginx
    2. 3.2. 配置nginx
    3. 3.3. 启动nginx
  4. 4. 申请证书
    1. 4.1. 安装证书
    2. 4.2. 添加API密钥
    3. 4.3. 申请证书
    4. 4.4. 安装证书
    5. 4.5. 配置acme.sh自动更新
  5. 5. 安装并配置trojan
    1. 5.1. 安装trojan
    2. 5.2. 编辑trojan配置
    3. 5.3. 启动trojan
    4. 5.4. 配置trojan自动加载更新后的证书
  6. 6. 安装bbr加速(可选)
  7. 7. 安装客户端
  8. 8. 常用命令
  • —END—
  • 因为最近做梯子的服务器到期了,所以重新搭一个,以前一直用的SSR,但是由于GFW的原因越来越不稳定了,所以这次采用Trojan,顺便做个记录。

    前置条件

    准备工作

    申请域名

    如果你已经有域名这步可跳过,因为我拿到的服务器是一年的,而我之前买的域名不足一年了,为了钱包的安全,我决定去申请一个免费域名。

    免费申请域名的网站:https://www.freenom.com/,这个应该大家都熟悉,此处注意一个点就是freenom似乎禁止了中国玩家的申请,可用的申请办法是直接挂代理申请,如果遇到技术错误导致域名未注册成功的话去百度找一个外国人信息修改你的资料就行了,因为挂代理它会检测你的ip地址,找ip地址对应的国家外国人信息填上就行了。

    NOTE:①如果输入域名点击检查按钮无反应把语言调为英文再试试;②确定想要的域名后点击获取/Git it now按钮出现不可用/x有两种解决办法:1.在域名后面加后缀再点击检查按钮,如你想要synblog.ga这个域名那就输入整个synblog.ga再点击检查按钮,不要只输入synblog;2.先注册登录后再申请域名,关于找不到注册入口的可依次点击首页顶部的合作伙伴/Partners开发者/Developers选项,把页面拉到最下面点击Get a Random Domains Account today按钮即可进入到注册页面;

    注册过程无难点,就不再赘述,按照要求填入信息就好,注册成功后先放一边,然后进行下一步操作。

    把域名放到DNSPod解析

    成功拿到域名后就打开DNSpod,注册一个账号并且实名认证。然后依次在控制管理台DNS解析添加域名处输入刚才在freenom申请到的域名,然后根据指示复制DNSPod提供给你的两个DNS服务器:

    image-20210926154237563

    在freenom里点击Manage Domain

    image-20210926154156139

    Management ToolsNameservers

    image-20210926155150193

    选择Use custom nameservers,并在下面粘贴刚才复制过来的DNS服务器:

    image-20210926155553613

    保存即可。

    然后返回DNSPod把域名解析到你的服务器IP就行。至于为什么不使用Cloudflare,原因是CF不支持申请freenom域名的SSL证书。如果非freenom的域名可以用CF,用CF的话下面acme申请证书把DP的指令换成CF的就行。

    最后创建并查看api密钥复制备用,点击右上角的账号中心,选择API密钥

    image-20210926191840888

    选择DNSPod Token

    image-20210926191932287

    杂项

    1
    2
    yum update #centos
    apt update && apt upgrade -y #debian/ubuntu
    1
    systemctl stop firewalld.service  #关闭防火墙
    1
    2
    3
    firewall-cmd --zone=public --add-port=80/tcp --permanent  #开放80端口
    firewall-cmd --zone=public --add-port=443/tcp --permanent #开放443端口
    firewall-cmd --reload #如果是选择开放端口那需要重载防火墙才能生效
    1
    2
    yum install -y socat cronie curl #centos
    apt install -y socat cron curl #debian/ubuntu
    1
    2
    yum install -y xz #centos
    apt install -y libcap2-bin xz-utils nano #debian/ubuntu
    1
    2
    3
    4
    systemctl start crond #centos
    systemctl enable crond #centos
    systemctl start cron #debian/ubuntu
    systemctl enable cron #debian/ubuntu
    1
    mkdir /usr/local/etc/certfiles
    1
    setsebool -P httpd_can_network_connect 1

    CentOS反向代理需要配置SELinux允许httpd模块可以联网,否则服务器会返回502错误,如果出现SELinux is disabled错误,说明SELinux已经被彻底的关闭了,那可以直接跳过。

    安装并配置nginx

    安装nginx

    1
    yum install epel-release
    1
    2
    yum install -y nginx #centos
    apt install -y nginx #debian/ubuntu

    配置nginx

    1
    2
    vi /etc/nginx/nginx.conf #centos
    vi /etc/nginx/sites-available/default #debian/ubuntu

    image-20210926185617676

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    server {
    listen 127.0.0.1:80 default_server;
    server_name your_domain;

    location / {
    proxy_pass https://www.baidu.com;
    }
    }

    server {
    listen 127.0.0.1:80;
    server_name your_server_ip;
    return 301 https://your_domain$request_uri;
    }

    server {
    listen 0.0.0.0:80;
    listen [::]:80;
    server_name _;
    return 301 https://$host$request_uri;
    }

    请注意替换上面的your_domainyour_server_ip为你自己的域名和IP,proxy_pass后面的网址为你想反向代理的网址,你可以替换为任意没有敏感信息的网站。
    解释一下这些虚拟主机的一些细节:第一个server接收来自Trojan的流量,第二个server也是接收来自Trojan的流量,但是这个流量尝试使用IP而不是域名访问服务器,所以将其认为是异常流量,并重定向到域名,第三个server接收除127.0.0.1:80外的所有80端口的流量并重定向到443端口,这样便开启了全站https,可有效的防止恶意探测。

    如果不想反代而是设置伪装站点,或者本身有网站,那把第一个server修改下就行:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    server {
    listen 80 default_server;
    server_name your_domain;
    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;

    location / {
    try_files $uri $uri/ =404;
    }
    }

    然后把你的网站文件放在对应的目录下就行了,一般centos的默认html文件在/usr/share/nginx/html下,debian/ubuntu的默认html文件在/var/www/html下,根据你的系统选择并更改上面的root项即可,当然你想放在其他位置也行,这样写只是为了方便快捷一些。

    启动nginx

    1
    systemctl restart nginx

    如果报错多半是SELinux在搞事情,可以彻底关闭SELinux。

    1
    vi /etc/selinux/config

    找到SELINUX=xxx,改为SELINUX=disabledreboot重启服务器即可。

    1
    systemctl enable nginx

    申请证书

    安装证书

    这里使用acme.sh自动签发证书。

    1
    curl  https://get.acme.sh | sh -s email=my@example.com

    my@example.com改为你的邮箱。

    安装完成后重新加载 Bash:

    1
    source ~/.bashrc

    添加API密钥

    1
    2
    export DP_Id="1234"  #1234改为之前复制的dnspod的id
    export DP_Key="token" #token改为之前复制的dnspod的token
    1
    2
    export CF_Key="<你的 Global API Key>"
    export CF_Email="<你的cloudflare邮箱>"

    申请证书

    1
    acme.sh --issue --dns dns_dp -d example.com #example.com改为你的域名
    1
    acme.sh --issue --dns dns_cf -d example.com #example.com改为你的域名

    如果要申请通配证书则如下:

    1
    acme.sh --issue --dns dns_dp -d example.com -d *.example.com #example.com改为你的域名
    1
    acme.sh --issue --dns dns_cf -d example.com -d *.example.com #example.com改为你的域名

    等待一会,出现这四个证书文件则为申请成功:

    image-20210926194858419

    如果没有出现上图而是出现一串红色的信息,未申请成功的话,大概率是因为zerossl抽风,可以更换默认CA为Let’s Encrypt:

    1
    acme.sh --set-default-ca --server letsencrypt

    之后再重新执行一遍申请证书的指令即可。

    安装证书

    1
    acme.sh --install-cert -d example.com --key-file /usr/local/etc/certfiles/private.key --fullchain-file /usr/local/etc/certfiles/certificate.crt

    使用acme.sh将证书安装到certfiles目录,这样acme.sh更新证书的时候会自动将新的证书安装到这里,注意把example.com替换为你的域名

    配置acme.sh自动更新

    1
    acme.sh  --upgrade  --auto-upgrade

    到这里不出意外就能访问你带https的域名了,如果你反向代理了百度的话,会进入百度的页面

    安装并配置trojan

    安装trojan

    1
    sudo bash -c "$(curl -fsSL https://raw.githubusercontent.com/trojan-gfw/trojan-quickstart/master/trojan-quickstart.sh)"

    编辑trojan配置

    1
    vi /usr/local/etc/trojan/config.json

    修改password为你喜好的密码,修改cert的地址为证书所在地址:/usr/local/etc/certfiles/certificate.crt,修改key地址为证书所在地址:/usr/local/etc/certfiles/private.key,保存退出即可。

    启动trojan

    1
    systemctl restart trojan
    1
    systemctl enable trojan

    配置trojan自动加载更新后的证书

    1
    crontab -e
    1
    0 0 1 * * killall -s SIGUSR1 trojan

    保存退出即可。

    安装bbr加速(可选)

    1
    wget -N --no-check-certificate "https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/tcp.sh" && chmod +x tcp.sh && ./tcp.sh

    放个一键脚本自己按要求操作吧,我实在写不动了…

    安装客户端

    常用命令

    1
    nginx -s reload
    1
    systemctl status trojan
    1
    systemctl stop trojan
    1
    journalctl -u trojan -f

    —END—