1. 程式人生 > >2018-4-17Linux系統管理(18)(19)網絡配置命令及網絡配置文件

2018-4-17Linux系統管理(18)(19)網絡配置命令及網絡配置文件

Linux 系統管理

在前面的章節當中我們講述了計算網絡通信的基礎知識,介紹網絡的拓撲結構類型及對於Linux來說的網絡屬性如何進行相關配置,而後有介紹了TCP/IP的協議棧,而這個協議棧是計算機真正使用的協議棧,以分層的概念將復雜問題進行切割,每層都有其相關的協議,都能夠獨立且相互調用可以協作完成。該協議棧共有四層,分別為物理層、互聯網層、傳輸層及應用層進行組合。而對於底層來講,作為運維的話我們無需掌握很多,不過我們也必須稍微進行一個了解,比如在互聯網層中最為最重要的協議是IP協議,而在傳輸層中最為重要的協議為TCP、UDP,而在應用層所涉及的協議就非常的多,比如http、https、ftp、ldap...,這就是為什麽
TCP/IP被稱之為一個協議棧的原因。

我們也講到了,兩臺主機通信時一定要遵守某種協議進行通信,彼此之間要使用某種協議規範來進行通信,像物理層(或叫數據鏈路層)它們的數據報文格式是以太網幀,而互聯網層的數據報文為IP報文,或者叫做IP包,傳輸層的數據報文叫做傳輸層數據報文,但不會進行獨立傳輸,我們只需記住在鏈路層是用以太網幀進行封裝報文,而在互聯網層是用IP報文來進行封裝。

當傳輸一個或多個文件時,首先就會打散成一個一個的包,拆分報文進行傳輸,而後添加應用層、傳輸層首部、IP首部及以太網幀,一個大文件會被拆分成n個小片,一片一片的發送,任何一片發送錯誤,只需重新傳輸該片就可以了,因為以太網幀有最大傳輸單元(

MTU),最大存儲為1500個字節,由於最大傳輸單元也要封裝幀首部或其它首部等,所以留給IP報文也就不到約1400個字節。

而後又講述了Linux的網絡配置方案,第一種方案是以命令的方式來進行配置,立即送往內核,但不會永久有效。第二個方案就是修改配置文件,能夠永久有效包括下一次啟動時也能有效,但不會立即生效,所以需要讓內核強制重讀該配置文件才可以生效。

以上就是總結內容,那麽在這一章中繼續講述Linux網絡屬性配置。

一、Linux網絡屬性命令

1.1 ifcfg家族

那麽在上一章當中我們講述了及介紹了網絡配置命令的幾大家族,現在我們開始講解第一個,名稱姑且叫做ifcfg家族。這個命令家族是一個很古老的家族,各大發行版中都會有它的身影,不過也要面向逐漸淘汰的命運。因為該命令家族的功能很薄弱,雖然伴隨著Linux度過了許多歲月,但是畢竟有了新的家族逐漸替代撼動這個家族,那麽在這個ifcfg家族中有那麽幾種命令:

ifcfg家族:ifconfig, route, netstat

我們先來說第一個命令,ifconfig命令,該命令可以查看某個接口的IP等信息,對於我們來講,在沒有跟上任何參數時,能夠顯示當前主機上所有活動接口上的狀態,我們需要註意的是,只關註最後一行的errorsdropped,意思為傳輸的錯誤個數以及被丟棄的個數是否有異常情況的發生,CentOS 6和7版本的跨度是非常大的,-a的選項是顯示所有接口,包括非活動狀態的接口,那麽該命令的簡單用法為:

    ifconfig命令:接口及地址查看和管理
        ifconfig [INTERFACE]
            # ifconfig
            -a:顯示所有接口,包括inactive狀態的接口;

ifconfig還可以實現地址配置功能,配置時有兩種方式進行選擇,如果網卡始於未激活的狀態,我們可以用up命令來進行激活,用於配置IP地址及掩碼。需要註意的是,才用命令的方式用來配置IP地址及掩碼,立即送入內核並開始立即生效,當已經有原來的地址時,則會被沖刷掉。

    ifconfig interface [aftype] options | address ...
        # ifconfig IFACE IP/MASK [up|down]
        # ifconfig IFACE netmask NETMASK
        
        oprions:
            [-]promisc:混雜模式;
            
    註意:立即送往內核中的TCP/IP協議棧,並生效;

