登录到 EC2 显示我的 NAT 实例的 IP,而不是我的私有 IP

登录到 EC2 显示我的 NAT 实例的 IP,而不是我的私有 IP

我们有一个带有私有和公共子网的 NAT 实例,并创建了从我们的办公网络到 NAT 实例的隧道连接,以便我们可以访问 AWS 中的 EC2 资源。连接正常,但我的 EC2 实例显示上次登录/当前登录的 IP 来自我的 NAT 实例私有 IP,而不是远程私有 IP

这是图表

OFFICE ------tunnel------- NAT INSTANCE ----private subnet
                                        |___public subnet

这是私有子网中我们的一个 EC2 实例中显示的消息

login as: ec2-user
...
Last login: Thu Jan 31 12:12:12 2019 from 172.20.0.10
#w
USER     TTY      FROM             
ec2-user pts/0    172.20.0.10    

与 NAT 实例消息以及我们之前的其他 AWS 设置(不同账户)不同,它显示如下

Last login: Thu Jan 31 12:12:12 2019 from 192.168.1.123
#w
USER     TTY      FROM             
ec2-user pts/0    192.168.1.123

似乎连接正在从 NAT 实例停止,并且它充当堡垒/跳跃服务器。

我的 aws VPC 是 172.20.0.0

NAT 实例 ip 是 172.20.0.10

我们的私有 IP 是 192.168.0.0

nat 实例和我们的路由器的隧道 IP 172.16.1.1 和 172.16.1.1

其他方面,我们按照 AWS 文档中提供的创建 NAT 实例的步骤进行操作,所有路由均配置正确。我们已经有 4 个类似的设置,并确保所有设置都相同。

即使我们已经禁用了 nat 实例的“源/目标检查”,NAT 实例是否可能正在禁用源连接 IP?我不确定该在哪里查看,因为我们确保它与之前的设置相同

答案1

NAT 实例用于允许私有子网中的 EC2 实例访问互联网,而不会让互联网资源访问私有子网实例。上面的描述听起来不太正确。你可能是指你有一个堡垒主机或一个 VPN 连接到你的本地系统。我想你可以在两个方向上使用 NAT 实例,但这不是它的使用方式。通常你应该使用堡垒主机来处理传入连接。

如果连接通过任何类型的代理进行,则代理 IP 将是接收方看到的 IP。正确配置的代理有时会添加X-转发标头,可以提供原始请求者的 IP。我认为堡垒或 NAT 实例都不会添加它,但是弹性负载均衡器

我建议您调查一下您的设置,然后编辑您的问题以澄清您的配置和您遇到的问题。完成此操作后,如果您对我的答案发表评论,我可能会提供更多帮助。

更新

根据您更新后的描述,我相信事情正在按预期进行。

答案2

好的,我想我找到了另一种修改 NAT 实例 AMI 的新版本的方法。每当我通过隧道连接到其他实例时,IP 伪装/后路由之类的东西都会更改源 IP。因此,我比较了 NAT 实例 AMI 的旧版本和新版本的 iptables,我发现了这一点

版本amzn-ami-vpc-nat-hvm-2015.03.0.x86_64-ebs - ami-1a9dac48

[root@nat-instance ec2-user]# iptables -t nat -v -L POSTROUTING -n --line-number
Chain POSTROUTING (policy ACCEPT 23 packets, 1315 bytes)
num   pkts bytes target     prot opt in     out       source               destination
1    3745  225 MASQUERADE  all  --  *      eth0    (public subnet /16)        0.0.0.0/0

版本amzn-ami-vpc-nat-hvm-2018.03.0.20181116-x86_64-ebs - ami-01514bb1776d5c018

[root@another-nat ec2-user]# iptables -t nat -v -L POSTROUTING -n --line-number
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1      216 14157 MASQUERADE  all  --  *      eth0    0.0.0.0/0            0.0.0.0/0

所以我做的是,我添加了另一条规则并删除了当前规则。也许它会起作用,而且确实如此。

#iptables -t nat -A POSTROUTING -o eth0 -s 172.20.0.0/16 -j MASQUERADE  //adding
#iptables -t nat -D POSTROUTING 1  //deleting the previous one
#iptables -t nat -v -L POSTROUTING -n --line-number
Chain POSTROUTING (policy ACCEPT 2 packets, 104 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        2   168 MASQUERADE  all  --  *      eth0    172.20.0.0/16        0.0.0.0/0   

示例结果。从办公网络使用私有 IP 访问两个实例

公共子网中的实例

login as: ec2-user
Last login:  from 192.168.1.123
# w
USER     TTY      FROM              
ec2-user pts/0    192.168.1.123

私有子网中的实例

login as: ec2-user
Last login:  from 192.168.1.123
# w
USER     TTY      FROM              
ec2-user pts/0    192.168.1.123

是的,它基本上实现了我的目标,而且我不需要完全改变我的 NAT 实例版本。

相关内容