不再让我们为运营商的内网IP所困扰,用AWS部署FRP服务
话说昨天晚上连夜写了怎么撸AWS的12个月免费EC2,很多值友问了很多很有见地的问题,我来做一个回答
Q:AWS的EC2和Lightsail有什么差别?
A:我的理解是EC2更倾向于运算,Lightsail更倾向于存储和传输,我的某些需求也是用后者更合理,但Lightsail目前只免费1个月,如果流量小的(比如FRP),还是EC2划算,大的撸一个月的Lightsail也行,不过后面3.5刀一个月,也挺贵的。
Q:亚马逊的流量很贵,会不会被反撸了?
A:有可能,不过如果流量不是很巨大的话还不至于,目前入流量是每月1G免费,超过1G不超过1T的每G0.09刀;出流量的话基本都是每G0.02刀(有0.01刀的,具体的收费可以看官网上有,很清楚)。另外AWS有CloudWatch服务,可以开一个,把出入流量做成小部件,随时可以点进去看。具体的方法下面会说一下。
Q:到期后会自动扣费吗?
A:会的,听说亚马逊还挺无耻的,不用确认就直接给扣了,这点从中亚的Prime会员可以看出来,我就是忘了取消信用卡,结果就给扣了。所以这个AWS的大家可以拿个小本子或是手机设个提醒,在到期前删了实例就不扣费了。
Q:这个是用作SS吗?
A:SS是什么??我是小白,不太懂哎,反正我就做做FRP。
好了,问题回答完了,我来扫扫尾,下面说说几个配套的工作,按顺序来,开BBR、建CloudWatch小部件,最后是本文的主角FRP。
开BBR
TCP BBR(Bottleneck Bandwidth and Round-trip propagation time)是由Google设计,于2016年发布的拥塞算法。以往大部分拥塞算法是基于丢包来作为降低传输速率的信号,而BBR则基于模型主动探测。该算法使用网络最近出站数据分组当时的最大带宽和往返时间来创建网络的显式模型。数据包传输的每个累积或选择性确认用于生成记录在数据包传输过程和确认返回期间的时间内所传送数据量的采样率。
百度来的BBR的说明,总的来说,就是可以通过开启BBR服务在一定程度上提高服务器的传输。由于我为EC2选的系统是ubuntu 1804,其内核已经是4.15版本了,所以直接可以通过命令开启BBR。
sudo modprobe tcp_bbr
echo "tcp_bbr" | sudo tee --append /etc/modules-load.d/modules.conf
echo "net.core.default_qdisc=fq" | sudo tee --append /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee --append /etc/sysctl.conf
sudo sysctl -p
搞定后可以通过以下指令确认一下
sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control
lsmod | grep bbr
建CloudWatch小部件
在AWS控制台左上角的Services里可以搜索CloudWatch
点进去看到的是下面这个界面
选Dashbords,这里我已经建过一个了,所以有一个“EC2”,正常进去是没有的,然后选Create就可以开始建了,会先让起个Dashbord的名字,随便吧,我的就叫EC2,好区分。
有五种式样可以选择,因为我是用来看流量数字的,所以选了第三个,如果有其它需求的也可以试试别的。
然后点Graphed Metrics标签,开始设置指标的参数
Statistic改成Sum,Period改成30 Days就可以了
启动FRP服务
FRP=Fast Reverse Proxy,中文意思就是快速反向代理,因为支持TCP、UDP、HTTP、HTTPS等协议,因此可以很好的实现内网的穿透,可以实现你在任何地方访问家里的NAS或是别的内网服务,当然DDNS也可以实现,不过花生壳一类的DDNS是要收费的,另外好像他们也需要一个公网的IP,FRP则完全不需要,这是FRP的优势,当然劣势也是有的,那就是稳定性欠佳,偶尔会有断连的情况。
当然,像我一样在使用白群的值友,其实完全不用折腾这个,因为QuickConnect真的很好用了,现在速度也挺好的,关键是比FRP也要稳定一些,不过这个对黑群或是另外有别的服务需求的,那还是很值得搞一下的。
FRP由两个部分组成,一个是服务器端的frps,一个是客户机端的frpc,前者我装在AWS的EC2服务上,后者可以装在一些用梅林固件的路由上,不过我的路由是ubnt的,不太会搞,里面的反向代理也不会用,所以我就装在了NAS上,其实我的ubnt有配UCK,UCK也是用的ubuntu的系统,也可以装的,不过UCK太脆弱,感觉ubnt的东西都这样,不敢折腾它们,还是群晖耐搞一点。这里要多吐糟ubnt一句,当时选它是因为配置方便,比cisco的命令行要直观很多,而且多设备统一配,不用一个一个的配,不过用起来真的太累了,USG用了三年已坏了一个了,都不知道为什么突然就不起不来了,各种复位都没用,估计是固件挂了,还没法重刷,只能再配一个,下套房子再也用它家的了,还是用cisco或是华为的算了。
好了,先从frps开始,以前我都是安装好后自己用vim改frps.ini文件,不过网上有现成的脚本,就省大事了。
wget --no-check-certificate https://raw.githubusercontent.com/clangcn/onekey-install-shell/master/frps/install-frps.sh -O ./install-frps.sh
chmod 700 ./install-frps.sh
./install-frps.sh install
由于大妈家的编辑器好像没有代码模式,我只好把三条命令分成三个引用,这样大家不太会错,直接复制粘贴到SSH里就可以了。
Please input frps bind_port [1-65535](Default Server Port: 5443):
#输入frp提供服务的端口,用于服务器端和客户端通信,按Enter键表示默认5443,否则手动输入新端口Please input frps dashboard_port [1-65535](Default dashboard_port: 6443):
#输入frp的控制台服务端口,用于查看frp工作状态,按Enter键表示默认6443,否则手动输入新端口Please input frps vhost_http_port [1-65535](Default vhost_http_port: 80):
#输入frp进行http穿透的http服务端口,按Enter键表示默认80,否则手动输入新端口,一般不建议默认80Please input frps vhost_https_port [1-65535](Default vhost_https_port: 443):
#输入frp进行https穿透的https服务端口,按Enter键表示默认443,否则手动输入新端口Please input privilege_token (Default: WEWLRgwRjIJVPx2kuqzkGnvuftPLQniq):
#输入frp服务器和客户端通信的密码,默认是随机生成的,按Enter键表示按默认来,否则手动输入。frpc客户端需要这个接头暗号Please input frps max_pool_count [1-200](Default max_pool_count: 50):
#设置每个代理可以创建的连接池上限,默认50Please select log_level #####
1: info
2: warn
3: error
4: debug
#####################################################
Enter your choice (1, 2, 3, 4 or exit. default [1]):
#设置日志等级,4个选项,默认是infoPlease input frps log_max_days [1-30]
(Default log_max_days: 3 day):
#设置日志保留天数,范围是1到30天,默认保留3天。##### Please select log_file #####
1: enable
2: disable
#####################################################
Enter your choice (1, 2 or exit. default [1]):
#设置是否开启日志记录,默认开启,开启后日志等级及保留天数生效,否则等级和保留天数无效
上面这个是install时的交互内容,引的网上大神的,顺序和实际略有不同注意比较,这里主要几个端口要说明一下,bind_port是服务器和客户机通讯的端口,dashboard_port是用来登录控制台的,vhost_http_port是穿透http服务就是用来访问内网的http服务的,vhost_https_port同样的意思,这个install里只设了这些,如果你还要穿透SSH、telnet或是别的TCP服务的,可以直接去编辑ini文件。
install结束后会有个配置的汇总提示,可以截图或是复制成文本保存下来,另外frps有一些命令可以用。
./install-frps.sh update #版本更新
./install-frps.sh uninstall #卸载frps
frps start #服务启动
frps stop #服务停止
frps restart #重启服务
frps status #状态
frps config #参数设置
frps version #frps版本
在装客户机端之前,要去搞一个域名,这样可以用不同的二级域名去访问不同的内网的http服务,域名我没去比较,反正找了个最方便的,就是腾讯云了,微信小程序注册开通,速度很快从注册到实名认证到解析完成,一个小时不到,我选的是.xyz的,11块钱一年,反正自己用用,没必要选更好的。
解析记录填起来很简单,如果没有mail服务,就用*就OK了,打码的那边是AWS的公网IP地址。主机记录和记录类型填写时有详细说明,如果有别的需求的可以参考一下。
frpc安装差不多,如果装在NAS上,先SSH上去,用sudo -i拿到root提示符,在/usr/local下面建个frp的目录,用
wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_amd64.tar.gz
把文件下载下来,我刚去Github看了一下,我因为NAS里面原来就是这个,所以用的是老的0.21.0版的,现在已经更新到0.29.0版本了,有兴趣的可以下最新的,https://github.com/fatedier/frp,里面也有中文的说明文档,也有全版的ini文件,可以去阅读。
如果有多个web要穿透,可以用编号的方式做多个段,如[web_01]、[web_02]等等,里面的端口和前面frps设置的对应就可以了。设置好后,通过
./frpc -c ./frpc.ini
就可以启动了,NAS的话也可以做在任务计划里
至此,FRP就算是完成了,可以用前面设置的访问dashboard_port端口,登到控制台去看一下了。
KingTam
校验提示文案
幻月如風
校验提示文案
Bingda733
校验提示文案
Bingda733
校验提示文案
幻月如風
校验提示文案
KingTam
校验提示文案