frp 内网穿透

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

Github:https://github.com/fatedier/frp

官网:https://gofrp.org

通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网。前提是,内网能访问外网。而不是像特殊单位的纯内网环境,不允许访问外网。

内网穿透有几个经典的应用场景:

  • 开发人员在家办公,需要连接公司内网,进服务器shell调试/部署;
  • 开发人员联调时,需要给外网提供部署在本地的web服务;
  • 出差过程中,需要连接公司内网,登录内部系统审批流程;
  • 访问家庭NAS服务器。

frp是基于Go语言开发的,上手难度低,配置起来并不算困难。

本文以服务端centos7,客户端windows为例进行演示说明。

 

一、下载最新版本的frp到服务器

下载页面:https://github.com/fatedier/frp/releases

根据自己的服务器架构,选择对应发行版本的文件下载。一般都是x86架构,下linux_amd64.tar.gz结尾的版本就可以。

当前最新版本是:0.34.3。

下载到/root目录:

 cd /root && wget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gz

解压到/usr/local下,重命名文件夹为frp:

tar -zxvf frp_0.34.3_linux_amd64.tar.gz --directory=/usr/local/ && mv frp_0.34.3_linux_amd64 frp

 

二、配置frp systemd服务

#创建systemd服务文件
vim /usr/lib/systemd/system/frp.service

#写入以下内容,退出并保存
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
StandardOutput=syslog
StandardError=inherit

[Install]
WantedBy=multi-user.target

重载配置文件,使之立即生效。

 systemctl daemon-reload

systemctl命令:

systemctl start frp #启动
systemctl stop frp #关闭
systemctl restart frp #重启
systemctl status frp #当前状态
systemctl enable frp #开机自启动
systemctl disable frp #取消开机自启动

 

三、修改frp服务端配置

#修改frp服务端配置文件
vim /usr/local/frp/frps.ini

#按照以下内容配置,保存并退出
[common]
bind_port = 7000 #frp服务端端口
vhost_http_port = 8080 #http访问端口

[web] #[]中的内容可以自己随便起,但不允许重复,只是起备注的功能而已。
type = http #服务类型,可以设为http,https
custom_domains = xxx.keyboardman.fun #公网域名,记得域名的A记录要解析到外网主机的IP。
auth_token = 123456789

[ssh] #监听6000端口,外网SSH连接内网机器时,填写的IP即为frp服务端的IP和此处设定的6000端口。
listen_port = 6000
auth_token = 123456789

[tcp] #监听10889端口,转发消息给客户端。
listen_port = 10889
auth_token = 123456789

修改完frp服务端的配置文件后,需要检查服务器端口是否开放,上面的配置文件用到了6000/7000/8080/10089这4个端口。

重启frp服务端

 systemctl restart frp

web配置项用于向外网提供本地web服务、ssh配置项用于连接本地虚拟机的shell、tcp配置项用于转发10889端口消息给本机。

需要注意的是,以上配置中,web/ssh/tcp的字眼并非是标准语法,而是我起的一个备注而已。

 

四、下载最新版本的frp到本机

同样的,在Github的release页面下载对应版本的frp:https://github.com/fatedier/frp/releases

本机是windows,因此下载windows_amd64.zip版本即可。

下载地址:https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_windows_amd64.zip

 

五、配置客户端参数

解压后进入目录,修改frpc.ini为如下内容:

[common]
server_addr = xx.xx.xx.xx #部署frp服务端的IP地址
server_port = 7000 #frp服务端的端口
privilege_token = 123456789 #验证token/密码

[web]
type = http
local_ip = 127.0.0.1
local_port = 5500 #web服务本地端口
remote_port = 8080 #frp服务端HTTP端口
custom_domains = xxx.keyboardman.fun #反代域名

#将远程6000端口的tcp流量转发到本地的22端口
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

#将远程10889端口的tcp流量转发到本地的10889端口
[tcp]
type = tcp
local_ip = 127.0.0.1
local_port = 10889
remote_port = 10889

此处的web项配置意为:frp服务端会把访问xxx.keyboardman.fun:8080端口的请求代理至本地的5500端口。

ssh项:将服务端6000端口的tcp流量转发至本地的22端口

tcp项:将服务端10889端口的tcp流量转发至本地的10889端口

 

六、运行本机上运行frp客户端并测试效果

打开cmd,cd到frp的目录下,frpc.exe运行客户端

 

1)web服务访问测试

访问http://xxx.keyboardman.fun:8080,frp服务端会将请求代理至本地的5500端口。

 

2)socket消息测试

 

SSH测试就不演示了,在本机上有搭建VMware,使用nat转发即可把本机的22端口tcp流量转发到目标虚拟机的22端口去,也就是远程SSH连接公司内网的应用场景了。

远程连接时,IP填frp服务端所在的IP,端口填6000,可以回头看一下上文frp服务端的配置,其中ssh项的监听端口我选择的就是6000。

 

REF:

https://zhuanlan.zhihu.com/p/129076009

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