示例:

# ifconfig ens36 192.168.163.128/24 up
# ifconfig ens36 192.168.163.128 netmask 255.255.255.0

我們還可以使用改名了去添加或刪除IPv6的地址,不過我們只需了解即可。

管理IPv6地址:
    add addr/prefixlen
    del addr/prefixlen

接下來說的是route命令,該命令是路由查看及管理的命令,任何一個主機需要跨網絡,而非本地通信時,如果不用那麽麻煩的話,可以添加一個默認網關就可以了,使得該主機誇網絡通信時由該網關進行轉發,我們可以在主機上添加路由條目類型。

route命令:路由查看及管理
    
    路由條目類型:
        主機路由:目標地址為單個IP;
        網絡路由:目標地址為IP網絡;
        默認路由:目標為任意網絡, 0.0.0.0/0.0.0.0

要想查看及管理路由的話,我們需要使用route命令,最簡單的查看使用route -n,以數字格式進行查看,不然的話就會顯示出主機名,並不建議這樣直接查看主機名。

    查看:
        # route -n
            -n:以數字方式查看路由信息,而不要反解析地址和端口號;

而管理也無非就是增、刪、查、改,而查看我們已經說完了,我們現在先講述一下如何添加路由。
那麽添加路由的格式為使用
route命令添加一個網絡或主機路由,target則表示網絡地址是什麽,掩碼可以省略,如果添加掩碼用netmask就可以了,而後使用gw指明下一跳地址,而下一跳就是到達目的地需要經過那個下一跳的地址,此前也講過A主機到達B主機時,要經過R1的路由的1號接口,說明一定要找自己最近的,意思為主機的IP一定要與路由的網關相同,因為我們所指的網關一定是在同一網段內的主機地址,這也就意味著A主機的主機地址一定要與R1的1號接口路由地址相同,不然無法通信也就沒有辦法進行下一跳的轉發。而後,到達那個網絡時,需要從哪個接口進行發送。

例如:我們添加一個路由條目到達為10.0.0.0/8的網絡地址,要經過192.168.163.1這麽一個下一跳的地址。

# route add -net 10.0.0.0/8 gw 192.168.163.1

假如我們的主機沒有默認網關,需要添加時,則可以:

# route add default gw 192.168.163.1
# route add -net 0.0.0.0/0.0.0.0 gw 192.168.163.1

如果達到某個單個主機,使用-host就可以了,其它的沒有什麽特別之處。

    添加:
        route add [-net|-host] target [netmask Nm] [gw GW] [[dev] If]

那麽接下來如何刪除路由,一般而言這裏很少修改,只是刪除在添加,而刪除的方式比添加的方式還要簡單,因為可以不用指下一跳是那個地址。

    刪除:
        route del [-net|-host] target [gw GW] [netmask Nm] [[dev] If]

刪除剛才添加的兩個網關:

# route del -net 10.0.0.0.0/8 gw 192.168.163.1
# route del default

netstat命令是可以顯示網絡連接狀態以及路由表及接口狀態等一個功能非常強大的命令,在這裏我們簡單介紹一下。

netstat命令
    顯示路由表:netstat -rn
        -r:顯示內核路由表;
        -n:以數字格式顯示;
        
    顯示網絡連接:
        netstat [--tcp|-t] [--udp|-u] [--udplite|-U] [--sctp|-S] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]] [--program|-p]
            -t:TCP協議的相關連接,連接均有其狀態;FSM(Finate State Machine)有限狀態機;
            -u:UDP相關的連接;
            -w:raw socket相關的連接;
            -l:處於監控狀態的連接;
            -a:所有狀態;
            -n:以數字格式顯示IP和Port;
            -e:擴展格式;
            -p:顯示相關的進程及PID;
            
        常用組合:
            -tan, -uan, -tnl, -unl, -tunlp

TCP和UDP的區別在於,一個是有連接的,一個無連接。

        傳輸層協議:
            tcp:面向連接的協議;通信開始之前,要建立一個虛鏈路;通信完成之後還要拆除連接;
            udp:無連接的協議;直接發送數據報文;

