使用iptables的nat链表进行端口转发
实现的效果是:
外部访问你服务器的
2222
端口时,自动转发到远程服务器1.117.1.245:22
(SSH)。
这个就是一个典型的 DNAT(目标地址转换)+ IP 转发场景。
✅ 目标结构图
[Client] → [你的服务器:2222] → [1.117.1.245:22]
✅ iptables 配置步骤
① 启用 IP 转发(必需)
echo 1 > /proc/sys/net/ipv4/ip_forward
或永久开启:
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p
② 添加 DNAT 转发规则(将本机 2222 转发到远程 IP 的 22)
iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 1.117.1.245:22
③ 允许转发这个连接(FORWARD 链)
iptables -A FORWARD -p tcp -d 1.117.1.245 --dport 22 -j ACCEPT
④(可选)设置 SNAT/MASQUERADE(避免目标主机返回时失败)
如果目标服务器
1.117.1.245
无法直接访问客户端(例如它不知道如何回包),你需要修改源地址:
iptables -t nat -A POSTROUTING -p tcp -d 1.117.1.245 --dport 22 -j MASQUERADE
或者你指定网卡:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
🔍 检查和调试
查看转发是否生效:
iptables -t nat -vnL iptables -vnL FORWARD
抓包调试:
tcpdump -i any port 2222 or port 22
📌 最终完整命令汇总(一次性执行)
# 开启 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward# 转发流量
iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 1.117.1.245:22# 放行 FORWARD 转发流量
iptables -A FORWARD -p tcp -d 1.117.1.245 --dport 22 -j ACCEPT# 防止目标主机无法回包(推荐)
iptables -t nat -A POSTROUTING -p tcp -d 1.117.1.245 --dport 22 -j MASQUERADE
如果你服务器是云主机,还需:
✅ 检查云服务商防火墙(如腾讯云/阿里云安全组)是否放行
2222
端口;✅ 确保本机未被 SSH 拒绝代理访问(有些目标主机会限制)