在学习使用VPS服务器的过程中,大家基本都会遇到一个技巧叫做端口转发,举个简单的例子,我有个服务只监听在内网 8080,怎么让外网用户能访问?或者我要把本地游戏服务器的 25565 端口转发到 VPS 上,虽有知道要利用端口转发来实现,但是小编自己当初也被这些个问题搞蒙了,后来一步步摸索,才搞清楚端口转发到底怎么玩,现在用自己的经验总结告诉大家端口转发到底是什么?分享一些实用的端口转发教程。
一、什么是端口转发?应用场景和优缺点
端口转发,顾名思义,就是把 VPS 的一个端口流量,转发到其他设备或服务上。
最常见的用途有:
- 把内网服务映射到公网(比如家里的 NAS、监控摄像头)
- 做游戏服务器中转(Minecraft、CSGO 等)
- 科学上网或反代服务(中转流量)
- Docker、K8s 的服务暴露
优点:灵活,能“穿透”内网,帮你把服务放到公网让别人访问。
缺点:安全性要特别注意,配置不当可能被黑客扫描或者攻击。
二、端口转发的原理
说白了,端口转发就是让 VPS 充当“中间人”角色:
外部流量先到 VPS 的公网 IP:Port → VPS 收到后,再转发到内网的目标 IP:Port。
常见的方式有两种:
- 本地转发:VPS 把本地端口流量转发到本地另一个端口。
- 远程转发:VPS 把接收到的端口流量,转发到内网或其他服务器。
比如我在 VPS 上做一个 Minecraft 转发:
公网访问 VPS:25565 → VPS 转发到 我家里的 Minecraft 服务器:25565
三、详细配置教程:不同操作系统&不同工具
小编知道,很多新手面对“iptables”“端口转发”这几个字就头大。
1. Ubuntu / Debian:iptables 配置教程
检查和安装
先确保系统里有 iptables:
sudo apt update
sudo apt install iptables
开启 IP 转发
编辑 /etc/sysctl.conf,确保这行不被注释:
net.ipv4.ip_forward=1
然后应用配置:
sudo sysctl -p
设置转发规则
假设你要把 VPS 的 25565 端口转发到家里的 192.168.1.100:25565:
sudo iptables -t nat -A PREROUTING -p tcp --dport 25565 -j DNAT --to-destination 192.168.1.100:25565
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
保存规则
sudo apt install iptables-persistent
sudo netfilter-persistent save
2. CentOS / Rocky Linux:firewalld + iptables 配置
CentOS 7 / Rocky Linux 8 之后,默认用 firewalld,下面是详细操作。
开启 IP 转发
sudo sysctl -w net.ipv4.ip_forward=1
配置 firewalld 允许转发
sudo firewall-cmd --permanent --add-masquerade
sudo firewall-cmd --reload
添加转发规则(如果要转发 25565)
sudo firewall-cmd --permanent --add-forward-port=port=25565:proto=tcp:toaddr=192.168.1.100:toport=25565
sudo firewall-cmd --reload
3. UFW(Ubuntu 自带防火墙)配置
启用 UFW
sudo ufw enable
修改配置文件 /etc/ufw/sysctl.conf
net/ipv4/ip_forward=1
修改 UFW 转发规则
编辑 /etc/ufw/before.rules,添加:
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
COMMIT
然后重载 UFW:
sudo ufw reload
4. Debian / Ubuntu:用 nftables(新系统默认)
启用 IP 转发
sudo sysctl -w net.ipv4.ip_forward=1
配置 nftables
编辑 /etc/nftables.conf,添加:
table ip nat {
chain prerouting {
type nat hook prerouting priority 0;
tcp dport 25565 dnat to 192.168.1.100:25565
}
chain postrouting {
type nat hook postrouting priority 100;
masquerade
}
}
然后重载:
sudo systemctl restart nftables
5. 特殊工具:用 socat 实现端口转发
如果你不想改防火墙,也可以用 socat 命令做“临时转发”:
socat TCP4-LISTEN:25565,fork TCP4:192.168.1.100:25565
缺点是关闭终端后会失效,适合临时测试。
6. NAT64 / v6 only 场景:6tunnel 转发
如果 VPS 只有 IPv6,但目标只有 IPv4,可以用 6tunnel:
sudo apt install 6tunnel
sudo 6tunnel -6 25565 192.168.1.100 25565
这样外部访问 IPv6 VPS 的 25565,自动转发到目标 IPv4。
小贴士:每一步都要记得重载/保存!
很多新手配置完了忘记保存,重启就全没了!
- iptables:
sudo iptables-save > /etc/iptables/rules.v4
- firewalld:
sudo firewall-cmd --reload
- UFW:
sudo ufw reload
- nftables:
sudo systemctl restart nftables
四、常见问题排查
小编踩过不少坑,下面是排查思路分享给你:
- 端口没开?
用ss -tuln
看看 VPS 上是否监听对应端口。 - 安全组没放行?
去云服务商控制台检查,别忘了给端口放行。 - 本地服务没开?
确保目标内网服务真的在目标 IP:Port 上运行。 - 转发规则没生效?
重启网络或 iptables 服务试试,常用命令:systemctl restart networking systemctl restart iptables
五、特定应用场景配置示例
Minecraft 服务器端口转发
在 VPS 上把 25565 端口转发到家用服务器:
iptables -t nat -A PREROUTING -p tcp --dport 25565 -j DNAT --to-destination 192.168.1.100:25565
iptables -t nat -A POSTROUTING -j MASQUERADE
Docker 容器的端口转发
如果你在 VPS 上用 Docker,直接在 docker run
里用:
docker run -d -p 8080:80 nginx
这相当于自动做了端口转发。
六、端口转发的安全性提示
1.只开放必要的端口,别全都暴露到公网。
2.用防火墙(iptables、ufw)限制来源 IP,降低被扫描攻击风险。
3.定期更新系统补丁,别让黑客趁虚而入。
4.不熟悉配置?用面板或者安全组先做简单测试,再上线。
七、转发配置简单,关键是别忽略安全
VPS 端口转发其实很简单,按上面一步步来,基本 10 分钟就能跑起来。关键是:先搞懂原理,再按需配置,别偷懒忽略安全。
小编建议大家先在测试机多练习几次,等熟练了再放到正式环境,这样更省心、更安全。