虛擬機中設置 CentOS 靜態 IP
- 2019 年 10 月 8 日
- 筆記
作為開發人員在工作和學習中通過虛擬機使用 Linux 的情況肯定會非常多,但是 Linux 自帶的終端使用體驗較差,所以絕大多數使用者都會在宿主機上使用第三方 SSH工具(例如 Xshell)進行連接,然而在虛擬機中如果使用的是動態 IP 則會出現這次連接可以但下次連不上的情況,因為 IP 動態獲取的嘛,是會變的。所以這篇文章的目的也就在於解決此問題。
確定虛擬機使用的網絡配置
在設置靜態 IP 之前,我們需要確定當前系統動態獲取到的一些配置信息,以便我們後續使用。
IP地址及網卡名稱
作者新裝的一台虛擬機,執行的是最小化安裝,所以什麼工具也沒有,使用 ip 來查看,執行結果如下:
[root@192 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:90:03:54 brd ff:ff:ff:ff:ff:ff inet 192.168.234.130/24 brd 192.168.234.255 scope global noprefixroute dynamic ens33 valid_lft 1650sec preferred_lft 1650sec inet6 fe80::a120:30fb:6867:daed/64 scope link noprefixroute valid_lft forever preferred_lft forever
分析以上結果,我們可以看到網卡名稱為 ens33
,IP 地址為 192.168.234.130
,根據 IP 地址後的 /24
可以得知為 C 類地址,子網掩碼為 255.255.255.0
(可參考 ip地址後邊加個/8(16,24,32)是什麼意思?)
DNS 地址
CentOS 使用的 DNS 配置放置在 /etc/resolv.conf
文件中,可以通過查看此文件內容獲取當前 DNS 地址。
[root@192 ~]# cat /etc/resolv.conf # Generated by NetworkManager search localdomain nameserver 192.168.234.2
根據文件內容可以知道 DNS 服務器地址為 192.168.234.2
網關地址
網關地址同樣可以使用 ip
命令進行查看
[root@192 ~]# ip route show default via 192.168.234.2 dev ens33 proto dhcp metric 100 192.168.234.0/24 dev ens33 proto kernel scope link src 192.168.234.133 metric 100
根據執行結果我們可以看到使用的網關地址為 192.168.234.2
匯總
根據之前的結果,我們可以匯總得到現有的網絡配置信息:
- 網卡名:ens33
- IP 地址:192.168.234.130
- 子網掩碼:255.255.255.0
- DNS:192.168.234.2
- 網關:192.168.234.2
修改 CentOS 系統設置
相比於查看來說,設置部分相對會簡單很多,修改一個文件就可以了,文件路徑 /etc/sysconfig/network-scripts
,之前我們查看到虛擬機的網卡名為 ens33
,在這個目錄下有個文件為 ifcfg-ens33
,這個就是網卡對應的配置文件。
文件內包含當前網卡的網絡配置,默認的是通過 DHCP 來動態獲取 IP 地址,我們需要修改為靜態 IP。
# 默認內容 BOOTPROTO="dhcp" # 修改後的內容 BOOTPROTO="static" # 檢查以下內容,必須為 「yes」 ONBOOT="yes"
在文件中添加以下內容,其中地址除 IP 地址為手動指定外,其他的均為之前動態獲取的內容
IPADDR="192.168.234.71" NETMASK="255.255.255.0" GATEWAY="192.168.234.2" DNS1="192.168.234.2"
修改後重新啟動網絡服務
[root@192 ~]# systemctl restart network
之後重新查看地址(如果使用三方 SSH 工具則需要重新連接),可以看到 IP 地址已經變更為我們指定的地址,以後連接就不會出現獲取的地址和之前不一樣的情況了
[root@192 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:90:03:54 brd ff:ff:ff:ff:ff:ff inet 192.168.234.71/24 brd 192.168.234.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::a120:30fb:6867:daed/64 scope link noprefixroute valid_lft forever preferred_lft forever