如何configuration在Amazon VPC中使用的自定义NAT

我有一个Ubuntu盒子,我希望用作NAT实例(等等)。 我宁愿避免使用Amazon提供的NAT AMI,而是自己configurationNAT。

目前,我的主机只有一个networking接口(如http://docs.amazonwebservices.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html所示)。

我应该能够将我的Ubuntu主机configuration为亚马逊networking中其他主机的NAT实例吗?

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 5 454 MASQUERADE all -- * eth0 0.0.0.0/0 0.0.0.0/0 

我尝试在Ubuntu主机(10.200.0.51)中configurationNAT规则。 我的第二台主机位于不同的networking(10.200.10.41/24)。 所以我写道:

 route add -net 10.200.0.0 netmask 255.255.255.0 dev eth0 # So I can reach 10.200.0.51 route add default gw 10.200.0.51 

但机器失去了联系。

什么是我误解重新使用NAT实例和路由在亚马逊?

您可以检查Amazon的脚本以在Linux机器上configurationNAT,它的默认ami-vpc-nat AMI位于/usr/local/sbin/configure-pat.sh

它看起来像这样:

 #!/bin/bash # Configure the instance to run as a Port Address Translator (PAT) to provide # Internet connectivity to private instances. function log { logger -t "vpc" -- $1; } function die { [ -n "$1" ] && log "$1" log "Configuration of PAT failed!" exit 1 } # Sanitize PATH PATH="/usr/sbin:/sbin:/usr/bin:/bin" log "Determining the MAC address on eth0..." ETH0_MAC=$(cat /sys/class/net/eth0/address) || die "Unable to determine MAC address on eth0." log "Found MAC ${ETH0_MAC} for eth0." VPC_CIDR_URI="http://169.254.169.254/latest/meta-data/network/interfaces/macs/${ETH0_MAC}/vpc-ipv4-cidr-block" log "Metadata location for vpc ipv4 range: ${VPC_CIDR_URI}" VPC_CIDR_RANGE=$(curl --retry 3 --silent --fail ${VPC_CIDR_URI}) if [ $? -ne 0 ]; then log "Unable to retrive VPC CIDR range from meta-data, using 0.0.0.0/0 instead. PAT may be insecure!" VPC_CIDR_RANGE="0.0.0.0/0" else log "Retrieved VPC CIDR range ${VPC_CIDR_RANGE} from meta-data." fi log "Enabling PAT..." sysctl -q -w net.ipv4.ip_forward=1 net.ipv4.conf.eth0.send_redirects=0 && ( iptables -t nat -C POSTROUTING -o eth0 -s ${VPC_CIDR_RANGE} -j MASQUERADE 2> /dev/null || iptables -t nat -A POSTROUTING -o eth0 -s ${VPC_CIDR_RANGE} -j MASQUERADE ) || die sysctl net.ipv4.ip_forward net.ipv4.conf.eth0.send_redirects | log iptables -n -t nat -L POSTROUTING | log log "Configuration of PAT complete." exit 0 

我已经安装了一个Amazon NAT AMI,并检查了相关的configuration:

 [root @ ip-10-200-0-172 ec2-user]#iptables -L -n -v -x -t nat
链PREROUTING(策略接受11个数据包,660字节)
     pkts字节目标人选退出源目的地         

链接INPUT(策略接受11个数据包,660个字节)
     pkts字节目标人选退出源目的地         

链OUTPUT(策略ACCEPT 357包,24057字节)
     pkts字节目标人选退出源目的地         

链POSTROUTING(策略ACCEPT 0包,0字节)
     pkts字节目标人选退出源目的地         
      357 24057 MASQUERADE全部 -  * eth0 10.200.0.0/16 0.0.0.0/0

 [root @ ip-10-200-0-172 ec2-user]#cat / proc / sys / net / ipv4 / ip_forward 
 1

另外,机器需要有一个公共IP,并且需要禁用Sourc / Dest检查。

这台机器可以作为NAT实例使用。

其他主机的路由在EC2级别configuration(使用“路由表”function)。

有几条指导帮助我。

笔记:

  • 10.0.0.23 – 私人ip的实例,我决定作为“NAT实例”,这个实例与EIP。
  • 10.0.0.0/24 – vpc子网

在“nat-i​​nstance”上,作为root用户:

 sysctl -q -w net.ipv4.ip_forward=1 net.ipv4.conf.eth0.send_redirects=0 iptables -t nat -C POSTROUTING -o eth0 -s 10.0.0.0/24 -j MASQUERADE 2> /dev/null || iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j MASQUERADE 

在这之后:

 [sysctl file] net.ipv4.ip_forward = 1 net.ipv4.conf.eth0.send_redirects = 0 [iptables] Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- 10.0.0.0/24 0.0.0.0/0 

通过AWS控制台:

 Grant all traffic from 10.0.0.0/24 (into security groups) Set disabled source/dest. check (right click on "nat" instance) 

在没有EIP的其他情况下:

 sudo route add default gw 10.0.0.23 

UPD :我发现,我的VPC中的每个新实例在ping默认gw后都能正确检测到internet。

所以:

 [ec2-user@ip-10-0-0-6 ~]$ ping google.com PING google.com (173.194.33.71) 56(84) bytes of data. ^C --- google.com ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2356ms [ec2-user@ip-10-0-0-6 ~]$ ping 10.0.0.23 PING 10.0.0.230 (10.0.0.23) 56(84) bytes of data. 64 bytes from 10.0.0.23: icmp_seq=1 ttl=64 time=1.22 ms 64 bytes from 10.0.0.23: icmp_seq=2 ttl=64 time=0.539 ms 64 bytes from 10.0.0.23: icmp_seq=3 ttl=64 time=0.539 ms ^C --- 10.0.0.23 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2500ms rtt min/avg/max/mdev = 0.539/0.768/1.228/0.326 ms [ec2-user@ip-10-0-0-6 ~]$ ping google.com PING google.com (173.194.33.70) 56(84) bytes of data. 64 bytes from sea09s15-in-f6.1e100.net (173.194.33.70): icmp_seq=1 ttl=55 time=13.5 ms 64 bytes from sea09s15-in-f6.1e100.net (173.194.33.70): icmp_seq=2 ttl=55 time=14.2 ms 

我知道,这不是问题,但可以节省一些时间