最近阿里云和騰訊云白嫖的兩月左右,略有一點語言基礎與了解。Linux各項配置挺繁瑣、容錯率低,加上設置IP可算的上常用項了。
各項配置甩手撲面,對新手來說,我是覺得有些強人所難了一些。為此,站長圖庫做了一次一鍵簡單配置IP腳本前做了個小調研,大家對Linux的IP配置是否覺得操作不便,上手不易?(出處: 吾愛破解論壇)。
準備工作
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
成形代碼與效果圖
基本上都是邊學習,邊分析的寫代碼,所以注釋會很多。寫源碼時的網卡配置比對工作與查閱的資料,我單獨從注釋里拎出來,也方便大家查閱。
# **************調試代碼************************ # 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'