Centos 7 系統詳解



 

安裝CentOS 7系統后,變化竟然這么大?

一、Runlevel
首先一條,原來一直用的CentOS-6.5-x86_64-minimal.iso光盤鏡像(400M左右無圖形系統小巧便捷),而7目前最小的鏡像是CentOS-7.0-1406-x86_64-livecd.iso(700M左右),默認安裝后是啟動圖形界面,按原來的習慣要改成啟動命令行,結果發現:

[root@localhost ~]# cat /etc/inittab
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /etc/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To set a default target, run:
#
# ln -sf /lib/systemd/system/<target name>.target /etc/systemd/system/default.target
#

好吧,systemd一統天下了(它管的東西很多很多,學Centos7首先要搞定systemd)。

[root@localhost ~]# ls -Xl /etc/systemd/system/*.target
lrwxrwxrwx. 1 root root 36 7月 8 23:12 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target

我們來看看從前的runlevel都變成什么樣了?

[root@localhost ~]# ls -Xl /lib/systemd/system
[root@localhost ~]# ls -Xl /lib/systemd/system/runlevel*.target
lrwxrwxrwx. 1 root root 15 7月 5 00:45 /lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 7月 5 00:45 /lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 7月 5 00:45 /lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 7月 5 00:45 /lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 7月 5 00:45 /lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 7月 5 00:45 /lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 7月 5 00:45 /lib/systemd/system/runlevel6.target -> reboot.target

修改默認啟動runlevel為 multi-user (貌似runlevel2 3 4 沒區別了)

[root@localhost ~]# ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
[root@localhost ~]# ll -X /etc/systemd/system/*.target
lrwxrwxrwx. 1 root root 37 7月 10 09:42 /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target

試試init 6 還好用不。

[root@localhost ~]# init 6
Connection to 192.168.150.180 closed by remote host.
Connection to 192.168.150.180 closed.

成,好用。:)

因為我從桌面版Linux 連接Centos7系統提示變成了中文,所以需要把Centos7 的root用戶語言改一下,回到原汁原味。

[root@localhost ~]# cp .bashrc .bashrc-back
[root@localhost ~]# echo 'export LANG="en_Us.UTF-8"' >> /root/.bashrc

二、Services

[root@localhost ~]# chkconfig

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

iprdump            0:off    1:off    2:on    3:on    4:on    5:on    6:off
iprinit            0:off    1:off    2:on    3:on    4:on    5:on    6:off
iprupdate          0:off    1:off    2:on    3:on    4:on    5:on    6:off
livesys            0:off    1:off    2:off    3:on    4:on    5:on    6:off
livesys-late       0:off    1:off    2:off    3:on    4:on    5:on    6:off
netconsole         0:off    1:off    2:off    3:off    4:off    5:off    6:off
network            0:off    1:off    2:off    3:off    4:off    5:off    6:off
rhnsd              0:off    1:off    2:on    3:on    4:on    5:on    6:off
vboxadd            0:off    1:off    2:on    3:on    4:on    5:on    6:off
vboxadd-service    0:off    1:off    2:on    3:on    4:on    5:on    6:off
vboxadd-x11        0:off    1:off    2:off    3:on    4:off    5:on    6:off

SysV已經快退居二線了,想配置服務得用systemctl,先看看默認啟動的服務吧。(如果不用grep過濾一下,輸出結果有260多行)

[root@localhost ~]# systemctl list-unit-files|grep enabled
tmp.mount                                   enabled 
accounts-daemon.service                     enabled 
atd.service                                 enabled 
auditd.service                              enabled 
avahi-daemon.service                        enabled 
bluetooth.service                           enabled 
chronyd.service                             enabled 
crond.service                               enabled 
dbus-org.bluez.service                      enabled 
dbus-org.Fedoraproject.FirewallD1.service   enabled 
dbus-org.freedesktop.Avahi.service          enabled 
dbus-org.freedesktop.NetworkManager.service enabled 
dbus-org.freedesktop.nm-dispatcher.service  enabled 
display-manager.service                     enabled 
dmraid-activation.service                   enabled 
firewalld.service                           enabled 
gdm.service                                 enabled 
getty@.service                              enabled 
irqbalance.service                          enabled 
iscsi.service                               enabled 
kdump.service                               enabled 
libstoragemgmt.service                      enabled 
lvm2-monitor.service                        enabled 
mdmonitor.service                           enabled 
microcode.service                           enabled 
multipathd.service                          enabled 
NetworkManager-dispatcher.service           enabled 
NetworkManager.service                      enabled 
packagekit-offline-update.service           enabled 
postfix.service                             enabled 
rngd.service                                enabled 
rsyslog.service                             enabled 
rtkit-daemon.service                        enabled 
smartd.service                              enabled 
spice-vdagentd.service                      enabled 
sysstat.service                             enabled 
systemd-readahead-collect.service           enabled 
systemd-readahead-drop.service              enabled 
systemd-readahead-replay.service            enabled 
tuned.service                               enabled 
avahi-daemon.socket                         enabled 
dm-event.socket                             enabled 
iscsid.socket                               enabled 
iscsiuio.socket                             enabled 
lvm2-lvmetad.socket                         enabled 
default.target                              enabled 
multi-user.target                           enabled 
remote-fs.target                            enabled 

