基于 frp 的内网穿透实践

Author Avatar
wshunli 11月 09, 2018
  • 在其它设备中阅读本文章

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。

1、利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。
2、对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
3、利用处于内网或防火墙后的机器,对外网环境提供 tcp 和 udp 服务。

frp 搭建需要一台具有公网 IP 的服务器,并且访问效果和服务器的带宽和内网的上行带宽有关系。

内网穿透实现方法

内网穿透有很多商业的软件比如花生壳、NATAPP 等,这里不多介绍。

还有一些半开源的工具比如 ZeroTier ,配置简单,但是需要额外安装软件。

再者就是 frp 、ngrok 等开源工具,利用具有公网 IP 的服务器搭建。

frp 内网穿透实践

frp:https://github.com/fatedier/frp

中文文档:https://github.com/fatedier/frp/blob/master/README_zh.md

准备工作

做内网穿透前需要提前准备一些东西的

1、一台公网服务器,建议国外的 VPS ,带宽大一些;
2、一台内网服务器,我这里是 QNAP 的 NAS ,Linux 系统;
3、域名,用于解析,访问内网;
4、内网服务,访问的主要内容。

frp 的安装配置

这里 具有公网 IP 的机器称为服务端,处于内网环境的机器称为客户端。

1、下载 frp 文件

https://github.com/fatedier/frp/releases 下载最新版即可。

下载并解压文件

 cd usr/local/
wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_amd64.tar.gz
tar -zxvf  frp_0.21.0_linux_amd64.tar.gz
cd frp_0.21.0_linux_amd64

这里主要有 4 个文件,分别是 frpc、frpc.ini 和frps、frps.ini 。

将 frps 及 frps.ini 放到具有公网 IP 的机器上。
将 frpc 及 frpc.ini 放到处于内网环境的机器上。

2、配置具有公网 IP 的机器,也就是 frps.ini 文件

使用 vim frps.ini 命令修改配置文件

[common]
bind_port = 7000            # 内网穿透服务端口
bind_udp_port = 7001        # 点对点内网穿透

vhost_http_port = 10080     # 外部访问的 http 端口
vhost_https_port = 10443    # 外部访问的 https 端口

dashboard_port = 7500       # 管理面板端口
dashboard_user = admin      # 管理面板用户名
dashboard_pwd = admin       # 管理面板密码

token = asdfgh              # 身份验证

更多内容参考:frps 完整配置文件

启动 frps 服务

./frps -c ./frps.ini

后台启动方法

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

3、配置处于内网环境的机器,也就是 frpc.ini 文件

使用 vim frpc.ini 命令修改配置文件

[common]
server_addr = X.X.X.X           # 内网穿透服务地址
server_port = 7000              # 内网穿透服务端口

token = asdfgh                  # 身份验证,与服务端一致

[qnap-web]
type = http
local_ip = 127.0.0.1            # 内网服务地址
local_port = 8080               # 内网服务端口
use_encryption = true           # 加密传输
use_compression = true          # 压缩传输
custom_domains = x.wshunli.com  # 访问域名

这里 custom_domains 是外网服务器解析的域名,否则无法访问;可根据 vhost_http_port 端口反向代理解析。

更多内容参考:frpc 完整配置文件

启动 frpc 服务方法与 frps 类似。

前台启动:./frpc -c ./frpc.ini

后台启动:nohup ./frpc -c ./frpc.ini &

4、frp 控制面板的使用

这里需要根据公网 IP 服务器访问,即 http://{server_addr}:{dashboard_port}

更多内容参考 frp 中文文档

Linux 服务进程停止命令

1、查找被占用的端口

[root@localhost ~]# netstat -tln | grep 30080
tcp6       0      0 :::30080                :::*                    LISTEN

2、查看被占用端口的PID

[root@localhost ~]# lsof -i:30080
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 4390 root    4u  IPv6  36195      0t0  TCP *:30080 (LISTEN)
docker-pr 4390 root    7u  IPv6 170434      0t0  TCP localhost:30080->localhost:42162 (ESTABLISHED)
frpc      4509 root    6u  IPv4 170433      0t0  TCP localhost:42162->localhost:30080 (ESTABLISHED)

3、杀掉相关进程

[root@localhost ~]# kill -9 4509

服务停止启动

参考资料
1、一分钟实现内网穿透(ngrok服务器搭建) - 学习笔记 - CSDN博客
https://blog.csdn.net/zhangguo5/article/details/77848658
2、十分钟教你配置frp实现内网穿透 - 诗雨远方的博客 - CSDN博客
https://blog.csdn.net/u013144287/article/details/78589643
3、突破电信局域网:frp内网穿透教程(客户端:lede/win) - 电脑讨论 - Chiphell - 分享与交流用户体验
https://www.chiphell.com/thread-1853360-1-1.html
4、使用frp进行内网穿透入门 - QQ小冰 - CSDN博客
https://blog.csdn.net/weixin_36241363/article/details/78457359
5、威联通折腾篇二:使用 frp 内网穿透 | Verne in GitHub
https://blog.einverne.info/post/2018/06/qnap-frp-usage.html
6、nohup和&后台运行,进程查看及终止 - 弥尘 - 博客园
https://www.cnblogs.com/baby123/p/6477429.html

如果本文对您有所帮助,且您手头还很宽裕,欢迎打赏赞助我,以支付网站服务器和域名费用。 https://paypal.me/wshunli 您的鼓励与支持是我更新的最大动力,我会铭记于心,倾于博客。
本文链接:https://www.wshunli.com/posts/be4c3c8c.html