很多新手买了VPS之后,会遇到这几个常见问题: - 一台VPS想跑好几个服务(博客、面板、网盘、Docker应用),总不能每个服务都占80/443端口吧? - 家里的NAS、公司内网的网站、本地开发的项目,没有公网IP,怎么让外网的人访问? - 买了个大带宽VPS,想把本地服务转发出去做中转,怎么配置?
这些问题的解决方案,就是端口映射和内网穿透。
这篇文章我把最常用的4种方案全部讲清楚:什么时候用哪个、具体怎么配置、有什么坑要注意。新手照着做,10分钟就能配置好。
一、先搞懂:什么是端口映射?什么是内网穿透?
先讲两个核心概念,搞懂了原理就不会懵。
1.1 端口映射(同一台VPS上)
你在一台VPS上跑了好几个服务: - 博客跑在8080端口 - 1Panel面板跑在9090端口 - 网盘跑在5230端口 - API服务跑在3000端口
但是用户访问网站的时候,默认只会访问80(HTTP)和443(HTTPS)端口,不可能让用户输入example.com:8080来访问你的博客。
端口映射(反向代理)就是解决这个问题的:让Nginx监听80/443端口,根据用户访问的域名,把请求自动转发到对应后端端口的服务上,用户完全感知不到后面跑在哪个端口。
简单说就是:用Nginx当"前台接待",根据域名把访客领到对应的服务房间。
1.2 内网穿透(跨机器,内网→公网)
你家里的电脑、公司的服务器、NAS设备,通常是在内网里,没有公网IP,外网的人根本访问不到。
这时候你有一台有公网IP的VPS,就可以在VPS和内网设备之间建立一条"隧道",用户访问VPS的某个端口,VPS自动把请求通过隧道转发到你内网的服务上,返回结果再通过隧道传回去。
这就是内网穿透,相当于给内网服务修了一条通往公网的"专用高速公路"。

二、四种方案对比:你该用哪个?
先给大家一张对比表,不用纠结选哪个,对号入座就行:
| 方案 | 难度 | 适用场景 | 是否需要额外软件 | 稳定性 |
|---|---|---|---|---|
| Nginx反向代理 | ⭐⭐ | 同一台VPS上多个服务按域名分发 | Nginx(大部分面板都自带) | ⭐⭐⭐⭐⭐ 永久稳定 |
| SSH临时隧道 | ⭐ | 临时调试、临时访问本地服务,用完就关 | 不需要额外软件,系统自带SSH | ⭐⭐ 断开SSH就失效 |
| frp持久穿透 | ⭐⭐⭐ | 长期把家里/公司内网服务暴露到公网(NAS、本地网站) | 需要装frp客户端+服务端 | ⭐⭐⭐⭐ 配置好一直运行 |
| Cloudflare Tunnel | ⭐⭐ | 不想开放端口、不想配置防火墙的新手,免费使用 | 需要装cloudflared客户端 | ⭐⭐⭐⭐ 大公司产品稳定可靠 |
新手选择口诀: - 同一台VPS跑多个服务→Nginx反向代理(90%的人用这个) - 临时调试用一下→SSH隧道,一条命令搞定 - 家里NAS/内网服务长期暴露公网→frp - 不想折腾端口和防火墙→Cloudflare Tunnel,免费又安全