默認居然沒有啟動sshd,暈!看看監聽端口:

[root@localhost ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2090/master

果然沒有22,試試老辦法:

[root@localhost ~]# chkconfig sshd on
Note: Forwarding request to 'systemctl enable sshd.service'.
ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service'

能用,但是指令被轉發到 systemctl enable sshd.service ,以后控制服務就用這個指令了。試試:

禁用sshd:

[root@localhost ~]# systemctl disable sshd.service
rm '/etc/systemd/system/multi-user.target.wants/sshd.service'

啟用sshd:

[root@localhost ~]# systemctl enable sshd.service
ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service'

看看:

[root@localhost ~]# systemctl list-unit-files|grep sshd.service
anaconda-sshd.service                       static  
sshd.service                                enabled 

[root@localhost ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2090/master         
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2758/sshd           
tcp6       0      0 :::22                   :::*                    LISTEN      2758/sshd 

其實啟用和禁用服務就是在當前“runlevel”的配置文件目錄(/etc/systemd/system/multi-user.target.wants/)里,

建立/usr/lib/systemd/system 里面對應服務配置文件的軟鏈接;禁用服務就是刪除此軟鏈接。
有興趣就自己看看 /usr/lib/systemd/system 里的文件,語法跟舊版/etc/init.d/ 里的服務腳本完全不同,也不能再用 /etc/init.d/sshd restart 之類的指令啟動服務器了。

先試試舊方法啟動服務:

[root@localhost ~]# service sshd start
Redirecting to /bin/systemctl start  sshd.service

用新方法折騰一下:

[root@localhost ~]# systemctl start sshd.service
[root@localhost ~]# systemctl stop sshd.service
[root@localhost ~]# systemctl restart sshd.service
[root@localhost ~]# 

如果沒有錯誤,就不會輸出任何信息,這個,,,,得習慣一下。

三、網絡
setup工具還是保留了,但有區別,沒有了網絡配置,多了RHN(Centos到底是跟RedHat一家子了)
[root@localhost ~]# setup

好吧,我們看看網絡配置。

[root@localhost ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 192.168.150.254

[root@localhost ~]# cat /etc/sysconfig/network
# Created by anaconda

[root@localhost ~]# ll /etc/sysconfig/network-scripts/ifcfg-*
-rw-r--r--. 1 root root 298 Jul  9 00:13 /etc/sysconfig/network-scripts/ifcfg-Auto_Ethernet
-rw-r--r--. 1 root root 288 Jul  8 23:12 /etc/sysconfig/network-scripts/ifcfg-enp0s3
-rw-r--r--. 1 root root 254 Apr  2 23:30 /etc/sysconfig/network-scripts/ifcfg-lo

[root@localhost ~]# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.150.180  netmask 255.255.255.0  broadcast 192.168.150.255
        inet6 fe80::a00:27ff:fe9a:a688  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:9a:a6:88  txqueuelen 1000  (Ethernet)
        RX packets 39317  bytes 2487945 (2.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2216  bytes 740115 (722.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 6  bytes 504 (504.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6  bytes 504 (504.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@localhost ~]# 

先改改主機名:

[root@localhost ~]# echo "hostname cenots7.localdomain" >>/etc/sysconfig/network
[root@localhost ~]# reboot
Connection to 192.168.150.180 closed by remote host.
Connection to 192.168.150.180 closed.
xw@Opt9010:~$ ssh root@192.168.150.180
root@192.168.150.180's password: 
Last login: Thu Jul 10 10:01:09 2014
[root@cenots7 ~]# 

看看網卡配置文件:

[root@cenots7 ~]# cd /etc/sysconfig/network-scripts/

[root@cenots7 network-scripts]# cat ifcfg-Auto_Ethernet 
HWADDR=08:00:27:9A:A6:88
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME="Auto Ethernet"
UUID=76304098-8f46-4185-8337-bb7f0d90423e
ONBOOT=yes

[root@cenots7 network-scripts]# cat ifcfg-enp0s3 
HWADDR=08:00:27:9A:A6:88
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=enp0s3
UUID=66a635c2-9600-437b-8cfb-57e9569f68da
ONBOOT=no

看看兩個文件有啥不同:

[root@cenots7 network-scripts]# diff ifcfg-Auto_Ethernet ifcfg-enp0s3 
14,16c14,16
< NAME="Auto Ethernet"
< UUID=76304098-8f46-4185-8337-bb7f0d90423e
< ONBOOT=yes
---
> NAME=enp0s3
> UUID=66a635c2-9600-437b-8cfb-57e9569f68da
> ONBOOT=no

兩個文件MAC地址一樣,ifcfg-Auto_Ethernet ONBOOT=yes,但是ifconfig結果顯示的是enp0s3,有點兒費解了。

再看看我復制KVM虛擬機時經常要改的網卡MAC地址:

root@cenots7 network-scripts]# ll /etc/udev/rules.d/
total 8
-rw-r--r--. 1 root root 134 Jul  9 00:47 60-vboxadd.rules
-rw-r--r--. 1 root root 352 Jul  4 00:38 98-kexec.rules

[root@cenots7 network-scripts]# cat /etc/udev/rules.d/98-kexec.rules 
SUBSYSTEM=="cpu", ACTION=="online", PROGRAM="/bin/systemctl try-restart kdump.service"
SUBSYSTEM=="cpu", ACTION=="offline", PROGRAM="/bin/systemctl try-restart kdump.service"
SUBSYSTEM=="memory", ACTION=="add", PROGRAM="/bin/systemctl try-restart kdump.service"
SUBSYSTEM=="memory", ACTION=="remove", PROGRAM="/bin/systemctl try-restart kdump.service"

[root@cenots7 network-scripts]# cat /etc/udev/rules.d/60-vboxadd.rules 
KERNEL=="vboxguest", NAME="vboxguest", OWNER="vboxadd", MODE="0660"
KERNEL=="vboxuser", NAME="vboxuser", OWNER="vboxadd", MODE="0666"
 

70-persistent-net.rules呢?

網卡MAC只在網卡配置文件里有,一旦變了我只需要改網卡配置文件?

[root@cenots7 network-scripts]# grep -r "08:00:27:9A:A6:88" /etc/
/etc/sysconfig/network-scripts/ifcfg-enp0s3:HWADDR=08:00:27:9A:A6:88
/etc/sysconfig/network-scripts/ifcfg-Auto_Ethernet:HWADDR=08:00:27:9A:A6:88

改一下網卡MAC 0800279AA688 -> 0800278C3746

 

改MAC后網卡不認了,測試結果是只需要改網卡配置文件的MAC,而且兩個配置文件都要改才行。我順便把DHCP改成了固定IP。

[root@cenots7 ~]# cat /etc/sysconfig/network-scripts/ifcfg-Auto_Ethernet 
HWADDR=08:00:27:8C:37:46
# HWADDR=08:00:27:9A:A6:88
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.150.180
NETMASK=255.255.255.0
GATEWAY=192.168.150.254
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=no
IPV6_PEERDNS=no
IPV6_PEERROUTES=no
IPV6_FAILURE_FATAL=no
NAME="Auto Ethernet"
UUID=76304098-8f46-4185-8337-bb7f0d90423e
ONBOOT=yes

[root@cenots7 ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3 
HWADDR=08:00:27:8C:37:46
# HWADDR=08:00:27:9A:A6:88
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.150.180
NETMASK=255.255.255.0
GATEWAY=192.168.150.254
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=no
IPV6_PEERDNS=no
IPV6_PEERROUTES=no
IPV6_FAILURE_FATAL=no
NAME=enp0s3
UUID=66a635c2-9600-437b-8cfb-57e9569f68da
ONBOOT=no 
 

網絡管理基礎

上篇簡單介紹了CentOS 7 在服務和網絡方面的一點變化,先前很多爛熟於心的操作指令已經不適用了,不管是否習慣,總要接受、熟悉這些變化。
寫上篇的時候還沒有最小安裝的ISO(CentOS-7.0-1406-x86_64-Minimal.iso),后來安裝了首先發現ifconfig、netstat、route、arp都沒有了,在哪兒呢?

[root@centos7 ~]# yum search ifconfig
......
======================== Matched: ifconfig =========================
net-tools.x86_64 : Basic networking tools
[root@centos7 ~]# 

 哦,最小安裝默認沒有包含這些老工具,如果非用不可,就 yum install net-tools 吧,但我就是要看看不用它們我們怎么來管理網絡。
我們將要用到的是ip指令,ss指令和NetworkManager的兩個工具 nmtui,nmcli。老實說,這幾個工具更加強大了,但還真不太容易習慣呢。

一、ip ss指令替代 ifconfig route arp netstat

1、ip 指令入門
ip [ OPTIONS ] OBJECT { COMMAND | help }  
OBJECT 和 COMMAND可以簡寫到一個字母
ip help         可以查到OBJECT列表和OPTIONS,簡寫 ip h
ip <OBJECT> help   查看針對該OBJECT的幫助,比如 ip addr help,簡寫 ip a h
ip addr         查看網絡接口地址,簡寫 ip a

查看網絡接口地址,替代ifconfig:

[root@centos7 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    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: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:15:35:d2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.150.110/24 brd 192.168.150.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe15:35d2/64 scope link
       valid_lft forever preferred_lft forever
[root@centos7 ~]# 


網絡接口統計信息

[root@centos7 ~]# ip -s link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast   
    0          0        0       0       0       0      
    TX: bytes  packets  errors  dropped carrier collsns
    0          0        0       0       0       0      
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 08:00:27:15:35:d2 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    8135366    131454   0       0       0       456    
    TX: bytes  packets  errors  dropped carrier collsns
    646297     2441     0       0       0       0    


2、ip route顯示和設定路由

顯示路由表

[root@centos7 ~]# ip route show
default via 192.168.150.254 dev enp0s3  proto static  metric 1024
192.168.150.0/24 dev enp0s3  proto kernel  scope link  src 192.168.150.110 

太難看了,格式化一下(顯示的是默認網關和局域網路由,兩行的內容沒有共通性):

[root@centos7 tmp]# ip route show|column -t
default           via  192.168.150.254  dev    enp0s3  proto  static  metric  1024
192.168.150.0/24  dev  enp0s3           proto  kernel  scope  link    src     192.168.150.110


添加靜態路由

[root@centos7 ~]# ip route add 10.15.150.0/24 via 192.168.150.253 dev enp0s3
[root@centos7 ~]#
[root@centos7 ~]# ip route show|column -t
default           via  192.168.150.254  dev    enp0s3  proto  static  metric  1024
10.15.150.0/24    via  192.168.150.253  dev    enp0s3  proto  static  metric  1
192.168.150.0/24  dev  enp0s3           proto  kernel  scope  link    src     192.168.150.110
[root@centos7 ~]#
[root@centos7 ~]# ping 10.15.150.1
PING 10.15.150.1 (10.15.150.1) 56(84) bytes of data.
64 bytes from 10.15.150.1: icmp_seq=1 ttl=63 time=1.77 ms
64 bytes from 10.15.150.1: icmp_seq=1 ttl=63 time=1.08 ms
64 bytes from 10.15.150.1: icmp_seq=1 ttl=63 time=1.57 ms
^C


刪除靜態路由只需要把 add 替換成 del,或者更簡單的只寫目標網絡

[root@centos7 ~]# ip route del 10.15.150.0/24

3、設置永久的靜態路由

ip route 指令對路由的修改不能保存,重啟就沒了。把 ip route 指令寫到 /etc/rc.local 也是徒勞的。

RHEL7官網文檔沒有提到 /etc/sysconfig/static-routes,經測試此文件已經無效;

/etc/sysconfig/network 配置文件僅僅可以提供全局默認網關,語法同 Centos6 一樣: GATEWAY=<ip address> ;

永久靜態路由需要寫到 /etc/sysconfig/network-scripts/route-interface 文件中,比如添加兩條靜態路由:

[root@centos7 ~]#echo "10.15.150.0/24 via 192.168.150.253 dev enp0s3" > /etc/sysconfig/network-scripts/route-enp0s3
[root@centos7 ~]#echo "10.25.250.0/24 via 192.168.150.253 dev enp0s3" >> /etc/sysconfig/network-scripts/route-enp0s3

注意第二條指令的重定向符號是 >> 。

重啟計算機、或者重新啟用設備enp0s3才能生效(指令:nmcli dev connect enp0s3 )。

如果要清除永久靜態路由,可以刪除 ifcfg-enp0s3文件或者注釋掉文件里的相應靜態路由條目,重啟計算機。想要讓修改后的靜態路由立即生效,只能用 ip route del 手工刪除靜態路由條目。

實驗的過程中出現兩個奇怪的現象:

1)有時候路由生效了但是在 ip route show 卻沒有顯示,重啟計算機后是肯定顯示的,原因暫時不明。

2)存在多個網卡時,默認路由似乎是隨機經由某個網卡設備。檢查了所有連接配置文件后發現,第一網卡的默認連接配置文件 ifcfg-eth0 設置了GATEWAY0(此設置會覆蓋/etc/sysconfig/network 定義的全局默認網關),第二網卡的連接配置文件 ifcfg-eth1 使用的是dhcp,會在啟動時也分配默認網關,兩個默認網關讓計算機糊塗了。這是在測試系統里經常發生的現象,生產系統一般不會讓網卡用dhcp,或者即使是用了也會仔細分配默認網關防止沖突。

其他需要注意的:

1)連接配置文件 ifcfg-* 里可以設置多個GATEWAY,一般第一個是 GATEWAY0,然后GATEWAY1, GATEWAY2... ,尾號最大的有效;

2)如果必須在/etc/sysconfig/network 文件定義全局網關,連接配置文件 ifcfg-* 就不要設置GATEWAY了,dhcp的連接要注意dhcp服務器不要定義默認網關。

3)ifcfg-enp0s3 文件改名為 ifcfg-eth0 后,route-enp0s3 文件也要改名為 route-eth0。

4、用 ip neighbour 代替 arp -n

[root@centos7 ~]# ip nei
192.168.150.254 dev enp0s3 lladdr b8:a3:86:37:bd:f8 STALE
192.168.150.100 dev enp0s3 lladdr 90:b1:1c:94:a1:20 DELAY
192.168.150.253 dev enp0s3 lladdr 00:09:0f:85:86:b9 STALE

可以用 ip nei add 添加靜態 arp 條目,ip nei delete 刪除靜態arp條目,見

http://www.linuxidc.com/Linux/2017-10/147650.htm

5、用ss 代替 netstat
對應netstat -ant

[root@centos7 ~]# ss -ant
State       Recv-Q Send-Q   Local Address:Port     Peer Address:Port
LISTEN      0      100          127.0.0.1:25                  *:*     
LISTEN      0      128                  *:22                  *:*     
ESTAB       0      0      192.168.150.110:22    192.168.150.100:53233
LISTEN      0      100                ::1:25                 :::*     
LISTEN      0      128                 :::22                 :::*    

對應netstat -antp

[root@centos7 tmp]# ss -antp
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
LISTEN     0      100               127.0.0.1:25                       *:*      
users:(("master",1817,13))
LISTEN     0      128                       *:22                       *:*      
users:(("sshd",1288,3))
ESTAB      0      0           192.168.150.110:22         192.168.150.100:59413  
users:(("sshd",2299,3))
LISTEN     0      100                     ::1:25                      :::*      
users:(("master",1817,14))
LISTEN     0      128                      :::22                      :::*      
users:(("sshd",1288,4))
[root@centos7 tmp]#

看着真的很別扭,不管多寬的終端屏,users:部分都會折到下一行,其實是在一行的。

格式化一下,內容整齊了,但是標題行串了:

[root@centos7 tmp]# ss -antp|column -t
State   Recv-Q  Send-Q  Local               Address:Port           Peer                        Address:Port
LISTEN  0       100     127.0.0.1:25        *:*                    users:(("master",1817,13))
LISTEN  0       128     *:22                *:*                    users:(("sshd",1288,3))
ESTAB   0       0       192.168.150.110:22  192.168.150.100:59413  users:(("sshd",2299,3))
LISTEN  0       100     ::1:25              :::*                   users:(("master",1817,14))
LISTEN  0       128     :::22               :::*                   users:(("sshd",1288,4))

5、網絡配置文件:
/etc/sysconfig/network   說是全局設置,默認里面啥也沒有,可以添加全局默認網關
/etc/hostname             用nmtui修改hostname后,主機名保存在這里
/etc/resolv.conf            保存DNS設置,不需要手工改,nmtui里面設置的DNS會出現在這里
/etc/sysconfig/network-scripts/       連接配置信息 ifcfg 文件
/etc/NetworkManager/system-connections/  VPN、移動寬帶、PPPoE連接

6、舊的network腳本和ifcfg文件
Centos7 開始,網絡由 NetworkManager 服務負責管理,相對於舊的 /etc/init.d/network 腳本,NetworkManager是動態的、事件驅動的網絡管理服務。舊的 /etc/init.d/network 以及 ifup,ifdown 等依然存在,但是處於備用狀態,即:NetworkManager運行時,多數情況下這些腳本會調用NetworkManager去完成網絡配置任務;NetworkManager么有運行時,這些腳本就按照老傳統管理網絡。這部分我們回頭作為專題來搞搞。

[root@centos7 ~]# /etc/init.d/network start
Starting network (via systemctl):                          [  OK  ]

注意(via systemctl),它的作用跟 systemctl restart network 一樣的。

二、nmtui配置基本網絡連接
nmtui 屬於curses-based text user interface(文本用戶界面), 類似 Centos6 的 setup 工具,但只能編輯連接、啟用/禁用連接、更改主機名。系統初裝之后可以第一時間用nmtui配置網絡,挺方便。
看圖吧,功能跳轉可以用 tab 鍵或光標鍵,用空格或回車執行。每個子功能完成了、退出了或取消了會直接回命令行(覺得不方便就試試 nmtui help,有直達的方法)。

在命令行運行 nmtui



添加連接,支持的連接很豐富啊,還有WiFi呢。但是vpn在哪?呵呵,nmtui目前還不支持。



編輯連接。



想編哪里就跳到哪里,如果不喜歡enp0s3這樣的連接名,可以在Profile name處改掉,后面會說改名的好處。



注意,編輯復選框只能用空格



啟用/禁用連接,遠程連接的時候可以試試執行一下 <Deactivate>,然后以淚洗面吧。。。。



改主機名,改完后重啟才有效,不想重啟就回命令行執行 hostname <你的主機名> ,注銷再登錄就好了。



三、nmcli和其他網絡設置
nmcli的功能要強大、復雜的多

[root@centos7 ~]# nmcli help
Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }

OPTIONS
  -t[erse]                                   terse output
  -p[retty]                                  pretty output
  -m[ode] tabular|multiline                  output mode
  -f[ields] <field1,field2,...>|all|common   specify fields to output
  -e[scape] yes|no                           escape columns separators in values
  -n[ocheck]                                 don't check nmcli and NetworkManager versions
  -a[sk]                                     ask for missing parameters
  -w[ait] <seconds>                          set timeout waiting for finishing operations
  -v[ersion]                                 show program version
  -h[elp]                                    print this help

OBJECT
  g[eneral]       NetworkManager's general status and operations
  n[etworking]    overall networking control
  r[adio]         NetworkManager radio switches
  c[onnection]    NetworkManager's connections
  d[evice]        devices managed by NetworkManager

OBJECT和COMMAND可以用全稱也可以用簡稱,最少可以只用一個字母,建議用頭三個字母。OBJECT里面我們平時用的最多的就是connection和device,這里需要簡單區分一下connection和device。

device叫網絡接口,是物理設備
connection是連接,偏重於邏輯設置
多個connection可以應用到同一個device,但同一時間只能啟用其中一個connection。
這樣的好處是針對一個網絡接口,我們可以設置多個網絡連接,比如靜態IP和動態IP,再根據需要up相應的connection。

上篇說了,/etc/udev/rules.d/70-persistent-net.rules 文件沒有了,新添加的網卡NetworkManager自動識別。我們現在試試,給Virtualbox虛擬機增加第二塊網卡,虛擬機啟動后直接可以看到並且生效了。

[root@centos7 ~]# nmcli con show
NAME                UUID                                  TYPE            DEVICE
Wired connection 1  0c451785-b098-4c5c-994d-9107171b439d  802-3-ethernet  enp0s8
enp0s3              295e1841-0ff3-4db9-8800-4e25fc2944da  802-3-ethernet  enp0s3 

“Wired connection 1”是新增的網絡連接,對應的網絡接口叫enp0s8;
“enp0s3”是最初的網絡連接,默認與網絡接口同名。

我們可以用nmtui把兩個連接改成我們熟悉的名字(nmcli也能,但比較麻煩哦)。改完了看看連接:

[root@centos7 ~]# nmcli con show
NAME  UUID                                  TYPE            DEVICE
eth1  0c451785-b098-4c5c-994d-9107171b439d  802-3-ethernet  enp0s8
eth0  295e1841-0ff3-4db9-8800-4e25fc2944da  802-3-ethernet  enp0s3

這樣就舒服多了!

看看設備:

[root@centos7 ~]# nmcli dev show enp0s3
GENERAL.DEVICE:                         enp0s3
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         08:00:27:15:35:D2
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     eth0
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/4
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         ip = 192.168.150.110/24, gw = 192.168.150.254
IP4.DNS[1]:                             192.168.150.254
IP6.ADDRESS[1]:                         ip = fe80::a00:27ff:fe15:35d2/64, gw = ::
[root@centos7 ~]#
[root@centos7 ~]# nmcli dev show enp0s8
GENERAL.DEVICE:                         enp0s8
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         08:00:27:98:D1:B7
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     eth1
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/3
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         ip = 10.0.3.15/24, gw = 10.0.3.2
IP4.DNS[1]:                             10.0.3.2
IP6.ADDRESS[1]:                         ip = fe80::a00:27ff:fe98:d1b7/64, gw = ::
[root@centos7 ~]# 


但是試試用連接名查設備呢?
[root@centos7 ~]# nmcli dev show eth0
Error: Device 'eth0' not found.


用設備名查連接也是一樣出錯:

[root@centos7 ~]# nmcli con show enp0s3
Error: enp0s3 - no such connection profile.


這回能看清楚了吧?懂得了連接和設備的區別,在一些指令幫助里面有的參數需要connection,有的需要device,就不會糊塗了。

需要注意的是,enp0s3設備對應的連接名改為eth0,但對應的ifcfg文件並沒有改名,我們改改試試,改之前先備份原配置文件到其他目錄(注意,不能備份到network-scripts目錄!)。

[root@centos7 network-scripts]# cat ifcfg-enp0s3
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
UUID=295e1841-0ff3-4db9-8800-4e25fc2944da
ONBOOT=yes
IPADDR0=192.168.150.110
PREFIX0=24
GATEWAY0=192.168.150.254
DNS1=192.168.150.254
HWADDR=08:00:27:15:35:D2
[root@centos7 network-scripts]#
[root@centos7 network-scripts]# cp ifcfg-enp0s3 /root/
[root@centos7 network-scripts]# mv ifcfg-enp0s3 ifcfg-eth0
[root@centos7 network-scripts]#
[root@centos7 network-scripts]# systemctl restart network
[root@centos7 network-scripts]# 

沒有問題,配置文件改名成功,強迫症又一次勝利了,耶!
我們還可以看到,ifcfg-eth0里面沒有參數指明設備enp0s3,唯一與設備enp0s3相對應的是MAC地址(HWADDR 08:00:27:15:35:D2)。

現在試試增加一個針對新網絡接口enp0s8的連接,現有連接是 eth1:

[root@centos7 network-scripts]# cat ifcfg-eth1
HWADDR=08:00:27:98:D1:B7
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth1
UUID=0c451785-b098-4c5c-994d-9107171b439d
ONBOOT=yes

嗯,是自動獲得IP的。

我們新建一個連接eth1-1,分配固定IP,用nmtui可以很容易的建立


[root@centos7 ~]# nmcli con show
NAME    UUID                                  TYPE            DEVICE
eth1-1  ef5c3fbc-f07a-4d6e-9f4d-83f239ffc2e9  802-3-ethernet  --     
eth1    0c451785-b098-4c5c-994d-9107171b439d  802-3-ethernet  enp0s8
eth0    295e1841-0ff3-4db9-8800-4e25fc2944da  802-3-ethernet  enp0s3
只是增加了一個連接,其他的沒有變化。
我們啟動新連接 eth1-1
 
[root@centos7 ~]# nmcli con up eth1-1
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
[root@centos7 ~]#
[root@centos7 ~]# nmcli con show
NAME    UUID                                  TYPE            DEVICE
eth1-1  ef5c3fbc-f07a-4d6e-9f4d-83f239ffc2e9  802-3-ethernet  enp0s8
eth1    0c451785-b098-4c5c-994d-9107171b439d  802-3-ethernet  --     
eth0    295e1841-0ff3-4db9-8800-4e25fc2944da  802-3-ethernet  enp0s3
[root@centos7 ~]#
[root@centos7 ~]# nmcli -t -f IP4.ADDRESS dev show enp0s8
IP4.ADDRESS[1]:ip = 10.0.3.110/24, gw = 10.0.3.2
 

“nmcli -t -f IP4.ADDRESS dev show enp0s8” 是以腳本友好的方式顯示網絡接口信息。

現在可以很明顯的看到,將連接eth1-1 up了之后,eth1-1占據了原來由eth1占據的DEVICE enp0s8,並且IP地址已經是指定的10.0.3.110/24 了。

[root@centos7 network-scripts]# cat ifcfg-eth1-1
TYPE=Ethernet
BOOTPROTO=none
IPADDR0=10.0.3.110
PREFIX0=24
GATEWAY0=10.0.3.2
DNS1=10.0.3.2
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
NAME=eth1-1
UUID=ef5c3fbc-f07a-4d6e-9f4d-83f239ffc2e9
DEVICE=enp0s8
ONBOOT=yes

ifcfg-eth1-1 文件里沒有HWADDR參數,但是多了一個DEVICE參數,等於enp0s8,你可以對比一下 ifcfg-eth1 看看區別在哪。
連接的配置文件 ifcfg-*,可以用 DEVICE 指定設備名,也可以用HWADDR指定設備的MAC地址,最終結果都一樣的指向某個設備(網絡接口)。

我們再試試用nmcli增加連接:

[root@centos7 ~]# nmcli con add con-name eth1-2 ifname enp0s8 type ethernet ip4 10.0.3.120/24 gw4 10.0.3.2
Connection 'eth1-2' (468815f5-ce97-43bd-904a-3078e2e59fec) successfully added.
[root@centos7 ~]#
[root@centos7 ~]# nmcli con show
NAME    UUID                                  TYPE            DEVICE
eth1-1  ef5c3fbc-f07a-4d6e-9f4d-83f239ffc2e9  802-3-ethernet  enp0s8
eth1    0c451785-b098-4c5c-994d-9107171b439d  802-3-ethernet  --     
eth0    295e1841-0ff3-4db9-8800-4e25fc2944da  802-3-ethernet  enp0s3
eth1-2  468815f5-ce97-43bd-904a-3078e2e59fec  802-3-ethernet  --     
[root@centos7 ~]#
[root@centos7 ~]# nmcli con up eth1-2
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@centos7 ~]#
[root@centos7 ~]# nmcli con show
NAME    UUID                                  TYPE            DEVICE
eth1-1  ef5c3fbc-f07a-4d6e-9f4d-83f239ffc2e9  802-3-ethernet  --     
eth1    0c451785-b098-4c5c-994d-9107171b439d  802-3-ethernet  --     
eth0    295e1841-0ff3-4db9-8800-4e25fc2944da  802-3-ethernet  enp0s3
eth1-2  468815f5-ce97-43bd-904a-3078e2e59fec  802-3-ethernet  enp0s8
[root@centos7 ~]#
[root@centos7 ~]# nmcli -t -f IP4.ADDRESS dev show enp0s8
IP4.ADDRESS[1]:ip = 10.0.3.120/24, gw = 10.0.3.2
[root@centos7 ~]# 

