VPS服务器_CentOS9_Squit5.5_Frp0.69部署
1、完成内网端口映射透传到公网,实现内部应用发布,比如家里的黑群晖、局域网PC的远程桌面等,为无公网ip,动态ip的访问提供了简易的方式,投入成本极低;
2、支持内网PC突破GFW限制访问外网,这个嘛,懂得都懂(谨慎使用,应合法依规。)
之前一直犹豫要不要Squid,因为Frp本身也支持Basic代理,简单对比后觉得还是加上Squid更适合。
配置:Squid 开启 Basic 账号密码验证 + Firefox 代理填凭据 + 原有 FRP XTCP/STCP 架构不变
链路:Firefox (填代理账号密码)→本机 127.0.0.1:13128 (frpc visitor)→XTCP/P2P 或 STCP→VPS-frpc→VPS:Squid (账号鉴权),第一次访问会触发 代理认证弹窗–正是 Squid 启用密码后的正常表现(默认凭据有效期2小时)。
方案 | 优点 | 缺点 |
|---|---|---|
| 只用 FRP | 少装 Squid、配置精简、无 Squid 版本兼容报错、FRP 统一管理端口 | 无法自定义缓存规则(你日常上网不需要缓存) |
| FRP+Squid | Squid 缓存网页节省流量、精细 ACL 域名拦截 | 多一层服务、频繁配置语法报错、维护繁琐 |
一、VPS端Squid安装与配置
1、安装依赖工具
dnf groupinstall -y “Development Tools”
dnf install -y openssl-devel libcap-devel libxml2-devel expat-devel perl httpd-tools
dnf remove -y squid #如有则卸载旧的squid,避免冲突
setenforce 0
sed -i ‘s/^SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config
#关闭系统SElinux防火墙(非必须,不关闭则需要打开设计的所有端口,否则无法访问)
mkdir -p /usr/local/src && cd /usr/local/src #创建目录
wget http://www.squid-cache.org/Versions/v5/squid-5.5.tar.gz #下载应用包
tar -zxvf squid-5.5.tar.gz #解压
rm squid-5.5 squid #目录改名
cd squid #进入目录
2、创建代理账号(自定义:用户 user,你的密码)
-c新建密码文件,后续加用户去掉-c
htpasswd -c /etc/squid/squidpass user
输入2次密码:你的密码
chown squid:squid /etc/squid/squidpass
3、编辑 squid.conf 配置
注意需要有认证配置项,下面为已验证可行配置范例:
#代理服务监听端口,客户端通过此端口连接代理
http_port 3128
#代理服务器标识名称,响应头/日志中展示主机名
visible_hostname squid
#squid异常崩溃时core dump内核转储文件存放目录
coredump_dir /var/spool/squid
#缓存生命周期规则 refresh_pattern 格式:匹配正则 最小缓存时长(分钟) 占比 最大缓存时长(分钟)
#FTP协议资源:最少缓存1440分钟(1天),资源过期20%时刷新,最长缓存10080分钟(7天)
refresh_pattern ^ftp: 1440 20% 10080
#Gopher协议资源:最少缓存1天,无比例刷新,最长缓存1天
refresh_pattern ^gopher: 1440 0% 1440
#-i忽略大小写,匹配cgi-bin或带?动态接口:不缓存(0/0%/0),实时回源,禁止缓存动态接口
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
#其余所有普通网页资源:无最小缓存,过期20%自动刷新,最长缓存4320分钟(3天)
refresh_pattern . 0 20% 4320
# Basic账号密码认证配置
#调用ncsa密码认证程序,密码文件路径/etc/squid/passwd
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
#客户端弹窗提示文案,浏览器弹出认证框时显示
auth_param basic realm “请输入代理账号密码”
#ACL访问控制:要求代理请求必须完成账号密码认证
acl passuser proxy_auth REQUIRED
#放行通过账号密码认证的用户
http_access allow passuser
#拒绝所有未通过认证的访问请求
http_access deny all
4、检验配置+启动服务
#语法校验
/usr/local/squid/sbin/squid -k parse
#启动
systemctl start squid
#查看监听
ss -tulnp|grep squid
5、VPS本地测试代理
curl -x http://user:你的密码@127.0.0.1:3128 http://baidu.com
curl -x http://user:你的密码@127.0.0.1:3128 https://baidu.com
二、VPS服务端Frps与Frpc部署和配置
1、Frp环境准备与二进制安装包下载(frp 最新 0.69.0)
#防火墙放行端口
firewall-cmd –add-port=7000/tcp –permanent #监听端口
firewall-cmd –add-port=3128/tcp –permanent #数据交换端口(squid已放通的则这里不用再执行)
firewall-cmd –reload
#新建Frp工作目录
mkdir -p /usr/local/frp && cd /usr/local/frp
#下载linux amd64版本frp
wget https://github.com/fatedier/frp/releases/download/v0.69.0/frp_0.59.0_linux_amd64.tar.gz
tar zxvf frp_0.69.0_linux_amd64.tar.gz –strip-components=1
#删除压缩包
rm -f frp_0.69.0_linux_amd64.tar.gz
2、配置Frps服务配置文件:frps.toml
#SSH执行下面语句直接再当前目录生成frps.toml文件:
cat > /usr/local/frp/frps.toml <<EOF
bindPort = 7000
#token规范写法(低版本必须auth.method=”token”)
auth.method = “token”
auth.token = “Abc12345678”
#Web面板
webServer.addr = “0.0.0.0”
webServer.port = 7500
webServer.user = “admin”
webServer.password = “admin123”
#端口放行格式正确
allowPorts = [{start = 1, end = 65535}]
#心跳在transport分组内
[transport]
heartbeatTimeout = 90
EOF
3、注册systemd服务(路径: /usr/local/frp)
#SSH执行下面语句直接再当前目录生成frps.service文件:
cat > /etc/systemd/system/frps.service <<EOF
[Unit]
Description=frp server
After=network.target
[Service]
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.toml
Restart=always
RestartSec=5
[Install]
Wanted=multi-user.target
EOF
4、配置Frp服务器侧的Frpc客户端连接用户侧客户端
#(实现xtcp/stcp安全隧道搭建过GFW,可参考下面配置)
serverAddr = “127.0.0.1”
serverPort = 7000
auth.token = “Abc2345678”
#主通道:XTCP + STCP 备用
[[proxies]]
name = “squid-xtcp”
type = “xtcp”
secretKey = “123456abc”
localIP = “127.0.0.1”
localPort = 3128
[[proxies]]
name = “squid-stcp”
type = “stcp”
secretKey = “123456abc”
localIP = “127.0.0.1”
localPort = 3128
#移动端:XTCP + STCP 备用
[[proxies]]
name = “xtcp-mobile”
type = “xtcp”
secretKey = “123456abc”
localIP = “127.0.0.1”
localPort = 3129
[[proxies]]
name = “stcp-mobile”
type = “stcp”
secretKey = “123456abc”
localIP = “127.0.0.1”
localPort = 3129
5、接下来需要创建开机启动服务脚本
sudo vim /etc/systemd/system/frpc.service
#将以下内容复制到文件中。
#这里配置失败自动重启(Restart=on-failure)以及重启间隔时间(RestartSec=5s):
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
#当进程异常退出(退出码不为0)时,自动重启服务
Restart=on-failure
#重启前等待 5 秒
RestartSec=5s
#您指定的实际启动命令
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.toml
[Install]
WantedBy=multi-user.target
6、启动Frp服务并设置为开机自启动
systemctl daemon-reload
systemctl enable frps
systemctl start frps
systemctl status frps
systemctl enable frpc
systemctl start frpc
#查看运行状态,确认成功
systemctl status frps
systemctl status frpc
#常用命令
#启动:systemctl start frpc
#停止:systemctl stop frpc
#重启:systemctl restart frpc
#查看日志:journalctl -u frpc -f
三、windows终端侧Frpc客户端安装与配置
1、Frpc下载原装
#下载:frp_0.69.1_windows_amd64.zip
https://github.com/fatedier/frp/releases/download/v0.69.1/frp_0.69.1_windows_amd64.zip
解压到路径:D:\frp\
目录内只需要文件:frpc.exe、frpc.toml
2、Frpc客户端实现访问者角色xtcp打洞失败则自动切换stcp连接,同时建立3389的远程桌面受访者配置
参考配置如下:
serverAddr = “服务器IP” # 请替换为真实的服务器公网IP
serverPort = 7000
auth.token = “Abc123456”
#PC端代理:XTCP + STCP 自动回退[[visitors]]
name = “stcp-squid-fallback”
type = “stcp”
serverName = “squid-stcp”
secretKey = “123456abc”
bindPort = -1 # 仅作为回退通道,不占用本地物理端口
[[visitors]]
name = “squid-xtcp-visitor”
type = “xtcp”
serverName = “squid-xtcp”
secretKey = “123456abc”
bindAddr = “127.0.0.1”
bindPort = 8888 # PC端浏览器代理统一指向此端口,可指定其它空闲端口
fallbackTo = “stcp-squid-fallback”
fallbackTimeoutMs = 500 # 500ms 未打洞成功则自动回退到 STCP
#本机被访者:3389 远程桌面
[[proxies]]
name = “remote-desktop”
type = “tcp”
localIP = “127.0.0.1”
localPort = 3389
remotePort = 13389 # 公网服务器暴露的端口,可指定其它空闲端口
3、临时运行测试(CMD)
D:
cd D:\frp
frpc.exe -c frpc.toml
输出 login to server success、start proxy success 即连通;关闭 CMD 程序终止。
4、安装为系统服务(开机后台自启,管理员 CMD)
cd D:\Jed\frp
frpc.exe install -c frpc.toml
#启停管理命令
net start frpc
net stop frpc
#卸载服务
frpc.exe uninstall
5、验证端口
netstat -ano | findstr 8888
出现监听即正常,火狐代理:127.0.0.1:8888,取消 HTTPS 代理勾选。
6、添加全隧道TLS加密(服务器侧frp需同步开启配置项)
#frps.toml添加项:
tls.enable = true
#frpc.toml添加项
tls.enable = true
改完重启两端服务















