吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3824|回复: 30
收起左侧

[其他原创] Linux一键简单配置永久生效IP地址脚本

  [复制链接]
hoochanlon 发表于 2023-3-4 09:34

缘起

我自己了解Linux的时间也不长,大概就最近阿里云和腾讯云白嫖的两月左右,略有一点语言基础与了解。从我自己的体验来看,Linux各项配置挺繁琐、容错率低,加上设置IP可算的上常用项了。

一开始上就“vi /etc/sysconfig/network-scripts/ifcfg-eth0”,各项配置甩手扑面,对新手来说,我是觉得有些强人所难了一些。

为此,我也做了一次一键简单配置IP脚本前做了个小调研,大家对Linux的IP配置是否觉得操作不便,上手不易?(出处: 吾爱破解论坛)

以我个人最近查阅资料所获得的经验来看,感觉很轻松的,多数是较为老手的。对 network-scripts/ifcfg-eth0 比较熟,或者对nmcil做过功课与了解。

准备工作

Linux 网卡配置比对

  • 如果同时设置了动态获取IP和静态IP,那么静态IP将不再有效。系统会优先使用动态获取IP的配置。(试验机CentOS 8)
  • bootp 是一种比较老的协议,几乎已经过时了,dhcp 是 bootp 的一种扩展,与 bootp 兼容。
  • none 不禁用网卡,暂时也不用静态IP,如果指定静态IP就用静态的,我想是特殊装机环境。

系统出厂的ifconfig-eth0初始配置如下:


BOOTPROTO=dhcp 协议类型: dhcp bootp none
HWADDR=52:54:00:35:3a:ac mac地址
ONBOOT=yes 启动时是否激活 yes | no
PERSISTENT_DHCLIENT=yes 持久化选项,持续响应DHCP获取IP yes|no|1|0 
TYPE=Ethernet 网卡类型为以太网
USERCTL=no 是否允许非root用户控制该设备 yes/no

nmcil添加IP、掩码、网关后,ifconfig-eth0生成的后续额外项

PROXY_METHOD=none 代理关闭
BROWSER_ONLY=no 代理只限于浏览器?yes or no
IPADDR=172.24.10.150
PREFIX=24 也可以写为(METMASK=255.255.255.0但是二者一般只写其中的一种)
GATEWAY=172.24.10.100
DNS1=172.24.10.254
DNS2=172.24.10.253
DEFROUTE=yes 默认路由开启,数据包的出口。
IPV4_FAILURE_FATAL=no 关闭错误检测
IPV6INIT=no ipv6关
IPV6_DEFROUTE=yes 开启ipv6默认路由设置
IPV6_FAILURE_FATAL=no 关闭错误检测
NAME="System eth0" 标识网络设备名称 (基于nmcil管理)
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 唯一表示码,可通过uuidgen eth0 生成

推测与分析

我在实验过程中发现 nmcli con mod "System eth0" ip4 10.10.10.10/24 gw4 10.10.10.1 重复输入几次的话,会一个网卡绑定多个IP。查阅51cto-快速上手Apache:如果一台服务器有多个IP地址,而且每个IP地址与服务器上部署的每个网站一一对应,这样当用户请求访问不同的IP地址时,会访问到不同网站的页面资源。 再配置一遍动态DHCP时,难怪我就理解了,centos8只要存在DHCP项,下面的静态配置就失去了效果。

nmcli con mod "System eth0" ip4 10.10.10.10/24 gw4 10.10.10.1这条命令非常“智能”,我在实验过程中删掉了所有静态IP,在没重置网络的情况下,是能迅速恢复所有之前加入过的一条条静态IP配置的;反之,网络重载,就初始化了。

实际上多出来的这些参数是默认的,我们只保留 IPADDR、METMASK、GATEWAY、DNS2、DNS1 就好了。此外,Linux的网驱命名,NAME键值eth0可改为其他的命名,更改文件:/etc/udev/rules.d/70-persistent-net.rules

成形代码与效果图

基本上都是边学习,边分析的写代码,所以注释会很多。写源码时的网卡配置比对工作与查阅的资料,我单独从注释里拎出来,也方便大家查阅。

附源码: https://github.com/hoochanlon/ihs-simple/blob/main/d-shell/study_nmcil2.sh


# **************调试代码************************
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
# nmcli c mod "System eth0" \
# ip4 172.24.10.150/24 \
# gw4 172.24.10.100 \
# ipv4.dns 172.24.10.254 \
# ipv4.method manual autoconnect yes

# rm -rf ~/.ssh/known_hosts && rm -rf ~/.ssh/known_hosts.old
# echo "192.168.0.1 255.255.255.0 192.168.0.11" > ${HOMEPATH}add_ip_net.txt
# echo "192.168.0.1,255.255.255.0,192.168.0.11" > ${HOMEPATH}add_ip_net.txt
# echo "192.168.0.1/24 192.168.0.11" > ${HOMEPATH}add_ip_net.txt
#************************************************

#********** 开始配置 network-scripts/ifcfg-eth0 *******************
echo -e "注意,该脚本适用于个人便利性及新手使用。 \n"

# 原则上是适配centos 8的,为了一定程度上的便利,将从network manager抓取设备名。
# 获取首行的网卡设备,提取到网卡设备别名。
# ifconfig -s、netstat -i 显示网卡清单
# nmcli device |awk 'NR==2{print $4,$5,$6}'

a_eth=$(nmcli device |awk 'NR==2{print $1}')

