AWS没有在私有子网中正确设置默认gw。
NAT地址:
ec2din i-ef7f8a3a|grep PRIVATEIPADDRESS PRIVATEIPADDRESS 172.16.0.31
路由表configuration:
ec2drtb rtb-7c9f3618 ROUTETABLE rtb-7c9f3618 vpc-43da3455 ROUTE local active 172.16.0.0/16 CreateRouteTable ROUTE i-ef7f8a3a active 0.0.0.0/0 eni-4055320a CreateRoute ASSOCIATION rtbassoc-cc1764a8 main ASSOCIATION rtbassoc-51b7c435 subnet-c92429be`
私有子网configuration:
ec2dsubnet subnet-c92429be SUBNET subnet-c92429be available vpc-43da3455 172.16.1.0/24 250 us-east-1a false false TAG subnet subnet-c92429be`
就像我们看到的,我将实例i-ef7f8a3aconfiguration为NAT,并将其设置在路由表中,作为所有stream量的默认gw。
当我login到我的机器启动私有子网(172.16.1.220),并检查路由表,它不显示默认gw作为我的NAT实例的IP,而是,它redirect到默认路由器:
ip r default via 172.16.1.1 dev eth0 default via 172.16.1.1 dev eth0 metric 1024 172.16.1.0/24 dev eth0 proto kernel scope link src 172.16.1.220 172.16.1.1 dev eth0 scope link metric 1024`
NAT上的默认路由设置为172.16.0.1而不是igw,所以我认为所有的魔法都在AWS路由器上完成,无论如何它将redirect到我的NAT,所以我开始testing。
我尝试ping一些外部IP,我开始在我的nat实例tcpdump,但我没有看到从我的私人子网的任何传入数据包:
ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. ^C --- 8.8.8.8 ping statistics --- 20 packets transmitted, 0 received, 100% packet loss, time 19150ms` tcpdump -n host 8.8.8.8 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes ^C 0 packets captured 0 packets received by filter 0 packets dropped by kernel`
两个实例都可以“看到”对方 – 我可以在两个方向上ssh,但是当我甚至尝试使用我的NAT设置默认路由时,我将得到:
ip r add default via 172.16.0.31 RTNETLINK answers: Network is unreachable
我错过了什么? 私有子网上的实例应该如何查看路由表? 我的NAT IP应该在那里,还是默认的?
单独将IP堆栈留在实例上。 它从DHCP获取的默认网关是正确的,并且路由到NAT实例由VPC基础设施完成。
NAT实例上的安全组需要configuration为接受来自172.16.0.0/16的所有stream量(如果需要,可以将其设置得更严格,但首先需要使其工作)。
您还需要禁用 NAT实例上的源/目标检查 。