Ubuntu22虛擬機突然無法連接網絡了,以下是故障排除步驟記錄。
Ubuntu 22虛擬機網絡故障快速解決指南
當在虛擬機中安裝的 Ubuntu 22 系統出現 ping: connect: 網絡不可達
和 ping: www.baidu.com: 域名解析出現暫時性錯誤
的報錯時,通常意味著虛擬機無法正常連接到外部網絡。這可能是由虛擬機軟件的網絡設置、Ubuntu 內部的網絡配置或宿主機的網絡狀況引起的。
本教程將引導一步步排查并解決這些問題。
所需環境與準備
- 安裝了 Ubuntu 22 的虛擬機(如 VirtualBox, VMware Workstation/Fusion)。
- 宿主機(運行虛擬機的電腦)能夠正常訪問互聯網。
- 具備基本的 Linux 命令行操作知識。
排查和解決步驟
第一步:檢查虛擬機軟件的網絡適配器設置 (在您的宿主機上操作)
這是最常見的問題原因。錯誤的虛擬機網絡配置會導致虛擬機無法與宿主機或外部網絡建立連接。
- 關閉您的Ubuntu虛擬機。
- 打開您的虛擬機軟件 (如 VirtualBox 或 VMware)。
- 找到您的 Ubuntu 虛擬機,選中它,然后進入設置 (Settings)。
- 導航到“網絡 (Network)”或“網絡適配器 (Network Adapter)”部分。
- 檢查并確認以下關鍵設置:
- 適配器已啟用/已連接 (Adapter Enabled/Connected): 確保“啟用網絡適配器”或“已連接”選項是勾選的。
- “數據線已連接 (Cable connected)”或“在啟動時連接 (Connect at power on)”: 確保這個選項是勾選的。
- 連接方式 (Attached to/Network Connection Type):
- 推薦首選:NAT (網絡地址轉換)。 這是最常用和最簡單的設置,它允許虛擬機通過宿主機的網絡連接訪問互聯網,無需復雜的配置。虛擬機通常能自動獲取IP地址。
- 備選方案:橋接模式 (Bridged Adapter)。 如果NAT不起作用,或者您希望虛擬機在您的物理網絡中獲得一個獨立的IP地址(就像一臺真實的電腦一樣),可以嘗試“橋接模式”。選擇此項后,請確保選擇正確的宿主機物理網卡進行橋接。
- 保存設置并重新啟動Ubuntu虛擬機。
第二步:在Ubuntu虛擬機內部檢查網絡接口狀態 (使用 ip a
)
虛擬機重啟后,進入Ubuntu系統,打開終端,執行以下命令來檢查網絡接口的狀態。
-
檢查網卡狀態和IP地址:
ip a
- 查看結果: 尋找一個網絡接口(通常是
ens33
、enp0s3
、eth0
或類似名稱)。 - 確認:
- 該接口后面是否有
UP,BROADCAST,RUNING,MULTICAST
字樣,表明網卡處于運行狀態。 - 是否有
inet
行,后面跟著一個IP地址(例如inet 192.168.x.x/24
或inet 10.0.x.x/24
)。
- 該接口后面是否有
- 常見問題: 如果您的網卡顯示
state DOWN
且沒有inet
IP 地址,說明網卡未被激活或未獲取到IP。這正是您最初遇到的問題。
- 查看結果: 尋找一個網絡接口(通常是
第三步:手動激活網卡 (如果網卡是 DOWN
狀態)
如果第二步中發現您的網卡(例如 ens33
)顯示 state DOWN
且沒有 IPv4 地址,需要手動將其激活。
-
手動將網卡激活:
在Ubuntu終端中輸入以下命令(請將
sudo ip link set <接口名稱> up
注:<接口名稱> # 替換為實際的網卡名稱,例如 ens33
-
再次檢查網卡狀態:
激活后,等待幾秒鐘,然后再次運行
ip a
命令:
ip a
- 預期結果: 此時,網卡(例如
ens33
)應該顯示UP,BROADCAST,RUNNING,MULTICAST
。這表示網卡已激活。 - 注意: 此時它可能仍然沒有 IPv4 地址 (
inet
行),這是正常現象,我們將在下一步解決。
- 預期結果: 此時,網卡(例如
第四步:強制獲取 IPv4 地址 (DHCP 續租)
即使網卡已處于 UP
狀態,如果沒有獲取到 IPv4 地址,仍然無法進行網絡通信。我們需要強制網卡通過 DHCP 協議請求一個 IP 地址。
-
釋放當前的IP地址(如果有的話)并重新獲取:
在Ubuntu終端中輸入以下命令(別忘了將 <接口名稱> 替換為實際網卡名稱):
sudo dhclient -r <接口名稱> sudo dhclient <接口名稱>
sudo dhclient -r <接口名稱>
:這個命令會釋放當前網卡可能持有的任何 DHCP 租約。sudo dhclient <接口名稱>
:這個命令會強制網卡向 DHCP 服務器請求一個新的 IP 地址。
-
再次檢查網卡狀態和IP地址:
執行完上述兩條命令后,等待幾秒鐘,然后再次運行 ip a 命令,查看網卡的狀態:
ip a
- 預期結果: 應該能看到在自己的網卡(例如
ens33
)下方出現了一行inet
,后面跟著一個有效的 IPv4 地址(例如inet 192.168.220.128/24
),這表明已經成功獲取到了 IP 地址。
- 預期結果: 應該能看到在自己的網卡(例如
第五步:檢查默認網關和 DNS 服務器 (確認基礎網絡配置)
現在虛擬機就有 IP 地址了,接下來我們需要確保它有正確的路由和 DNS 配置來訪問互聯網。
-
檢查默認網關 (Default Gateway):
運行以下命令來查看您的默認網關地址:
ip r
-
查看結果: 尋找一行以
default via
開頭的記錄,例如default via 192.168.220.1 dev ens33
。這里的192.168.220.1
就是自己的默認網關地址。 -
嘗試 ping 自己的默認網關:
ping <自己的網關IP地址> # 例如:ping 192.168.220.1
- 預期結果: 如果能正常ping通,說明自己的虛擬機與虛擬路由器之間連接正常。
-
-
檢查 DNS 服務器 (域名解析):
即使可以 ping 通 IP 地址,如果 DNS 服務器有問題,則仍然無法通過域名訪問網站。
resolvectl status
-
查看結果: 在輸出中找到自己的網絡接口(如
ens33
),在其下方查找DNS Servers
字段。它應該顯示至少一個DNS服務器的IP地址(例如8.8.8.8
或自己的路由器的IP)。 -
如果DNS服務器為空或不正確,或者
ping 8.8.8.8
成功但ping www.baidu.com
仍然失敗:可以嘗試手動編輯
/etc/resolv.conf
來添加公共 DNS 服務器。
sudo nano /etc/resolv.conf
在文件中添加或修改為:
nameserver 8.8.8.8 nameserver 114.114.114.114
保存文件(按
Ctrl+O
,回車,然后按
Ctrl+X
退出)。
-
第六步:最終驗證網絡連接
完成上述所有步驟后,再次嘗試ping以驗證網絡是否完全恢復。
-
測試外部 IP 地址連通性:
ping 8.8.8.8
- 預期結果: 應該能看到數據包正常返回。
-
測試域名解析和外部網絡連通性:
ping www.baidu.com
- 預期結果: 應該能看到
www.baidu.com
被解析成一個 IP 地址并且數據包正常返回。
- 預期結果: 應該能看到
第七步:配置靜態IP(可選)
可參考教程:(2024年最新)Linux(Ubuntu) 中配置靜態IP(包含解決每次重啟后配置文件失效問題)
- 打開 netplan 配置文件
# 找到配置文件名
hua@hua-vm:~$ ls /etc/netplan/
01-network-manager-all.yaml# 打開配置文件
hua@hua-vm:~$ sudo vim /etc/netplan/01-network-manager-all.yaml
- 編輯 netplan 配置文件
network:version: 2renderer: networkd # 使用 systemd-networkd 作為后端,對于靜態 IP 配置,networkd 通常更為直接和穩定# renderer: NetworkManager # 使用 NetworkManager 作為后端ethernets:ens33:dhcp4: false # 使用靜態 IP addresses:- 192.168.220.128/24 # 靜態 IP 和子網掩碼routes:- to: defaultvia: 192.168.220.2 # 默認路由nameservers:addresses:- 8.8.8.8 # DNS 服務器 1- 114.114.114.114 # DNS 服務器 2
執行以下命令將權限設置為安全值:
sudo chmod 600 /etc/netplan/01-static-net.yaml
- 處理潛在的配置文件沖突
? 方案 (推薦 - 如果只使用靜態 IP):刪除或禁用默認的網絡管理文件。
? 如果自己的 01-static-net.yaml
已經包含了所有必要的配置(包括 renderer: NetworkManager
,因為自 己的靜態配置依賴它),那么默認的 01-network-manager-all.yaml
文件可能會導致沖突,或者至少是多余 的。可以將其刪除或重命名以禁用它:
# 備份著不用
sudo mv /etc/netplan/01-network-manager-all.yaml /etc/netplan/01-network-manager-all.yaml.backup
# 或者直接刪除,如果確定不需要它:
# sudo rm /etc/netplan/01-network-manager-all.yaml
? 這樣做可以確保自己的 01-static-net.yaml
是唯一控制 ens33
的 Netplan 配置。
-
重新應用 Netplan 配置
在完成權限修正和可能的沖突處理后,再次嘗試應用配置:
# 先檢測配置,再根據提示應用配置
sudo netplan try# 或者,如果確信配置無誤,可以直接應用(不提供回滾選項)
sudo netplan apply
額外提示與注意事項
- 宿主機網絡檢查: 確保自己的宿主機(運行虛擬機的電腦)可以正常訪問互聯網。如果宿主機本身沒有網絡,虛擬機自然也無法上網。
- 防火墻: 極少數情況下,Ubuntu 內置的防火墻 UFW 可能會阻止連接。自己可以臨時禁用它進行測試:
sudo ufw disable
。如果網絡恢復,說明是防火墻問題,需要配置防火墻規則而不是禁用它。測試完記得sudo ufw enable
重新啟用。 - Netplan 配置: Ubuntu 22.04 使用 Netplan 管理網絡配置,文件通常在
/etc/netplan/*.yaml
。雖然我們的方法通過dhclient
解決了問題,但如果將來出現持久性問題,可以檢查這些文件內容(如cat /etc/netplan/*.yaml
),確保dhcp4: true
配置正確。不過,在桌面版Ubuntu上,通常由NetworkManager
負責管理,其配置文件非常簡潔。 - 重啟虛擬機: 在某些情況下,簡單地重啟整個虛擬機可以解決一些臨時的網絡問題。
希望這份詳細的教程能幫助您順利解決 Ubuntu 虛擬機網絡問題!