TunnelBroker V2.0 面板安装教程

/ 4评 / 3

软件地址:https://git.dev.taterli.com/nickfox-taterli/TunnelPanel

测试地址:http://www.tunnelbroker.ninja/

受众:很小,所以基础知识就不写了.

教程现在就开始,也就是第零步,首先你准备一台VPS,我用的是Nginx+MySQL+PHP+PHP Composer,注意PHP版本不能太低,应该要7.4或者以上,CentOS用户请绕路,不适合,这台VPS是用来挂这个面板的网站的.另外还要准备一个能SMTP的服务,还有BGP宣告服务器(或者路由器)需要支持Python3,因为还有对接工具嘛,最后还需要耐心,一定一定,切记切记不可以跳着看.

第一步,下载程序:

git clone https://git.dev.taterli.com/nickfox-taterli/TunnelPanel

第二步,配置程序,先进去composer update一下,漏什么补什么,漏脑子就放弃.

第三步,配置.env文件,编辑器选自己喜欢的就行.

cp .env.example .env
vim .env

重点配置ROUTE_API_URL和IPV6_PREFIX,其中里面有例子,可以按着配置,ROUTE_API_URL请先想一个不容易被猜到的URL,比如https://68b32817da58.tunnelbroker.ninja,记得末尾不要有斜杠,然后前缀只能是/48,我太懒了.最后SERVER_IPV4是BGP服务器的IPv4.

还有就是数据库(需要先从phpMyAdmin或者其他工具创建好数据库),SMTP邮件配置.

当你全部改完(大概十几条配置),然后运行这个命令安装初始数据.

php artisan migrate

第四步,编辑nginx的网站配置,比如我就新建一个/etc/nginx/sites-available/tunnel文件,然后包含以下内容,不必照抄,灵活变通.

server {
    # 监听 HTTP 协议默认的 [80] 端口。
    listen 80;
    # 网站域名
    server_name tunnelbroker.ninja;
    # 服务器站点根目录 [/example.com/public]。
    root /var/www/html/TunnelPanel/public;

    # 添加几条有关安全的响应头;与 Google+ 的配置类似,详情参见文末。
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    # 站点默认页面;可指定多个,将顺序查找。
    # 例如,访问 http://example.com/ Nginx 将首先尝试「站点根目录/index.html」是否存在,不存在则继续尝试「站点根目录/index.htm」,以此类推...
    index index.nginx-debian.html index.html index.htm index.php;

    # 指定字符集为 UTF-8
    charset utf-8;

    # Laravel 默认重写规则;删除将导致 Laravel 路由失效且 Nginx 响应 404。
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # 关闭 [/favicon.ico] 和 [/robots.txt] 的访问日志。
    # 并且即使它们不存在,也不写入错误日志。
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    # 将 [404] 错误交给 [/index.php] 处理,表示由 Laravel 渲染美观的错误页面。
    error_page 404 /index.php;

    # URI 符合正则表达式 [\.php$] 的请求将进入此段配置
    location ~ \.php$ {
        # 配置 FastCGI 服务地址,可以为 IP:端口,也可以为 Unix socket。
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        # 配置 FastCGI 的主页为 index.php。
        fastcgi_index index.php;
        # 配置 FastCGI 参数 SCRIPT_FILENAME 为 $realpath_root$fastcgi_script_name。
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        # 引用更多默认的 FastCGI 参数。
        include fastcgi_params;
    }
    # 通俗地说,以上配置将所有 URI 以 .php 结尾的请求,全部交给 PHP-FPM 处理。

    # 除符合正则表达式 [/\.(?!well-known).*] 之外的 URI,全部拒绝访问
    # 也就是说,拒绝公开以 [.] 开头的目录,[.well-known] 除外
    location ~ /\.(?!well-known).* {
        deny all;
    }
}

第五步,把网站配置文件启用并访问试试.

ln -s /etc/nginx/sites-available/tunnel /etc/nginx/sites-enabled/tunnel
chown www-data:www-data /var/www/html -R
systemctl restart nginx

现在打开网站,然后注册一个账户,正常来说收到激活邮件,然后激活,如果看不到这个界面,请检查有没有漏任何操作.

那么现在你想套什么SSL随你,但是还没完成,后端还没装.

现在在BGP的机器上创建一个这个Python脚本,然后记得修改里面的关键内容,我就懒得解释了,这么简单的脚本应该很好懂.

import os
from flask import Flask

app = Flask(__name__)
@app.route('/add/<int:id>/<string:ip>')
def add_tunnel(id, ip):
    config = ('''auto tun%d
 iface tun%d inet6 v4tunnel
  address 2a0e:aa07:e024:%x::2
  netmask 64
  endpoint %s
  local 23.94.26.137
  ttl 255
  mtu 1280
  post-up ip route add 2a0e:aa07:e024:%x::/64 dev tun%d
  pre-down ip route del 2a0e:aa07:e024:%x::/64 dev tun%d
''' % (id, id, 2*(id - 1) + 1, ip, 2*(id - 1) + 2, id, 2*id, id))
    with open('/etc/network/interfaces.d/tun' + str(id), 'w') as f:
        f.write(config)
    os.system('ifdown tun' + str(id))
    os.system('ifup tun' + str(id))
    return ''

@app.route('/del/<int:id>')
def del_tunnel(id):
    os.system('ifdown tun' + str(id))
    os.unlink('/etc/network/interfaces.d/tun' + str(id))
    return ''

app.run(debug=True, host="127.0.0.1", port=49080)

然后丢在screen或者做成服务随你喜欢,如果丢在screen记得做个死循环防止他跑丢了,服务也是要做restart policy,这里不细说.

while true
do
 python3 InstallTun.py
 sleep 0.1
done

当然这个还没结束,BGP机也装个Nginx,用来反代这个脚本,反代的配置就简单很多,不建议为他配置SSL,很容易发生域名枚举风险.

server {
    listen 80;
    root /var/www/html; 
    server_name 68b32817da58.tunnelbroker.ninja;

    location / {
        proxy_pass       http://127.0.0.1:49080;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

最后重启BGP机的Nginx,全部配置OK.


功能截图

现在还有很多BUG还没解决,慢慢来.多个前缀就多搭几个站,我反正是懒得解决了.

  1. L HG说道:

    您好,请问博客可以转载吗?

  2. […] 这里使用的是Tater大佬的BGP下发面板 :https://www.taterli.com/8261/ […]

  3. GoldDoge说道:

    学习啦~~~

回复 TaterLi 取消回复

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