我們還可以使用該命令顯示接口及相關的統計數據。

    顯示接口的統計數據:
        netstat {--interfaces|-I|-i} [--all|-a] [--extend|-e] [--verbose|-v]  [--program|-p]  [--numeric|-n]
        
        所有接口:
            netstat -i
        指定接口:
            netstat -I<IFace>

對於CentOS來說,還有兩個命令我們補充一下,兩個是ifup/ifdown命令,這兩個命令用於啟動和禁止網絡接口的命令,但需要實現提供其網絡配置文件。

ifup/ifdown命令:
    註意:通過配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE來識別接口並完成配置;

那麽接下來說的就是如何配置主機名,那麽配置主機名的命令為hostname,同時,查看也是使用該命令,但其配置格式為hostname HOSTNAME,不過需要註意的是,這個主機名推送到內核也是立即生效的,要想永久有效我們可以將其寫進配置文件當中,在CentOS 5和6或之前的版本中,其配置文件為/etc/sysconfig/network,不過在CentOS 7中,其配置文件路徑在/etc/hostname中,而且可以使用hostnamectl命令直接設定主機名並寫入配置文件中且立即永久生效。

配置主機名:
    
    hostname命令:
        查看:hostname
        配置:hostname HOSTNAME
            當前系統有效,重啟後無效;
            
    hostnamectl命令(CentOS 7):
        hostnamectl status:顯示當前主機名信息;
        hostnamectl set-hostname:設定主機名,永久有效;
        
    配置文件:/etc/sysconfig/network
        HOSTNAME=
        
        註意:此方法的設置不會立即生效;但以後會一直有效;

配置DNS服務器的路徑在/etc/resolv.conf文件中,DNS就是將我們的域名解析為IP,或者將IP解析為域名也是可以的,這就是DNS服務器,在該文件中配置DNS一定要使用主機IP地址,而不能使用域名還解析,最多指向三個被當作DNS服務主機。

配置DNS服務器指向:
    
    配置文件:/etc/resolv.conf
        nameserver DNS_SERVER_IP
        
        如何測試(host/nslookup/dig):
            # dig -A FQDN
                FQDN --> IP
            # dig -t IP
                IP --> FQDN

2.2 iproute2家族

在這個家族當中,主要涉及到兩個命令,一個就是ip命令,另一個就是ss命令,ip命令包含了眾多的子命令,可以說無論是配置IP還是網關,都是通過ip的子命令來完成的,是一個功能眾多,且性能較好的一款工具,逐漸取代ifcfg家族,其版本號與內核的版本號相同,也是內核密切相關,因為該命令大部分是在內核直接生效的,因此與內核密切配合,如果內核有的功能無法實現,則該家族也是無法實現某些功能。

那麽ip命令是一個顯示/操作路由及設備,以及設置路由和隧道的一種工具,對於OBJECT來說用於管理的設備。例如地址或路由等,而該命令的單間使用格式為:

ip [OPTIONS] OBJECT {COMMAND | help } 
    OBJECT := { link | address | route | netus }
    
    註意:OBJECT可簡寫,個OBJECT的子命令也可簡寫;

在iproute2家族中,我們先來講一下ip OBJECT一類的管理命令,首先我們講一下ip link,它是用來完成網絡設備配置的一中命令,它有許多的子命令來完成其接口的配置,一個是ip link set另一個是ip link show,一個為修改設備屬性,另一個為顯示設備屬性。

在這裏我們主要說的是ip link set,跟之間講過的ifconfig命令是很相似的,比如將某個網卡禁用,示例為:

# ip link set ens36 down

啟用改成up就可以了,而後show一下就會有UP的狀態。

# ip link set ens36 up
# ip link show
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:d0:a9:56 brd ff:ff:ff:ff:ff:ff

那麽該命令的格式如下,需要註意的時,dev關鍵字是可以省略的:

    ip OBJECT:
        
        ip link: network device configureation
            
            ip link set - Change device attibutes
            
                ip link set { DEVICE | group GROUP }
                    { up | down }
                    [ multicast{ on | off} ]:啟用和禁用多播功能;
                    [ name NEWNAME ]:重命名接口;
                    [ mtu MTU ]:設置MTU的大小,默認為1500;
                    [ netns { PID | NETSNAME } ]:ns為namespace,用於將接口移動到指定的網絡名稱空間;
                    
            ip link show 顯示設備屬性;
            
            ip link help 顯示簡要使用幫助;

