Amazon-Ec2
如何配置自定義 NAT 以在 Amazon VPC 中使用
我有一個希望用作 NAT 實例的 Ubuntu 機器(除其他外)。我寧願避免使用亞馬遜提供的 NAT AMI,而是自己配置 NAT。
目前,我的主機只有一個網路介面(如http://docs.amazonwebservices.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html所示)。
我應該能夠將我的 Ubuntu 主機配置為我的亞馬遜網路中其他主機的 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)中配置 NAT 規則。我的第二台主機位於不同的網路(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
但是機器失去了連接。
我對 Amazon 中 NAT 實例和路由的使用有什麼誤解?
我已經安裝了 Amazon NAT AMI 並檢查了相關配置:
[root@ip-10-200-0-172 ec2-user]# iptables -L -n -v -x -t nat 鏈 PREROUTING(策略接受 11 個數據包,660 字節) pkts bytes target prot opt in out source destination 鏈輸入(策略接受 11 個數據包,660 字節) pkts bytes target prot opt in out source destination 鏈輸出(策略接受 357 個數據包,24057 字節) pkts bytes target prot opt in out source destination Chain POSTROUTING(策略接受 0 個數據包,0 個字節) pkts bytes target prot opt in out source destination 357 24057 偽裝全部 -- * 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 級別配置(使用“路由表”功能)。
您可以檢查 Amazon 的腳本以在 Linux 機器上配置 NAT,它帶有預設的 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