利用Docker搭建FRP内网穿透

2018-10-12 21:15:00 51点赞 559收藏 29评论

去年的时候,我曾经写过一篇关于内网穿透的文章。

IT男的VPS系列教程 篇一:内网穿透(Frp)-拯救没有公网IP的你一、概述本文是一个偏技术类的文章,针对的人群未接触过该领域的小白。虽然说是技术类文章,但难度并不高,我也是一个管理专业出身现学现卖的。看看张大妈这里这类的文章还真的不多,因此抛砖引玉。文章是一个系列教程,由于脑子里构思的内容太多,一次性实在没有动力写完,所以做成了系列。什么是VPS?VPS(Virt化名叡阡千| 660 评论468 收藏5k查看详情


一年过去了,不断的有人咨询我关于使用的问题,而且我发现用这个的人也是越来越多,能问运营商要到公网IP的几率越来越小。我用的移动宽带,客服都直接回复,我们不提供公网IP。另外作者对frp也更新了很多,所以今天想再更新一下关于FRP,来张大妈骗点金币吧。

特别是在路由器、NAS没有公网IP是一件很不方便的事情,尤其是在国内的网络环境。为了解决这个问题,则需要内网穿透,而内网穿透的方法有很多种,例如使用花生壳、NGROK等,但是我感觉frp是相对更为稳定。

frp是什么

frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。

说白了,就是利用一台有公网IP的机子,实现访问你家没有公网IP的设备。

在我使用过的穿透软件中,感觉frp在稳定性、功能和维护方面做得比较好,我也稳定使用了快2年了。

准备工具

从上面的内网穿透的原理可以看出,我么至少需要一台有公网IP的主机,目前来看VPS是最好的选择,以及一个域名。

关于VPS用法、域名购买以及有关工具在我过去的文章中已经详细的说明了。如果对VPS有不明白的地方可以看一下教程 由于我今天只想说说FRP,所以就不赘述了。

域名一定要做泛解析,有时容易忽视这里。不论是二级域名还是三级域名,都可以做泛解析。比如我f.anys.ga做域名泛解析,填入*.f就可以吧*.f.anys.ga进行解析。

利用Docker搭建FRP内网穿透


FRP服务端搭建

利用docker

我选择了Docker方式,好处在于十分方便,容易部署,沙盒机制可以不破坏系统环境。最近docker用的多了感觉十分非常顺手,如果你不喜欢docker可以自行研究。

搭建服务端

我的OS是Ubuntu14.04 x64。首先安装Docker,这里不推荐apt-get 或者yum的形式安装,建议直接从官网下载docker。如果你不关心Docker是什么,那么你也不用深究,如果你有兴趣研究一下,可以自行google。

#安装Docker
wget -qO- https://get.docker.com/ | sh

#在宿主机建立目录
mkdir /var/frp && mkdir /var/frp/conf &&cd /var/frp/conf

#获取服务器端配置文件
wget https://frp.anys.ga/frps.ini

利用Docker搭建FRP内网穿透

#建立镜像
sudo docker run --name frps -d -v /var/frp/conf:/var/frp/conf -p 5000-5100:5000-5100 -p 7000:7000 -p 7500:7500 -p 7001:7001 -p 8089:80 -p 8443:443 ruiny/frps

利用Docker搭建FRP内网穿透

这样服务器就搭建好了。按照以上配置完成的话,服务端口7000,状态查询(web)端口7500,http服务端口8089,https端口为8443,同时开放5000-5100端口用于其他TCP/UDP连接。

之所以用8089/8443端口是因为本机上的80/443端口用给Nginx了,如果你们确保端口没冲突的话可以用80/443端口。(有些强迫症患者只用80端口)

之后登陆你VPS地址IP地址:7500可以查询具体状态,用户名/密码为admin/Qwert123。

利用Docker搭建FRP内网穿透

配置文档修改

好了,如果实在懒得动配置,上面的可以正常使用,但一般总要改一下密码什么的吧。我在制作镜像的时候,把配置文件放在了/var/frp/conf下,在上面过去服务器配置的时候,我直接用了作者的官方配置,很多配置是不合适的,如果需要更改:

nano /var/frp/conf/frps.ini

至少你应该修改以下几项内容:(ctrl+x保存,或者习惯用vi编辑器的)

#设置用户名和密码,注意是状态面板的用户名和密码。
dashboard_user = admin
dashboard_pwd = admin

#令牌,很重要,用于验证与客户端的通信。
token = 12345678
#自定义二级域名,如果设置了,之后在客户端的http、https类型的代理中可以不配置custom_domains,而是配置一个 subdomain 参数。可以不配置,默认没有配置。
subdomain_host = frps.com

我只开放了5000-5100用于TCP/UDP端口,如果需要更多端口请修改以下内容。但同时docker run中也要修改-p 5000-5100:5000-5100的端口范围。我测试,如果一次性开放端口过多,会导致docker卡死,所以不建议开太多哦。

# only allow frpc to bind ports you list, if you set nothing, there won't be any limit
allow_ports = 5000-5100


FRP客户端配置

不论是梅林、老毛子或者是群晖,在frp客户端中的设置都大同小异,但是我一般喜欢用配置文档的方式,简单说说配置文档。完整的客户端配置模板可以在查看

配置文档

配置文档分为两部分,第一部分是common开头的通用配置,第二部分就是每个穿透服务项目

利用Docker搭建FRP内网穿透

下面将几个例子:

1.主路由web界面

[router] #主路由web界面
type = http #穿透类别为http
local_ip = 192.168.1.1 #内网地址
local_port = 80 #穿透服务内网端口
remote_port = 8089
custom_domains = router.f.anys.ga #外网域名
use_encryption = true #开启加密
use_compression = true #开启压缩

在梅林的界面中对应内容如下:

利用Docker搭建FRP内网穿透

2.GEN8中window的远程桌面

[Gen8-Winser]
type = tcp #类别为tcp
local_ip = 192.168.1.5 内网Gen8的ip地址
local_port = 3389 #注意穿透端口是远程桌面的端口3389
remote_port = 5000 #外网端口随便填一个吧
use_encryption = true
use_compression = true

由于是tcp所以这里不需要外网域名了,这个就类似于端口转发。

利用Docker搭建FRP内网穿透

3.DSM黑群晖

[dsm]
type = https #黑群晖DSM的web用https,所以类别是https
local_ip = 192.168.1.7 #黑群晖的地址
local_port = 5001 #群晖的https端口是5001
remote_port = 8443 #外网https端口对应是8443
custom_domains = dsm.f.anys.ga
use_encryption = true
use_compression = true

我黑群晖的内网地址是192.168.1.7,https端口是8443,对应访问域名就是dsm.f.anys.ga:8443。对于https的穿透,需要导入相应证书,否则不会有小绿锁哒~

利用Docker搭建FRP内网穿透

群晖和梅林都有导入的地方,比如群晖在这里:

利用Docker搭建FRP内网穿透

frp的作者还搞了一些高级用法,特殊情况可以尝试用一下:

4.转发 DNS 查询请求

可以通过frp转发自己的DSN请求,在客户端配置文件中设置。将DNS请求转发到google的8.8.8.8

[dns]
type = udp
local_ip = 8.8.8.8
local_port = 53
remote_port = 6000

5.stcp 类型的代理

stcp利用了一个sk验证,使得只有sk一直的两个客户端能够点对点互访,防止公网上的随意访问。

家里的路由器:

[secret_ssh]
type = stcp #类型是stcp
sk = router1 # 只有 sk 一致的用户才能访问到此服务
local_ip = 192.168.1.1
local_port = 22

另外一台PC:

[secret_ssh_visitor]
type = stcp
role = visitor # 访问者
server_name = secret_ssh # 对应穿透服务的名称与上面一直
sk = router1 # 只有 sk 一致的用户才能访问到此服务
bind_addr = 127.0.0.1
bind_port = 8022 # 绑定本地的端口

在本地访问ssh,地址127.0.0.1,端口8022就会穿透到家里的路由器22端口。

利用Docker搭建FRP内网穿透


测试

一个不知道什么时候就会消失的测试服务器,注意人多容易重名,不要当作正式用途。

Web地址:网址 admin/Qwert123
FRP服务地址:f.anys.ga:7000
token:f.anys.ga
TCP/UDP端口:8089,443, 5000-5100
三级域名 *.f.anys.ga

其它问题

1.修改frps.ini后需要重新启动容器 docker restart frps

2.服务器端只适用于64位的系统

3.0.17以后的版本和之前的不兼容,注意客户端和服务器版本一致

4.由于frp是封装在docker里面运行的,如果要讨论效率的话我不好说。

说真的FRP真的很好用,之前用Vultr做服务器的时候,带宽足够可以在线看家里NAS的视频,而且非常稳定,不论是客户端还是服务端都很稳,基本不用操心。

展开 收起
29评论

  • 精彩
  • 最新
  • 共享个搭好的服务器呗 [惊喜]

    校验提示文案

    提交
    见正文下半部分

    校验提示文案

    提交
    请问楼主共享的服务器对应的黑群晖客户端下载哪个版本的?

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 我的也是移动内网,搞不到公网ip,想架设frp进行内网穿透,看了很多教程,明天动手试一下。
    不过还是感觉很难,主要是碰到问题没有人指导,太折腾人

    校验提示文案

    提交
    现在都是一键脚本,多试验几次应该没问题

    校验提示文案

    提交
    问题果然出现了,现在也不知道该怎么弄,也不明白问题出在哪里,搞不懂啊

    校验提示文案

    提交
    收起所有回复
  • @化名叡阡千 能帮我看看吗?

    校验提示文案

    提交
    联系我吧,我的服务器一块用吧。anyzdm@谷歌邮箱

    校验提示文案

    提交
    楼主可否让我的群辉加入你的服务器,愿意承担一部分费用

    校验提示文案

    提交
    收起所有回复
  • 撸主,我是小白。我看了撸主的系列文章,包括frp、私有云盘搭建等,在VPS上搞这么多东西,VPS至少购买多大内存的配置?512MB?1G起?

    校验提示文案

    提交
    个人用推荐1g 512也能用

    校验提示文案

    提交
    VPS贵的不是内存、CPU, 真正贵的是带宽。还是电信厚道,几十兆公网带宽的VPS至少300元一个月吧

    校验提示文案

    提交
    收起所有回复
  • 电信公网IP,显摆一下

    校验提示文案

    提交
  • 我选择了阿里云解析。。。几十块钱好几年。。

    校验提示文案

    提交
    云解析怎么样?怎么玩的 我现在主路由是爱快

    校验提示文案

    提交
    比较简单,网上有不少教程。

    校验提示文案

    提交
    收起所有回复
  • [邪恶] 我觉得可以

    校验提示文案

    提交
  • 妙啊!收藏走一波

    校验提示文案

    提交
  • 花生壳有人用吗

    校验提示文案

    提交
  • 这个有带宽限制么?我现在用open vp -n+nginx解决没有固定ip都问题,但是阿里云的带宽好贵

    校验提示文案

    提交
  • vps 搭建ip,天天被墙,除了重新建,还有其他方式不

    校验提示文案

    提交
  • 有办法让流量不走frp服务器吗

    校验提示文案

    提交
    frp流量本来就不走服务器吧,服务器只是刚开始给两个端口定位而已。

    校验提示文案

    提交
    frp流量全部走服务器,服务器跟你的内网之间建立一个通道,相当于代理,你输入地址之后会服务器会去获取你的内网数据,再发送给你。

    校验提示文案

    提交
    收起所有回复
  • ipv6+ddns了解一下

    校验提示文案

    提交
    求来遍教程学习学习

    校验提示文案

    提交
    收起所有回复
  • 虽然不懂,但还是从头看到尾 [喜极而泣]

    校验提示文案

    提交
  • 写这样的文章,看不懂,没朋友

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
559
扫一下,分享更方便,购买更轻松