不重启networking的情况下设置静态IP

一般设置静态IP都是更改配置文件然后sudo service networking restart ,但是有些时候不方便重启networking服务(多网卡,并且其他网卡正在工作的情况下)。Google了一下发现其实不用重启networking也可以刷新IP,这里记录一下

本文环境为 Ubuntu 14.04

更改文件实现更改ip地址

首先更改/etc/network/interfaces

1
2
3
4
5
6
7
8
9
10
11
# Something
# 省略之前的回路iface等行,下面为实际变更的地方
auto eth0 # 更具自己情况更改对应的设备id
iface eth0 inet static
address 172.16.64.11 # 静态IP
netmask 255.255.255.0
# gateway xxx.xxx.xxx.xxx
# brodcast xxx.xxx.xxx.xxx
# dns-search example.com
# dns-nameservers 8.8.8.8
# 因为我只是单纯的内网集群,所以没有网管,请根据自己的实际情况更改。

然后依次执行

1
2
3
sudo ifconfig eth0 down
sudo ip addr flush eth0
sudo ifup eth0

然后执行 ip addr 检查是否正确分配了ip地址

这里为什么说一下关闭个启用网卡的时候用的是不同的方法,如果你之前的网卡是自动分配的ip地址,那么有可能你直接ifdown的话会提示你ifdown: interface eth0 not configured ,但这时候ifconfig是可以正确关闭网卡的。之后如果使用ifconfig来启动网卡,可能并不会正确的获取到ip地址,所以我ifup了网卡。

利用ifconfig直接更改

当然其实这里还有更加直接暴力的方法。!!!!!!!!!

1
sudo ifconfig eth1 xxx.xxx.xxx.xxx/xx

一步命令直接到位,其中 xxx.xxx.xxx.xxx/xx 前面是ip,后面是子网掩码,比如255.255.255.0 对应的是24,不过这里有个问题就是,这个ip地址是一次性的,重启之后就会消失,如果需要持久化的ip还是请使用第一种方法来更改ip

附赠一个实例,我这里有一个集群,我需要执行初始化脚本配置他们,其中集群的hostname已经被按照顺序命名好了,依次为node1,node2,node3……,在初始化脚本中,我通过下面的方法给每个node都配置了一个ip地址(node数量不多,所以我通过简单的开头加1的方法避开了网关地址)

1
2
index=$(echo ${HOSTNAME%%.*}|sed -r 's/^[^0-9]*([0-9]+).*/\1/')
sudo ifconfig eth1 172.16.4.1$index/24