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又會變成默認網關路由.不是很好的方式.