服务器IP配置功能实现小结
1. 服务器网卡配置文件
/etc/sysconfig/network/ifcfg-***(eth0)
linux-f1s9:/etc/sysconfig/network # cat ifcfg-eth0
BOOTPROTO='static'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR='10.148.128.200/24'
MTU=''
NAME='Broadcom Ethernet controller'
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
USERCONTROL='no'
配置说明:
BOOTPROTO=static 网卡获得ip地址的方式
Static(静态 ip地址)
dhcp(通过dhcp协议获取ip)
bootip通过bootp协议获得的ip地址
BROADCAST=192.168.0.255 子网广播地址
HWADDR=:::8E::EE 网卡物理地址
IPADDR=12.168.1.117 网卡IP地址
IPV6INIT=no 是否启用IPV6
IPV6_AUTOCONF=no
NETMASK=255.255.255.0 网卡对应网络掩码
NETWORK=192.168.1.0 网卡对应的网络地址
ONBOOT=yes 系统启动时是否设置此网络接口,设置为yes时,系统启动时激活此设备。默认设置为yes
备注:IP netmask有以下两种写法:
1. IPADDR='10.148.128.200/24' (合并)
2. IPADDR='10.148.128.200' NETMASK=255.255.255.0 (分开)
如果两种写法都存在,'10.148.128.200/24' 方式优先级更高。
2. 后台Shell脚本
2.1 获取IP信息
此处是通过ifconfig -a命令截取,当网卡名比较长的时候网卡名称实际上是显示不完整的。
#!/bin/bash
#########################################
#SCRIPT: getIPInfo.sh
#PLATFORM: Not platform dependent
#PURPOSE:获取网卡信息
#########################################
cd `dirname $`
ipinfo=host_ip_info.properties
logFile=/srv/ftpd/log/iptool.log
dealedCard="" function toInfoLog()
{
echo "$(date +%Y-%m-%d) $(date +%H:%M:%S) INFO:$@" >> $logFile
} if [ -f $ipinfo ]; then
rm -f $ipinfo
fi # 只显示网卡配置文件中的IP,不显示IP映射的监听IP。根据":v" 过滤,
netcards=`/sbin/ifconfig -a | awk '/Link encap:Ethernet/{print $1}'|grep -v ":v"`
for ncard in ${netcards}
do
flag=$(echo ${dealedCard}|grep ${ncard})
if [ "X$flag" != "X" ]
then
toInfoLog "read same netcard $ncard."
continue
fi
dealedCard="${dealedCard} $ncard"
# web界面无法显示通过yast新增的IP地址(网卡名称过长)
ips=`/sbin/ifconfig -a |grep "${ncard} " -A | awk -F: '/inet addr:/{print $2}' | awk '{print $1}'`
masks=`/sbin/ifconfig -a |grep "${ncard} " -A | awk -F: '/Mask:/{print $4}'`
count=
for ip in $ips
do
count=`expr $count + `
mask=$(echo $masks |cut -d' ' -f $count)
toInfoLog "$ncard $ip/${mask}"
#记录网卡IP信息
echo "$ncard $ip/${mask}" >> $ipinfo
done done
2.1 虚拟IP新增/删除操作
#!/bin/bash
#########################################
#SCRIPT: config_sysvirtual_ip.sh
#PLATFORM: Not platform dependent
#PURPOSE: [新增]或[删除]虚拟ip
#参数列表: $ 操作类型(add|del)
# $ 虚拟ip
# $ 掩码(例:)
# $ 网卡名
#例如:./config_sysvirtual_ip.sh mode 10.10.10.1 (255.255.255.0) eth0
#########################################
FULL_PATH=$
PATH_BIN=${FULL_PATH%%/config_sysvirtual_ip.sh*}
cd $PATH_BIN mode=$;
ip=$;
mask=$
netcard=$;
net_name=`echo $netcard|awk -F: '{print $1}'`
logFile=/srv/ftpd/log/iptool.log function toInfoLog()
{
echo "$(date +%Y-%m-%d) $(date +%H:%M:%S) INFO:$@" >> $logFile >&
} function toErrorLog()
{
echo "$(date +%Y-%m-%d) $(date +%H:%M:%S) ERROR:$@" >> $logFile >&
} # function get_netfile()
# {
# netcard=$
# net=`echo $netcard|awk -F: '{print $1}'`
# netdir="/etc/sysconfig/network"
# netfile="$netdir/ifcfg-$net"
# echo $netfile
# } function get_newlable()
{
tmp_lable=;
flag=;
#web添加的label号可能与YAST修改过的别名冲突。
#lable_list=`cat $net_cfgfile| grep LABEL|awk -F= '{print $2}'| awk -F\' '{print $}'`
lable_list=`cat $net_cfgfile| grep LABEL|awk -F= '{print $1}'| awk -F_ '{print $2}'` if [ -z "$lable_list" ]; then
new_lable=;
flag=;
else
for lable in $lable_list; do
if [ $lable -ge $tmp_lable ]; then
tmp_lable=$lable;
fi
done
fi
if [ $flag -eq ];then
new_lable=$(($tmp_lable+))
fi
echo "$tmp_lable $lable_list"
echo "new virtual ip_lable =$new_lable"
} function valid_ip()
{
for used_ip in `ifconfig | awk -F'addr:|Bcast' '/Bcast/{print $2}'`; do
if [ $used_ip = "$ip" ]; then
echo "exited ip $ip"
exit
fi
done
echo "valid ip"
} function add_ip()
{
valid_ip;
get_newlable;
if [ $? -eq ]; then
echo "exited ip"
exit
fi /sbin/ifconfig $net_name:$new_lable $ip_mask
if [ $? -eq ]; then
sed -i "$ a\LABEL_$new_lable='w$new_lable'" $net_cfgfile
sed -i "$ a\IPADDR_$new_lable='$ip_mask'" $net_cfgfile
echo "set virtual ip $ip_mask to $net_name:$new_lable"
/sbin/rcnetwork restart $net_name
else
echo "Wrong parameters"
exit ;
fi
} function del_ip()
{
#grep \'${ip}[\/\'] IP之后以\或'结尾。兼容IPADDR_1='3.3.3.3/24' 和IPADDR_1='3.3.3.3'
lable=`cat $net_cfgfile|grep \'${ip}[\/\']| awk -F= '{print $}'|awk -F_ '{print $}'`
if [ -n "$lable" ];then
#LABEL_X='Y' 通过yast操作过以后X会重排,X和Y不一定相等。其次IPADDR_label ip/mask不一定是在一行。
sed -i "/^ *LABEL_$lable=/d" $net_cfgfile;
sed -i "/IPADDR_$lable='$ip/d" $net_cfgfile;
# 删除对应可能存在的NETMASK行
sed -i "/NETMASK_$lable='/d" $net_cfgfile;
echo "delet ip: ${net_name}:w${lable} ${ip_mask}. rntCode=$?"
/sbin/rcnetwork restart $net_name
else
echo "Cannot del:no exits valid ip"
exit ;
fi
} # begin
# 校验IP和netmask有效性 ,略 net_cfgfile="/etc/sysconfig/network/ifcfg-$net_name"
ip_mask=$ip/$mask
new_lable=; if [ $# -eq -a -f $net_cfgfile ]; then
if [ $mode = "add" ];then
toInfoLog "add ip begin"
add_ip $mode $ip $long_mask $net_name >> $logFile >&
elif [ $mode = "del" ];then
toInfoLog "delete ip begin"
del_ip $mode $ip $long_mask $net_name >> $logFile >&
else
toErrorLog "Usage. $0 <add|del> <ip> <netmask> <netcard>"
exit ;
fi
else
toErrorLog "Usage. $0 <add|del> <ip> <netmask> <netcard>"
exit ;
fi
2.2 IP修改操作
修改操作可能会影响原有业务,除了修改网卡配置文件之外,还需要同步更新相关操作系统文件(如:/etc/hosts,/etc/ssh/sshd_config, /etc/vsftpd.conf等文件)中该IP信息。
入口:
#!/bin/bash
#########################################
#SCRIPT: modIPInfo.sh
#PURPOSE:修改IP
#########################################
FULL_PATH=$
PATH_BIN=${FULL_PATH%%/modIPInfo.sh*}
cd $PATH_BIN # 记日志统一格式输出
function toInfoLog()
{
echo "$(date +%Y-%m-%d) $(date +%H:%M:%S) INFO:$@"
} # 备份文件
function backup_proc()
{
toInfoLog "backup files begin..."
backup_restore_file backup $netcard
} # 回退文件
function restore_proc()
{
# 恢复文件即可。
backup_restore_file restore $netcard
#modify_proc $netcard $oldIp $oldmask $newIp $newmask
} # 修改IP
function modify_proc()
{
toInfoLog "modify_proc begin"
# 更新操作系统相关文件 目前只有/etc/hosts
modify_OS_file $oldIp $newIp
# 更新网卡配置文件
modify_net_file $netcard $newIp $newmask $oldIp $oldmask
} # main
function modifiyIP()
{
toInfoLog "mode ip begin"
backup_proc
modify_proc
if [ $? -ne ];then
toInfoLog "modify_net_file failed,restore ip."
restore_proc $netcard $oldIp $oldmask $newIp $newmask
exit
fi
toInfoLog "modifiyIP $newIp success."
} # begin
if [ $# -ne ]
then
echo "Usage. $0 <netcard> <newIp> <newmask(24)> <oldIp> <oldmask(24)>"
exit
fi
netcard=$
newIp=$
newmask=$
oldIp=$
oldmask=$ log_file=/srv/ftpd/log/iptool.log . /opt/tool/iptool/modIPInfoUtil.sh
modifiyIP >> ${log_file} >&
修改方法
#!/bin/bash
#########################################
#SCRIPT: modIPInfoUtil.sh
#PLATFORM: Not platform dependent
#PURPOSE: 修改IP
#参数列表:
#params:netcard newip newmask oldip oldmask
######################################### filebackupPath=/opt/tool/iptool # 记日志统一格式输出
function toInfoLog()
{
echo "$(date +%Y-%m-%d) $(date +%H:%M:%S) INFO:$@"
}
function toErrorLog()
{
echo "$(date +%Y-%m-%d) $(date +%H:%M:%S) ERROR:$@"
} function bak_restore_file()
{
mode=$
filename=$
if [ $# != ];then
toErrorLog "bak_restore_file params number error"
exit
fi
fileabs=$(echo $filename |awk -F/ '{print $NF}')
filebackup=${filebackupPath}/${fileabs}_lastBak
if [ $mode = "backup" ];then
if [ -f "${filename}" ];then
cp -rfp $filename $filebackup
if [ $? = ];then
toInfoLog "backup $filename success"
else
toErrorLog "backup $filename fail"
exit
fi
fi
elif [ $mode = "restore" ];then
if [ -f "$filebackup" ];then
cp -rfp $filebackup $filename
if [ $? = ];then
toInfoLog "restore $filename success"
else
toErrorLog "restore $filename fail"
exit
fi
fi
fi } function get_netfile()
{
netcard=$
net=`echo $netcard|awk -F: '{print $1}'`
netdir="/etc/sysconfig/network"
netfile="$netdir/ifcfg-$net"
echo $netfile
} function bak_restore_OS_file()
{
mode=$
netcard=$
#备份网卡信息
netfile=`get_netfile $netcard`
toInfoLog "netfile= $netfile"
bak_restore_file $mode $netfile bak_restore_file $mode /etc/hosts
# bak_restore_file $mode /etc/vsftpd.conf #备份dns文件
# bak_restore_file $mode /etc/resolv.conf
# bak_restore_file $mode /etc/named.conf
} function backup_restore_file()
{
mode=$
netcard=$
bak_restore_OS_file $mode $netcard
} #判断ip是否存在,exist——存在,notexist——不存在
function check_file_status()
{
file=$
ip=$
filter=`cat $file|grep $ip` if [ "X$filter" != "X" ];then
echo "exist"
else
echo "notexist"
fi
} #文件存在ip才进行替换,替换后判断新ip是否存在,不存在替换失败
function replaceIP()
{
oldIp=$
newIp=$
file=$
result=`check_file_status $file $oldIp` toInfoLog "replaceIP $file $oldIp $result"
if [ $result = "exist" ];then
toInfoLog "replaceIP $file oldIp=$oldIp ,newIp=$newIp "
sed -i 's/'${oldIp}'/'${newIp}'/g' $file
result=`check_file_status $file $newIp`
if [ $result = "notexist" ];then
toErrorLog "replace $file $oldIp to $newIp failed"
return
fi
fi
} function modify_net_file()
{
netcard=$
newIp=$
newmask=$
oldIp=$
oldmask=$ #备份网卡信息
netfile=`get_netfile $netcard` result=`check_file_status $netfile \'${newIp}[\/\']`
if [ $result = "exist" ];then
toErrorLog "newIp ${newIp} aready exist, modip failed"
return
fi new_ip_mask=${newIp}\/${newmask}
toInfoLog "new_ip_mask=$new_ip_mask ,old_ip_mask=${oldIp}/${oldmask}"
# 替换匹配模式兼容IP/mask 和IP、mask分行(预装环境)的情况 .'${oldIp}[\/\'].* 精确匹配,以防误修改。
sed -i "s/'${oldIp}[\/\'].*/'${newIp}\/${newmask}'/g" $netfile
result=`check_file_status $netfile $new_ip_mask`
if [ $result = "notexist" ];then
toErrorLog "replace ip failed"
return
fi
toInfoLog "replace ip ok. network restart..."
net=`echo $netcard|awk -F: '{print $1}'`
/sbin/rcnetwork restart $net
} #查找文件是否存在ip
check_OS_file()
{
ip=$
check_file_status /etc/ssh/sshd_config $ip
check_file_status /etc/hosts $ip
check_file_status /etc/my.cnf $ip
check_file_status /etc/vsftpd.conf $ip
#dns
check_file_status /var/lib/named/tdtech.com $ip
check_file_status /etc/resolv.conf $ip
check_file_status /etc/named.conf $ip
} # 修改IP时更新sshd_config对应IP 暂不用
function modify_OS_file()
{
oldIp=$
newIp=$
replaceIP $oldIp $newIp /etc/hosts
#sshd 暂不涉及
# replaceIP $oldIp $newIp /etc/ssh/sshd_config
# if [ -n "`service sshd status |grep running`" ]
# then
# service sshd restart
# fi #vsftp 暂不涉及
# replaceIP $oldIp $newIp /etc/vsftpd.conf
# if [ -n "`service vsftpd status |grep running`" ]
# then
# service vsftpd restart
# fi #db 暂不涉及
# replaceIP $oldIp $newIp /etc/my.cnf
# /opt/UBP/bin/modifydb_ip.sh $oldIp $newIp #dns
# replaceIP $oldIp $newIp /var/lib/named/tdtech.com
# replaceIP $oldIp $newIp /etc/resolv.conf
# replaceIP $oldIp $newIp /etc/named.conf
}
2.3 修改网关
比较简单,根据传入的参数更新文件/etc/sysconfig/network/routes并重启网卡。
#!/bin/bash
#########################################
#SCRIPT: updateGateway.sh
#PLATFORM: Not platform dependent
#PURPOSE: 修改Gateway
#参数列表:
#########################################
FULL_PATH=$
PATH_BIN=${FULL_PATH%%/updateGateway.sh*}
cd $PATH_BIN oldGateWay=$
gatewayAddr=$
gatewayfile=/etc/sysconfig/network/routes
Logfile=IPConfig.log function toInfoLog()
{
echo "$(date +%Y-%m-%d) $(date +%H:%M:%S) INFO:$@" }
function toErrorLog()
{
echo "$(date +%Y-%m-%d) $(date +%H:%M:%S) ERROR:$@"
}
#检查
function checkGateway()
{
if [ "X${gatewayAddr}" = "X" ]
then
toErrorLog "gatewayAddr null."
exit
fi
if [ "${oldGateWay}" = "${gatewayAddr}" ]
then
echo "mod gatewayAddr is same as before."
exit
fi
} function modGateway()
{
checkGateway
toInfoLog "begin update gateway."
# 备份
cp ${gatewayfile} ${gatewayfile}_bak
cat ${gatewayfile} >> ${Logfile}
# 修改
echo "default ${gatewayAddr} - -" > ${gatewayfile}
if [ $? -ne ]
then
cp ${gatewayfile}_bak ${gatewayfile}
toErrorLog "update ${gatewayfile} failed."
exit
fi
# 重启
service network restart
if [ $? -ne ]
then
cp ${gatewayfile}_bak ${gatewayfile}
service network restart
toErrorLog "update ${gatewayfile} failed when restart."
exit
fi
toInfoLog "update gateway success. ${gatewayAddr}"
} modGateway >> ${Logfile} >&
3. 前端配置页面
为了方便配置,web页面中提供IP配置功能,后台配置的修改由上述Shell脚本完成。
服务器IP配置功能实现小结的更多相关文章
- 配置DNS服务器IP
#############################脚本功能及说明#################### #该脚本用来在本地服务器上配置DNS服务器IP #创建时间:2014-10-22 ## ...
- 一个服务器上面配置多个IP ,实现指定IP的域名请求
//配置多个IP命名using System.Net; //********************************************************************** ...
- 主流品牌服务器(Dell、HP、IBM)远程管理卡IP配置参考
版权声明:个人网络收集整理,欢迎转载! https://blog.csdn.net/niufenger/article/details/80737878 ※Dell服务器iDRAC IP配置 ※HP服 ...
- 【Linux服务器双IP配置】如何实现不同IP的双网卡同时上网?
一.环境和知识预备 我遇到问题的生产机器是CentOS release 6.8系统,不过这并不影响问题的解决,本质上都是一样的. 网关:一个网络连接到另一个网络的关口,也就是实现网络互连,俗称网络连接 ...
- Windows服务器无法配置IP
前天在给一台服务器配置IP地址的时候发现一个奇怪的问题.IP地址配置之后不生效,还是使用的169.254这个微软保留自动分配地址.由于这个是一台虚拟机,尝试了删除添加网卡也没有用.配置IP不成功的时候 ...
- 新版raspbian系统的固定IP配置和启用root账户的ssh登录功能的方法
1. 2016新版raspbian系统的固定IP配置: 自2016年2月份新版raspbian系统发布以后,树莓派的固定IP配置方法就与之前不一样了. 之前在raspbian系统中编辑/etc/net ...
- Nginx服务器中配置非80端口的端口转发方法详解
这篇文章主要介绍了Nginx服务器中配置非80端口的端口转发方法详解,文中使用到了Nginx中的proxy_pass配置项,需要的朋友可以参考下 nginx可以很方便的配置成反向代理服务器: 1 2 ...
- NFS服务器+客户端配置
NFS:Network File System 使用NFS需要启用RPC(remoteprocedure call),RPC可以指定每个NFS功能所对应的端口号,重启RPC后,RPC所管理的所有NFS ...
- nginx入门篇----nginx服务器基础配置
1.nginx.conf文件结构... #全局块 events{ ... } http #http块{ ...
随机推荐
- Ubuntu18.04 安装搜狗拼音
参考文章:https://blog.csdn.net/fx_yzjy101/article/details/80243710 1. 安装fcitx sudo apt-get install fcitx ...
- Android开发 如何最优的在Activity里释放资源
前言 当前你已经入门Android开发,开始关注深入的问题,你就会碰到一个Android开发阶段经常碰到的问题,那就是内存泄漏. 其实大多数Android的内存泄漏都是因为activity里的资源释放 ...
- 学无止境,我爱python
每天更新.... python基础 python字符编码 python基础数据类型 python列表.元组 python字典 python字符编码unicode,utf-8,ascii python深 ...
- 解决Delphi 2010启动时卡死并报displayNotification堆栈溢出错误
1. 清理IE的历史记录,删除浏览器缓存(不需要清cookie) 2. 禁用startpage 2.1 从 Delphi 2010 启动菜单上点右键 -> 查看属性->快捷方式->目 ...
- echart数据的实时更新
- text-html 转译
var HtmlUtil = { 2 /*1.用浏览器内部转换器实现html编码(转义)*/ 3 htmlEncode:function (html){ 4 //1.首先动态创建一个容器标签元素,如D ...
- System.Web.Mvc.Filters.IAuthenticationFilter.cs
ylbtech-System.Web.Mvc.Filters.IAuthenticationFilter.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Cultu ...
- win7下mysql5.5与mysql5.6同时安装
5.5己正常的情况下,用官方下载的安装包总是不成功,用的官方解压版5.6.44 1.复制my-default.ini到my.ini,只需要改端口就行了,设置base-dir/data-dir反而无法启 ...
- iOS开发之SceneKit框架--SCNLight.h
1.SCNLight简介 用于添加光源,连接到一个节点照亮现场,可以给场景添加不同的灯光,模拟逼真的环境. 2.四种灯光的简介 添加一个box立方体.一个tube圆柱管道和一个地板floor,没有灯光 ...
- SSH整合时执行hibernate查询报错:java.lang.ClassCastException: com.ch.hibernate.Depart
今天在整合ssh三个框架时,有一个功能,是查询所有员工信息,且员工表和部门表是多对一的映射关系,代码能正常运行到查询得到一个List集合,但在页面展示的时候,就报异常了, java.lang.Clas ...