Linux下配置网卡ip别名何谓ip别名?用windows的话说,就是为一个网卡配置多个ip。什么场合增加ip别名能派上用场?布网需要、多ip访问测试、特定软件对多ip的需要...and so on.
eth0 eth0:1 和eth0.1三者的关系对应于物理网卡、子网卡、虚拟VLAN网卡的关系:
物理网卡:物理网卡这里指的是服务器上实际的网络接口设备,这里我服务器上双网卡,在系统中看到的2个物理网卡分别对应是eth0和eth1这两个网络接口。
子网卡:子网卡在这里并不是实际上的网络接口设备,但是可以作为网络接口在系统中出现,如eth0:1、eth1:2这种网络接口。它们必须要依赖于物理网卡,虽然可以与物理网卡的网络接口同时在系统中存在并使用不同的IP地址,而且也拥有它们自己的网络接口配置文件。但是当所依赖的物理网卡不启用时(Down状态)这些子网卡也将一同不能工作。
虚拟VLAN网卡:这些虚拟VLAN网卡也不是实际上的网络接口设备,也可以作为网络接口在系统中出现,但是与子网卡不同的是,他们没有自己的配置文件。他们只是通过将物理网加入不同的VLAN而生成的VLAN虚拟网卡。如果将一个物理网卡通过vconfig命令添加到多个VLAN当中去的话,就会有多个VLAN虚拟网卡出现,他们的信息以及相关的VLAN信息都是保存在/proc/net/vlan/config这个临时文件中的,而没有独自的配置文件。它们的网络接口名是eth0.1、eth1.2这种名字。
下面通过几个例子简单介绍一下如何使用ifconfig命令给网卡配置ip别名。
一、首先为服务器网卡配置静态ip地址
#ifconfig eth0 192.168.6.99 netmask 255.255.255.0 up
eth0 //机器的第一个网卡,有些机器有多个网卡,eth1、eth2...
192.168.6.99 //设置网卡的静态ip地址
netmask 255.255.255.0 //ip地址的子网掩码,无需多解释
up //表示立即激活该网卡
请注意。不一定每个服务器都是eth0,例如我的公司服务器是em1,em2...我的虚拟机是ens33等等。实际应该以ifconfig命令和ip addr命令查看到的为准。
#ifconfig
if一下,如图所示静态ip已经设置成功
二、设置网卡的ip别名
#ifconfig eth0:0 192.168.6.100 netmask 255.255.255.0 up
#ifconfig eth0:1 173.173.173.173 netmask 255.255.255.0 up
#ifconfig eth0:2 119.110.120.1 netmask 255.255.255.0 up
......
eth0:x //虚拟网络接口,建立在eth0上,取值范围0-255
192.168.6.xxx //增加ip别名,想加多少就加多少~~
#ifconfig
设置完我们ifconfig一下看看,如图所示,增加的ip都已经生效了
#ping 192.168.6.100
#ping 173.173.173.173
#ping 119.110.120.1
然后在本机分别ping一下这几个ip,如图所示一路畅通~~
*注意:在设置ip别名时,如果增加的是和局域网同一网段的ip(如192.168.6.100),那么除了本机外局域网内其他机器都可以ping通这个ip。如果增加的是奇形怪状的ip,那么就只有本机可以ping通而已,后者主要用于本机测试需要。
三、保留网卡的ip别名信息
当我们汗流浃背的增加了n个ip,正准备大展拳脚进行项目测试时,突然~~停电了...xx@#$%,转眼月上枝头,好不容易来电了打开电脑一看,傻了~~刚刚增加的ip全没了???
原来当系统重启后,所有的ip别名都会丢失...rpwt...xx$#%@
基于linux这个特点,所以如果需要长时间使用ip别名,最好将别名信息保存起来,一般方法有两个,如下:
1.将增加ip别名的命令填写到/etc/rc.local文件中(不推荐)
即将所有如这样ifconfig eth0:0 192.168.6.100 netmask 255.255.255.0 up的命令一行行全部填写到rc.local文件中去,rc.local文件是作用于linux开机自动执行命令,详细用法g或b一下,这里不详细说明。
这个方法最方便,但不太可靠,有时会失灵。
2.手动编写ip别名的网卡配置文件(推荐)
所有网卡的配置文件都保存在/etc/sysconfig/network-scripts目录中,一个网卡对应一个配置文件,如图:
文件ifcfg-eth0就是本机网卡的配置文件,我们可以通过仿照这个文件的格式来编写其他ip别名的配置文件。
#vi ifcfg-eth0
打开网卡的配置文件,将里面所有字段复制一下
#vi ifcfg-eth0:0
创建eth0:0的配置文件,并将刚才复制的字段粘贴到这个配置文件,按照下文的介绍修改部分信息,修改完成后保存退出
以下是网卡配置文件的部分信息说明,其他类似信息默认即可:
##############################################################################
# 3Com Corporation 3c905B 100BaseTX [Cyclone] //硬件型号,忽略不计
DEVICE=eth0:0 //虚拟网络接口,eth0:0与文件名相符
ONBOOT=yes //系统启动时激活
BOOTPROTO=static //使用静态ip地址
IPADDR=192.168.6.100 //该虚拟网络接口的ip别名,随意
NETMASK=255.255.255.0 //子网掩码,对应ip别名
GATEWAY=192.168.6.1 //网关,对应ip别名
HWADDR=00:10:5A:5E:B1:E4 //网卡MAC地址,无需更改,与实体网卡保持一致
USERCTL=no //是否给予非root用户设备管理权限
##############################################################################
其他ip别名的配置文件大同小异,纯粹体力活~~
这个方法最繁琐,但又是最可靠,唉,人生就是这样,永远不得两全其美~~
四、清除ip别名
#ifconfg eth0:0 down
#ifconfg eth0:1 down
#ifconfg eth0:2 down
......
很简单吧...无需多解释。重启所有网卡的命令:service network restart
五、firecat亲自实践,我使用虚拟机桥接网络模式,
[root@localhost ~]# ifconfig ens33:0 172.16.6.162 netmask 255.255.255.0 up
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.6.161 netmask 255.255.255.0 broadcast 172.16.6.255
inet6 fe80::2176:1363:975e:6c17 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:b9:7b:31 txqueuelen 1000 (Ethernet)
RX packets 43636 bytes 4482547 (4.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 587 bytes 65621 (64.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.6.162 netmask 255.255.255.0 broadcast 172.16.6.255
ether 00:0c:29:b9:7b:31 txqueuelen 1000 (Ethernet)
[root@localhost ~]# netstat -nalp|grep 1883
tcp 0 0 172.16.6.161:1883 0.0.0.0:* LISTEN 6977 /epltest
tcp 0 0 172.16.6.162:1883 0.0.0.0:* LISTEN 7002/epltest
所有网卡的配置文件都保存在/etc/sysconfig/network-scripts目录中,但是firecat发现这种方法在虚拟机下有些奇怪现象:
(1)、ifconfig看到的网卡是ens33,但是我在/etc/sysconfig/network-scripts目录下又找不到ifcfg-ens33文件,倒是有这个文件:
ifcfg-Wired_connection_1,里面记录了ens33的网络信息。
(2)、这个掉电保存网卡信息的方法2对虚拟机不好使,建议看下一篇博客的方法。
六、ifconfig详解
ifconfig配置网络接口语法:
ifconfig 网络端口 IP地址 hw MAC地址 netmask 掩码地址 broadcast 广播地址 [up/down]
ifconfig常用用法:
ifconfig : 查看主机激活状态的网络接口情况; 输出结果中:lo 是表示主机的回坏地址,eth0 表示第一块网卡, 其中 HWaddr 表示网卡的物理地址(MAC地址); inet addr 用来表示网卡的IP地址,Bcast表示广播地址,Mask表示掩码地址
ifconfig -a : 查看主机所有(包括没有被激活的)网络接口的情况
ifconfig eth0 : 查看特定网络接口的状态
ifconfig eth0 down = ifup eth0 : 如果eth0是激活的,就把它终止掉。此命令等同于 ifdown eth0;
ifconfig eth0 up = ifdown eth0 : 激活eth0 ; 此命令等同于 ifup eth0
ifconfig eth0 192.168.1.99 broadcast 192.168.1.255 netmask 255.255.255.0 : 配置 eth0的IP地址、广播地址和网络掩码;
ifconfig eth0 192.168.1.99 broadcast 192.168.1.255 netmask 255.255.255.0 up : 配置IP地址、网络掩码、广播地址的同时,激活网卡eth0
ifconfig eth1 hw ether 00:11:00:00:11:22 : 设置网卡的物理地址(MAC地址)。其中 hw 后面所接的是网络接口类型, ether表示以太网, 同时也支持 ax25 、ARCnet、netrom等,详情请查看 man ifconfig ;
用ifconfig 来配置虚拟网络接口:
有时我们为了满足不同的需要还需要配置虚拟网络接口,比如我们用不同的IP地址来架运行多个HTTPD服务器,就要用到虚拟地址;这样就省却了同一个IP地址,如果开设两个的HTTPD服务器时,要指定端口号。
虚拟网络接口指的是为一个网络接口指定多个IP地址,虚拟接口是这样的 eth0:0 、 eth0:1、eth0:2 ... .. eth1N。当然您为eth1 指定多个IP地址,也就是 eth1:0、eth1:1、eth1:2 ... ...以此类推;
ifconfig eth1:0 192.168.1.250 hw ether 00:11:00:00:11:44 netmask 255.255.255.0 broadcast 192.168.1.255 up
ifconfig eth1:1 192.168.1.249 hw ether 00:11:00:00:11:55 netmask 255.255.255.0 broadcast 192.168.1.255 up
注意:指定时,要为每个虚拟网卡指定不同的物理地址;
七、原理,说白了就是别名,仍然指向同个物理网卡,MAC地址相同,IP地址不同
虚拟IP技术在高可用领域像数据库SQLSERVER、web服务器等场景下使用很多,很疑惑它是怎么实现的,偶然,发现了一种方式可以实现虚拟ip。它的原理在于同一个物理网卡,是可以拥有多个ip地址的,至于虚拟网卡,也可用通过该方式拥有多个ip。 即对外提供数据库服务器的主机除了有一个真实IP外还有一个虚IP,使用这两个IP中的 任意一个都可以连接到这台主机,所有项目中数据库链接一项配置的都是这个虚IP,当服务器发生故障无法对外提供服务时,动态将这个虚IP切换到备用主机。其实现原理主要是靠TCP/IP的ARP协议。因为ip地址只是一个逻辑地址,在以太网中MAC地址才是真正用来进行数据传输的物理地址,每台主机中都有一个ARP高速缓存,存储同一个网络内的IP地址与MAC地址的对应关系,以太网中的主机发送数据时会先从这个缓存中查询目标IP对应的MAC地址,会向这个MAC地址发送数据。操作系统会自动维护这个缓存。这就是整个实现 的关键。
---
参考文章:
linux配置虚拟IP地址
Linux-eth0 eth0:1 和eth0.1关系、ifconfig以及虚拟IP实现介绍