虛擬機中設置 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)是什麼意思?)
網卡名稱及 IP 地址

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