原理

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. 沈阳做假证z

    沈阳做假证[电/薇:187ヘ1184ヘ0909同号]办各类证件-办毕业证-办离婚证,办学位证书,办硕士毕业证,办理文凭学历,办资格证,办房产证不. 这是一个简单的取最大值程序,可以用于处理 i32 数 ...

  2. android Studio(3.1) 常用快捷键

    说  明 快捷键 全部保存 Ctrl + S 最大话/最小化编辑器 Ctrl + Shift + F12 搜索内容(包括代码和菜单) 按两次Shift 查找 Ctrl + F 查找下一个 F3 查找上 ...

  3. HDU - 1005 -Number Sequence(矩阵快速幂系数变式)

    A number sequence is defined as follows:  f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) m ...

  4. 实操ES6之Promise

    箭头函数和this 写Promise的时候,自然而然会使用箭头函数的编写方式.箭头函数就是.Neter们熟知的lambda函数,已经被大部分主流语言支持,也受到了广大码农的交口称赞,但是Jser们却会 ...

  5. Live a "love to" life,not a "have to" life.

    过想要的生活,而不是没有选择性的生活.

  6. Java网络通信 —— 序列化问题

    Java序列化的目的主要有两个: 1.网络传输 2.对象持久化 当选行远程跨迸程服务调用时,需要把被传输的Java对象编码为字节数组或者ByteBuffer对象.而当远程服务读取到ByteBuffer ...

  7. Visual Studio Code 下载安装

    1.官网下载:https://code.visualstudio.com/ 2.下载完成后,点开如果是黑屏的话,右键勾上.

  8. Java实现获取命令行中的指定数据

    构造一个ping的命令类这个类中可以设置需要ping的目标域名类提供方法public void exec();方法执行完毕后可以读取ping的次数,ping的成功回应包个数ping的丢包个数,ping ...

  9. 修改ubuntu默认源

    修改文件 桌面版Ubuntu默认非root账户 可以先在 home/user/下新建一个文件source.list-new 将其写为 deb http://mirrors.aliyun.com/ubu ...

  10. 学习 | jQuery移动端页面组件化开发(一)

    最近在学习移动端组件化开发web页面,其中有好多小细节,值的去思考. 主要介绍JS的思路,具体的代码就不贴了,主要是想表达出一种思路 总体来说 1.入口文件,在入口文件中导入插件,插件样式,jquer ...