Iptables NAT(PAT)从 A 到 B 再到 C 并返回

Iptables NAT(PAT)从 A 到 B 再到 C 并返回

我想通过 SSH 从外部网络通过具有两个位于不同网络中的接口的 Linux(CentOS)网关访问 DB 服务器,如下所示:

管理员电脑 IP:10.21.1.8

Linux 网关 IPeth1 外部10.21.1.199 - SSH 端口10051

Linux 网关 IPeth2 内部10.10.4.151

数据库服务器 IP:10.10.4.51- SSH 端口22

流动:10.21.1.8-->eth1:10.21.1.199:10051-->eth2:10.10.4.151-->10.10.4.51:22

和返回路径

10.10.4.51 --> eth2:10.10.4.151 --> 10.21.1.199 --> 10.21.1.8

我尝试过的 iptables 规则似乎是错误的。类似于:

iptables -t mangle -A PREROUTING -d <Server1_eth0> -p tcp --dport 2223 -j MARK --set-mark 1 -i eth0

iptables -t nat -A PREROUTING -p tcp -m mark --mark 1 -j DNAT --to-destination <Server2>:2222 -i eth0

iptables -t nat -A POSTROUTING -m mark  --mark 1 -j SNAT --to-source <Server1_eth1> -o eth1 

iptables -A FORWARD -m mark --mark 1 -j ACCEPT -o eth1

需要一些提示..谢谢..

答案1

根据您的需求和网络配置,有不同的解决方案。

如果您的 DB 服务器 10.10.4.51 具有通向管理 PC 10.21.1.8 的路由路径,那么您只需要在您的 gw 上设置此 NAT 规则:

iptables -t nat -A PREROUTING -i eth1 -s 10.21.1.8 -p tcp --dport 2222 -j DNAT --to 10.10.4.51:22

然后只需 ssh 进入 gw 1​​0.21.1.199:2222 端口。

如果您的 DB 服务器没有到 10.21 网络的网关,则使用此 NAT 规则,您可以将管理 PC 地址“隐藏”在 gw IP 后面:

iptables -t nat -A POSTROUTING -o eth2 -s 10.21.1.8 -p tcp -d 10.10.4.51 --dport 22 -j SNAT --to 10.10.4.151

如果你有两台服务器的 ssh 访问权限,并且你想要的只是一个终端,你可以通过级联 ssh 进入数据库服务器,如下所示:

ssh -t -l gwuser -p 10051 10.21.1.199 ssh -l dbuser -p 22 10.10.4.51

答案2

iptables -A FORWARD -d $dst_ip -i eth2 -p tcp -m tcp --dport 10022 -j ACCEPT

iptables -t nat -A PREROUTING -d $src_ip -p tcp -m tcp --dport 10022 -j DNAT --to-destination $dst_ip

iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE

并且..解决了,谢谢。

相关内容