ip netns是用於管理網絡名稱空間的,可將某個網卡放入到該名稱空間中進行管理。

ip netns: ip - manege network namespace.

    ip netns list:列出所有的netns;
    ip netns add NAME:創建指定的netns;
    ip netns del NAME:刪除指定的netns;
    ip netns exec NAME COMMAND:在指定的netns中運行命令;

示例步驟:

# ip netns add mynet
# ip link set ens36 netns mynet
# ip netns del mynet
# ip link show

還有命令為ip address,顧名思義,就是管理網絡接口上IP地址的,而管理也無非就是曾刪查改等四個基本功能,我們先說第一個ip address add,就是添加IP地址的。

ip address - protocol address management.

    ip address add - add new protocol address.
        ip addr add IPADDR dev IFACE
            [label NAME]:為額外的地址指明接口別名;
            [broadcast ADDRESS]:廣播地址;會根據IP和NERMASK自動計算得到;
            [scope SCOPE_VALUE]:
                global:全局可用;
                link:接口可用;
                host:僅本機可用;

示例:(可添加多個地址)

# ip addr add 192.168.163.126/24 dev ens36
# ip addr add 10.0.0.5/8 dev ens36
# ip addr add 10.0.0.10/8 dev ens36 label ens36:1

刪除ip地址的命令格式為:

    ip address delete - delte protocol address.
        ip addr delete IFACE dev IFACE

示例:

# ip addr delete 10.0.0.10/8 dev ens36:1

查看ip地址的命令格式為:

    ip address show - look at protocol addresses.
        ip addr show/list [IFACE]:僅顯示指定接口的地址;

那麽將ip地址進行沖刷或徹底清除(主/副ip地址),不支持簡寫的命令格式為:

    ip address flush - flush protocol addresses.
        ip addr flush dev IFACE

下一個命令為ip route,用於實現路由管理的命令,在這裏我們簡單總結一些所常用的操作,而多出的get是獲取其中一條路由的指令操作。

ip-route - routing table management
    
    ip route add - add new route.
    ip route change - change route.
    ip route replace - change or add new one.
        ip route add TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP]
    
    ip route delete -delete route.
    
    ip route show - list routes.
        TYPE PREFIX
    ip route flush - flush routing tables.
        TYPE PREFIX
    ip route get - get a single route.
        ip route get TYPE PREFIX

示例:

# ip route add 192.168.163.0 via 192.168.163.1 src 192.168.163.129
# ip route add default via 192.168.163.1 
# ip route delete 192.168.163.0/24
# ip route delete default
# ip route get 192.168.163.0

而後接下來的命令為ss命令,那麽ss命令的使用方法基本和netstat的使用方法是一致的,其功能的作用在這裏也無需贅述,但是對比性能方面,ss命令更勝一籌,但是在平時這兩個命令並沒有什麽特別之處,只有在特殊的環境下ss的性能更勝一籌,也就是取代netstat的原因。

ss [options] [FILETER]
    選項:
        -t:TCP協議相關的連接;
        -u:UDP協議相關的連接;
        -w:raw socket相關的連接;
        -l:監聽狀態的連接;
        -a:所有狀態的連接;
        -n:以數字格式顯示;
        -p:相關的進行及其PID;
        -e:擴展格式信息;
        -m:內存用量;
        -o:計時器信息;

相比較而言,ss多出了一個FILETER,稱之為過濾器,就是只查看那種狀態的連接,或者額外指明一些表達式,而且要做過多的了解之後才能進行一系列的操作,所以在這裏進行一個簡單介紹,需要註意的是,=之間必須要有空格,否則就會語法錯誤。

    FILTER := [ state STATE-FILETER ] [ EXPRESSION ]
        
        TCP常見狀態:
            TCP FSM:
                LISTEN:監聽;
                ESTABLISTEN:建立的連接;
                FIN_WAIT_1:
                FIN_WAIT_2:
                SYN_SENT:
                SYN_RECV:
                CLOSED:
                
            EXPRESSION:
                dport=
                sport=
                    示例:`( dport= :22 or sport= :22 )`
                        # ss -tan '( dport = :22 or sport = :22 )'
                        # ss -tan state ESTABLISHED