三、方案1:Nginx反向代理(最常用,同一台VPS多服务)
这是最常用的场景,90%的人配置端口映射都是为了这个。我以1Panel面板为例讲配置方法,宝塔面板、纯命令行操作逻辑是一样的。
3.1 先确认你的后端服务正常运行
首先你要先把各个服务跑起来,确认本地可以访问: - 博客:127.0.0.1:8080 能正常打开 - 面板:127.0.0.1:9090 能正常打开 - 网盘:127.0.0.1:5230 能正常打开
3.2 在1Panel里配置反向代理
- 登录1Panel面板 → 网站 → 创建反向代理
- 填写域名:比如
blog.yourdomain.com - 代理地址填写:
http://127.0.0.1:8080 - 点击确认,Nginx配置就自动生成好了
- 给这个域名申请SSL证书,开启HTTPS
- 重复上面的步骤,把其他域名都代理到对应端口就行
3.3 纯命令行配置(没有面板的情况)
如果你是纯命令行操作,直接写Nginx配置文件就行。
创建配置文件:
nano /etc/nginx/conf.d/blog.conf
写入以下内容,根据你的实际情况改域名和端口:
server {
listen 80;
server_name blog.yourdomain.com;
# 自动跳转到HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name blog.yourdomain.com;
# SSL证书路径,改成你自己的
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
location / {
# 转发到本地8080端口的博客
proxy_pass http://127.0.0.1:8080;
# 传递真实用户信息给后端
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:
# 测试配置有没有语法错误
nginx -t
# 没问题就重载生效
nginx -s reload

3.4 常见坑
- 后端服务不要监听0.0.0.0:只监听127.0.0.1就行,不要暴露到公网,否则别人直接访问IP+端口就能绕过Nginx访问你的服务
- 记得开启HTTPS:反向代理配置完一定要申请SSL证书开启HTTPS,否则浏览器会提示不安全
- 大文件上传报错:在配置里加
client_max_body_size 100m;,改成你需要的大小 - WebSocket服务代理:如果是WebSocket应用,需要额外加三行配置(
proxy_http_version 1.1;等,具体看对应应用文档)
四、方案2:SSH临时隧道(一条命令搞定临时穿透)
如果你只是临时需要把本地服务暴露到公网调试一下(比如给客户看本地开发的网站、临时访问家里的电脑),不需要长期用,那SSH隧道是最简单的,一条命令就搞定,不需要装任何软件。
4.1 命令格式
在你的本地/内网电脑上执行:
ssh -R 公网端口:localhost:本地端口 root@你的VPS公网IP
举个例子: 你本地电脑上跑了一个网站在8080端口,想让别人通过VPS的9000端口访问,就执行:
ssh -R 9000:localhost:8080 root@123.45.67.89
执行完输入VPS的root密码登录,隧道就建立好了。这时候任何人访问http://123.45.67.89:9000,就等于访问你本地电脑的8080端口。

4.2 VPS端需要改一个配置
默认情况下SSH远程端口转发只监听127.0.0.1,外网访问不到,需要改一下sshd配置:
nano /etc/ssh/sshd_config
找到GatewayPorts改成:
GatewayPorts yes
保存后重启sshd:
systemctl restart sshd
4.3 优缺点
优点: - 不需要装任何额外软件,系统自带SSH就可以 - 一条命令搞定,临时调试非常方便 - 加密传输,安全
缺点: - SSH连接断开,隧道就断了,服务就访问不到了 - 不适合长期使用 - 没有断线重连,网络波动就断了
五、方案3:frp持久内网穿透(长期用推荐)
如果你需要长期把内网的服务暴露到公网(比如家里的NAS、本地长期运行的网站、公司内网服务),推荐用frp——这是目前最流行、最稳定的内网穿透工具,支持TCP/UDP/HTTP/HTTPS等多种协议,配置好之后开机自动运行,断网自动重连。
5.1 架构说明
frp分两部分: - frps:服务端,跑在你的VPS上(有公网IP的那台) - frpc:客户端,跑在你内网的设备上(家里电脑/NAS/本地服务器)
5.2 第一步:VPS上安装frps(服务端)
下载最新版frp:
# 下载最新版,去github.com/fatedier/frp/releases看最新版本号
wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz
tar -zxvf frp_0.61.1_linux_amd64.tar.gz
cd frp_0.61.1_linux_amd64
编辑服务端配置文件frps.toml:
bindPort = 7000 # frp服务监听端口
auth.token = "your_custom_token_here" # 连接密码,自己设一个复杂的
# 可选:开启web面板查看状态
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "your_admin_password"
启动frps并设置开机自启:
# 移动二进制文件
mv frps /usr/local/bin/
# 创建systemd服务
cat > /etc/systemd/system/frps.service << EOF
[Unit]
Description=frp server
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.toml
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
EOF
mkdir -p /etc/frp
mv frps.toml /etc/frp/
systemctl daemon-reload
systemctl enable frps
systemctl start frps
记得在VPS防火墙开放7000和7500端口,以及你后面要映射的端口。
5.3 第二步:内网设备上安装frpc(客户端)
同样下载对应架构的frp包到你的内网设备,编辑客户端配置文件frpc.toml:
serverAddr = "你的VPS公网IP"
serverPort = 7000
auth.token = "和服务端一样的token"
# 配置第一个穿透:内网网站
[[proxies]]
name = "web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80 # 本地服务端口
remotePort = 8080 # VPS上开放的端口,访问VPS_IP:8080就等于访问本地80端口
# 配置第二个穿透:SSH
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6022
同样配置systemd开机自启,启动frpc就可以了。

配置完之后,访问VPS公网IP:8080就能访问你内网的80端口服务,SSH连接VPSIP -p 6022就能SSH到你内网的设备。
5.4 安全提示
- token一定要设复杂一点,不要用默认token
- 不要映射3306(MySQL)、6379(Redis)这些数据库端口到公网,实在需要的话一定要限制IP访问
- 可以结合Nginx反向代理给frp穿透的服务加上域名和HTTPS,用户体验更好
六、方案4:Cloudflare Tunnel(免费,不用开端口)
如果你不想在VPS上开放一堆端口、不想配置防火墙规则,还有一个更简单的免费方案:Cloudflare Tunnel(原来叫Argo Tunnel)。
这个方案的好处是: - 完全免费,Cloudflare官方产品稳定可靠 - 不需要公网IP,不需要开放VPS任何端口 - 自带Cloudflare CDN和免费SSL证书 - 自带DDoS防护,源站IP完全隐藏
6.1 配置步骤
- 域名托管到Cloudflare(前面我们在Cloudflare配置指南里讲过怎么弄)
- 在VPS/内网设备上安装cloudflared:
# Debian/Ubuntu
wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
dpkg -i cloudflared-linux-amd64.deb
- 登录认证:
cloudflared tunnel login
执行完会给你一个链接,打开登录你的Cloudflare账号,选择你要使用的域名,授权就行。
- 创建隧道:
cloudflared tunnel create my-tunnel
- 配置路由,把域名指向隧道:
cloudflared tunnel route dns my-tunnel nas.yourdomain.com
- 创建配置文件
~/.cloudflared/config.yml:
tunnel: your-tunnel-id
credentials-file: /root/.cloudflared/your-tunnel-id.json
ingress:
- hostname: nas.yourdomain.com
service: http://localhost:5230 # 你本地服务的地址
- hostname: blog.yourdomain.com
service: http://127.0.0.1:8080
- service: http_status:404
- 启动隧道并设置开机自启:
cloudflared service install
systemctl start cloudflared
systemctl enable cloudflared
配置完之后,你不需要开放任何端口,直接访问nas.yourdomain.com就能访问到你内网5230端口的服务,Cloudflare自动处理SSL、CDN和防护。
七、开放端口必做的安全措施
很多新手配置完端口映射/穿透,端口一开就不管了,结果没过几天服务器被暴力破解、被植入挖矿程序。这里重点强调:端口开放越多,攻击面越大,开放端口之前必须做好这三件事:

7.1 防火墙只开必须的端口
- 用ufw/iptables配置防火墙,只开放你真正需要的端口
- 数据库端口(3306 MySQL、5432 PostgreSQL、6379 Redis)绝对不要开放到公网,只监听127.0.0.1就够了
- 不要把SSH默认22端口暴露公网(或者改成其他端口,配合密钥登录)
快速配置ufw防火墙:
# 安装ufw
apt install ufw -y
# 默认拒绝所有入站,允许所有出站
ufw default deny incoming
ufw default allow outgoing
# 开放需要的端口
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 7000/tcp # frp用
ufw allow ssh # SSH端口,建议改端口号
# 开启防火墙
ufw enable
7.2 SSH禁用密码登录,只用密钥
这是最基础的安全配置,我们在之前的Linux服务器安全加固15条里详细讲过,这里再强调一遍: - 生成SSH密钥对,把公钥放到服务器上 - 配置sshd禁用密码登录,只用密钥认证 - 禁止root用户直接登录,用普通用户+sudo
7.3 安装fail2ban防暴力破解
fail2ban会自动监控登录日志,同一个IP连续登录失败5次就自动封禁24小时,能挡住99%的自动化暴力破解攻击:
apt install fail2ban -y
systemctl enable fail2ban
systemctl start fail2ban
默认配置就足够用,基本不需要额外修改。
更多安全配置可以看之前的VPS被DDoS攻击防御完整指南和Linux服务器安全加固15条。
八、常见问题排查
问题1:配置完访问不到,显示连接超时
- 先检查VPS防火墙有没有开放对应端口(ufw status看一下)
- 再检查云服务商后台的安全组有没有放开端口(很多商家默认安全组只开22/80/443,其他端口需要手动开)
- 本地telnet测试端口通不通:
telnet VPSIP 端口号
问题2:Nginx反向代理502 Bad Gateway
- 检查后端服务是不是正常运行着
- 检查proxy_pass地址和端口对不对
- 如果是Docker容器,注意要用容器名或者docker0网关IP,不要用127.0.0.1
问题3:frp连接不上服务端
- 检查服务端frps是不是正常运行:
systemctl status frps - 检查token是不是两边一致
- 检查防火墙有没有开放7000端口
问题4:Cloudflare Tunnel显示502错误
- 检查本地服务是不是正常运行
- 检查config.yml里的service地址和端口对不对
- 重启cloudflared服务:
systemctl restart cloudflared
问题5:速度很慢
- SSH隧道本身加密有开销,速度慢是正常的,长期用建议换frp或者Nginx
- frp如果速度慢,检查服务器带宽是不是跑满了,做跨境穿透建议用CN2 GIA线路的服务器,比如LuckVM香港CN2 GIA节点,国内访问速度快延迟低
九、常见问题 FAQ
Q:端口映射和内网穿透是一回事吗? A:不是。端口映射通常指同一台机器上把一个端口的流量转发到另一个端口(比如Nginx反向代理);内网穿透是把内网(没有公网IP)的服务通过隧道暴露到公网。
Q:我买了LuckVM的VPS,客服可以帮忙配置吗? A:可以的,LuckVM新用户购买后如果不会配置Nginx反向代理、frp或者Cloudflare Tunnel,可以提交工单联系客服,免费协助配置一次。
Q:frp和ngrok哪个好用? A:ngrok是国外的服务,免费版有流量和速度限制,国内访问速度慢;frp是开源的,可以自己搭服务端,没有流量限制,稳定性更好,国内用户推荐用frp。
Q:用Cloudflare Tunnel会不会影响速度? A:如果你的源站服务器本身就在海外(比如香港、新加坡、美国节点),Cloudflare Tunnel速度影响很小,还能顺便加速国内访问;如果源站在国内,速度可能会有一点影响。
Q:穿透之后访问速度取决于什么? A:主要取决于你VPS的带宽和线路质量。如果是大带宽CN2 GIA线路,跑满带宽都没问题;如果是普通超售VPS,晚高峰速度会很慢。选VPS的时候建议选独享带宽、线路好的节点,推荐看之前的2026年海外VPS选购终极指南。
Q:我可以用VPS转发家里的宽带流量吗? A:可以,在VPS上搭个代理服务,家里路由连上去做网关,就能实现全屋科学上网,不过注意不要用来做违法的事情。
Q:多个服务可以用同一个端口吗? A:不能,同一个端口同一时间只能被一个服务监听。多个服务要么用不同端口,要么用Nginx按域名分发到不同后端端口——这也是Nginx反向代理最大的用处。
十、配置检查清单
配置完成后对着这个清单检查一遍: - [ ] Nginx反向代理:nginx -t测试配置无错误,访问域名能正常打开后端服务 - [ ] SSL证书正常,HTTPS访问没有警告 - [ ] 后端服务只监听127.0.0.1,没有暴露到公网 - [ ] SSH隧道:执行命令后端口能正常访问,断开SSH自动关闭 - [ ] frp:服务端和客户端都正常运行,systemctl status显示active,端口能通 - [ ] Cloudflare Tunnel:cloudflared服务正常运行,域名能正常访问 - [ ] 防火墙只开放了必须的端口,数据库端口没有暴露公网 - [ ] SSH禁用了密码登录,只用密钥登录 - [ ] fail2ban正常运行,能自动封禁暴力破解IP - [ ] 大文件上传配置了client_max_body_size,不会上传报错 - [ ] 所有服务都设置了开机自启,服务器重启后不需要手动启动 - [ ] 测试了重启服务器,所有映射/穿透服务自动恢复正常





