• 1. 破吉他 - 张震岳
person

Brook是一个由 Go语言编写的跨平台代理软件,支持 Linux/MacOS/Windows/Android/iOS 各个平台。

同时因为 Go语言的特性,在操作使用上非常简单,本篇主要介绍 Brook服务端中 端口转发的使用方法。

优点是:安装、配置简单,支持TCP、UDP转发;

缺点是:不支持端口段转发,如果要转发多个端口,多开即可。

Brook Github项目:https://github.com/txthinking/brook

安装步骤
首先建立并进入文件夹(假设你当前目录是 /root ,那么 Brook的目录就是 /root/brook ):
mkdir brook && cd brook
复制代码
然后获取最新的版本号:
brook_ver=$(wget -qO- "https://github.com/txthinking/brook/tags"| grep "/txthinking/brook/releases/tag/"| head -n 1| awk -F "/tag/" '{print $2}'| sed 's/">//') && echo ${brook_ver}
复制代码
执行完后会输出获取的最新版本号,比如 v20171111 这样的日期格式,如果返回是空或者其他错误的内容,那么就代表获取失败。

获取失败的情况请去 Github 获取最新的版本号,例如 v20171111 ,然后执行 brook_ver=v20171111 (自己替换版本号)即可继续下面的下载步骤。

使用 uname -m 命令来判断VPS的位数,如果返回 x86_64 那就是64位,如果返回 i386或i686 那就是32位。

64位系统使用这个:

wget -N --no-check-certificate "https://github.com/txthinking/brook/releases/download/${brook_ver}/brook"

32位系统使用这个:

wget -N --no-check-certificate "https://github.com/txthinking/brook/releases/download/${brook_ver}/brook_linux_386" && mv brook_linux_386 brook
复制代码
最后只需要赋予一下执行权限即可继续看下面的使用方法了。
chmod +x brook
复制代码
使用方法
参数说明:
relay 以 单个端口转发 模式运行
relays 以 多个端口转发 模式运行
复制代码
本篇文章主要介绍 端口转发的两个模式使用方法。

单端口启动
注意:因为前面的安装步骤已经进入了 Brook目录,所以这里不需要再进入目录了。但是以后需要启动Brook的时候,请进入Brook的文件夹,假设你的安装目录是 /root/brook ,那么就使用这个命令 cd /root/brook

启动 一个端口转发

监听端口为 3555,被转发的服务器IP为 2.2.2.2 端口为 6666

nohup ./brook relay -l :3555 -r 2.2.2.2:6666 > /dev/null 2>&1 &
复制代码
多端口启动

启动 多个端口转发

分别为:

监听端口 3555,被转发的服务器IP为 2.2.2.2 端口为 6666

监听端口 6666,被转发的服务器IP为 3.3.3.3 端口为 6688

监听端口 8888,被转发的服务器IP为 6.6.6.6 端口为 7766

nohup ./brook relays -l ":3555 2.2.2.2:6666" -l ":6666 3.3.3.3:6688" -l ":8888 6.6.6.6:7766" > /dev/null 2>&1 &
复制代码
停止Brook
kill -9 $(ps -ef|grep "brook"|grep -v grep|awk '{print $2}')
复制代码

简单解释
注意:假设你的中转服务器也就是现在在操作的服务器 IP 是 1.1.1.1 ,那么你的 中转端口 就是 3555 。你的 被中转服务器的 IP 是 2.2.2.2 ,被中转端口是 6666 。

这时候你的 ShadowsocksR客户端 填写信息的时候只修改 IP为 1.1.1.1 ,端口为 3555 ,其他选项都不变。

原理就是:Shadowsocks客户端通过 1.1.1.1:3555 链接中转服务器 1.1.1.1 ,然后中转服务器把端口 3555 的流量转发到 被中转服务器 2.2.2.2 的端口 6666 上面。然后 被中转服务器 也就是上面的 ShadowsocksR服务端,就会去访问你要的数据,最后依次返回 中继服务器 -> Shadowsocks客户端。

其它说明
Brook 默认支持UDP转发,无需任何设置!

运行Brook无报错,但无法连接,可能是防火墙的问题(如果有外部防火墙,那么也需要开放端口),因为我测试只支持 TCP,那么只需要开放TCP即可。
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 端口 -j ACCEPT
iptables -I INPUT -m state --state NEW -m udp -p udp --dport 端口 -j ACCEPT

