宝塔+frp反向代理
前言:目前有内网穿透的需求,有一台公网vps,利用公网vps+frps 作为服务端
客户端则是本地主机 使用宝塔+frpc
frp下载链接(包含服务端和客户端) https://github.com/fatedier/frp/releases
我的是linux x86环境选择这个



将以上的文件分别放入服务端和客户端
服务端
服务端在root目录下新建一个文件夹frp 然后将两个文件放进去,

编辑frps.ini
[common]
bind_port = 5443
vhost_http_port = 808
vhost_https_port = 909
dashboard_user = admin
dashboard_pwd = admin
token=yourpassword这里的5443是frp服务端口,808是http服务端口,909是https服务端口。之所以这样做,是因为我的服务器本身用了宝塔面板搭建了网站,因此为了错开80端口和443端口进行了这样的设置。 根据自己需求设定 开的端口全都放行
运行frps:
./frps -c frps.ini客户端
客户端一样在root目录下新建一个文件夹frp,将对应的两个文件放进去

编辑frpc.ini
[common]
server_addr = 替换为你的服务器IP地址
server_port = 5443
tls_enable = true
token=yourpassword
[EXSI]
type = https
local_ip = 192.168.5.200
local_port = 80
remote_port = 909
custom_domains = exsi.abc.com
[NAS]
type = http
local_ip = 192.168.5.189
local_port = 5000
remote_port = 808
custom_domains = nas.abc.com
[localblog]
type = http
local_ip = 192.168.5.188
local_port = 8888
remote_port = 808
custom_domains = localblog.taholab.com
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000以上的内网IP地址、端口和域名相应的替换为你的即可。
[common] 部分为客户端的初始化板块,包括了服务端的ip地址,服务端口,tls是否启动,token密码等内容,一次设置,全局有效。
除了[common]部分外,以上配置文件中,每一个 [ ] 板块下的一段,对应着一个你需要内网穿透的应用。如果你只有一个网站需要内网穿透,则只保留一个板块就可以。里面的 [ ] 是服务标识符,其下对应的代码含义如下:
- type 表示服务类型,包括了http、https、tcp、udp等服务,比如搭建网站的话就用http或https服务。
- local_ip 表示你的内网网站的ip地址,比如我的测试博客 localblog.taholab.com 在内网访问就可以输入 http://192.168.5.188:端口号 来访问。端口号就是你的内网网站设置的端口号,默认是80。
- local_port 表示你的内网网站的网站端口,默认是80,你也可以改成你要的端口号,比如上述的 localblog.taholab.com 如果把网站端口设置为了8888,那么内网网站访问地址就是:http://192.168.5.189:8888
- remote_port 表示frp服务中http网站所用的端口,本配置文件用的808,服务端也是808,如果是https网站的话,那么就得用909(因为服务端配置的是909)。
- custom_domains 是访问该服务的域名,只对网站有用,tcp服务不需要这一项。以 localblog.taholab.com 为例,这里就输入 localblog.taholab.com 。
根据自己需求更改,开的端口记得放行
运行frpc
./frpc -c frpc.ini注:这里的frps与frpc的password保持一致
宝塔配置:
本地搭建一个网站,能本地访问就行,记得关闭该端口防火墙 例如我的,这里的本地address为192.168.5.100 端口为8680

服务器这边新建一个站点,空的也行,记得放行该端口

这里是80端口

找到反向代理并添加配置


根据宝塔配置示例
frps.ini
[common]
bind_port = 5443
vhost_http_port = 808
vhost_https_port = 909
dashboard_user = newbie
dashboard_pwd = dddddd
token=ddddddfrpc.ini
[common]
server_addr = 198.74.121.31
server_port = 5443
tls_enable = true
token=dddddd
[kode]
type = http
local_ip = 192.168.5.100
local_port = 8680
remote_port = 808
custom_domains = kode.newbie.pics
[other]
type = https
local_ip = 192.168.5.100
local_port = 8681
remote_port = 909
custom_domains = other.newbie.pics以上配置运行可直接通过域名访问本地的网站,不需加端口也可以访问,对于单纯使用frp需要加端口才能访问还是有点好处的,反向代理还常用与保护服务器免受攻击,因为属于内网环境,只开放了特定端口,有代理服务器当肉盾哈哈
后台运行脚本
frpc
单纯运行没办法让后台一直运行,使用nohup还要查看关闭进程 写一个脚本吧 manage_frpc.sh (与frpc.ini在同一目录下) 不会有多个进程同时存在的问题了
启动:./manage_frpc.sh start
停止:./manage_frpc.sh stop#!/bin/bash
FRPC_PATH="./frpc" # frpc 的路径,假设它在当前文件夹
CONFIG_PATH="./frpc.ini" # frpc.ini 的路径,假设它在当前文件夹
start_frpc() {
# 检查是否已有 frpc 进程在运行
pids=$(pgrep -f "$FRPC_PATH -c $CONFIG_PATH")
if [ ! -z "$pids" ]; then
echo "frpc is already running. PIDs: $pids"
exit 1
fi
# 启动 frpc
nohup $FRPC_PATH -c $CONFIG_PATH > /dev/null 2>&1 &
echo "frpc started."
}
stop_frpc() {
# 停止所有 frpc 进程
pkill -f "$FRPC_PATH -c $CONFIG_PATH"
echo "frpc stopped."
}
# 检查脚本参数
if [ "$#" -ne 1 ]; then
echo "Usage: $0 {start|stop}"
exit 1
fi
case $1 in
start)
start_frpc
;;
stop)
stop_frpc
;;
*)
echo "Invalid argument: $1"
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
frps
启动:./manage_frps.sh start
停止:./manage_frps.sh stop#!/bin/bash
FRPS_PATH="./frps" # frps 的路径,假设它在当前文件夹
CONFIG_PATH="./frps.ini" # frps.ini 的路径,假设它在当前文件夹
start_frps() {
# 检查是否已有 frps 进程在运行
pids=$(pgrep -f "$FRPS_PATH -c $CONFIG_PATH")
if [ ! -z "$pids" ]; then
echo "frps is already running. PIDs: $pids"
exit 1
fi
# 启动 frps
nohup $FRPS_PATH -c $CONFIG_PATH > /dev/null 2>&1 &
echo "frps started."
}
stop_frps() {
# 停止所有 frps 进程
pkill -f "$FRPS_PATH -c $CONFIG_PATH"
echo "frps stopped."
}
# 检查脚本参数
if [ "$#" -ne 1 ]; then
echo "Usage: $0 {start|stop}"
exit 1
fi
case $1 in
start)
start_frps
;;
stop)
stop_frps
;;
*)
echo "Invalid argument: $1"
echo "Usage: $0 {start|stop}"
exit 1
;;
esac