前言
最近工作關係開始玩 CentOS 了,本次實作環境中採用的是 CentOS 7.4 (1709) Kernel 3.10.0-693.el7.x86_64) 映像檔,也就是新版 CentOS 7.4 最小化安裝版本 (Minimal Install),那麼開始來玩玩吧。💪實作環境
- Windows Server 2016 Hyper-V
- CentOS 7.4 (1709) Kernel 3.10.0-693.el7.x86_64
- net-tools-2.0-0.22.20131004git.el7.x86_64
- bind-utils-9.9.4-51.el7.x86_64
停止及停用 NetworkManager 系統服務
建立好使用者帳號後接下來便是設定 CentOS 的網路功能,在本文設定中網路功能是以設定固定 IP 位址來進行說明。首先,在 CentOS 7.4 Minimal Install 運作環境中,執行「systemctl list-units --type service |grep running」指令後,可以看到預設仍會啟用 NetworkManager 系統服務,但個人的網路設定習慣不喜歡使用它,所以在組態設定 CentOS 主機網路環境之前,先執行「systemctl stop NetworkManager」指令以便停止 NetworkManager 系統服務,接著執行「systemctl disable NetworkManager」指令以便停用 NetworkManager 系統服務 (以避免 CentOS 主機重新啟動後不會自動執行)。
圖、停止及停用 NetworkManager 系統服務
組態設定主機名稱
預設情況下,採用 CentOS 7.4 Minimal Install 安裝模式後主機名稱為「localhost.localdomain」,你可以使用「hostname」或「hostnamectl」指令進行查看。倘若,你希望能夠調整 CentOS 虛擬主機名稱時,可以執行「hostnamectl set-hostname "centos74.weithenn.org" --static」指令即可立即套用生效,後續再次使用「hostname」或「hostnamectl」指令進行確認,可以發現 CentOS 主機名稱已經變更為「centos74.weithenn.org」。事實上,該指令將會把組態設定值套用至「/etc/hostname」組態設定檔當中。
圖、組態設定 CentOS 主機名稱
組態設定 CentOS 主機網路資訊
接著,我們直接透過相關組態設定檔的方式,設定 CentOS 主機的網路資訊分別將固定 IP 位址、網路遮罩等相關資訊寫入「/etc/sysconfig/network-scripts/ifcfg-eth0」網卡設定檔中、預設閘道寫入「/etc/sysconfig/network」設定檔中、DNS 名稱解析資訊寫入「/etc/resolve.conf」設定檔中。最後,便可以執行「systemctl restart network」指令重新啟動網路服務,然後再執行「systemctl status network」查看網路服務運作狀態。# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
IPV6INIT=no
DEVICE=eth0
ONBOOT=yes
IPADDR=10.10.75.7
PREFIX=24
# cat /etc/sysconfig/network
GATEWAY=10.10.75.254
# cat /etc/hosts
127.0.0.1 localhost
# cat /etc/resolv.conf
search weithenn.org
nameserver 168.95.192.1
nameserver 168.95.1.1
nameserver 8.8.8.8
# systemctl restart network
# systemctl status network
● network.service - LSB: Bring up/down networking
Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
Active: active (exited) since Mon 2017-10-23 221:41:58 CST; 4min 54s ago
Docs: man:systemd-sysv-generator(8)
Process: 2143 ExecStop=/etc/rc.d/init.d/network stop (code=exited, status=0/SUCCESS)
Process: 2315 ExecStart=/etc/rc.d/init.d/network start (code=exited, status=0/SUCCESS)
Oct 23 22:41:53 centos74.weithenn.org systemd[1]: Starting LSB: Bring up/down networking...
Oct 23 22:41:53 centos74.weithenn.org network[17550]: Bringing up loopback interface: [ OK ]
Oct 23 22:41:53 centos74.weithenn.org network[17550]: Bringing up interface eth0: [ OK ]
Oct 23 22:41:53 centos74.weithenn.org systemd[1]: Started LSB: Bring up/down networking.
圖、組態設定固定 IP 位址
當 CentOS 主機的網路服務重新啟動並套用新的組態設定後,接著便可以使用 ping 指令來判斷主機是否能順利連上網際網路及進行名稱解析的動作,或者藉此判斷此台主機的網路通訊是卡在哪個環節上以便除錯。
# ping -c2 127.0.0.1 //檢查 Loopback
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.031 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.053 ms
--- 127.0.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.031/0.042/0.053/0.011 ms
# ping -c2 172.21.11.73 //檢查固定 IP 位址
PING 172.21.11.73 (172.21.11.73) 56(84) bytes of data.
64 bytes from 172.21.11.73: icmp_seq=1 ttl=64 time=0.030 ms
64 bytes from 172.21.11.73: icmp_seq=2 ttl=64 time=0.053 ms
--- 172.21.11.73 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.030/0.041/0.053/0.013 ms
# ping -c2 172.21.11.254 //檢查 CentOS 與預設閘道之間的連線
PING 172.21.11.254 (172.21.11.254) 56(84) bytes of data.
64 bytes from 172.21.11.254: icmp_seq=1 ttl=255 time=0.465 ms
64 bytes from 172.21.11.254: icmp_seq=2 ttl=255 time=0.445 ms
--- 172.21.11.254 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.445/0.455/0.465/0.010 ms
# ping -c2 168.95.192.1 //檢查 CentOS 是否能夠與指定的 DNS 伺服器連線
PING 168.95.192.1 (168.95.192.1) 56(84) bytes of data.
64 bytes from 168.95.192.1: icmp_seq=1 ttl=248 time=1.72 ms
64 bytes from 168.95.192.1: icmp_seq=2 ttl=248 time=1.46 ms
--- 168.95.192.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 1.466/1.596/1.726/0.130 ms
# ping -c2 weithenn.org //檢查 CentOS 能否順利進行名稱解析
PING weithenn.org (216.239.38.21) 56(84) bytes of data.
64 bytes from any-in-2615.1e100.net (216.239.38.21): icmp_seq=1 ttl=45 time=7.91 ms
64 bytes from any-in-2615.1e100.net (216.239.38.21): icmp_seq=2 ttl=45 time=8.72 ms
--- weithenn.org ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 7.918/8.321/8.724/0.403 ms
沒有 ifconfig / netstat / nslookup 指令?
在 CentOS 5 / 6 版本中,預設都會安裝 net-tools 套件 (包含 ifconfig / netstat 指令)。但是,從 CentOS 7 版本開始預設不會安裝該套件,原因是官方認為 ifconfig 指令無法完整顯示網路卡的 IP 位址組態設定,建議可以改用 ip 或 ss 等指令 (詳細資訊請參考 FAQ/CentOS7 - CentOS Wiki)。倘若,仍希望使用 ifconfig / netstat 指令的話,只要執行「yum -y install net-tools」指令安裝 net-tools 套件即可。此外,預設情況下也已經拿掉 nslookup 指令,只要執行「yum -y install bind-utils」指令安裝 bind-utils 套件即可。如下操作所示,在尚未安裝 net-tools、bind-utils 套件之前,並無法使用 ifconfig / netstat / nslookup 指令,在完成安裝 net-tools、bind-utils 套件後便可以順利執行 ifconfig / netstat / nslookup 指令。
# ifconfig
-bash: ifconfig: command not found
# netstat
-bash: netstat: command not found
# nslookup
-bash: nslookup: command not found
# yum -y install net-tools bind-utils
# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.10.75.7 netmask 255.255.255.0 broadcast 10.10.75.255
inet6 fe80::215:5dff:feac:5915 prefixlen 64 scopeid 0x20<link>
ether 00:15:5d:ac:59:15 txqueuelen 1000 (Ethernet)
RX packets 20688 bytes 13770965 (13.1 MiB)
RX errors 0 dropped 2 overruns 0 frame 0
TX packets 6043 bytes 509742 (497.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# netstat -tunpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 771/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1092/master
tcp6 0 0 :::22 :::* LISTEN 771/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1092/master
udp 0 0 127.0.0.1:323 0.0.0.0:* LISTEN 542/chronyd
udp6 0 0 ::1:323 :::* LISTEN 542/chronyd
停用相關服務使用 IPv6
預設情況下,CentOS 主機會同時使用 IPv4 及 IPv6 網路功能,然而目前企業及組織的運作環境仍然相當少使用 IPv6 網路功能。因此,基於節省系統資源的概念下希望停用 IPv6 網路功能,如下操作結果可以看到使用「ifconfig eth0」指令有看到 inet (IPv4) 及 inet6 (IPv6),「netstat -tunpl」指令後,預設 SSH / Postfix / Chronyd 系統服務同時使用 IPv4 / IPv6 網路功能。# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.10.75.7 netmask 255.255.255.0 broadcast 10.10.75.255
inet6 fe80::215:5dff:feac:5915 prefixlen 64 scopeid 0x20<link>
ether 00:15:5d:ac:59:15 txqueuelen 1000 (Ethernet)
RX packets 20688 bytes 13770965 (13.1 MiB)
RX errors 0 dropped 2 overruns 0 frame 0
TX packets 6043 bytes 509742 (497.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# netstat -tunpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 771/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1092/master
tcp6 0 0 :::22 :::* LISTEN 771/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1092/master
udp 0 0 127.0.0.1:323 0.0.0.0:* LISTEN 542/chronyd
udp6 0 0 ::1:323 :::* LISTEN 542/chronyd
停用網卡 IPv6
根據 CentOS Wiki - FAQ/CentOS7 - How do i disable IPv6? 官方文件內容可知,應該在「/etc/sysctl.conf」設定檔中,加入「net.ipv6.conf.all.disable_ipv6 = 1」、「net.ipv6.conf.default.disable_ipv6 = 1」內容,然後執行「sysctl -p」指令以便停用 CentOS 主機的 IPv6 網路功能。# vi /etc/sysctl.conf //加入下列 2 行參數
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
# sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
停用 SSH IPv6
根據 CentOS Wiki - FAQ/CentOS7 - How do i disable IPv6? 官方文件的建議請修改 SSH 組態設定檔內容,讓 SSH 系統服務僅使用 IPv4 網路功能。# vi /etc/ssh/sshd_config
#AddressFamily any //預設值
AddressFamily inet //修改後 (inet is ipv4 only, inet6 is ipv6 only)
停用 Postfix IPv6
根據 CentOS Wiki - FAQ/CentOS7 - How do i disable IPv6? 官方文件的建議請修改 Postfix 組態設定檔內容,讓 Postfix 系統服務僅使用 IPv4 網路功能。# vi /etc/postfix/main.cf
#inet_interfaces = localhost //預設值
inet_interfaces = 127.0.0.1 //修改後
停用 Chronyd IPv6
從 CentOS 7 版本開始,預設改為採用 Chrony 套件來擔任 NTP 時間校時的工作,請修改 Chrony 服務組態設定檔內容,以便讓 Chrony 系統服務僅使用 IPv4 網路功能。詳細資訊請參考 16.2. Understanding chrony and Its Configuration - Red Hat Customer Portal。# vi /etc/sysconfig/chronyd
OPTIONS="" //預設值
OPTIONS="-4" //修改後
修改完成後,建議重新啟動主機以便完整的套用生效。當 CentOS 主機重新啟動完成後,再次登入主機後使用「ifconfig eth0」指令發現已經沒有 inet6 (IPv6),而執行「netstat -tunpl」指令會發現預設的 SSH / Postfix / Chrony 系統服務僅使用 IPv4 網路功能。
# ifconfig eth0
eth0: flags=4163 mtu 1500
inet 10.10.75.7 netmask 255.255.255.0 broadcast 10.10.75.255
ether 00:15:5d:4b:10:05 txqueuelen 1000 (Ethernet)
RX packets 20688 bytes 13770965 (13.1 MiB)
RX errors 0 dropped 2 overruns 0 frame 0
TX packets 6043 bytes 509742 (497.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# netstat -tunpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 852/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1089/master
udp 0 0 127.0.0.1:323 0.0.0.0:* LISTEN 532/chronyd
CentOS 7.4 基礎設定系列文章:
- CentOS 7.4 基礎設定 (1) - 安裝整合服務並建立一般使用者帳號
- (本文) CentOS 7.4 基礎設定 (2) - 組態設定網路功能
- CentOS 7.4 基礎設定 (3) - 簡述 SELinux 安全性增強機制
- CentOS 7.4 基礎設定 (4) - 組態設定 VIM 及 Bash Shell 操作環境
- CentOS 7.4 基礎設定 (5) - 設定 sudo 管理員帳號管理機制
- CentOS 7.4 基礎設定 (6) - 禁止 Root 帳號本機及 SSH 遠端登入
- CentOS 7.4 基礎設定 (7) - 簡述 YUM 套件管理工具
- CentOS 7.4 基礎設定 (8) - 擴充 YUM 套件數量
- CentOS 7.4 基礎設定 (9) - 簡述 Systemd 啟動模式等級
- CentOS 7.4 基礎設定 (10) - 調整 Firewalld 防火牆規則
- CentOS 7.4 基礎設定 (11) - 定期寄送 CentOS 主機系統資訊 Log
- CentOS 7.4 基礎設定 (12) - 關閉不必要的系統服務
- CentOS 7.4 基礎設定 (13) - 採用 I/O Scheduler Noop 加速 Disk I/O
- CentOS 7.4 基礎設定 (14) - 完成 CentOS Base VM 的製作
- CentOS 7.4 基礎設定 (15) - 範本 CentOS 重新產生 Product_UUID