简单搭建FRP内网穿透利用反代frp和Nginx共用80端口实现外网访问内网

2019-12-03 19:37:28 收藏 897

简单搭建FRP内网穿透利用反代frp和Nginx共用80端口实现外网访问内网



前言:之前没接触过这个一来想了解一下找找新鲜感,二来是我的服务器硬盘不够使了,三来是网站内容在自己电脑上对于机密文件很是放心。最重要的一点也是我大错特错的一点是我以为通过FRP穿透后会使宽带大大提高,因为服务器宽带只有1兆,而我的电信光纤上传达到了20兆,还有我的硬盘也够大,本来以为电脑的上文件不经过服务器传输就相当于一个URL地址一样顶多传一个地址用不了多大的流量,可是我大错特错了,它是原原本本的把我电脑中的文件先拖到自己服务器中再从自己的服务器发送给客户端。那我还忙个毛啊……搞了这么久记一下吧,虽然不用了。

我又来了,又把它用起来了现在用的不是带宽了想把电脑上的硬件利用起来做程序运算,现在的服务器多1G内存就马上多一倍钱了CPU更是金贵得很,只要本地优化得好图片音频等包括JS能外链都尽量外链,应该没多大问题。

如下图:电脑上传能到2兆,而经过frp……

简单搭建FRP内网穿透利用反代frp和Nginx共用80端口实现外网访问内网
在看下面的时候先确定以下几点:
1、我的服务器系统阿里云liunx系统64位,加宝塔面板;本地电脑windows系统64位。
2、后台打开7500、7000、8080端口如下图;


说明:7500端口是frp的控制台服务端口,用于查看frp工作状态,7000端口是用于服务器端和客户端通信的,8080端口是穿透 http 的端口

3、阿里后台也开放7500、7000、8080端口如下图:


4、本地有web服务。

5、因为服务器中已经有了网站占用了80端口那么我再使用frp的时候就不能用80端口了需要先反代一下,以宝塔为例后台找到软件管理找到运行环境-打开nginx管理点击配置修改,找个舒服的地方插入以下代码:


  server {
      listen 80;
      location / {
      proxy_pass http://127.0.0.1:8080;
      proxy_set_header Host $host:80;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_hide_header X-Powered-By;
      }
      }
为了出错截个图像下面图片这样的最好找一个server{在它的前面加上像上面的代码图片示例:

frp反代
首先下载开源的代码:https://github.com/fatedier/frp/releases(根据自己的系统选择linux或windows按32位或是64位下载)

下面的操作是服务端用linux系统64位的,本地端用windows系统64位的,可以根据自身需求下载所需要的版本:



FRP各版本下载
第一步:打开压缩包中的“frps”文件夹内的“frps.ini”修改默认的域名(这个域名必须解析到服务器),修改完后将整个“frps”文件夹传输到服务器根目录中如下图:

[common]

#服务器地址IPv4或ipv6+监听端口(我就直接用下面的四个0建议不要改,改个求)

bind_addr = 0.0.0.0

# frp server 绑定的端口[1-65535]用于服务器端和客户端通信,默认即可

bind_port = 7000

# 设置穿透 http 的端口默认为80这时必须改为 8080

vhost_http_port = 8080

##可视化面板

# 设置域名(保证此域名可用,和frpc中server_addr一致,仅用来通信对应frpc的server_addr)

subdomain_host = frp.foresthouse.cn

# 配置 frp的控制台服务端口,用于查看frp工作状态,默认即可(可选)

dashboard_addr = 0.0.0.0

dashboard_port = 7500

# dashboard 用户名密码,默认都为 admin,可以自己改包括上面的7500高兴可以改成7600,7800等等

dashboard_user = admin

dashboard_pwd = admin

##

#为了防止端口被滥用仅允许以下端口可被使用

allow_ports = 2000-3000,3001,3003,4000-50000

#通信密码和frpc中的token保持一致

token = abcdef



一个大坑注意,上面代码dashboard_addr和bind_addr写成服务器的内网IP或者直接写0.0.0.0就行或者以阿里云为例参考下面的图片填写私有IP(反正我写公IP头都干晕了)

简单搭建FRP内网穿透利用反代frp和Nginx共用80端口实现外网访问内网
第二步:分别执行以下linux命令启动frp:


  cd /frps
  ./frps -c ./frps.ini


上面代码说明:第一行进入“frps”文件夹,第二行运行程序。如下图则成功了:

启动frp命令
下面的命令是关闭frp


  cd /frps
      pkill frps


如果出现了像这样的错误说明权限不够请按照以下图片所示操作:-bash: cd: frps: No such file or directory


这个时候在地址栏目输入:域名:7500,则可以正常打开如下图。



第三步:把开头下载好的压缩包内的“frpc”文件夹放在电脑的随便什么地方,并修改文件夹内的“frpc.ini”文件,把server_addr填一下(推荐填写frps面板的域名不使用IP),把custom_domains也填一下后保存。代码示例如下:


[common]

#服务器地址IPv4或ipv6+监听端口(服务端分配的IP,不是内网IP,建议填写域名)

server_addr = frp.foresthouse.cn

server_port = 7000

token = abcdef

#日志文件路径、类型和时间

log_file = ./frpc.log

# trace,debug,info,warn,error

log_level = info

log_max_days = 3

[web]

type = http

#被穿透的局域网IP(可在路由器的DHCP保留当前MAC的IP静态以后重启还是这个IP就不变了)

#可以设置成当前电脑的局域网IP比如192.168.1.11也可以像下面这样的

local_ip = 127.0.0.1

#本地网站的端口号

local_port = 80

#(true\false)是否使用加密,默认关闭用于防止某些公司的代理服务器可能会识别流量特征从而阻断某些协议。

use_encryption = false

#传输内容压缩,可以有效减小 frpc 与 frps 之间的网络流量,加快流量转发速度,但是会额外消耗一些 cpu 资源。

use_compression = true

##访问密码用于内部测试时不方便外人看到时使用

#http_user = admin

#http_pwd = admin

#是否G-zip启用压缩

use_gzip = true

#域名

custom_domains = ceshi.foresthouse.cn


第四步:在当前目录中建立一个文本文档在此文档内输入以下代码后另存为任意名称.cmd;比如“启动frp.cmd”


  frpc.exe -c frpc.ini
      pause
  双击刚才创建好的启动frp.cmd文件即可启动客户端程序:


如下图则成功了

启动客户端程序
接下来用我们的域名加8080访问一下试试:

成功截图
自己觉得比较好的frpc端的代码参考可配合上面的frps一起使用


  1. [common]

  2. #服务器地址IPv4或ipv6+监听端口(服务端分配的IP,不是内网IP)

  3. server_addr = frp.foresthouse.cn

  4. server_port = 7000

  5. token = abcdef

  6. #控制台或类似./frpc.log真正的日志文件路径

  7. log_file = ./frpc.log

  8. # trace,debug,info,warn,error

  9. log_level = info

  10. log_max_days = 3

  11. [web]

  12. type = http

  13. #被穿透的局域网IP(可在路由器保留静态)

  14. local_ip = 127.0.0.1

  15. #本地网站的端口号

  16. local_port = 80

  17. #(true\false)是否使用加密,默认关闭用于防止某些公司的代理服务器可能会识别流量特征从而阻断某些协议。

  18. use_encryption = false

  19. #传输内容压缩,可以有效减小 frpc 与 frps 之间的网络流量,加快流量转发速度,但是会额外消耗一些 cpu 资源。

  20. use_compression = true

  21. ##访问密码用于内部测试时不方便外人看到时使用

  22. #http_user = admin

  23. #http_pwd = admin

  24. #是否G-zip启用压缩

  25. use_gzip = true

  26. #域名

  27. custom_domains = web1.foresthouse.cn

  28. #有多个网站可直拉复制下面的修改web2-webN

  29. [web2]

  30. type = http

  31. local_port = 80

  32. custom_domains = web12.foresthouse.cn,www.baidu.com

  33. #或者干脆来个更简单的

  34. [myphpstudy_all]

  35. type = http

  36. local_port = 80

  37. custom_domains = www.foresthouse.cn,www.so.com,www.google.com,m.123.com,bbs.456.com,myweb.web.net,img.pic.com

  38. #通过像上面的设置把本地电脑上的所有网站都转发走一劳永逸。配合像phpstudy的运行环境啊哈哈

简单搭建FRP内网穿透利用反代frp和Nginx共用80端口实现外网访问内网


这是一个frp的提示页如果能打开证明我可能在用如果打不开了可能就不用了


最后有几点小问题总结中

1、关闭SSH后立马变成“502 Bad Gateway”frp会结束运行本地网站就不能访问了

在打开frp后还需要将frp加入后台运行,这样就保证关闭ssh也无所谓了,重新打开ssh窗口执行代码如下(注意第二句末尾有个符号):


  cd /frps
      nohup /frps/frps -c /frps/frps.ini &


2019-05-23更新


如果你有公网IP,又不想备案那么恭喜你请往下看!


首先怎么确定你的是公网IP请看下面两张图片,第一幅图:路由器里面的地址和第二幅图:网上查看自己的IP地址,如果这两个IP一样基本可以确定你就是公网IP了。



确定了以后可以先试下80和443端口,当然了肯定是封闭了的,试下万一是开着的呢?怎么试?在本地搭建一个运行环境。输入127.0.0.1可以访问的。或者是输入带有运行环境电脑的局域网IP比如192.168.1.2都是可以访问的,然后进入路由器把DMZ主机打开如下图:


然后在浏览器中输入公网IP看能不能打开本机中的运行环境有提示402、502的等等都是可以打开,要是啥提示都没有,直接无法访问的话基本上应该是封了端口了,也可以试试443的https端口当然可能性非常小。如果能访问的话就不用往下看了。

接下来去路由器进行端口映射,路由器都大同小异不同品牌的可能样式都不一样自己找吧,如下图添加一个80端口到运营商没有封闭的端口如下图:



接下来去找一个带端口号的CDN,只有这一种方法其它的什么穿透(速度慢、受VPS硬件影响、成本大),转发啥的都没用根本无解。如果你能忍受在网址后面加上端口号访问的话就另说了。
这里推荐一个CDN(我找了N久找到的业务刚起步配有中英文界面好多定价都没有明确,想追求极致稳定的请看文章最后的反代方法)地址在文章末尾,先来说下在CDN上怎么做,如下图:

nodecache
设置很简单服务名称随便写方便查看,加速域名填写自己的域名,应用场景根据需要全站加速相应流量要高,如果担心流量太高而自己网站又没有文件下载的地方可以选择文件下载(适合软件安装包等文件下载类业务场景。)这样应该就不用流量了吧哈哈(我没试过),源站按自己实际情况选择http还是https等,线路配置是重点了,源站地址填写公网IP,端口号填刚才在路由器中穿透的端口号8181(可以自己定),下面还有一个加速区域,肯定是推荐选择全球加速了。
都设置好了还要去把域名cname一下,在域名商处把域名别名到下图CNAME处就可以了。

免备案自定义端口CDN
免备案自定义端口CDN点击这里直达

最后我是在阿里云买的域名然后用的cloudflare的CDN,在cloudflare上面CNAME到了免备案自定义端口的CDN上面并且在cloudflare开启了加速。算下来cloudflare是一级CDN,有自定义端口的这个是二级CDN这样流量应该很省很省了吧~~更狠的是二级CDN的应用场景我用的是文件下载我没下载的东西哈哈。这样把二级CDN流量省了(最大化减少缓存只用端口功能)给一级CDN缓存去吧(最大化增加缓存),借着一级CDN还可以弄个https爽歪歪。

最后这个CDN不是免费的第一个月送500G的流量不管用没用完第二个月就没有了,流量包北美地区的价格是7.5美元500G,1T是30美元比较坑的是有效期一个月,就是买了1T一个月没用下个月也没有了。用的少感觉还是按流量计费划算北美和欧洲地区0.03美元/G、亚太地区0.12美元/G、拉丁美洲0.18美元/G,自动选择。好处是请求费用目前不要钱(只是目前不要钱以后不一定)。


如果不想用二级CDN可以直接用Nginx的反代功能请往下看


需要购买一台服务器用来做反代,(国内需要备案),同样安装宝塔面板在添加站点处正常添加一个网站端口不用改默认的80,如下图:


添加完成后点击反向代理注意目标URL是DDNS地址一般路由器都自带的在路由器中设置,然后在DDNS地址后面加上端口例如8181取决于可以被外网访问到的端口。然后把启用反向代理的勾勾上。如下图:


需要注意的是购买的服务器中域名要和源站(本地)绑定的域名一样方便管理,域名需要解析到购买的服务器中A、CNNAME都可以。我是把域名停在CF从CF解析的这样就自带了缓存其它都不用设置了很方便而且还可以隐藏服务器的真实IP避免被攻击一箭双雕。



本篇文章的意图仅用来给测试应用、微信开发等行个方便,不要用在线上运营环境上,由此造成的任何后果与本站无关。确定要用的话请先备案,请先备案,请先备案重要的话说三遍。。。


 本站文章如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:https://www.foresthouse.cn/archives/5670.html

https://www.foresthouse.cn/archives/5670.html


weinxin
我的微信
科学的永恒性就在于坚持不懈地寻求之中,科学就其容量而言,是不枯竭的,就其目标而言,是永远不可企及的。

发表评论

目前评论:0