使用场景:
可能我们的业务服务器并不是所有服务器都需要有公网IP,
比如,最为典型的数据库服务器,只需要能够能够通过有公网
IP的跳板机登录后,内网跳转就可以进行系统管理,但如果
外网不通,还是很不方便。如此以来,能够让跳板机担当NAT
服务器也就即保障了安全又能够让内网服务器请求公网。
虽然aws服务中有现成的NAT服务,但完全可以手工打造。
环境展示:
vpc一个 CIDR 172.16.0.0/16(可容纳65534台主机)
子网两个
公有子网 CIDR 172.16.18.0/26(可容纳62台主机)
私有子网 CIDR 172.16.18.128/26(可容纳62台主机)
正式操作:
创建vpc,命一个直观的vpc名称,指定好vpc使用网段
创建子网,命一个直观的子网名称,并指定vpc为上一步中创建的vpc
创建Internet网关,命一个直观的igw名称,并与vpc进行关联
创建路由表,命一个直观的rtb名称,指定对应的vpc
查看公网路由表成功创建后的效果
DestinationTargetStatusPropagated
172.16.0.0/16localactiveNo
0.0.0.0/0 igw-04860ca326f5e0d15activeNo
手动创建私网路由表(需要创建好跳板机的ENI后才能创建)
网络网关指向跳板机的ENI,成功后如下所示
DestinationTargetStatusPropagated
172.16.0.0/16localactiveNo
0.0.0.0/0 eni-074cd5718bf24d3f7activeNo
跳板机 公有子网 CIDR 172.16.18.0/26
内网服务器 私有子网 CIDR 172.16.18.64/26
aws ec2所有机器最好使用弹性网卡,方便日后拨离ENI挪作它用
跳板机的ENI创建时手动指定一个公有子网的私有IP,并分配一个弹性IP
跳板机的ENI需要关闭源/目标检查
内网服务器的eni创建时手动指定一个私有子网的私有IP就可以了
创建实例时指定之前创建好的ENI接口,所有实例无需子网分配公有IP和私有IP了
跳板机实例启动后进入系统,需要做两项配置
cat /etc/sysconfig/iptables
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -j MASQUERADE #转发所有IP及端口的请求到公网的流量
COMMIT
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf && sysctl -p
跳板机的配置就完成了
以后只要想用这个跳板机做为登录入口以及网络出口的,只需要启动实例时放置于
设定的私有子网内就可以了。
需要注意的时,要想阅读本文后,实现笔者的效果,需要对aws网络有一定了解,
笔者也曾因为aws的网络头疼过好多回,但当笔者成功手工打造上述系统后,也算
对aws的网络环境有了一定的见长!
更多细节请参考官方文档:https://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/VPC_NAT_Instance.html