如何使用 frp 实现内网穿透
这有一个专注Gopher技术成长的开源项目「go home」
背景
作为一名程序员,家里多多少少会有一些落了灰的电脑,如果把闲置的电脑变成服务器,不仅有良好的配置,还能用来做各种测试,那就再好不过了。但是局域网的设备怎么被外网访问呢?这就靠内网穿透来实现了。
内网穿透又叫 NAT 穿透,常用的工具有很多,比如 ngrok、花生壳、frp等,因为我使用的是 frp,这也是本篇文章的主题。
NAT 是在 IP 数据包通过路由器或防火墙的时候重写 IP 地址的技术。因为现在的公网 IP 数量有限,国家不能给每个设备分配一个公网 IP,所以只能多台计算机共用一个公网 IP 对外通讯,这样就需要进行网络转换,而 NAT 的目的正是如此。
基本实现原理
frp 分为服务端与客户端,前者运行在有公网 IP 的服务器上,后者运行在局域网内的设备上,服务端默认会先开放 7000 端口,然后客户端与其相连。

同时客户端可以开启用于 ssh 的端口,与服务端的某个端口做映射,这样我们在终端访问服务端的端口时,会自动转发到客户端去。

除了 ssh 端口之外,frp 还支持 web 端口来接收 http 访问。
安装使用
目前需要公网服务器、内网服务器各一台,我的内网服务器重装了 linux 系统,方便试验各类工具。
服务端安装配置
wget https://github.com/fatedier/frp/releases/download/v0.33.0/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.ini,默认绑定 7000 端口,如果购置了云服务器,注意打开 7000 端口。
[common]
bind_port = 7000
通过 fprs 二进制文件启动 frp 服务。
./frps -c ./frps.ini
如下提示即是安装成功。
2020/05/15 22:16:29 [I] [service.go:178] frps tcp listen on 0.0.0.0:7000
2020/05/15 22:16:29 [I] [root.go:209] start frps success
2020/05/15 22:16:38 [I] [service.go:432] [e3c5096bd4291972] client login info: ip [14.114.230.168:44422] version [0.24.1] hostname [] os [linux] arch [amd64]
2020/05/15 22:16:38 [I] [tcp.go:63] [e3c5096bd4291972] [ssh] tcp proxy listen port [7001]
2020/05/15 22:16:38 [I] [control.go:445] [e3c5096bd4291972] new proxy [ssh] success
客户端安装配置
把自己的破电脑拿出来,以同样的方式下载 frp。
wget https://github.com/fatedier/frp/releases/download/v0.33.0/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/
客户端的配置文件是 frpc.ini。
[common]
server_addr = 127.0.0.1
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
common 为通用配置
- server_addr 为公网服务器 IP 地址
- server_port 为公网服务器配置的 7000 端口
ssh 用于终端命令行访问
- type 连接类型,默认为 tcp
- local_ip 本地 IP
- local_port 用于 ssh 的端口号,默认 22
- remote_port 映射的服务端端口,访问该端口时默认转发到客户端的 22 端口
启动客户端进程
./frpc -c ./frpc.ini
如有以下提示则代表与服务端连接成功
2020/05/15 22:34:49 [I] [service.go:282] [9bc650122a538aab] login to server success, get run id [9bc650122a538aab], server udp port [0]
2020/05/15 22:34:49 [I] [proxy_manager.go:144] [9bc650122a538aab] proxy added: [ssh]
2020/05/15 22:34:49 [I] [control.go:179] [9bc650122a538aab] [ssh] start proxy success
测试
启动完成后就可以通过 ssh 连接到内网服务器了。
ssh -p 6000 enoch@xxx.xx.xxx.xxx
我是平也,这有一个专注Gopher技术成长的开源项目「go home」
感谢大家的观看,如果觉得文章对你有所帮助,欢迎关注公众号「平也」,聚焦Go语言与技术原理。