删除防火墙规则,内容一样把 -I 换成 -D 就行了:

iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport 端口 -j ACCEPT
iptables -D INPUT -m state --state NEW -m udp -p udp --dport 端口 -j ACCEPT
复制代码
卸载 Brook
卸载前先停止 Brook,然后直接删除 Brook的文件夹即可。
kill -9 $(ps -ef|grep "brook"|grep -v grep|awk '{print $2}')

先停止,后删除(假设安装在 /root 目录内,那么文件夹就是 /root/brook

rm -rf /root/brook
复制代码

前提条件
要自建DDNS服务,首先必须要有自己的域名且域名已经接入 Cloudflare (即DNS为CF提供的地址),另外就是使用阿里云解析、DNSPOD云解析、Cloudflare云解析等服务,本次教程以 Cloudflare 为例。

  1. 获取CFKEY

打开网页:https://dash.cloudflare.com/profile

在页面下方找到【Global API Key】,点击右侧的View查看Key,并保存下来

  1. 设置用于 DDNS 解析的二级域名

在 Cloudflare 中新建一个A记录,如:ddns.yourdomain.com,指向 1.1.1.1
(可随意指定,如123.123.123.123等等,主要用于后续查看 DDNS 是否生效)

  1. 下载 DDNS 脚本

wget -N --no-check-certificate https://raw.githubusercontent.com/yulewang/cloudflare-api-v4-ddns/master/cf-v4-ddns.sh

  1. 修改 DDNS 脚本并填写相关信息

您可在线使用 nano/vi/vim 等工具进行修改,也可以下载到本地进行修改再上传覆盖!

API key, see https://www.cloudflare.com/a/account/my-account,

这里填写上一步获取的CFKEY

CFKEY=

输入你需要解析用来DDNS解析的根域名 eg: example.com,比如我的域名是123.com,那么此处填写123.com

CFZONE=

登陆CF的Username, eg: [email protected](即CF的登录邮箱)

CFUSER=

填写用来DDNS解析的二级域名,与上面设置的要一致, eg: ddns.yourdomain.com(例 ddns.123.com)

CFHOST=

  1. 脚本授权并执行

chmod +x cf-v4-ddns.sh
./cf-v4-ddns.sh
如果脚本相关信息填写正确,输出内容会显示当前母鸡IP,登录 Cloudflare DNS选项 查看之前设置的 1.1.1.1 已变为母鸡IP

  1. 设置定时任务

输入 crontab -e 然后会弹出 vi 编辑界面,在文件里面添加一行:

/2 * /root/cf-v4-ddns.sh >/dev/null 2>&1

如果您需要日志文件,上述代码请替换成下面代码

#如果您需要日志文件,输入下面命令
/2 * /root/cf-v4-ddns.sh >> /var/log/cf-ddns.log 2>&1

至此,教程结束!

可以看到上面有不少机房或者线路,大多都是以机房命名或者以运营商命名的,简单的解释一下。其实对于香港的众多线路我也没有太过深入研究过,下面仅仅凭着自己的理解进行阐述,如有补充或者不对的地方,欢迎在下方留言。

CN2:CN2 线路就是电信 CN2,全程为中国电信下一代承载网,简称 CNCN,再简称 CN2。一般来说走的是 59.43 开头的节点,目前来看,CN2 线路是质量最好的,当然价格也是很贵的一个线路。如果是电信,那么毫不犹豫的选择 CN2 就对了,如果是联通、移动,那么要看对应机房是否对联通、移动也接入了 CN2。目前提供 CN2 线路的主要有阿里云、GigsGigsCloud、以及一些销售沙田小水管的商家。阿里云国际版的香港被 TLS 干扰很严重,所以建站并不推荐,并且阿里云国际版本身也比较难买。阿里云国内版的香港带宽比较小,但是很稳定,建站推荐,如果不介意去程走 NTT,也可以选择阿里云的轻量应用服务器(24 元/月那个)。此外,GigsGigsCloud 的 CN2 也是不错的,而且 GigsGigsCloud 的 CN2 才是正常价格,阿里云国际版完全是亏本在卖。

PCCW:PCCW 线路是香港电讯盈科提供的线路,到大陆走的是 PCCW 自己接的直连,目前来看是最热门的一条香港线路,线路质量也不错,电信、联通都是走直连,移动不定,一般来说商家会对移动再单独接一个移动的直连。目前很多商家都在出售 PCCW 线路,如果不知道怎么选择,可以购买搬瓦工和 GigsGigsCloud 的。但是目前搬瓦工的 PCCW 门槛已经非常高了($79.99/月起,没错,是美元,不是人民币),所以可以直接购买 GigsGigsCloud 的 PCCW,月付 10 美元以内,比较合适。

HKBN:HKBN 就是香港宽频有限公司,这个线路价格一般比较高,并且给的流量很多。我自己用过 PumpCloud 的 HKBN,不抽风的时候还是很稳定,但是每天晚上几乎必定抽风,所以可以当做备用线路来用。如果需要这个线路,可以购买 PumpCloud 或者魔方云对应的 VPS。

LeaseWeb:这家的香港的特点就是 G 口,曾经三网直连。但是,最近我看了看 OneProvider 的香港 LeaseWeb,三网已经全部绕美,延迟高达 300ms +,不知道是暂时还是永久的,反正不太推荐。目前出售 LeaseWeb 的主要包括 OneProvider 和 RFCHOST,OneProvider 已经说过了,三网全绕,RFCHOST 由于常年缺货,没有机会买到,买不到的东西,也没必要多说了。

SunnyVision:这个线路应该也是三网直连,目前只看到 RFCHOST 还在出售,没买过,不知道详情。但是这家经不起打,一被打立马绕美,并且也是常年无货,不多说了。

HKT、WTT:这两个没接触过。HKT 是香港电讯,和 PCCW 其实是一家公司,HKT 主要销售商宽和家宽,PCCW 则主要面向 IDC 机房。WTT 是汇港电讯有限公司,前称九仓电讯、香港新电讯有限公司、九仓新电讯有限公司。HKT 和 WTT 这两个机房的 VPS 就一个特点:贵,一般一个月要大几十刀到上百刀,并且大多数都是动态 IP 的。论实力,HKT > WTT。WTT 应该和 HKBN 差不多。WTT 容易 QoS(限速),所以如果价格都出到这儿了,建议直接上 HKT。目前销售 HKT、WTT 的主要有 PumpCloud、on9host 等,我接触过的只有 PumpCloud,总体靠谱,可以购买,并且这种基本肯定都是月付的,也不用担心什么。

HGC:环球全域电讯有限公司,前称和记环球电讯有限公司,这个真的不了解,不说了。

ZenLayer:目前只看到 UCloud 在出售这家的香港 VPS。ZenLayer 的洛杉矶 C3 机房我想大家肯定都知道,其实他家也有香港机房,并且也是三网直连,其中电信、移动都是走 CN2,联通走自己的直连,但是目前只有 UCloud 销售,小水管,价格基本在两百上下一年,还是可以考虑一下的。

Nexeon:不太了解,目前只看到 GreenCloudVPS 采用的这个机房,这个机房国际带宽有 1Gbps,但是到大陆的直连带宽只有 10Mbps,不过移动倒是可以跑一两百兆,所以移动用户可以尝试一下。

沙田:沙田机房以前是以小水管出名的,前几年销售香港小水管 VPS 的基本都是用的沙田 CN2。三网直连,其中电信走 CN2,联通、移动走各自的直连。没怎么用过,不知道效果怎么样。目前看到 UOVZ 在出售沙田大水管,其他小水管商家暂时不是很了解。

简单总结一下:

入门:PCCW
进阶:CN2
高玩:HKT

v3和魔改版

一、入口

    网站入口在public/index.php里,之后读取website/resources/views/default/index.tpl文件

    index.tpl里 有{include file='header.tpl'} {include file='footer.tpl'}这两段,这是说会继续读取header.tpl和footer.tpl两个文件

    把html模板下好,全部文件上传到website/public目录下——因为一般文件都是从根目录读取的,而tpl文件有所不同,这个下面会提到。接下来把index.html中的内容直接复制粘贴到index.tpl中,这样,表面的皮就初步换好了。

二、换按钮

    按钮 /user/login 那张皮里的只是#,替换一下就行,其余一样。

三、tpl加载与否

    文件 website/config/routes.php
    $app->get('/client', 'App\Controllers\HomeController:client');

    文件 website/app/Controllers/HomeController.php

public function client()

{
    return $this->view()->display('client.tpl'); 
}

    这里定义了网站页面上, /client 是加载client.tpl文件,而没有在这里定义的tpl文件,是无法加载的。

    能力有限,只做到这里了,在下小白,路过的大神还请勿喷