Amazon-Ec2

如何配置自定義 NAT 以在 Amazon VPC 中使用

  • February 11, 2022

我有一個希望用作 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

引用自:https://serverfault.com/questions/406351