LINUX.ORG.RU
ФорумAdmin

Оставить машины за NAT, но отвечать вовне по ELB интерфейсам (routing в ec2 + nat gateway + internet gateway + ELB)

 , , , ,


2

1

Всем привет.

Есть несколько ec2 web серверов в Amazon AWS, которые находятся за ELB, который выходит в инет через Internet Gateway. Также есть NAT Gateway (не instance), через который эти машины отправляют запросы только на, например, ifconfig.co. Делал так:

route add -host ifconfig.co gw 10.0.1.104
10.0.1.104 - это NAT Gateway ip

Нужно, чтобы машины продолжая отвечать на запросы приходящие от ELB, остальные запросы (на все ресурсы а не только определённые) отправляли через NAT Gateway, т.е. чтобы выходили в инет через NAT Gateway (и использовали его ip соответственно).

Для этого создал каждой машине второй сетевой интерфейс и теперь у них: eth0 - 10.0.1.0/24 eth2 - 10.0.200.0/24

eth2, соответственно, сейчас не используется.

Я так понимаю, что нужно перенести (пересоздать? т.к. не вижу возможности создать сетевой интерфейс и приаттачить его к NAT Gateway, т.к. его нет в списке инстансов для этого) NAT Gateway в подсеть eth2 - 10.0.200.0/24, создать там свой Internet Gateway(или как-то использовать первый из первой подсети?) и прописать маршруты, чтобы машина отвечала на запросы приходящие через eth0 подсеть через тот internet gateway, а для остальных запросов использовала бы eth2 и NAT Gateway.

Internet<->IG<->ELB<->eth0<->ec2-01
Internet<->IG<->NatGateway<->eth2<->ec2-01

Нашёл вот такую статью: https://forums.aws.amazon.com/thread.jspa?threadID=92019 но что-то немного не получается разобраться.

Подскажите, как именно нужно прописать эти маршруты и вообще правильно реализовать эту схему?

Вот так выглядят маршруты с одной из машин:

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         ip-10-0-1-1.ec2 0.0.0.0         UG    0      0        0 eth0
default         ip-10-0-200-1.e 0.0.0.0         UG    10002  0        0 eth2
10.0.1.0        *               255.255.255.0   U     0      0        0 eth0
10.0.200.0      *               255.255.255.0   U     0      0        0 eth2
instance-data.e *               255.255.255.255 UH    0      0        0 eth0
188.113.88.193  ip-10-0-1-104.e 255.255.255.255 UGH   0      0        0 eth0
# ip route
default via 10.0.1.1 dev eth0
default via 10.0.200.1 dev eth2  metric 10002
10.0.1.0/24 dev eth0  proto kernel  scope link  src 10.0.1.163
10.0.200.0/24 dev eth2  proto kernel  scope link  src 10.0.200.213
169.254.169.254 dev eth0
188.113.88.193 via 10.0.1.104 dev eth0

Спасибо!

Вот, что я сделал, чтобы осуществить задуманное: 1) убрал маршруты до ifconfig.co и пр. 2) во второй подсети 10.0.200.0/24 сделал NAT Gateway дефолтным в таблице маршрутизации для подсети. 3) добавил следующие строки в /etc/rc.d/rc.local, чтобы всё это срабатывало при загрузке машин:

for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > $f; done
echo 1 > /proc/sys/net/ipv4/route/flush
if [ -z "`cat /etc/iproute2/rt_tables | grep '^200'`" ] ; then echo "200 nat" >> /etc/iproute2/rt_tables; fi
ip route add default via 10.0.200.1 dev eth1 table nat
ip rule add fwmark 0x1 table nat
ip2addr=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1  -d'/')
iptables -A OUTPUT -t mangle -o eth0 -p tcp --dport 80 -j MARK --set-mark 1
iptables -A POSTROUTING -t nat -o eth1 -p tcp --dport 80 -j SNAT --to $ip2addr
iptables -A OUTPUT -t mangle -o eth0 -p tcp --dport 443 -j MARK --set-mark 1
iptables -A POSTROUTING -t nat -o eth1 -p tcp --dport 443 -j SNAT --to $ip2addr

vainkop1 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.