AWS云EC2(RHEL7)添加网络接口与路由调整
AWS云EC2(RHEL7)添加网络接口与路由调整
Amazon Linux(类似RHEL6,Centos6) 以及 RHEL7 修改MAC地址的说明
RHEL7 Centos7 添加路由
解决RHEL7因为文件里配置的MAC与实际不符导致系统无法启动的问题处理
20180625 Chenxin
20180627 update Chenxin
背景说明:
因RHEL7的镜像生成实例总是在启动中报网络错误,无法登陆排查原因.
故对RHEL7的实例进行添加网卡的测试.
系统说明:
在centos6以及之前,修改MAC地址只需要修改/etc/sysconfig/network-scripts/ifcfg-eth0文件,或者干脆这个文件里删除MAC地址那行.
到RHEL7后,除了修改上述文件外,还需要修改/etc/udev/rules.d/70-ec2-nvme-devices.rules文件.且确保2个文件里MAC地址一致,而且必须是系统真实的MAC地址,如果是自定义的MAC地址,会导致系统无法启动,提示:
Failed to start LSB: Bring up/down networking.
See 'systemctl status network.service' and 'journalctl -xn' for details.
这样,我们通过AMI克隆的RHEL7,就会出现无法启动的问题.因为我们在系统文件里的MAC地址是母机的,而非真实子实例的.子实例的MAC地址需要到控制台-网络接口-获取MAC地址,复制此地址.然后将获取到的写入EC2的子机.再启动子机才可以正常启动.
额外说明(方式2):
EC2通过RHEL7的AMI启动的时候,因为默认系统文件里的MAC地址会和ifcfg-eth0以及70-persistent-net.rules这2个文件里MAC地址不同,会造成系统无法启动.那么通过测试后,我们可以在AMI镜像的时候,将2个文件的含有MAC地址的行注释掉.这样EC2在启动的时候,会默认加载aws分配的MAC地址,系统便可以正常启动.(注释掉2个文件的MAC地址行,再制作AMI)
原实例IP地址信息:
公网弹性IP:13.251.152.158
绑定的私网IP: 10.0.1.7
在AWS控制台生成网络接口
首先在AWS控制台,EC2页面选择"网络接口",选择添加接口.接口IP为: 10.0.1.23
将此IP接口绑定到EC2实例上.
附加额外实验(将弹性IP 13.251.152.158 绑定到10.0.1.23 进行测试:
进入AWS控制台的弹性IP页面,将13.251.152.158 绑定到"网络接口ID"->10.0.1.23 (这里选择"实例ID"的话,控制台会报该实例有多个网络接口,不知道绑哪个接口的错误).)测试通过.
SSH登陆EC2配置IP信息
通过SSH登陆EC2实例,使用
ip addr
1.xxx
2.xxx
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 0a:9e:bc:8a:6a:c0 brd ff:ff:ff:ff:ff:ff #这个MAC地址同样会出现在AWS控制台"网络接口"里,可以从那里获取.
这里能够看到已经多了1个接口了(eth1).
记录此MAC地址.
配置Linux网络信息(一共修改2个文件):
cp -aprf /etc/sysconfig/network-scripts/ifcfg-eth0 ifcfg-eth1
vim ifcfg-eth1
Created by cloud-init on instance boot automatically, do not edit.
BOOTPROTO=dhcp
DEVICE=eth1 #需要修改成eth1
HWADDR=0a:9e:bc:8a:6a:c0 #修改成新的MAC地址
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
配置70文件:
vim /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM"net", ACTION"add", DRIVERS"?*", ATTR{address}"0a:47:43:38:60:58", NAME="eth0"
SUBSYSTEM"net", ACTION"add", DRIVERS"?*", ATTR{address}"0a:9e:bc:8a:6a:c0", NAME="eth1" #增加一行
注意,这里还没有重启网络,故不会发生默认路由的变化.
记住,RHEL7一定要配置真实的MAC地址(不能自定义),否则极有可能造成系统起不来,报网络故障.
确认和调整路由
因新绑定了网络接口(以及该网络接口对应的内网IP),重启网络服务的话,路由极有可能发生变化.
查看当前路由:
route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 0 0 0 eth0
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
这里添加了10.0.1.23的接口,重启后,默认路由很可能会变掉(测试的时候,确实变了,导致外网无法登陆EC2).
在未调整默认路由的情况下,重启EC2后,路由表会变成:
route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 0 0 0 eth1
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
默认理由随机的给了eth1了,这个可不是希望看到的.
路由调整
临时策略,添加默认路由
route add default gw 10.0.1.1 dev eth0
route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 0 0 0 eth0 #默认路由重复了,这条生效
default gateway 0.0.0.0 UG 0 0 0 eth1 #默认路由重复了,这条未生效
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
将多出来的那个默认路由删除
route del default gw 0.0.0.0 dev eth1
route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 0 0 0 eth0
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
永久路由(添加1个文件)
注:
测试发现最终有效文件是/etc/sysconfig/network-scripts/eth0.route
调整静态路由对应的相关配置文件(这里都测试了,都不生效,测试时间20180625,版本RHEL7.5,原因应该是2个网卡ip是同一个地址段的,网关地址是一样的)
/etc/sysconfig/network添加到末尾,全局生效的.GATEWAY=gw-ip或者GATEWAY=gw-dev
/etc/sysconfig/network-scripts/ifcfg-eth0 #添加如下内容 GATEWAY=X.X.X.X
/etc/sysconfig/network-scripts/eth0.route添加如下:(此文件是通过同路径下的那些网卡启动脚本发现的)
route add -net 10.0.1.0/24 dev eth0
route add default gw 10.0.1.1 dev eth0 #/var/log/messages会报错SIOCADDRT: File exists(该路由已存在),所以才看不到默认路由走eth0.但第一条理由在路由表里出现了.
route add –net 11.11.1.11 netmask 255.255.255.0 gw 11.11.1.1 #这种格式应该也可以
路由表如下:
route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 0 0 0 eth1
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
eth0.route测试通过.在RHEL7中,如果修改为route-eth0(网上都说这种方法),/var/log/messages会报错:
Jun 25 20:47:59 ip-10-0-1-7 network: Error: inet prefix is expected rather than "route".
Jun 25 20:47:59 ip-10-0-1-7 network: Error: inet prefix is expected rather than "route".
这里应该是格式错误的意思,可以尝试写成如下2种格式再试试:
route-eth0文件内容,
1):
192.168.0.0/24 via 10.201.106.2
2):
ADDRESS0=192.168.20.0
NETMASK0=255.255.255.0
GATEWAY0=10.201.106.2
ADDRESS1=192.168.30.0
NETMASK1=255.255.255.0
GATEWAY1=10.201.106.2
不过需要两个网卡属于不同的网段才能测试.
不推荐:
可以修改/etc/rc.local文件(RHEL7默认此文件无执行权限,需要更改为755).在RHEL7之后,该文件与其他服务启动并行执行(systemd).
route add default gw 10.0.1.1 dev eth0
route del default gw 0.0.0.0 dev eth1
此方式在执行systemctl restart network.service后,eth1又会变成默认网关路由.不是很好的方式.