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