概述
使用frp 实现内网穿透
frp 是什么
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。
作用,比如你需要用到云服务器部署你的web应用,或者作为云盘。买一个云服务器价格昂贵。但是你有一个闲置的电脑,你可以把这个电脑作为一台服务器。服务器和普通家用电脑的区别就是能不能被外网访问,我们自己电脑不能被外网访问,所以你可以买一个便宜的服务器比如阿里云的学生机 1核2G 一年才100多块钱。在这个公网服务器上运行frp server端程序,然后在你闲置的电脑上运行 frp client端程序。就可以实现访问公网服务器的请求,能被转发到配置好的家用电脑。
缺点,通过家用电脑搭建服务器,肯定没有阿里提供的服务器那么稳定。学习阶段这么玩玩还是挺有意思的。
官方中文文档
架构图
主要就是,frp server 会与 frp client建立一条长连接。因为之前建立了长连接,所以frp server肯定知道我们的地址,然后将请求发给我们。
使用步骤
-
将 frps 及 frps.ini 放到具有公网 IP 的机器上。
-
将 frpc 及 frpc.ini 放到处于内网环境的机器上。
-
我下面的安装部署都是采用的docker,如果需要使用可执行文件运行,可以下载官方的。
-
这里是我已经下载好的官方程序
使用实例
执行脚本安装docker
注意:我这里的系统是centos7 64
- 脚本内容
#!/bin/bash
sudo yum makecache fast
sudo yum -y update
# 删除以前的版本
sudo yum -y remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# docker 需要安装的包,已经常用的软件
# 测试 进程是否能访问 telnet 192.168.0.1 8080
sudo yum install -y yum-utils vim net-tools ssh openssh-server telnet
# 设置镜像的仓库
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker docker-ce 这是社区版
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 阿里云镜像加速,这个需要自己弄一个
touch xx
if [[ ! -d /etc/docker ]];then sudo mkdir /etc/docker; fi
echo '{"registry-mirrors": ["https://yohi7zsq.mirror.aliyuncs.com"]}' > xx
sudo mv xx /etc/docker/daemon.json
sudo systemctl daemon-reload
sudo systemctl start docker
- 运行脚本
$ bash docker_setup.sh
- frp docker 地址
文档
通过ssh 访问公司内网机器
服务端配置
-
bind_port (暴露的服务端口) 接收客户端流量的端口
-
Dashboard
-
通过浏览器查看 frp 的状态以及代理统计信息展示。
-
注:Dashboard 尚未针对大量的 proxy 数据展示做优化,如果出现 Dashboard 访问较慢的情况,请不要启用此功能。
-
打开浏览器通过
http://[server_addr]:7500
访问 dashboard 界面,用户名密码默认为admin
。
-
#!/bin/bash
echo "初始化 frps.ini 配置文件..."
if [[ ! -d /etc/frp ]]; then mkdir /etc/frp; fi
cat>/etc/frp/frps.ini<<EOF
# frps.ini
[common]
bind_port = 7000
# 以下是监控的配置,不想用就注销即可
dashboard_port = 7500
# dashboard 用户名密码,默认都为 admin
dashboard_user = admin
dashboard_pwd = admin
EOF
echo "启动frps 容器..."
docker rm -f frps
docker run --restart=always -d --network host -v /etc/frp/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps
创建一个文件,粘贴上我们写好的脚本,然后执行脚本
客户端配置
local_port
(客户端侦听)和remote_port
(服务器端暴露)是用来出入 frp 系统的两端,server_port
则是服务器用来与客户端通讯的。- 切记把server_addr 改成你自己公网服务器的公网ip
- 压缩
- 如果公司内网防火墙对外网访问进行了流量识别与屏蔽,例如禁止了 ssh 协议等,通过设置
use_encryption = true
,将 frpc 与 frps 之间的通信内容加密传输,将会有效防止流量被拦截。 - 如果传输的报文长度较长,通过设置
use_compression = true
对传输内容进行压缩,可以有效减小 frpc 与 frps 之间的网络流量,加快流量转发速度,但是会额外消耗一些 cpu 资源。
- 如果公司内网防火墙对外网访问进行了流量识别与屏蔽,例如禁止了 ssh 协议等,通过设置
#!/bin/bash
echo "初始化 frps.ini 配置文件..."
if [[ ! -d /etc/frp ]]; then mkdir /etc/frp; fi
cat>/etc/frp/frpc.ini<<EOF
[common]
server_addr = x.x.x.x
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
use_encryption = true
use_compression = true
EOF
echo "启动frpc 容器..."
docker rm -f frpc
docker run --restart=always --network host -d -v /etc/frp/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc
创建一个文件,粘贴上我们写好的脚本,然后执行脚本
开启安全组,释放端口
- 7000 是frp配置的client 和server 的通行端口。
- 6000 是frp client 配置的 服务器端暴露端口。
- 7500 是 服务监控的仪表盘web服务端口
测试通过
# -oPort=6000 这个是在客户端配置的公网提供服务的端口。
ssh -oPort=6000 vagrant@x.x.x.x
仪表盘
访问部署于内网的 web 服务
有时想要让其他人通过域名访问或者测试我们在本地搭建的 web 服务,但是由于本地机器没有公网 IP,无法将域名解析到本地的机器,通过 frp 就可以实现这一功能,以下示例为 http 服务,https 服务配置方法相同, vhost_http_port 替换为 vhost_https_port, type 设置为 https 即可。
服务端
#!/bin/bash
echo "初始化 frps.ini 配置文件..."
if [[ ! -d /etc/frp ]]; then mkdir /etc/frp; fi
cat>/etc/frp/frps.ini<<EOF
[common]
# frp 通行端口
bind_port = 7000
# 外网访问端口
vhost_http_port = 8080
EOF
echo "启动frps 容器..."
docker rm -f frps
docker run --restart=always -d --network host -v /etc/frp/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps
客户端
- 脚本
# 我这里先使用docker 启动一个nginx 方便我们测试
docker run -d -p 80:80 --name nginx nginx
#!/bin/bash
echo "初始化 frps.ini 配置文件..."
if [[ ! -d /etc/frp ]]; then mkdir /etc/frp; fi
cat>/etc/frp/frpc.ini<<EOF
[common]
server_addr = x.x.x.x
server_port = 7000
[web]
type = http
# 本地web服务端口
local_port = 80
# 可以配置域名,这个需要买一个域名解析你的公网ip。我这里就不弄了
# 他的原理其实是frp server 端启动了nginx,nginx帮忙转发请求。
# 所以如果我们的公网ip没有加上域名解析,这里就可以写上公网ip即可。
# custom_domains = www.haitaoss.cn
custom_domains = x.x.x.x
use_encryption = true
use_compression = true
EOF
echo "启动frpc 容器..."
docker rm -f frpc
docker run --restart=always --network host -d -v /etc/frp/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc
- 使用nginx 启动docker 和frpc
测试
最后
以上就是辛勤皮卡丘为你收集整理的使用frp 实现内网穿透 & 将私人电脑变成一个服务器使用frp 实现内网穿透frp 是什么使用步骤使用实例的全部内容,希望文章能够帮你解决使用frp 实现内网穿透 & 将私人电脑变成一个服务器使用frp 实现内网穿透frp 是什么使用步骤使用实例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复