菜单

使用frp实现内网穿透

duckflew
发布于 2021-11-29 / 525 阅读
0
0

使用frp实现内网穿透

为什么我们需要内网穿透?

由于ipv4地址的匮乏 目前来说家用宽带想申请到一个公网IP的难度是很大的 那我们又想在外随时能访问到家里的主机以及上面的服务怎么办呢 一般有如下几种方法

  1. 远程桌面类 例如teamViewer Todesk等远程操控软件 但是他们只能实现远程操控 最多加上文件共享 而且提供的流量和带宽有限 如果需要访问服务啥的 要么需要付费购买更高级的套餐要么就放弃
  2. 利用蒲公英之类的VPN软件进行组网 和上面的一样免费版速度很慢
  3. 搭建FRP服务器进行内网穿透 可以达到不错的速度 只局限于你的服务器的带宽 如果你有一台大带宽的服务器 那么这个方法是个不错的选择 而且自建frp服务器可以实现高度自定义 理论上任何开放的端口都可以映射到内网主机上

那么恰巧我本人有一台 不算慢的轻量应用服务器,每个月1个T的公网带宽如果只是用来部署个Blog和Mysql 那就有点浪费了 可以合理的利用起来

什么是frp

frp就是一个反向代理的软件 可以使得处在内网的服务器/主机 为外网提供服务 但需要一台具有公网IP的服务器做FRP服务器 然后将内网主机做为客户端连接上 frp支持TCP UDP HTTP多种协议

frp下载

这里使用的frp版本为0.22.0 frp为开源软件 可以在github找到软件包

地址如下 根据自己的服务器的架构 灵活选择 我这里的服务器为centos7.6 x86架构

wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.22.0_linux_amd64.tar.gz

解压

tar -zxvf frp_0.22.0_linux_amd64.tar.gz

顺便改个名字

mv  frp_0.22.0_linux_amd64 frp

进入到软件目录下 可以看到如下几个文件

  • frps
  • frps.ini
  • frpc
  • frpc.ini

其实也比较好理解 frps就是frp server 程序 ini 就是对应的配置 这里我们的服务器作为服务器 可以删除frpc frpc.ini

这里我贴一下我的服务器 frps.ini配置

bind_port = 7000
dashboard_port = 7500
token = ########
dashboard_user = duckflew
dashboard_pwd = ############
vhost_http_port = 10080
vhost_https_port = 10443

其中参数解释如下

bind_port 也就是服务端运行的端口 c端需要连接这个端口号

token 就是C端连接S端需要的标记

dashboard 就是在线管理面板 一般来说第一次进如面板需要设置账号密码

下面两个dashboard_user/pwd 就是面板的账号和密码了

启动frps

./frps -c frps.ini

如果看到屏幕输出这样一段内容,即表示运行正常,如果出现错误提示,请检查上面的步骤。

2019/01/12 15:22:39 [I] [service.go:130] frps tcp listen on 0.0.0.0:7000
2019/01/12 15:22:39 [I] [service.go:172] http service listen on 0.0.0.0:10080
2019/01/12 15:22:39 [I] [service.go:193] https service listen on 0.0.0.0:10443
2019/01/12 15:22:39 [I] [service.go:216] Dashboard listen on 0.0.0.0:7500
2019/01/12 15:22:39 [I] [root.go:210] Start frps success

登录7500端口可以看到仪表板 dashboard

image-20211129221025397

后台启动

上面的启动方式如果退出终端进程就终止了 所以可以选择后台启动

nohup ./frps -c frps.ini &

客户端安装frpc

客户端的frpc和刚才服务端的frps其实都在一个软件包里面只是由于系统的不同下载的包也不同 简言之 下载下来的软件包里面包含了服务端和客户端需要的程序 你想把当前的机子作为服务端 就运行frps.exe(windows)或者是./frps(linux)
这里我需要内网穿透的主机是windows 所以下载windows对应的版本

“frp_0.22.0_windows_amd64.zip”

同理进行解压

编写frpc.ini文件

如下

[common]
server_addr = duckflew.cn
server_port = 7000
token=###########
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7006
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[smb]
type= tcp
local_ip= 127.0.0.1
local_port=445
remote_port=7001
[jellyfin]
type= tcp
local_ip= 192.168.123.164
local_port=8096
remote_port=7002
[idea]
type=tcp
local_ip=127.0.0.1
local_port=8887
remote_port=7003
[qbitorrent]
type=tcp
local_ip=127.0.0.1
local_port=8888
remote_port=7005

其中[common] 下面需要设置 远端Server 以及token 与frps.ini中对应即可

下面可以自己定义对应的端口转发

例如我想实现远程桌面

[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7006

我就命名一个为rdp的配置 协议类型为tcp

localip 就写127.0.0.1

本地的端口号3389 是windows电脑远程连接的默认端口号

远程端口号可以自己定义 选一个不冲突 你自己能记得住的就可以保存配置后

打开powerShell

进入到软件目录下 同理运行

.\frpc -c frpc.ini

如此一来就启动成功了 可以在面板上查看到相关的连接信息

image-20211129221844005

也可以把 frpc 注册为windows服务 然后开启自启动

关于如何在windows下注册服务 可以看下一篇文章

tips: 在实现端口转发之后 如果遇到无法访问服务 可以考虑打开防火墙
另外 对于http流量可以转发 省略端口号,但是其他的流量就未必了 所以对于非http协议 尽量还是用ip加端口号访问


评论