# sed 检查文本是否存在关键字,有则删除行
sudo sed -i '{/IPADDR=/d;/GATEWAY=/d;/PREFIX=/d;/METMASK=/d;}' "/etc/sysconfig/network-scripts/ifcfg-$a_eth"
# sed 匹配 “BOOTPROTO=dhcp”,整行替换
sudo sed -i 's/BOOTPROTO=dhcp/BOOTPROTO=none/g' "/etc/sysconfig/network-scripts/ifcfg-$a_eth"

echo -e "支持 192.168.0.1/24 格式,可空格或逗号分段:IP 子网掩码 网关 \n"
read -p "请输入IP、子网掩码、网关: " add_ip_net

# 传入到文本进行分割取值
echo "$add_ip_net" > ${HOMEPATH}add_ip_net.txt

if [ ! "$(cat ${HOMEPATH}add_ip_net.txt|grep '/')" ]; then

a_ip=$(cat ${HOMEPATH}add_ip_net.txt|awk -F "[, ' ']" '{print $1}')
a_mask=$(cat ${HOMEPATH}add_ip_net.txt|awk -F "[, ' ']" '{print $2}')
a_gateway=$(cat ${HOMEPATH}add_ip_net.txt|awk -F "[, ' ']" '{print $3}')

# 插入
sudo echo "

IPADDR=$a_ip
METMASK=$a_mask
GATEWAY=$a_gateway

" >> "/etc/sysconfig/network-scripts/ifcfg-$a_eth"

else

a_ip=$(cat ${HOMEPATH}add_ip_net.txt|awk -F "[, / ' ']" '{print $1}')
a_prefix=$(cat ${HOMEPATH}add_ip_net.txt|awk -F "[, / ' ']" '{print $2}')
a_gateway=$(cat ${HOMEPATH}add_ip_net.txt|awk -F "[, / ' ']" '{print $3}')

# 插入
sudo echo "
IPADDR=$a_ip
PREFIX=$a_prefix
GATEWAY=$a_gateway
" >> "/etc/sysconfig/network-scripts/ifcfg-$a_eth"

fi

rm -rf ${HOMEPATH}add_ip_net.txt
systemctl restart network
echo "修改成功。小推荐:yum install -y ipcalc (子网掩码换算器)"
echo '若将网络设置成自动获取,输入此条指令即可:nmcli con mod "System eth0" ipv4.method auto'
echo '若后续添加DNS,输入该指令生效:nmcli c mod "System eth0" ipv4.dns 1.1.1.1,223.5.5.5'

效果图

参考资料

网络配置,主要集中于对nmcil的理解

文本处理

免费评分

参与人数 6吾爱币 +6 热心值 +4 收起 理由
junjia215 + 1 + 1 用心讨论,共获提升!
anzidada + 1 + 1 我很赞同!
iStevenShum + 1 用心讨论,共获提升!
Bob5230 + 1 谢谢@Thanks!
zhczf + 1 我很赞同!
末初 + 2 + 1 thank you!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| hoochanlon 发表于 2023-3-4 17:28
lxyhslx 发表于 2023-3-4 17:00
学习了  centos7可以用吗

配置静态IP可以用。不过网络调度方面,我之前参考了如下这篇资料,还是有些区别。

csdn-Linux系统中手动配置IP地址(CentOS 7、8为例) 引用

centos8里,当BOOTPROTO=dhcp的时候,会动态获得ip地址,如果下面也静态指定了ip地址,也会生效
centos7里,当BOOTPROTO=dhcp的时候,会动态获得ip地址,如果下面也静态指定了ip地址,不会生效

结合51cto-快速上手Apache提到过的Linux绑定多个IP指向不同网址的信息。我对如上这段话的描述,我的理解是,设置成动态IP也OK,但不能绑多个IP了。cent OS8则是可以再绑定多个IP。

最后的结果还得实机环境检测才知道,我现在也只是推论。

 楼主| hoochanlon 发表于 2023-3-4 16:58
rhci 发表于 2023-3-4 16:41
学习了,正在看ubuntu怎么一个脚本改掉IP

看你是桌面版还是服务器版,据我了解,服务器版的ubantu,需要额外安装network manager包,桌面版自带就有。

安装

sudo apt-get install network-manager 

开启自启接管并启动。

sudo systemctl enable NetworkManager.service  && sudo systemctl start NetworkManager.service 
mngzs 发表于 2023-3-4 10:48
山丁 发表于 2023-3-4 10:54

研究了很久这个问题,原来如此
头像被屏蔽
tl;dr 发表于 2023-3-4 10:57
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| hoochanlon 发表于 2023-3-4 11:23

可以改啊。而且我特意把ifconfig-eth0弄成了灵活的字符串变量,只要有network manager这个包,Linux各类的发行版都能改。
jway 发表于 2023-3-4 11:50
楼主应该是个做事很细心的人
adf28 发表于 2023-3-4 12:13
这个我没学习过,涨见识了
dujiu3611 发表于 2023-3-4 12:24
感谢分享,这个方便了啊,学习了,收藏。
 楼主| hoochanlon 发表于 2023-3-4 12:24
jway 发表于 2023-3-4 11:50
楼主应该是个做事很细心的人

谢谢夸奖。这方面扣的比较细点吧,主要是没理清network- scripts/ifconfig-eth0的各种配置,也确实不好弄。
kjwl 发表于 2023-3-4 14:06
感谢分享,这个方便了啊,学习了,收藏。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表