二、網絡配置文件

在之前我們講到,無論主機是在本地通信還是跨網絡通信,IP地址是一個比不可少的選擇,那麽將主機接入到互聯網當中需要設置IP以及掩碼和網關還要加上DNS服務器地址用來解析,那麽我們可以使用兩種方法來進行實現,第一種則是以命令的方式直接推送給內核立即生效,第二就是將我們所設置的信息寫入到配置文件當中,雖然不會立即生效,但下次重啟時可永久生效,也可以將所配置的網絡屬性信息寫入到配置文件之後,讓內核強制讀取該配置文件則立即生效。

對於RHEL系列的操作系統來說,該配置文件路徑在:

配置文件:
    IP/NERMASK/GW/DNS等網卡屬性配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE
        IFACE:接口名稱;
    路由的相關配置文件:/etc/sysconfig/network-scripts/route-IFACE
    
    配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE通過大量的參數定義接口的屬性;可用vim等文本編輯直接修改,也可使用專用的命令進行修改;(CentOS 6: system-config-network(setup), CentOS 7:nmtui)

以上介紹了如果將網絡屬性進行配置的兩種方式,第一個直接可用vim進行編輯,將網絡定義的屬性進行編輯和修改,第二個則是使用命令打開一個文本窗口,通過該文本界面可間接修改配置文件,添加配置參數時,其格式都是大寫的,每個參數都有各自的意義,見名之意即可。

    ifcfg-IFACE配置文件參數:
        DEVICE:此配置文件對應的設備名稱;
        ONBOOT:在系統引導過程中,是否激活此接口;
        UUID:此設備的唯一標識;
        IPV6INIT:是否初始化IPv6;
        BOOTPROTO:激活此接口時使用什麽協議來配置接口屬性,常用的有dhcp, static, bootp, none;
        TYPE:接口類型,常見的有Ethernet, Bridge;
        DNS1:第一DNS服務器指向;
        DNS2:備用DNS服務器指向;
        DOMAIN:DNS搜索域;
        IPADDR:IP地址;
        NETMASK:子網掩碼;CentOS 7支持使用PREFIX以長度的方式指明子網掩碼;
        GATEWAY:默認網關;
        USERCTL:是否允許普通用戶控制此設備;
        PEERDNS:如果BOOTPROTO的值為"dhcp",是都允許dhcp server分配的DNS服務器指向覆蓋本地手動指定的DNS服務器指向;默認為允許;
        HWADDR:設備的MAC地址;
        
        NM_CONTROCOLLED:是否使用NetworkManager服務來控制接口;(建議CentOS 6更改為no)

NM_CONTROCOLLED會在開機時自動啟動一些網絡服務,這個網絡服務有一些功能腳本能夠讀取該配置文件的某些參數來配置該主機地址及掩碼網關等。所以說對於網絡服務共有兩個,一個是network,另一個為networkManager,但對於CentOS 6而言,其networkManager並不完善,還是處於一個實驗性階段的服務,所以建議使用network,禁用networkManager,否則不支持某些高級功能。

我們在修改完配置文件的時候,想要立即生效的話,就要重啟網絡服務。

網絡服務:
    network
    networkManager
    
    管理網絡服務:
        CentOS 6:service SERVICE { start | stop | restart | status }
        CentOS 7:systemctl { start | stop | restart | status } SERVICE.service
        
    配置文件修改之後,如果要生效,需要重啟網絡服務;
        CentOS 6:# service network restart
        CentOS 7:# systemctl restart network.service

而對於要用到非默認網關路由配置文件路徑在/etc/sysconfig/network-scripts,以route-IFACE進行命名。

用到非默認網關路由:/etc/sysconfig/network-scripts/route-IFACE
    支持兩種方式,但不可混用;
        (1) 每行一個路由條目;
            TARGET via GW
            
        (2) 每三行一個路由條目;
            ADDRESS#=TARGET
            NETMASK#=MASK
            GATEWAY#=NEXTHOP


2018-4-17Linux系統管理(18)(19)網絡配置命令及網絡配置文件