NAT是否将数据包中的源IP重写?

我试图设置端口转发,以便特定的IP(例如1.2.3.4/32)可以通过堡垒(例如5.5.5.5:2222)SSH到应用服务器(10.3.3.3:22)。 堡垒和应用程序服务器在亚马逊的VPC中运行,只有暴露在因特网上的堡垒。

我在堡垒上使用了下面的规则(我把源IP省略了,直到我find它):

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 2222 -j DNAT --to 10.3.3.3:22

但是当我尝试连接,我没有得到任何回应。

在堡垒上运行tcpdump显示stream量正在通过,所以我假设我打到应用服务器的VPC安全组,并没有达到22端口。 我认为这是因为虽然堡垒有权访问应用程序服务器上的端口22,但IP 1.2.3.4却没有。

所以,我的问题是:NAT设置的方式是否自动改变数据包的源IP,使它们看起来是来自堡垒,还是包含原始源IP,在这种情况下是1.2.3.4?

如果报文在转发后包含1.2.3.4作为源IP,那我怎样才能将源地址改为堡垒?

更新

我想特别为SSH我可以设置SSH隧道,但我也需要一个类似的解决scheme,以允许访问几个不同的应用程序服务器上的端口443。

我现在尝试添加SNAT以及:

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 10.2.2.2

但它仍然不起作用(10.2.2.2是堡垒的内部IP)。

所以,我的问题是:NAT设置的方式是否自动改变数据包的源IP,使它们看起来是来自堡垒,还是包含原始源IP,在这种情况下是1.2.3.4?

不,DNAT不会更改源IP,仅限目的地 。 DNAT – 目标networking地址转换

如何知道IP转发是否在堡垒上启用?

以下命令应该返回1

 # cat /proc/sys/net/ipv4/ip_forward 

我怎样才能使iptables执行SNAT(如果这实际上是我想要的 – 我希望VPC内的所有通信看起来是来自堡垒,而堡垒然后适当地重新引导它)?

 # iptables -t nat -I POSTROUTING -p tcp -s 1.2.3.4 -d 5.5.5.5 --dport 2222 -j DNAT --to-destination 10.3.3.3:22 

您已经configuration了DNAT或“目标NAT”,这意味着您的网关正在重写符合该规则的连接的目标地址。 源地址保持不变,因为您应该能够判断是否在堡垒主机的出站接口或应用程序服务器上运行tcpdump

这意味着应用程序服务器试图将数据包返回到您的原始主机的地址,在您的示例中为1.2.3.4 。 这是否会工作取决于你的主机是如何连接的。

一个简单的解决scheme是用一个简单的tcp代理(例如, haproxy , pen , balance等)replace你的iptables规则。 让代理监听您的堡垒主机上的端口2222,并将连接转发到应用服务器上的端口22,它将会正常工作,因为从应用服务器连接的angular度来看,它是在堡垒主机上发起的。

这只是一个快速解决scheme/短期解决scheme

那么SSH隧道呢?

 ssh -L 2222:10.3.3.3:22 [email protected] -N & #then ssh username@localhost -p 2222 

通过SSH的SSH:D

只是一个想法。

更新:没有看到: – /:“更新我想专门为SSH我可以设置SSH隧道,但我也需要一个类似的解决scheme,以允许在几个不同的应用程序服务器上访问端口443。