方法 1:使用 iptables(推荐)
步骤:
-
在 VPS B 上启用 IP 转发
编辑/etc/sysctl.conf,取消以下行的注释:net.ipv4.ip_forward = 1然后应用配置:
sysctl -p -
配置 iptables 转发规则
执行以下命令(替换B_PORT和A_IP:A_PORT):iptables -t nat -A PREROUTING -p tcp --dport B_PORT -j DNAT --to-destination A_IP:A_PORT iptables -t nat -A POSTROUTING -j MASQUERADE -
保存 iptables 规则(防止重启丢失)
# 对于 Ubuntu/Debian: apt install iptables-persistent -y && iptables-save > /etc/iptables/rules.v4 # 对于 CentOS/RHEL: service iptables save -
开放防火墙端口
如果 VPS B 启用了防火墙(如ufw或firewalld),确保放行端口:# ufw 示例: ufw allow B_PORT/tcp
方法 2:使用 socat(快速临时方案)
步骤:
-
在 VPS B 上安装 socat
# Ubuntu/Debian: apt install socat -y # CentOS/RHEL: yum install socat -y -
运行转发命令
socat TCP-LISTEN:B_PORT,fork,reuseaddr TCP:A_IP:A_PORT- 若要后台运行,添加
&或使用nohup:nohup socat TCP-LISTEN:B_PORT,fork,reuseaddr TCP:A_IP:A_PORT &
- 若要后台运行,添加
验证转发是否成功
-
在 VPS A 上启动服务
确保 A 的端口A_PORT有服务监听(如nc -l A_PORT或运行实际应用)。 -
从外部测试连接
访问VPS_B_IP:B_PORT,观察是否能连接到 VPS A 的服务:telnet VPS_B_IP B_PORT # 或 curl http://VPS_B_IP:B_PORT
注意事项
- 协议支持:上述命令默认转发 TCP 流量。如需 UDP,将
-p tcp改为-p udp(iptables)或使用UDP-LISTEN(socat)。 - 持久化:使用
iptables方法需保存规则,而socat需通过systemd或supervisor设置开机启动。 - 防火墙:确保 VPS B 的云服务商控制台(如 AWS 安全组)也放行了
B_PORT。
如果需要更稳定的方案,还可以考虑使用 WireGuard 或 SSH 隧道 建立加密转发。例如 SSH 隧道:
# 在 VPS B 上执行:
ssh -N -L 0.0.0.0:B_PORT:A_IP:A_PORT user@A_IP