原理

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. Android开发值利用Intent进行put传值,setclass启动activity,并用get进行取值

    传值方法一 [java] Intent intent = new Intent(); Bundle bundle = new Bundle(); //该类用作携带数据 bundle.putString ...

  2. render 强大的渲染函数

    可以动态的创建节点 可以改变表格中要去换一种形式去展示的列 (未完暂定)

  3. WEBAPI 增加身份验证

    1,在Webapi项目下添加如下引用: Microsoft.AspNet.WebApi.Owin Owin Microsoft.Owin.Host.SystemWeb Microsoft.Owin.S ...

  4. js判断一个字符串中出现次数最多的字符及次数

    最近面试总是刷到这个题,然后第一次的话思路很乱,这个是我个人思路 for循环里两个 if 判断还可以优化 var maxLength = 0; var maxStr = ''; var count = ...

  5. vue安装pubsub-js 库的命令

    1.查看pubsub-js 库是否已经存在该库命令: npm info pubsub-js 2.若不存在,则先安装pubsub-js 库,命令如下: npm install --save pubsub ...

  6. python基础:内置函数zip,map,filter

    一.zip zip,就是把俩list,合并到一起,如果想同时循环2个list的时候,可以用zip,会帮你轮流循环两个list 比如: l1=[1,2,3,4,5] l2=['a','b','c','d ...

  7. python 模块安装导入

    一.定义 python模块就是一个.py文件,一个模块中可以有多个函数,在使用模块时,只需要import下,就可以使用模块中的函数功能.import模块的过程相当于把这个py文件中的所有内容都执行一遍 ...

  8. 《Head First 设计模式》:组合模式

    正文 一.定义 组合模式允许你将对象合成树形结构来表现"整体/部分"层次结构.组合能让客户以一致的方式处理组合对象以及个体对象. 组合对象:包含其他组件的组件. 个体对象(叶节点对 ...

  9. JAVA热部署,通过agent进行代码增量热替换!!!

    在前说明:好久没有更新博客了,这一年在公司做了好多事情,包括代码分析和热部署替换等黑科技,一直没有时间来进行落地写出一些一文章来,甚是可惜,趁着中午睡觉的时间补一篇介绍性的文章吧. 首先热部署的场景是 ...

  10. Spring AOP-用代理代替繁琐逻辑

    Spring AOP 基础概念 AOP 是一种面向切面的编程思想,通俗来讲,这里假如我们有多个方法. @Component public class Demo { public void say1() ...