我将连接到Server3上位于Server2-OracleDB上的Oracle数据库。 Server1-Proxy和Server3在AWS和不同的VPC网络中,但是VPC已被对等,并且可以使用私有IP相互访问。 Server2-OracleDB位于外部网络中,我可以通过Server1-Proxy与Server2-OracleDB之间的VPN连接来访问它。
因此,只有Server1-Proxy有权访问外部Oracle-DB服务器。现在,我需要从Server3访问OracleDB。我想做的就是使用iptables转发来实现这种访问。
我的Iptables规则在Server1-Proxy中如下所示:
Server3 IP:172.28.201.230,Server1-Proxy IP:172.28.205.10,Server2-OracleDB IP:10.130.180.230
iptables -t nat -A PREROUTING -p tcp -s 172.28.201.230 --dport 1521 -j DNAT --to 10.130.180.230
iptables -A FORWARD -s 10.130.180.230 -p tcp --sport 1521 -j ACCEPT
iptables -A FORWARD -d 10.130.180.230 -p tcp --dport 1521 -j ACCEPT
iptables -A FORWARD -s 10.130.180.230 -p tcp --sport 1024:65535 -j ACCEPT
iptables -t nat -A POSTROUTING -p tcp -j MASQUERADE
当我尝试从Server3到Server2-OracleDB的telnet时,它会给我Connetion-Time超时,当我检查Server3网络中的流日志时,我只能看到以下内容:
2 myaccount-id myinterface-id 172.28.201.230 10.130.189.230 49864 1521 6 7 420 1533815087 1533815207 ACCEPT OK
看来我没有从OracleDB服务器得到答案,我猜iptables设置中有问题。
已启用ip_forward,并且路由表和安全组看起来正确。
有人可以帮我吗?
答案 0 :(得分:0)
我不是iptables方面的专家,但我认为您需要伪装规则,而不仅仅是做DNAT。如果这样做,DNAT服务器2应该具有服务器3网络的路由。 如果您愿意,可以在服务器1上尝试类似的操作:
iptables -t nat -A POSTROUTING -p tcp --dport 1521 -j MASQUERADE
alternatively you can specify source ip:
iptables -t nat -A POSTROUTING -p tcp --dport 1521 -s 172.28.205.10 -j MASQUERADE
在两个规则中,您都应该为server2网络指定路由,例如:
route add -net 10.130.180.230/24 gw 172.28.205.10