基于frp和http代理搭建的内网穿透
前言
emm因为学校里有一些服务必须用到校园网才能访问,而我有时候可能会长时间不在学校(回家啊出去玩什么的),这时候要访问这些内网服务就很麻烦~~(包括我们实验室的靶场也需要校园网西八)~~,本科期间我的舍友搭了个内网穿透,通过在浏览器中搭载一个proxy SwitchyOmega
插件设置我们搭建好的代理服务器后,即可在浏览器中访问我们想要访问的内网服务了,因此这次我也照葫芦画瓢自己搭一个内网穿透。
知识点
frps、socks5、http代理、云服务器、防火墙、内网穿透
搭建过程
①前期准备
-
本实验方案需要用到一台有公网ip的云服务器(租vps一般都会有公网ip的)和一台连接了内网的设备,我这里用的是一台华为云Flexus云服务的vps和一台小工控机(就是前面做软路由用到的J1900)。VPS的系统版本是CentOS 8.2,工控机的系统版本是Ubuntu 22.04.4
-
需要用到的工具是frp,这是一个快速反向代理工具,可以将位于NAT或者防火墙后的本地服务器(也就是内网)暴露到互联网上,实现内网穿透的效果。其支持TCP和UDP,以及HTTP和HTTPS协议,允许通过域名将请求转发到内部服务。
这里用到的frp版本为0.44.0(有更高的版本,但新的版本配置语法改动较大,比较麻烦),可以在这里:https://github.com/fatedier/frp/releases获取对应的版本,然后放到vps和本地设备中,进行解压
- 在自己的浏览器中(我用的google)安装一个SwitchyOmega插件,后续会用到
②环境搭建
frp的分为服务端(公网设备)和客户端(内网设备)
服务端
解压好frp的压缩包后,修改目录中的frps.ini
配置文件,内容配置如下:
[common]
bind_port = 7000 # frp服务的端口号,可以自行调整
token = xxx # frp客户端连接时的密码,可以自行调整
dashboard_port = 23499 # frp的web界面的端口号,可以自行调整
dashboard_user = 2hi5hu # web界面的登录账户,可以自行调整
dashboard_pwd = xxx # web界面的登录密码,可以自行调整
authentication_method = token # 认证方法
配置好后执行下面的命令
./frps -c ./frps.ini # 可以在最后面加个&实现后台运行
运行后显示如下则代表成功启动
配置完成后,将frps设置为系统服务
新建frps服务配置文件
vim /etc/systemd/system/frps.service
# 配置如下
[Unit]
Description=FRPS Server
After=network.target
[Service]
Type=simple
ExecStart=/root/data/frp/frp_0.44.0_linux_amd64/frps -c /root/data/frp/frp_0.44.0_linux_amd64/frps.ini
Restart=on-failure
StandardOutput=append:/var/log/frps.log # 将标准输出至/var/log/frps.log
StandardError=append:/var/log/frps.log # 将错误输出至/var/log/frps.log
[Install]
WantedBy=multi-user.target
配置完成后重新加载服务daemon,开启frps服务
systemctl daemon-reload
systemctl start frps
systemctl status frps
客户端
解压好frp的压缩包后,修改目录中的frpc.ini
配置文件,内容配置如下:
[common]
server_addr = xxx.xxx.xxx.xxx # 云服务器的公网IP
authentication_method = token # 认证方式
server_port = 7000 # 配置的frp的服务端口
token = xxx # 配置的frp的连接密码
[ssh]
type = tcp
local_ip = 127.0.0.1 # 本机的内网IP地址
local_port = 22 # ssh的端口
remote_port = 20022
[rdp]
type = tcp
local_ip = 127.0.0.11 # 本机的内网IP地址
local_port = 3389 # rdp的端口
remote_port = 23389
[http_proxy]
type = tcp
remote_port = 6000 # http的代理端口
plugin = http_proxy # 使用http代理的插件
配置好后执行下面的命令
./frpc -c ./frpc.ini #可以在最后面加个&实现后台运行
运行后显示如下则代表成功启动,成功连接上服务端
配置完成后,将frpc设置为系统服务
新建frpc服务配置文件
vim /etc/systemd/system/frpc.service
# 配置如下
[Unit]
Description=FRPC Server
After=network.target
[Service]
Type=simple
ExecStart=/root/data/frp/frp_0.44.0_linux_amd64/frpc -c /root/data/frp/frp_0.44.0_linux_amd64/frpc.ini
Restart=on-failure
StandardOutput=append:/var/log/frpc.log # 将标准输出至/var/log/frpc.log
StandardError=append:/var/log/frpc.log # 将错误输出至/var/log/frpc.log
[Install]
WantedBy=multi-user.target
配置完成后重新加载服务daemon,开启frpc服务
systemctl daemon-reload
systemctl start frpc
systemctl status frpc
最后在omega中配置好即可实现内网穿透
这时就可以访问内网的服务啦(校园网的服务之类的)
③遇到的问题
- 客户端连接不上服务端,显示连接超时——配置vps的安全组,将用到的端口都开放,并且要在vps里开放防火墙的用到的端口(只配置安全组不行一样会超时)
- 插件用Socks5好像不能成功代理,暂时不太清楚是为什么,有可能是因为google浏览器中
SwitchyOmega
插件本身不支持Socks5代理 - 持久化做的有点问题,一关finalshell ftp服务就会断,暂时不知道为啥,到时候要处理一下