IP漂移頻繁?一文教你固定靜態(tài)IP的完整方案)
1. 虛擬機(jī)IP漂移這件事到底卡住了多少人的開發(fā)節(jié)奏做本地開發(fā)環(huán)境的朋友尤其是跟著實戰(zhàn)項目練手的朋友大概率都遇到過這樣一個場景昨天還能正常連上的數(shù)據(jù)庫、緩存服務(wù)今天一開機(jī)連接超時了。打開配置文件一看IP地址還是昨天那個但虛擬機(jī)里的網(wǎng)卡已經(jīng)悄悄換了一個新地址。這種IP漂移現(xiàn)象在本地虛擬機(jī)環(huán)境中極其常見尤其是使用動態(tài)主機(jī)配置協(xié)議DHCP自動分配地址的時候。我自己在搭建本地開發(fā)環(huán)境時就被這個問題反復(fù)折磨過。項目里寫死了數(shù)據(jù)庫連接地址、緩存服務(wù)地址、消息隊列地址每次虛擬機(jī)重啟IP一變所有配置全部失效得挨個文件去改。更麻煩的是有些項目在代碼里硬編碼了服務(wù)地址改起來牽一發(fā)動全身。后來我下定決心把虛擬機(jī)網(wǎng)絡(luò)徹底改成靜態(tài)IP從此再也沒被這個問題困擾過。這篇文章就是把我踩過的坑、試過的方案、最終穩(wěn)定運行的配置方法完整梳理出來。不管你是剛接觸虛擬機(jī)的新手還是已經(jīng)用過一段時間但一直被IP變動困擾的開發(fā)者都能從里面找到可以直接抄作業(yè)的步驟。我會從網(wǎng)絡(luò)模式的選擇講起到具體配置文件的修改再到驗證和排錯把整個鏈路講透。核心目標(biāo)只有一個讓你的虛擬機(jī)IP固定下來不再漂移。2. 先搞清楚虛擬機(jī)網(wǎng)絡(luò)為什么會變來變?nèi)?.1 DHCP的工作機(jī)制與IP漂移的根源虛擬機(jī)IP變動的根本原因在于默認(rèn)網(wǎng)絡(luò)配置使用的是動態(tài)主機(jī)配置協(xié)議。這個協(xié)議的工作邏輯很簡單虛擬機(jī)啟動時向網(wǎng)絡(luò)中的DHCP服務(wù)器發(fā)送請求服務(wù)器從地址池里挑一個當(dāng)前空閑的IP分配給它同時給一個租期。租期到了或者虛擬機(jī)重啟如果原來的地址已經(jīng)被占用或者地址池策略有變化服務(wù)器就會分配一個新的地址。這個過程在物理機(jī)環(huán)境里通常感知不強(qiáng)因為路由器會盡量給同一臺設(shè)備分配同一個地址。但在虛擬機(jī)環(huán)境里尤其是使用網(wǎng)絡(luò)地址轉(zhuǎn)換模式或者僅主機(jī)模式時虛擬化軟件自帶的DHCP服務(wù)管理策略比較簡單地址池的分配順序、租期管理都不如企業(yè)級路由器那么聰明。所以虛擬機(jī)每次重啟拿到不同IP的概率相當(dāng)高。用一個生活化的類比DHCP就像去圖書館自習(xí)管理員隨機(jī)給你安排一個空座位。你今天坐3號桌明天去晚了3號桌有人了管理員就讓你坐7號桌。你的座位號變了別人按原來的座位號找你自然找不到。靜態(tài)IP就是你跟管理員申請了一個固定座位不管什么時候來那個座位都留給你。2.2 不同網(wǎng)絡(luò)模式下IP變動的表現(xiàn)差異虛擬機(jī)軟件通常提供三種網(wǎng)絡(luò)模式每種模式下IP變動的表現(xiàn)不太一樣網(wǎng)絡(luò)模式IP分配方式IP變動頻率適用場景橋接模式由物理網(wǎng)絡(luò)的路由器分配較低但重啟后可能變虛擬機(jī)需要被局域網(wǎng)其他設(shè)備訪問NAT模式由虛擬機(jī)軟件的虛擬DHCP分配較高重啟后經(jīng)常變虛擬機(jī)只需訪問外網(wǎng)不需要被外部訪問僅主機(jī)模式由虛擬機(jī)軟件的虛擬DHCP分配較高重啟后經(jīng)常變虛擬機(jī)與宿主機(jī)之間互相訪問從表格能看出來NAT模式和僅主機(jī)模式下IP變動最頻繁而這兩種模式恰恰是本地開發(fā)環(huán)境最常用的。橋接模式雖然相對穩(wěn)定但在某些網(wǎng)絡(luò)環(huán)境下比如公司網(wǎng)絡(luò)限制了MAC地址綁定也會出現(xiàn)變動。2.3 為什么開發(fā)環(huán)境對固定IP如此敏感有人可能會說IP變了重新查一下不就行了問題在于開發(fā)環(huán)境里大量配置文件、連接字符串、服務(wù)注冊地址都依賴這個IP。舉幾個典型場景數(shù)據(jù)庫連接配置里寫死了jdbc:mysql://192.168.xxx.xxx:3306/xxx緩存服務(wù)配置里寫死了spring.redis.host192.168.xxx.xxx項目里的Nginx反向代理配置指向了固定IP本地DNS解析或者h(yuǎn)osts文件里綁定了IP和域名的映射一旦IP變動這些配置全部失效輕則連接報錯重則整個項目跑不起來。每次改配置不僅浪費時間還容易漏改某個文件導(dǎo)致排查半天。所以把IP固定下來是一勞永逸解決這類問題的根本辦法。3. 動手之前先把這幾件事確認(rèn)清楚3.1 確認(rèn)虛擬機(jī)的網(wǎng)絡(luò)模式在修改任何配置之前第一件事是確認(rèn)當(dāng)前虛擬機(jī)用的是哪種網(wǎng)絡(luò)模式。打開虛擬機(jī)軟件的管理界面找到對應(yīng)虛擬機(jī)的網(wǎng)絡(luò)適配器設(shè)置看它連接的是哪個網(wǎng)絡(luò)。不同虛擬機(jī)軟件的界面叫法略有差異但核心信息是一樣的你需要知道虛擬機(jī)是通過哪種方式接入網(wǎng)絡(luò)的。這一步很關(guān)鍵因為不同網(wǎng)絡(luò)模式下靜態(tài)IP的配置范圍和網(wǎng)關(guān)地址完全不同。配錯了會導(dǎo)致虛擬機(jī)直接斷網(wǎng)連宿主機(jī)都連不上。我建議在修改之前先把當(dāng)前的網(wǎng)絡(luò)信息完整記錄下來包括IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)地址、DNS服務(wù)器地址。這些信息在后續(xù)配置靜態(tài)IP時都要用到。3.2 記錄當(dāng)前網(wǎng)絡(luò)參數(shù)避免配錯后無法回退在虛擬機(jī)里打開終端執(zhí)行查看網(wǎng)絡(luò)信息的命令。不同操作系統(tǒng)命令不同主流的兩類系統(tǒng)分別如下# 基于Red Hat系的系統(tǒng)如CentOS、Rocky Linux等 ip addr show ip route show cat /etc/resolv.conf # 基于Debian系的系統(tǒng)如Ubuntu、Debian等 ip addr show ip route show cat /etc/resolv.conf把輸出結(jié)果里的關(guān)鍵信息記下來網(wǎng)卡名稱通常是ens33、eth0、enp0s3這類名字每臺機(jī)器可能不同當(dāng)前IP地址比如192.168.xxx.xxx子網(wǎng)掩碼通常是255.255.255.0或者CIDR表示法/24默認(rèn)網(wǎng)關(guān)比如192.168.xxx.1或192.168.xxx.2DNS服務(wù)器比如114.114.114.114或8.8.8.8提示建議把當(dāng)前網(wǎng)絡(luò)配置截圖或者復(fù)制到宿主機(jī)上保存一份。萬一靜態(tài)IP配錯了導(dǎo)致虛擬機(jī)斷網(wǎng)還能對照著恢復(fù)回去。3.3 選定一個合適的靜態(tài)IP地址靜態(tài)IP不能隨便選要滿足兩個條件一是在當(dāng)前子網(wǎng)范圍內(nèi)二是不能和網(wǎng)絡(luò)中已有設(shè)備的IP沖突。通常的做法是選一個地址池邊緣的地址比如網(wǎng)段是192.168.xxx.0/24網(wǎng)關(guān)是192.168.xxx.2那你可以選192.168.xxx.200這種不太可能被DHCP分配到的地址。如果你不確定哪些地址已經(jīng)被占用可以在宿主機(jī)上ping幾個候選地址試試能ping通說明已被占用ping不通大概率是空閑的。更穩(wěn)妥的辦法是登錄到虛擬化軟件的管理界面查看DHCP地址池的分配范圍選一個地址池之外的地址。4. 主流Linux發(fā)行版固定IP的完整操作鏈路4.1 確認(rèn)系統(tǒng)版本和網(wǎng)絡(luò)管理工具不同Linux發(fā)行版使用的網(wǎng)絡(luò)管理工具不同配置文件的路徑和格式也不一樣。先確認(rèn)你的系統(tǒng)用的是哪種網(wǎng)絡(luò)管理方式# 查看系統(tǒng)版本 cat /etc/os-release # 查看網(wǎng)絡(luò)管理服務(wù) systemctl status NetworkManager systemctl status network目前主流的有兩種一種是傳統(tǒng)的network服務(wù)配合ifcfg-xxx格式的配置文件另一種是NetworkManager配合nmcli命令或者keyfile格式的配置文件。較新的系統(tǒng)如CentOS 8以上、Ubuntu 18.04以上默認(rèn)使用NetworkManager但為了兼容性很多教程仍然使用修改ifcfg文件的方式這種方式在大多數(shù)系統(tǒng)上依然有效。4.2 修改網(wǎng)卡配置文件的關(guān)鍵字段找到網(wǎng)卡配置文件的位置通常在/etc/sysconfig/network-scripts/目錄下文件名格式為ifcfg-網(wǎng)卡名稱。用文本編輯器打開vi /etc/sysconfig/network-scripts/ifcfg-ens33需要修改和確認(rèn)的關(guān)鍵字段如下# 將動態(tài)分配改為靜態(tài) BOOTPROTOstatic # 確保開機(jī)自動啟用網(wǎng)卡 ONBOOTyes # 設(shè)置靜態(tài)IP地址 IPADDR192.168.xxx.200 # 設(shè)置子網(wǎng)掩碼 NETMASK255.255.255.0 # 或者用PREFIX24代替NETMASK # 設(shè)置默認(rèn)網(wǎng)關(guān) GATEWAY192.168.xxx.2 # 設(shè)置DNS服務(wù)器 DNS1114.114.114.114 DNS28.8.8.8這里有幾個容易出錯的點需要特別注意BOOTPROTO的值必須是static或none寫dhcp就還是動態(tài)分配ONBOOT必須是yes否則開機(jī)網(wǎng)卡不啟動GATEWAY要和虛擬機(jī)網(wǎng)絡(luò)設(shè)置里的網(wǎng)關(guān)一致不能隨便填DNS1建議填一個國內(nèi)可用的公共DNS保證域名解析正常4.3 讓配置生效并驗證連通性配置文件改完之后需要重啟網(wǎng)絡(luò)服務(wù)讓配置生效# 重啟網(wǎng)絡(luò)服務(wù) systemctl restart network # 或者如果用的是NetworkManager systemctl restart NetworkManager然后驗證IP是否已經(jīng)變成你設(shè)置的靜態(tài)地址ip addr show ens33如果看到inet后面跟著你設(shè)置的IP地址說明配置生效了。接下來測試網(wǎng)絡(luò)連通性# 測試網(wǎng)關(guān)是否可達(dá) ping -c 4 192.168.xxx.2 # 測試外網(wǎng)是否可達(dá) ping -c 4 114.114.114.114 # 測試域名解析是否正常 ping -c 4 www.baidu.com三個測試都通過說明靜態(tài)IP配置完全成功。如果網(wǎng)關(guān)能通但外網(wǎng)不通通常是DNS配置有問題如果網(wǎng)關(guān)都不通檢查IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)是否在同一個網(wǎng)段。4.4 使用nmcli命令配置靜態(tài)IP的替代方案對于使用NetworkManager的系統(tǒng)除了修改配置文件還可以用nmcli命令來配置這種方式更直觀也不容易改錯文件格式# 查看當(dāng)前連接名稱 nmcli connection show # 修改連接的IP配置 nmcli connection modify ens33 ipv4.method manual nmcli connection modify ens33 ipv4.addresses 192.168.xxx.200/24 nmcli connection modify ens33 ipv4.gateway 192.168.xxx.2 nmcli connection modify ens33 ipv4.dns 114.114.114.114,8.8.8.8 # 重新激活連接 nmcli connection down ens33 nmcli connection up ens33這種方式的優(yōu)勢在于命令執(zhí)行完立即生效不需要手動重啟網(wǎng)絡(luò)服務(wù)而且配置格式由工具保證不會出現(xiàn)手寫配置文件時的語法錯誤。我個人在較新的系統(tǒng)上更傾向于用這種方式。5. 配完之后連不上網(wǎng)排查思路按這個順序來5.1 從虛擬機(jī)內(nèi)部逐層排查網(wǎng)絡(luò)狀態(tài)靜態(tài)IP配完發(fā)現(xiàn)連不上網(wǎng)不要慌按照從內(nèi)到外的順序逐層排查。第一步是確認(rèn)網(wǎng)卡本身是否啟動、IP是否已經(jīng)生效# 查看網(wǎng)卡狀態(tài)和IP ip addr show # 查看路由表 ip route show # 查看DNS配置 cat /etc/resolv.conf重點看三個地方網(wǎng)卡是否有UP標(biāo)志、IP地址是否是你設(shè)置的那個、路由表里是否有默認(rèn)網(wǎng)關(guān)。如果網(wǎng)卡沒起來檢查ONBOOT是否設(shè)為yes如果IP沒生效檢查配置文件語法是否有誤如果路由表里沒有默認(rèn)網(wǎng)關(guān)檢查GATEWAY字段是否填寫正確。5.2 宿主機(jī)與虛擬機(jī)之間的連通性測試從虛擬機(jī)內(nèi)部排查完接下來從宿主機(jī)往虛擬機(jī)方向測試。在宿主機(jī)的終端或命令提示符里ping虛擬機(jī)的靜態(tài)IP# 在宿主機(jī)上執(zhí)行 ping 192.168.xxx.200如果ping不通可能是以下幾種原因虛擬機(jī)的防火墻攔截了ICMP請求虛擬機(jī)網(wǎng)絡(luò)模式設(shè)置有問題靜態(tài)IP和宿主機(jī)不在同一個網(wǎng)段可以臨時關(guān)閉虛擬機(jī)防火墻測試一下# 臨時關(guān)閉防火墻僅用于測試 systemctl stop firewalld # 或者 systemctl stop ufw如果關(guān)閉防火墻后能ping通說明是防火墻規(guī)則的問題需要添加相應(yīng)的放行規(guī)則而不是直接關(guān)閉防火墻。5.3 常見配置錯誤對照表根據(jù)我自己的踩坑經(jīng)驗靜態(tài)IP配置失敗的原因高度集中整理成對照表方便快速定位現(xiàn)象可能原因排查方法虛擬機(jī)完全斷網(wǎng)網(wǎng)關(guān)地址填錯對比虛擬機(jī)網(wǎng)絡(luò)設(shè)置里的網(wǎng)關(guān)能ping通網(wǎng)關(guān)但上不了外網(wǎng)DNS配置錯誤檢查/etc/resolv.conf內(nèi)容IP地址沒變成靜態(tài)的BOOTPROTO沒改檢查配置文件該字段值重啟后IP又變了配置文件未保存或ONBOOTno重新檢查并保存配置文件宿主機(jī)ping不通虛擬機(jī)防火墻攔截或網(wǎng)絡(luò)模式不對檢查防火墻規(guī)則和網(wǎng)絡(luò)模式虛擬機(jī)ping不通宿主機(jī)宿主機(jī)防火墻攔截檢查宿主機(jī)防火墻設(shè)置這張表基本覆蓋了90%以上的靜態(tài)IP配置問題遇到故障時按表排查效率比盲目試錯高得多。5.4 配置回滾與恢復(fù)動態(tài)分配的方法如果靜態(tài)IP怎么都配不好或者你只是想臨時恢復(fù)網(wǎng)絡(luò)可以快速回滾到動態(tài)分配模式# 將BOOTPROTO改回dhcp BOOTPROTOdhcp # 刪除或注釋掉靜態(tài)IP相關(guān)配置 # IPADDR... # NETMASK... # GATEWAY... # 重啟網(wǎng)絡(luò)服務(wù) systemctl restart network回滾之后虛擬機(jī)應(yīng)該能重新通過DHCP獲取到IP。這時候你可以對照之前記錄的網(wǎng)絡(luò)參數(shù)重新檢查靜態(tài)配置哪里出了問題。6. 讓靜態(tài)IP真正穩(wěn)定運行的幾個關(guān)鍵細(xì)節(jié)6.1 虛擬機(jī)克隆后的IP沖突問題用虛擬機(jī)做開發(fā)的人經(jīng)常會克隆虛擬機(jī)來快速搭建多臺環(huán)境??寺〕鰜淼奶摂M機(jī)如果保留了原來的靜態(tài)IP就會出現(xiàn)IP沖突兩臺機(jī)器都上不了網(wǎng)。正確的做法是克隆完成后第一時間修改新虛擬機(jī)的IP地址確保和源虛擬機(jī)不在同一個地址上。具體操作是登錄克隆后的虛擬機(jī)修改網(wǎng)卡配置文件里的IPADDR字段改成另一個空閑地址然后重啟網(wǎng)絡(luò)服務(wù)。另外有些虛擬機(jī)軟件在克隆時會自動生成新的MAC地址如果配置文件里綁定了MAC地址也需要同步更新。6.2 虛擬機(jī)軟件網(wǎng)絡(luò)設(shè)置與系統(tǒng)配置的一致性靜態(tài)IP能否穩(wěn)定工作不僅取決于虛擬機(jī)系統(tǒng)內(nèi)部的配置還和虛擬機(jī)軟件本身的網(wǎng)絡(luò)設(shè)置有關(guān)。以NAT模式為例虛擬機(jī)軟件會有一個虛擬網(wǎng)絡(luò)編輯器里面定義了子網(wǎng)地址、子網(wǎng)掩碼、網(wǎng)關(guān)地址、DHCP范圍。你在系統(tǒng)里設(shè)置的靜態(tài)IP必須在這個子網(wǎng)范圍內(nèi)網(wǎng)關(guān)必須和虛擬網(wǎng)絡(luò)編輯器里的網(wǎng)關(guān)一致。我遇到過好幾次這樣的情況系統(tǒng)里配置看起來完全正確但就是連不上網(wǎng)最后發(fā)現(xiàn)是虛擬機(jī)軟件的虛擬網(wǎng)絡(luò)編輯器里網(wǎng)關(guān)地址和系統(tǒng)里配的不一樣。所以修改靜態(tài)IP之前務(wù)必先確認(rèn)虛擬機(jī)軟件層面的網(wǎng)絡(luò)參數(shù)。6.3 多網(wǎng)卡環(huán)境下的配置注意事項有些虛擬機(jī)配置了兩塊網(wǎng)卡一塊用于NAT上網(wǎng)一塊用于僅主機(jī)模式內(nèi)部通信。這種情況下兩塊網(wǎng)卡都需要配置而且要注意路由優(yōu)先級。默認(rèn)網(wǎng)關(guān)應(yīng)該設(shè)置在用于上網(wǎng)的那塊網(wǎng)卡上內(nèi)部通信的網(wǎng)卡不要設(shè)默認(rèn)網(wǎng)關(guān)否則會導(dǎo)致路由混亂。判斷哪塊網(wǎng)卡該設(shè)網(wǎng)關(guān)的方法很簡單看虛擬機(jī)軟件里哪塊網(wǎng)卡連接的是NAT網(wǎng)絡(luò)或橋接網(wǎng)絡(luò)那塊就是用來上網(wǎng)的網(wǎng)關(guān)設(shè)在它上面。僅主機(jī)模式的網(wǎng)卡只配IP和子網(wǎng)掩碼即可。6.4 靜態(tài)IP配置完成后的驗證清單配置完成后建議按照以下清單逐項驗證確保萬無一失虛擬機(jī)內(nèi)部ip addr顯示的IP是設(shè)定的靜態(tài)地址虛擬機(jī)內(nèi)部能ping通網(wǎng)關(guān)虛擬機(jī)內(nèi)部能ping通外網(wǎng)IP如114.114.114.114虛擬機(jī)內(nèi)部能ping通域名如www.baidu.com宿主機(jī)能ping通虛擬機(jī)靜態(tài)IP虛擬機(jī)重啟后IP保持不變項目中的數(shù)據(jù)庫、緩存等連接配置使用新IP后能正常連接這七項全部通過說明靜態(tài)IP配置真正穩(wěn)定了。尤其是第六項一定要重啟驗證因為有些配置在當(dāng)前會話生效但重啟后會失效。7. 項目實戰(zhàn)中關(guān)于IP配置的經(jīng)驗之談7.1 配置文件里到底該寫IP還是寫主機(jī)名很多項目在配置文件里直接寫IP地址比如spring.redis.host192.168.xxx.200。這種做法在單機(jī)環(huán)境下沒問題但一旦IP變動就要改配置。更優(yōu)雅的做法是在hosts文件里做一層映射配置文件里寫主機(jī)名# 在虛擬機(jī)和宿主機(jī)的hosts文件里都加上 192.168.xxx.200 redis-server 192.168.xxx.201 mysql-server然后項目配置里寫spring.redis.hostredis-server。這樣即使IP變了只需要改hosts文件一處項目配置不用動。當(dāng)然前提是IP已經(jīng)固定了否則hosts文件也得跟著改。這個技巧在需要頻繁切換環(huán)境的場景下特別有用。7.2 把網(wǎng)絡(luò)配置納入環(huán)境初始化腳本如果你經(jīng)常需要重建虛擬機(jī)環(huán)境建議把靜態(tài)IP配置寫進(jìn)初始化腳本里。這樣每次新建虛擬機(jī)后執(zhí)行一次腳本就自動完成網(wǎng)絡(luò)配置不用手動一步步操作。腳本的核心邏輯就是修改網(wǎng)卡配置文件、重啟網(wǎng)絡(luò)服務(wù)、驗證連通性。#!/bin/bash # 靜態(tài)IP配置腳本示例 NETWORK_SCRIPT/etc/sysconfig/network-scripts/ifcfg-ens33 STATIC_IP192.168.xxx.200 GATEWAY192.168.xxx.2 sed -i s/BOOTPROTO.*/BOOTPROTOstatic/ $NETWORK_SCRIPT sed -i s/ONBOOT.*/ONBOOTyes/ $NETWORK_SCRIPT grep -q IPADDR $NETWORK_SCRIPT || echo IPADDR$STATIC_IP $NETWORK_SCRIPT grep -q GATEWAY $NETWORK_SCRIPT || echo GATEWAY$GATEWAY $NETWORK_SCRIPT grep -q DNS1 $NETWORK_SCRIPT || echo DNS1114.114.114.114 $NETWORK_SCRIPT systemctl restart network這個腳本只是示例實際使用時需要根據(jù)你的系統(tǒng)版本和網(wǎng)卡名稱調(diào)整。把這類腳本保存下來以后重建環(huán)境能省不少時間。7.3 快照功能是靜態(tài)IP配置的安全網(wǎng)在修改網(wǎng)絡(luò)配置之前強(qiáng)烈建議先給虛擬機(jī)打一個快照。這樣萬一配置出錯導(dǎo)致虛擬機(jī)徹底斷網(wǎng)可以直接回滾到快照狀態(tài)不用重裝系統(tǒng)。我自己的習(xí)慣是任何涉及網(wǎng)絡(luò)、系統(tǒng)服務(wù)、關(guān)鍵配置文件的修改之前都先打快照。這個習(xí)慣幫我省了無數(shù)次重裝系統(tǒng)的時間??煺盏牧硪粋€用途是配置好靜態(tài)IP并驗證穩(wěn)定后再打一個快照作為干凈基線。以后如果環(huán)境被搞亂了直接回滾到這個基線IP配置還是好的不用重新配。7.4 關(guān)于IP地址選擇的長期規(guī)劃建議如果你同時維護(hù)多臺虛擬機(jī)建議從一開始就做好IP規(guī)劃而不是隨便選。比如192.168.xxx.200給數(shù)據(jù)庫服務(wù)器192.168.xxx.201給緩存服務(wù)器192.168.xxx.202給消息隊列服務(wù)器192.168.xxx.210-220留給后續(xù)擴(kuò)展這樣每臺機(jī)器的角色和IP一一對應(yīng)管理起來清晰也不容易沖突。我見過不少人因為IP隨便選后來加機(jī)器時發(fā)現(xiàn)地址沖突又得挨個改非常折騰。前期花五分鐘規(guī)劃后期省幾小時排查。7.5 虛擬機(jī)重啟后IP仍然變動的終極排查如果按照上面的步驟配置完重啟后IP還是變了那說明配置沒有真正生效。這時候需要檢查幾個容易被忽略的地方是否有其他網(wǎng)絡(luò)管理服務(wù)在覆蓋你的配置比如cloud-init在某些鏡像里會自動重置網(wǎng)絡(luò)網(wǎng)卡配置文件是否被其他腳本或工具修改是否存在多個網(wǎng)卡配置文件導(dǎo)致沖突虛擬機(jī)軟件層面是否有網(wǎng)絡(luò)重置策略排查方法是重啟后立即查看ip addr和配置文件內(nèi)容對比是否一致。如果配置文件被改了說明有服務(wù)在自動修改它需要找到那個服務(wù)并禁用它。這類問題比較隱蔽但一旦定位到原因解決起來很簡單。8. 寫在最后的一點個人體會靜態(tài)IP這件事說起來簡單但真正配到重啟一百次都不變的穩(wěn)定狀態(tài)還是需要把虛擬機(jī)軟件層面、系統(tǒng)層面、項目配置層面都打通。我自己從最開始每次重啟改配置到后來寫腳本自動配置再到現(xiàn)在把網(wǎng)絡(luò)配置納入環(huán)境初始化流程前后折騰了不少時間?;仡^看最值得投入的就是把IP固定下來這件事因為它是一勞永逸的配好之后再也不需要為連接問題分心。另外分享一個小習(xí)慣每次配置完靜態(tài)IP我都會把完整的配置過程、參數(shù)、驗證結(jié)果記錄在一個文檔里。下次換機(jī)器或者幫別人排查時直接翻文檔就行不用重新回憶。這個習(xí)慣在排查網(wǎng)絡(luò)問題時尤其有用因為網(wǎng)絡(luò)配置的細(xì)節(jié)太多靠腦子記很容易漏。