如何使用 frp 实现内网穿透的更多相关文章
- 疫情之下,使用FRP实现内网穿透,远程连接公司电脑进行办公
当前情况下,经常会有需要到公司电脑进行一些操作,比如连接内网OA,数据库或者提交文档.为了减少外出,将使用frp进行内网穿透的方法进行一个说明. 前提条件 1. 一台拥有公网 IP 的设备(如果没有, ...
- 基于frp的内网穿透实例4-为本地的web服务实现HTTPS访问
原文地址:https://wuter.cn/1932.html/ 一.想要实现的功能 目前已经实现将本地的web服务暴露到公网,现想要实现https访问.(前提:已经有相应的证书文件,如果没有就去申请 ...
- frp实现内网穿透
frp实现内网穿透 目标 通过外网访问内网设备,本文中实现通过手机的移动流量,可以访问到树莓派设备 设备准备 需要被访问的设备(本文中使用Raspberry Pi`).公网IP设备(本文中使用阿里云 ...
- frp+nginx内网穿透
frp+nginx内网穿透 背景:自己有台内网Linux主机,希望被外网访问(ssh.http.https): 准备工作 内网Linux主机-c,可以访问c主机和外网的主机-s(windows/lin ...
- 使用frp进行内网穿透,实现ssh远程访问Linux服务器
搭建一个完整的frp服务链需要: VPS一台(也可以是具有公网IP的实体机) 访问目标设备(就是你最终要访问的设备) 简单的Linux基础(如果基于Linux配置的话) 我这里使用了腾讯云服务器作为服 ...
- frp 用于内网穿透的基本配置和使用
frp 用于内网穿透的基本配置和使用 今天是端午节,先祝端午安康! frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP.UDP.HTTP.HTTPS 等多种协议.可以将内网服务以安全.便 ...
- 分享下超实用的用skura frp做内网穿透的经验
操作目的: 使无公网ip的主机能被外网访问,实现ssh对服务器的远程管理 硬件准备: 1.服务端:skura frp主机(skura frp 免费提供,有待创建) 2.客户端:接在无线路由器(内网)上 ...
- 使用FRP做内网穿透
Github地址:https://github.com/fatedier/frp 什么是FRP? frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 h ...
- 基于frp的内网穿透实例1-通过SSH访问内网机器
原文地址:https://wuter.cn/1804.html/ 老母鸡终于到了,作为一个能运行linux系统的四核1G硬件,它还是比较小巧的. FRP 全名:Fast Reverse Proxy.F ...
随机推荐
- django-admin和manage.py用法
官网文档地址:django-admin和manage.py 金句: 所有的天赋,都来自于你对你喜欢的某种事物的模仿与学习,否则你就不会有这种天赋. 开篇话: 我们在Django开发过程中,命令行执行最 ...
- 常问的MySQL面试题整理
char.varchar 的区别是什么? varchar是变长而char的长度是固定的.如果创建的列是固定大小的,你会得到更好的性能 truncate 和 delete 的区别是什么? delete ...
- pytorch 中交叉熵损失实现方法
- 每天都在用,但你知道 Tomcat 的线程池有多努力吗?
这是why的第 45 篇原创文章.说点不一样的线程池执行策略和线程拒绝策略,探讨怎么让线程池先用完最大线程池再把任务放到队列中. 荒腔走板 大家好,我是 why,一个四川程序猿,成都好男人. 先是本号 ...
- str_pad 和 filter_var
这两个函数都是php内置函数,filter_var可直接过滤,比如邮箱,ip等,str_pad可补充字符串eg: 1 => 001
- ansible的role(6)
roles的优点 roles能够根据层次型结构自动的装载变化量文件,task,以及handles等. 要使用肉了是只需要在playbook中使用include引入即可. 主要使用场景复制代码较高的情况 ...
- Linux操作系统进入单用户模式的方法
单用户模式的作用 在使用Linux的过程中,维护人员经常会碰到一些问题,就是在拥有root账号权限和密码的用户中,总是会出现忘记root密码的情况. 遇到这种情况,一般情况下,维护人员就会通过最常用的 ...
- tomcat启动日志中中文乱码
场景 使用catalina.bat start命令启动tomcat7 方案 打开%catalina_home%/conf/logging.properties文件. 将其中的UTF-8代换为GBK. ...
- c++ 如何开N次方?速解
c++ 如何开N次方?速解 直接上代码 #include <iostream> #include <cmath> using namespace std; typedef ...
- flutter在2019年会有怎样的表现?
2019独角兽企业重金招聘Python工程师标准>>> Flutter的趋势 在移动端,受成本和效率的驱使,跨平台一站式开发慢慢成为一个趋势.从Hybird,RN,WEEX,Flut ...