再看看新的ifcfg文件:

[root@centos7 network-scripts]# cat ifcfg-eth1-2
TYPE=Ethernet
BOOTPROTO=none
IPADDR0=10.0.3.120
PREFIX0=24
GATEWAY0=10.0.3.2
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth1-2
UUID=468815f5-ce97-43bd-904a-3078e2e59fec
DEVICE=enp0s8
ONBOOT=yes
[root@centos7 network-scripts]# 

現在up的連接是eth1-2,網絡接口enp0s8的IP是10.0.3.120
如果重新up連接eth1-1,nmcli con up eth1-1,網絡接口enp0s8的IP變成了10.0.3.110
如果重新up連接eth1,  nmcli con up eth1,  網絡接口enp0s8的IP就回到原來自動獲得的值10.0.3.15

所以,對一個網絡接口設置不同的連接,可以快速的切換不同的網絡配置,這個真的滿厲害的。
如果希望系統重啟后僅up某個特定連接,那么可以把其他連接配置文件的ONBOOT=no,ONBOOT=no的連接也可以隨時up。  #添加於2014-10-8

編輯連接
用nmtui編輯連接后,ifcfg文件也會有相應的改動;手工修改ifcfg后,nmtui中也能看到。
但是,不論用nmtui還是直接修改ifcfg文件,想讓新的配置生效,我們需要load連接配置文件並重新up連接。

