一、 架构设计与前期准备:给内网穿上“防弹衣”
直接把你的内网服务(比如 NAS 或开发机)裸奔在公网,就像在大马路上裸奔一样,黑客们可是会流口水的。为了不让你的数据“天体秀”,我们采用 Nginx + frp 这对“黄金搭档”。Nginx 负责在前面当保安,处理 HTTPS 加密和 SSL 证书,把流量“安检”后再交给内网的 frp。这样既安全,又显得你很专业。
1. 端口规划:给流量安排个座次
- 7000 (TCP):这是 frp 的“生命线”。frps(服务端)和 frpc(客户端)就靠它打电话,必须开放,不然它俩就失联了。
- 80 / 443 (TCP):门面担当。Nginx 在这里接客,443 负责把 HTTP 变成 HTTPS,给流量穿上加密马甲。
- 8080 (TCP):frp 的“秘密通道”(
vhostHTTPPort)。只听本地(127.0.0.1),外面的人看不见,专门接收 Nginx 递过来的“私活”。 - 7500 (TCP):frp 的“仪表盘”。用来监控流量和隧道状态,看看谁在偷偷用你的带宽。
2. 环境准备清单:工欲善其事,必先买买买
- 公网服务器(VPS):建议 2核4G 起步,系统推荐 Ubuntu 20.04 LTS。得有独立公网 IP,不然谁知道你家在哪?
- 内网设备:你想穿透的那台机器,比如群晖 NAS、树莓派,或者你那台从不关机的办公电脑。
- 域名与 DNS:买个域名(国内服务器记得备案)。去 DNS 服务商那加个 A 记录,把
*.yourdomain.com(泛域名)指向你的公网 IP。 - 防火墙策略:云服务商的安全组里,把
7000、80、443、7500这些端口都放行,别把自家人拦在门外。
二、 服务端部署与配置 (frps):搭建大本营
1. 下载并安装 frp
登录你的公网服务器,找个风水宝地(目录)把 frp 请下来(以 v0.61.0 为例):
# 创建目录并入住
mkdir -p /opt/frp && cd /opt/frp
# 下载解压(看清楚是 amd64 还是 arm64,别下错了)
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz
tar -zxvf frp_0.61.0_linux_amd64.tar.gz
mv frp_0.61.0_linux_amd64/* /opt/frp/
rm -rf frp_0.61.0_linux_amd64 frp_0.61.0_linux_amd64.tar.gz
2. 编写服务端配置文件
编辑 /opt/frp/frps.toml,这可是核心机密:
# 基础配置
bindPort = 7000
# 认证配置(密码设复杂点,别用 123456)
auth.method = "token"
auth.token = "Your_Strong_Password_Here_123!"
# 虚拟主机配置
# 只在本地 8080 端口偷听,别暴露给公网
vhostHTTPPort = 8080
# 管理面板配置(看看谁在摸鱼)
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "Your_Dashboard_Password_456!"
# 日志配置
log.to = "/var/log/frps.log"
log.level = "info"
log.maxDays = 3
3. 配置 Systemd 开机自启:让服务“长生不老”
为了防止服务器重启后 frp 罢工,我们得给它办个“编制”(Systemd 服务),创建服务文件 /etc/systemd/system/frps.service:
[Unit]
Description=Frp Server Service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/opt/frp/frps -c /opt/frp/frps.toml
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
启动并看看它活没活着:
systemctl daemon-reload
systemctl enable frps
systemctl start frps
systemctl status frps
三、 申请 HTTPS 泛域名证书:给网站发个“身份证”
为了让浏览器地址栏那把小锁亮起来,我们用 acme.sh 免费白嫖 Let’s Encrypt 的泛域名证书。
1. 安装 acme.sh
curl https://get.acme.sh | sh -s email=my@example.com
source ~/.bashrc
2. 配置 DNS API 并申请证书(以阿里云为例)
去阿里云控制台搞个 AccessKey ID 和 Secret,这是你的“通行证”。
export Ali_Key="LTAI5t..."
export Ali_Secret="Your_Secret_Key..."
# 申请泛域名证书(*.yourdomain.com 一把梭)
acme.sh --issue --dns dns_ali -d yourdomain.com -d *.yourdomain.com
3. 部署证书到 Nginx 目录
mkdir -p /etc/nginx/ssl/yourdomain.com
acme.sh --install-cert -d yourdomain.com \
--key-file /etc/nginx/ssl/yourdomain.com/key.pem \
--fullchain-file /etc/nginx/ssl/yourdomain.com/fullchain.pem \
--reloadcmd "systemctl force-reload nginx"
四、 Nginx 反向代理与 SSL 配置:流量的“交通指挥官”
创建 Nginx 配置文件 /etc/nginx/sites-available/frp.conf,把 HTTP 流量强行赶到 HTTPS 车道,再转交给 frp 的 8080 端口。
# 1. HTTP 强制跳转 HTTPS(不听话就重定向)
server {
listen 80;
server_name *.yourdomain.com;
return 301 https://$host$request_uri;
}
# 2. HTTPS 反向代理配置(正经干活的地方)
server {
listen 443 ssl http2;
server_name *.yourdomain.com;
# SSL 证书配置(亮出身份证)
ssl_certificate /etc/nginx/ssl/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/yourdomain.com/key.pem;
# 安全优化(拒绝老掉牙的协议)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# 核心:把流量倒给 frp
location / {
proxy_pass http://127.0.0.1:8080;
# 关键 Header(告诉 frp 客人是谁)
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 超时设置(防止传大文件时断片)
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
激活配置并重载 Nginx:
ln -s /etc/nginx/sites-available/frp.conf /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
五、 客户端部署与配置 (frpc):打通任督二脉
在内网设备(NAS 或电脑)上安装 frpc,让它去连接公网服务器。
1. 编写客户端配置文件
编辑 frpc.toml:
serverAddr = "1.2.3.4" # 你的公网服务器 IP
serverPort = 7000
auth.method = "token"
auth.token = "Your_Strong_Password_Here_123!" # 密码得和服务端对上暗号
# 场景一:映射本地 Web 服务(比如 NAS 管理页)
[[proxies]]
name = "nas-web"
type = "http"
localIP = "192.168.1.100" # 内网设备的 IP
localPort = 5000
customDomains = ["nas.yourdomain.com"]
# 场景二:映射 SSH 服务(TCP 协议,远程敲命令用)
[[proxies]]
name = "ssh-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000 # 外网访问端口
2. 启动客户端
Linux 下建议让它在后台默默干活:
nohup ./frpc -c ./frpc.toml > frpc.log 2>&1 &
六、 安全加固与运维建议:别做“漏勺”
- 强制 TLS 加密:在
frps.toml里加上transport.tls.force = true,强制客户端和服务端加密通信,防偷听。 - IP 白名单限制:SSH 这种敏感端口(如 6000),最好在云服务商安全组里设置“仅允许自家 IP 访问”,别给黑客留门。
- 隐藏版本号:Nginx 配置里把
server_tokens关掉,别告诉别人你用的什么版本,省得被针对性攻击。 - 定期备份与监控:没事看看 frp 的 Dashboard,要是发现流量异常飙升,可能是有人拿你的服务器挖矿呢!
搞定!现在你可以得意地通过 https://nas.yourdomain.com 访问你的内网服务了,享受 HTTPS 小绿锁带来的安全感吧!
© 版权声明
本站永久网址:
https://www.xiaozhanhu.com
本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长Email:x@xiaozhanhu.cn 删除处理。
本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
本站资源大多存储在云盘,如发现链接失效,请联系我们第一时间更新。
本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长Email:x@xiaozhanhu.cn 删除处理。
本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
本站资源大多存储在云盘,如发现链接失效,请联系我们第一时间更新。
THE END







暂无评论内容