我有一组相同的亚马逊linux ec-2前端Web服务器,通过Elastic Load Balancer(ELB)提供Web内容。
他们每个人都有一个公共IP,所以当他们连接到外部服务的www,他们的ips被logging为几个不同的。
我希望这些服务器通过ELB继续提供他们的networking内容,但是通过NAT网关使用它的单个弹性IP连接到外部世界。
以下是我所做的:
1)在同一个子网( 10.0.1.100是ip)创build了NAT网关,因为ec2 machines +为它分配了一个弹性ip。 2)
route add -host ifconfig.co gw 10.0.1.100 dev eth0 route add -host otherservice gw 10.0.1.100 dev eth0 ...
现在curl ifconfig.co返回NAT网关的外部弹性IP&它是伟大的:),但是我需要所有的stream量去通过NAT网关,除了通过ELB的。
更新:这是我做了什么来完成任务:1)删除自定义路由ifconfig.co及其他服务;
2)创build第二个子网10.0.200.0/24;
3)将NAT网关作为默认网关添加到其路由表中;
4)将以下行添加到/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
ELB与您的Web服务器位于同一networking上。 从Web服务器的angular度来看,所有Web请求都将显示为来自负载平衡器。 因为负载均衡器在同一个networking上,所以不需要花哨的路由。
只需在每台Web服务器上添加一条默认路由到您的NAT网关。 或者,如果您希望子网上的所有服务器都使用NAT网关,请按照上面的build议更改子网上的默认路由。