舉例,我們編輯ifcfg-eth1-1,把IP改為10.0.3.111,然后執行nmcli con reload 或 nmcli con load /etc/sysconfig/network-scripts/ifcfg-eth1-1
結果如下:

[root@centos7 ~]# nmcli con load /etc/sysconfig/network-scripts/ifcfg-eth1-1
[root@centos7 ~]# nmcli con up eth1-1
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
[root@centos7 ~]# ip addr show enp0s8
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:98:d1:b7 brd ff:ff:ff:ff:ff:ff
    inet 10.0.3.111/24 brd 10.0.3.255 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe98:d1b7/64 scope link
       valid_lft forever preferred_lft forever
[root@centos7 ~]# 

新的IP地址生效了。


BONUS:如果有物理WLAN,nmcli能查看wifi,瞅瞅來,好玩吧?(示例來自nmcli-examples(5) man page,指令: man 5 nmcli-examples)

$ nmcli device wifi list

           *  SSID               MODE    CHAN  RATE     SIGNAL  BARS  SECURITY
              netdatacomm_local  Infra   6     54 MB/s  37      ▂▄__  WEP
           *  F1                 Infra   11    54 MB/s  98      ▂▄▆█  WPA1
              LoremCorp          Infra   1     54 MB/s  62      ▂▄▆_  WPA2 802.1X
              Internet           Infra   6     54 MB/s  29      ▂___  WPA1
              HPB110a.F2672A     Ad-Hoc  6     54 MB/s  22      ▂___  --


鑒於很多基本配置可以用nmtui做,而且往往設置一次就夠了,nmcli命令行其他強大功能等用的時候再查吧,這里不多講了。

參考:
https://access.RedHat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/index.html (這文檔寫的吧,,,,唉。。。)
nmcli-examples(5) man page — Gives examples of nmcli commands.
ip(8) man page — Describes the ip utility's command syntax.
nmcli(1) man page — Describes NetworkManager's command‐line tool.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM