我想通过 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 10.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
并且..解决了,谢谢。