原理

frp(fast reverse proxy)分为Server端和Client端,Server端安装在带有公网IP的服务器上,Client安装在内网环境但能上网的普通PC中。

流程:

  1. Server端提供一个bind_port端口,Client端提供remote_port端口和local_port端口
  2. Client端通过Server_IP+bind_port找到Server端,并告诉Server端我需要一个端口remote_port
  3. Server端在本地监听remote_port端口,把通过remote_port端口的流量传给remote_port对应的Client
  4. Client端把从Server端remote_port传过来的流量传到配置的local_port

用户访问流程:

  1. 用户通过访问Server_IP:remote_prot,相当于访问Client_IP:local_port。其中Client_IP(为内网IP),相当于实现了内网穿透

如图:

安装Server端

进入下载页面,下载frp_0.33.0_linux_amd64.tar.gz后,运行以下命令:

# 解压并进入目录
tar -zxvf frp_0.33.0_linux_amd64.tar.gz && cd frp_0.33.0_linux_amd64 # 把frps、frps.ini移动到适当位置
sudo mv ./frps /usr/bin/
sudo mkdir -p /etc/frp
sudo mv ./frps.ini /etc/frp/ # 创建frps.service
cat <<EOF | sudo tee /lib/systemd/system/frps.service
[Unit]
Description=Frp Server Service
After=network.target [Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini [Install]
WantedBy=multi-user.target
EOF # 配置frps.ini,其他配置参考:https://github.com/fatedier/frp
cat <<EOF | sudo tee /etc/frp/frps.ini
[common]
bind_port = 7000
# http端口
vhost_http_port = 7001
# https端口
# vhost_https_port = 7002
EOF # 开启frps并设置开机启动
sudo systemctl daemon-reload
sudo systemctl start frps
sudo systemctl enable frps
sudo systemctl status frps # 开启防火墙
iptables -A INPUT -p TCP -i $EXTIF --dport 7000 --sport 1024:65534 -j ACCEPT
/usr/sbin/netfilter-persistent save

安装Client端

Linux

进入下载页面,下载frp_0.33.0_linux_amd64.tar.gz后,运行以下命令:

# 解压并进入目录
tar -zxvf frp_0.33.0_linux_amd64.tar.gz && cd frp_0.33.0_linux_amd64 # 把frps、frps.ini移动到适当位置
mv ./frpc /usr/bin/
mkdir -p /etc/frp
mv ./frpc.ini /etc/frp/ # 创建frpc.service
cat <<EOF > /lib/systemd/system/frpc.service
[Unit]
Description=Frp Client Service,User=nobody
After=network.target [Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini
ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.ini [Install]
WantedBy=multi-user.target
EOF # 配置frpc.ini,其他配置参考:https://github.com/fatedier/frp
cat <<EOF | sudo tee /etc/frp/frpc.ini
[common]
server_addr = IP地址
# 用于与服务端通信
server_port = 7000 [ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# ssh端口
remote_port = 6000 [web]
type = http
local_port = 11000
local_ip = 127.0.0.1
custom_domains = IP地址或域名 EOF # 开启frps并设置开机启动
sudo systemctl daemon-reload
sudo systemctl start frpc
sudo systemctl enable frpc
sudo systemctl status frpc

Win10

参考Linux版本配置

内网穿透

从ssh终端访问:ip:remote_port即可,在以上配置,则访问:IP地址:6000

有其他需要,请自行参考:https://github.com/fatedier/frp/blob/master/README_zh.md

frp内网穿透的更多相关文章

  1. frp内网 穿透映射使内网svn可外网访问

    起因 公司svn目前部署在内网服务器上,现在想在家中也可以使用,因此需要外网访问内网的工具 经过 使用过几个产品: utools,一个小巧的windows下的工具,内网映射只是它的一个小功能,支持tc ...

  2. 树莓派FRP内网穿透及自启动

    内网穿透的步骤和文件存档 实验室在远方部署了电脑主机来采集数据和图片,每次去调试会很麻烦,因而使用FRP内网穿透使得我们可以在实验室访问主机. 主要功能 实现远程可访问和开机自启FRP程序服务 安装和 ...

  3. Frp内网穿透搭建,家庭主机对外提供接口,支持ssh访问

    Frp内网穿透搭建,家庭主机对外提供接口,支持ssh访问 1.使用场景: 需求1.家中服务器 ubuntu 主机,跑接口服务,需要对外暴漏, 需求2.同时需要在外网ssh远程 ​ 关键词: frp内网 ...

  4. frp 内网穿透访问内网Web服务

    ps:最近想要通过域名(公网)访问或者测试在本地搭建的 web 服务(不想在公网IP服务器上再部署个服务,也不想通过teamview等工具远程卡到爆!), 由于本地机器没有公网 IP,无法将域名解析到 ...

  5. frp内网穿透学习

    前言 因为自己在内网,但是目标站在外网,这时候可以通过内网穿透工具,将接收到的请求转发到内网,实现在内网的msf可以控制外网的靶机. 也看了一些Ngrok,花生壳的,发现Ngrok.cc这个看文章说有 ...

  6. [svc]frp内网穿透

    什么是穿透 可以任意暴漏内网任何服务,加入你在你的办公网络有台pc,可以上网就可以了, 你可以在你电脑上安装各类服务器, 暴漏如80 22等端口, 注意 这可以暴漏到公网哦, 在出口不做任何nat情况 ...

  7. frp内网穿透实战

    什么是frp frp是一个使用非常简单的开源内网穿透软件,代码地址:https://github.com/fatedier/frp ,使用条前提你需要有一台公网服务器,大致原理是:公网服务器监听某个端 ...

  8. 五、frp内网穿透客户端frpc.ini各配置参数详解

    [必须]标识头[common]是不可或缺的部分 [必须]frps服务端IPserver_addr = 0.0.0.00.0.0.0为FRP服务端IP,客户端要填写为服务端已配置的对应的IP,或者是服务 ...

  9. 四、frp内网穿透服务端frps.ini各配置参数详解

    [必须]标识头[common]是不可或缺的部分 [必须]服务器IPbind_addr = 0.0.0.00.0.0.0为服务器全局所有IP可用,假如你的服务器有多个IP则可以这样做,或者填写为指定其中 ...

随机推荐

  1. Unity3D中可重载虚函数的总结

    重载虚函数:Unity3D中所有控制脚本的基类MonoBehaviour有一些虚函数用于绘制中事件的回调,也可以直接理解为事件函数,例如大家都很清楚的Start,Update等函数,以下做个总结. A ...

  2. vueJs 安装

    1.下载nodeJs 可前往 https://www.cnblogs.com/takeyblogs/p/13600124.html 这里下载 2.由于 npm 安装速度慢,本教程使用了淘宝的镜像及其命 ...

  3. Linked List 单向链表

    Linked List 链表的理解 小结 链表是以节点的方式来储存的 每个节点包括 data域:存放数据,next域:指向下一个节点 如图:发现链表的各个节点不一定是连续储存的 链表分为带头节点的链表 ...

  4. 完美激活PyCharm教程

    1.版本 本文中pycharm版本为PyCharm Professional-2018.3.3,JetbrainsCrack版本为4.2.需要注意,不同版本的pycharm对应的JetbrainsCr ...

  5. ASP.NET Core整合Zipkin链路跟踪

    前言     在日常使用ASP.NET Core的开发或学习中,如果有需要使用链路跟踪系统,大多数情况下会优先选择SkyAPM.我们之前也说过SkyAPM设计确实比较优秀,巧妙的利用Diagnosti ...

  6. pycharm之ctrl+鼠标滚轮调整字体大小

    按照图示设置,可以添加:ctrl+鼠标滚轮调整字体大小功能 1. 2.

  7. mock接口开发——flask模块

    1.mock接口开发: #1.模拟没有开发好的接口,你可以模拟它,,,,,,,需要调用其他系统的接口 #2.给别人提供数据 2.步骤:1.安装pip install flask 2.导入模块--起服务 ...

  8. [LeetCode]198. 打家劫舍(DP)

    题目 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给定一个 ...

  9. 分布式系统监视zabbix讲解三之用户和用户组

    概述 Zabbix 中的所有用户都通过 Web 前端去访问 Zabbix 应用程序.并为每个用户分配唯一的登陆名和密码. 所有用户的密码都被加密并储存于 Zabbix 数据库中.用户不能使用其用户名和 ...

  10. python的多行注释

    单行注释# 多行注释""