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又会变成默认网关路由.不是很好的方式.
AWS云EC2(RHEL7)添加网络接口与路由调整的更多相关文章
- AWS系列-EC2实例添加磁盘
注意:添加的磁盘,必须和挂载的实例是在同一可用区. 1.1 如下图,打开EC2控制台,打开卷,点击创建卷 1.2 选择磁盘配置 磁盘类型:如下图 磁盘大小:如图,最小500G,最大16T 可用区:注意 ...
- AWS云创建EC2与使用注意事项-踩坑记录
目录 AWS 一 创建 EC2(云服务器) 二.AWS 注意事项 三.AWS 申请 SSL 证书 四. 创建VPC AWS 文章 GitHub 地址: 点我 AWS云服务器价格计算器 AWS WEB ...
- 亚马逊AWS学习——EC2的自定义VPC配置
1 网络配置 EC2即亚马逊AWS云服务中的虚拟主机.创建EC2实例时如果使用的默认VPC并分配了公有IP是可以上网的.但我们经常需要自定义的网络环境,这时就需要自己定义VPC和子网了. 1.1 配置 ...
- 亚马逊AWS学习——EC2的自己定义VPC配置
转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/47153421 本文出自[我是干勾鱼的博客] 1 网络配置 EC2即亚马逊AWS云 ...
- Amazon AWS 架设EC2服务器(datizi)fanqiang (更新手机VPN/L2TP设置)
今天用AWS在东京架设了一台服务器用来个人fanqiang.为什么用AWS呢,阿里云学生价9.9可以搭在香港,但是我的学制今年2月份在学信网上就到期了,腾讯云holy shit,我司AZURE据说员工 ...
- A亚马逊WS网上系列讲座——怎么样AWS云平台上千万用户的应用建设
用户选择云计算平台构建应用程序的一个重要原因是高弹性的云平台和可扩展性. 面向Internet应用程序通常需要支持用户使用大量,但要建立一个高度可扩展.具有一定的挑战,高度可用的应用程序,只有立足AW ...
- AWS的EC2实例搭建服务器使用stackoverflow教程
作为一个技术开发工程师, 一个给力的问题解决方案搜索引擎是十分必要的, stackoverflow作为一个码农必备神器, 存在访问不稳定,有时候打不开的问题,下面介绍如何在亚马逊云服务器上搭建属于自己 ...
- Oracle数据库迁移到AWS云的方案
当前云已经成为常态,越来越多的企业希望使用云来增加基础设施的弹性.减轻基础设施的维护压力,运维的成本等.很多企业使用云碰到的难题之一是如何将现有的应用迁移到云上,将现有应用的中间件系统.Web系统及其 ...
- 亚马逊AWS在线系列讲座——基于AWS云平台的高可用应用设计
设计高可用的应用是架构师的一个重要目标,可是基于云计算平台设计高可用应用与基于传统平台的设计有很多不同.云计算在给架构师带来了很多新的设计挑战的时候,也给带来了很多新的设计理念和可用的服务.怎样在设计 ...
随机推荐
- 数据库Oracle的安装与卸载
Oracle的安装步骤: 口令管理里面有scott,需要重新设置其口令,scott是测试表,里面有现成的表可以用来做实验. Oracle 自带客户端工具 SQLPlus sys 用户登录命令: sy ...
- 数据库Oracle日期函数
SYSDATE 函数:是一个日期函数,它返回当前数据库服务器的日期和时间. 用日期计算: • 从日期加或者减一个数,结果是一个日期值 • 两个日期相减,得到两个日期之间的天数 ,可以加小时到日期上 S ...
- C++fread小解
std::fread ——C++ 输入/输出库 C 风格 I/O 定义于头文件 <cstdio> std::size_t fread( void* buffer, std::size_t ...
- Spring面试题总结及答案
Spring面试总结 Spring是什么? Spring框架是一个java平台,提供全面基础设施支持开发java应用程序. Spring的主要模块有哪些? Spring Code:基础模块,主要提供I ...
- BGA256芯片植球全过程体验(原创)
今天工具到位,迫不亟待,需要对手上的BGA256的FPGA芯片进行植球, 该芯片买来的时候是有球的,只是在焊接后,由于电路板故障或焊接问题,需要拆下来芯片,导致球损失,需要重新植球. 一般植球都是将所 ...
- Python3 网络基础基础2
目录 subprocess 粘包问题 问题原因 解决问题 上传大文件 UDP协议 SocketServer subprocess 可以通过代码执行操作系统的终端命令, 并返回终端执行命令后的结果 im ...
- synchronized和volatile区别
不同一: synchronized可以修饰方法, volatile只能修饰变量 不同二: synchronized是同步的 volatile修饰的变量具有可见性.
- JS计算数组的总和
1.最简单的遍历累计 var arr=[1,2,3,4,5,6] var sum =0 for(var i=0;i<arr.length;i++){ sum=sum+arr[i] } 2.利用r ...
- 中文站最好WordPress主题,自媒体,博客,企业,商城主题一网打尽
时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...
- Python面向对象-概念、类、实例
OOP——Object Oriented Programming,面向对象编程,是一种程序设计思想.该思想将对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 区别于面向过程的程序设计即把计 ...