我是靠谱客的博主 辛勤皮卡丘,最近开发中收集的这篇文章主要介绍使用frp 实现内网穿透 & 将私人电脑变成一个服务器使用frp 实现内网穿透frp 是什么使用步骤使用实例,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

使用frp 实现内网穿透

frp 是什么

​ frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。

作用,比如你需要用到云服务器部署你的web应用,或者作为云盘。买一个云服务器价格昂贵。但是你有一个闲置的电脑,你可以把这个电脑作为一台服务器。服务器和普通家用电脑的区别就是能不能被外网访问,我们自己电脑不能被外网访问,所以你可以买一个便宜的服务器比如阿里云的学生机 1核2G 一年才100多块钱。在这个公网服务器上运行frp server端程序,然后在你闲置的电脑上运行 frp client端程序。就可以实现访问公网服务器的请求,能被转发到配置好的家用电脑

缺点,通过家用电脑搭建服务器,肯定没有阿里提供的服务器那么稳定。学习阶段这么玩玩还是挺有意思的。

​ 官方中文文档

架构图
主要就是,frp server 会与 frp client建立一条长连接。因为之前建立了长连接,所以frp server肯定知道我们的地址,然后将请求发给我们。

image-20200623212557211

使用步骤

  • frpsfrps.ini 放到具有公网 IP 的机器上。

  • frpcfrpc.ini 放到处于内网环境的机器上。

  • 我下面的安装部署都是采用的docker,如果需要使用可执行文件运行,可以下载官方的。

  • 这里是我已经下载好的官方程序

使用实例

执行脚本安装docker

注意:我这里的系统是centos7 64

  1. 脚本内容
#!/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
  1. 运行脚本
$ bash docker_setup.sh

image-20200623161124961

  1. frp docker 地址

文档

image-20200623152650316

通过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

创建一个文件,粘贴上我们写好的脚本,然后执行脚本

image-20200623162305710

客户端配置

  • local_port(客户端侦听)和 remote_port(服务器端暴露)是用来出入 frp 系统的两端,server_port 则是服务器用来与客户端通讯的。
  • 切记把server_addr 改成你自己公网服务器的公网ip
  • 压缩
    • 如果公司内网防火墙对外网访问进行了流量识别与屏蔽,例如禁止了 ssh 协议等,通过设置 use_encryption = true,将 frpc 与 frps 之间的通信内容加密传输,将会有效防止流量被拦截。
    • 如果传输的报文长度较长,通过设置 use_compression = true 对传输内容进行压缩,可以有效减小 frpc 与 frps 之间的网络流量,加快流量转发速度,但是会额外消耗一些 cpu 资源。
#!/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

创建一个文件,粘贴上我们写好的脚本,然后执行脚本

image-20200623162715816

开启安全组,释放端口

  • 7000 是frp配置的client 和server 的通行端口。
  • 6000 是frp client 配置的 服务器端暴露端口。
  • 7500 是 服务监控的仪表盘web服务端口

image-20200623211925786

测试通过

# -oPort=6000 这个是在客户端配置的公网提供服务的端口。
ssh -oPort=6000 vagrant@x.x.x.x

image-20200623162909342

仪表盘

image-20200623211720103

访问部署于内网的 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

客户端

  1. 脚本
# 我这里先使用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
  1. 使用nginx 启动docker 和frpc

image-20200623173912214

image-20200623165041507

测试

image-20200623173633865

最后

以上就是辛勤皮卡丘为你收集整理的使用frp 实现内网穿透 & 将私人电脑变成一个服务器使用frp 实现内网穿透frp 是什么使用步骤使用实例的全部内容,希望文章能够帮你解决使用frp 实现内网穿透 & 将私人电脑变成一个服务器使用frp 实现内网穿透frp 是什么使用步骤使用实例所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部