通过frp实现内网穿透

适用场景&原理介绍

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

通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

  • 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
  • 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
  • 代理组间的负载均衡。
  • 端口复用,多个服务通过同一个服务端端口暴露。
  • 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
  • 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
  • 服务端和客户端 UI 页面。

安装机器规划

服务端部署:一台有固定公网ip地址的阿里云ecs服务器
客户端部署:局域网内一台可以连接其他内网机器的代理主机(可以理解转发机器)

部署过程

服务端部署

1、软件版本:frp_0.47.0_linux_amd64.tar.gz
2、部署目录结构
------
------
#tar zxvf  frp_0.47.0_linux_amd64.tar.gz
------分割线-------
#mv frp_0.47.0_linux_amd64  /opt/frp
------分割线-------
# cat  /opt/frp/frps.ini
[common]
bind_port = 7000
dashboard_port = 7500
dashboard_user = root
dashboard_pwd = xxxxxxxxxxxx
###token必须要和配置文件里的一样
token = sDwDes0pUywFHl2OxigjBVovxlY4xxxxx
------分割线-------
服务管理脚本
# cat  /opt/frp/frps.ini
[common]
bind_port = 7000
dashboard_port = 7500
dashboard_user = root
dashboard_pwd = aPiYkhsvm0Z0NKfX1c
token = sDwDes0pUywFHl2OxigjBVovxlY4q4RRZPq
[root@aliyun-to-yiyouhui opt]# cat  /etc/systemd/system/frps.service
[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/opt/frp/frps -c /opt/frp/frps.ini

[Install]
WantedBy=multi-user.target

web界面如图所示

客户端服务

1、软件版本:frp_0.47.0_linux_amd64.tar.gz
2、部署目录结构
------
------分割线-------
#tar zxvf  frp_0.47.0_linux_amd64.tar.gz
------
#mv frp_0.47.0_linux_amd64  /opt/frp
------分割线-------
# cat  frpc.ini
[common]
server_addr = "xxxx.xxxx.xxxxx.xxxxx"  #服务端机器的公网ip地址
server_port = 7000                     #服务端机器的公网端口地址(frp服务用)
###token需要和服务端保持一致 
token = sDwDes0pUywFHl2OxigjBVovxlY4xxxxx

[nas]
type = tcp
local_ip = 192.168.20.223  #需要被映射的内网服务的ip地址
local_port = 9796          #需要被映射的内网服务的端口号
remote_port = 9796         #对公网访问的端口号,就是利用公网+端口访问内网服务
------分割线-------
服务管理脚本
# cat  /etc/systemd/system/frpc.service
[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/opt/frp/frpc -c /opt/frp/frpc.ini

[Install]
WantedBy=multi-user.target

再次查看web控制台(已经连接产生流量的服务这里会记录)

最后注意阿里云安全组&防火墙对端口的放行

本案例中用到的端口:7000&7500&9796都需要被放行,当然这些端口可以根据实际情况来调整

附加window端的服务控制脚本

@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
REM
cd C:\frp
frpc.exe -c frpc.ini
exit


版权声明:本文为ethnicitybeta原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。