今天面试了一下,面试官问到AWS的子网问题,来说说AWS的最佳实践:
首先是VPC的划定,然后就是三个public子网,三个private子网,都是一个zone分布在a、b、c三个不同机房
来保证最大冗余性,然后pub子网通过IGW来出公网,那Private子网就通过NAT出公网。
但是,但是,但是:
如果你把一台EC2服务器一开始就放错了子网,放到了private子网里,然后上面又跑了重要的服务,无法迁移,无法重启,而且整个vpc里只有这一台ec2,其它东西都是aws的服务或者市场的服务又或者fargate、lambda之类的无服务器,这时候你想进去调试,那就麻烦大了
那能不能给这台private的机器加上公网ip来当作跳板机直接访问呢?
答案是肯定的,可以。
但是又来了,如果这么配置了,你要对路由非常的熟悉,因为随后发生错乱的情况可能需要你手动添加路由,最麻烦的不是配置网卡,而是配置路由!
做法如下:
一、动态添加弹性ip到这个ec2的第二个网卡
二、配置网络
# vi /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
enX0:
addresses:
- 10.0.132.169/20 #The private IP address of primary ENI
nameservers:
addresses:
- 10.0.0.2
routes:
- to: 0.0.0.0/0
via: 10.0.128.1 # Default gateway, you can find it using** ip r** command
table: 1001
- to: 10.0.132.169
via: 0.0.0.0
scope: link
table: 1001
routing-policy:
- from: 10.0.132.169
table: 1001
dhcp4: no
dhcp6: false
match:
macaddress: 06:36:82:ef:39:39
set-name: enX0
enX1:
addresses:
- 10.0.3.176/20 #The private IP address of primary ENI
gateway4: 10.0.0.1
nameservers:
addresses:
- 8.8.8.8
- 1.1.1.1
routes:
- to: 0.0.0.0/0
via: 10.0.0.1 # Default gateway, you can find it using** ip r** command
table: 1002
- to: 10.0.3.176
via: 0.0.0.0
scope: link
table: 1002
routing-policy:
- from: 10.0.3.176
table: 1002
- from: 120.116.111.99
table: 1002
dhcp4: no
dhcp6: false
match:
macaddress: 06:29:c3:b2:c5:f9
set-name: enX1
version: 2
netplan apply
详细解释一下,enX0是private子网的网卡,enX1是弹性IP的网卡,注意,即使是弹性IP,也是个内网地址,这两个IP呢,都有各自独立的网关,第二个网卡还有自己的DNS。这就容易发生错乱了,因为缺省路由走第一个网卡,那如果从第二个网卡的公网IP入,出的时候走第一张网卡,那就有意思了。
所以哪来回哪,每个网卡的第二个路由,都是自己走自,策略路由的第一跳,也是自己走自己。
然后第二个网卡的第二条策略路由,是指定的,本质意思其实是从120.116.111.99访问弹性公网IP的wireguard数据包,回程的时候强制指定走第二个网卡。
痛苦吧!
而且这台EC2作为跳板机,需要代理访问AWS中各种服务,这样就麻烦了,那数据包究竟要从哪个网卡出去,你必须非常清楚,如果走错了,你就必须手动增加路由表
从第一张网卡是aws的dns服务器,是可以访问到各种aws的内网endpoint的解析地址的,第二张网卡由于是公网dns服务器,所以不行;另外第一张网卡是缺省路由;务必谨记这两点。
ip route show table all
ip rule show
ip rule show table 1001
ip rule show table 1002
# 手动新增路由
ip rule add from 120.116.111.99 table 1002
ip rule add to 120.116.111.99 table 1002
存在即合理,AWS本质也是魔改了LInux的各种软件和服务。