這裏主要是關於網絡屬性管理命令ifcfg家族和iproute家族的使用,還有如何經過配置文件來配置。vim
ifcfg已經存在不少年了,如今卻是有種功成身退的感受。在CentOS7上面已經默認不安裝了。iproute與內核密切相關,它的名稱可能在不能的系統上也不相同。iproute、iproute二、iproute3。bash
目錄:服務器
1、ifcfg網絡
2、iproute
app
3、配置文件
socket
1、
tcp
ifcfg家族:
編輯器
ifconfig:配置IP,NETMASK
route:路由
netstat:狀態及統計數據查看ide
ifconfig命令:接口及地址查看和管理
ui
ifconfig [INTERFACE] 顯示指定接口信息。
ifconfig -a:顯示全部接口,包括inactive非活動狀態的接口;
ifconfig interface [aftype] options | address ...
options:[-]promisc 設置工做在混雜模式,-promisc表示取消。
ifconfig IFACE IP/MASK [up|down]
ifconfig IFACE IP netmask NETMASK
能夠設置IP地址爲0,以請除接口地址。
別名:這是後來加上的,IP地址跟上面有點不一樣。
[root@localhost ~]# ifconfig eno16777736:0 172.16.40.100/16 [root@localhost ~]# ifconfig eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 800 inet 172.16.40.1 netmask 255.255.0.0 broadcast 0.0.0.0 ether 00:0c:29:91:34:92 txqueuelen 1000 (Ethernet) RX packets 10251 bytes 953348 (931.0 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 204 bytes 16582 (16.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eno16777736:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 800 inet 172.16.40.100 netmask 255.255.0.0 broadcast 172.16.255.255 ether 00:0c:29:91:34:92 txqueuelen 1000 (Ethernet)
route命令:路由查看及管理
路由條目類型:
主機路由:目標地址爲單個IP;
網絡路由:目標地址爲IP網絡;
默認路由:目標爲任意網絡,0.0.0.0/0.0.0.0
查看: -n爲以數字方式顯示(不會反解名稱)
# route -n
上面紅線部分爲默認路由,也就是默認網關。 下面兩個爲兩個接口的直連路由。
刪除:
route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]
刪除172.16.0.0的直連路由。
用route del default 也同樣。
如今不能上網和訪問172.16.0.0網段的主機嘍。
主機路由:
對單主機的,咱們這裏由於是局域網內,因此不用設置gw(gateway),直接網卡出去。
如今呢,有去往172.16.40.1的主機路由。但不能訪問其它同網段的主機。
路由表:
由於沒有路線能夠到達172.16.0.1,因此默認路由添加失敗。
默認路由就是網卡,其實就是去往任何地址的數據都從eno16777736這個接口出去,因此就能夠局域網通訊了。就算不是同一個網段,只要物理鏈路能夠到達,數據就能夠到達(通常狀況),只不過人家回覆的數據去了網關,而沒有到咱們這裏而已。
固然了在這裏設置成這樣沒有任何的價值,只是爲了更容易理解路由表。
默認路由:
這樣就能夠到外網了,咱們發往局域網的數據也會到網關那裏,只不過網關發現目地是本地,就會丟棄了。並且要有到達172.16.0.1的
恢復正常完工。
netstat命令:
Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
顯示路由表:netstat -rn
-r:顯示內核路由表
-n:數字格式
跟route -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
顯示接口的統計數據:
netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--verbose|-v] [--program|-p] [--numeric|-n]
全部接口:netstat -i
指定接口:netstat -I<IFace>
ifup/ifdown命令:只用於啓用或關閉接口,ifconfig也有這個功能。
注意:經過配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE來識別接口並完成配置;
2、iproute
iproute2家族:
ip OBJECT:
addr:地址和掩碼;
link:接口
route:路由
ss:狀態及統計數據查看
ip命令有許多的OBJECT所組成,好像在CentOS7上面的不少命令都是這樣,如: systemctl,localectl。
OBJECT :
{ link | addr | addrlabel | route | rule | neigh | ntable | tunnel | tuntap | maddr | mroute | mrule | monitor | xfrm | netns | l2tp | tcp_metrics }
ip link 網絡設備配置命令,如啓用禁用,改變MTU和MAC地址。
ip addr 主要是用來管理IP地址的, IP或IPV6。
ip route 管理路由。
ip rule 管理路由策略,用來控制路由的選擇策略,從而控制數據不一樣的走向。
ip neigh/neighbour ARP表的管理。
ip tunnel 隧道配置。
ip maddr 多播地址管理。
ip mroute 多播路由管理。
ip monitor 狀態監控,如:IP或路由的狀態的持續監控。
ip xfrm 設備xfrm, 轉換數據報的格式,數據包進行加密。
ip netns 管理網絡名稱空間
看起來好強大,但咱們這裏只介結下前三個,其它的說實話,不會。
其實ip這個命令雖然很複雜,但每一步都有help。看起來很是清楚。
show / manipulate routing, devices, policy routing and tunnels
ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT := { link | addr | route | netns }
注意: OBJECT可簡寫,各OBJECT的子命令也可簡寫;
ip link: network device configuration
ip link set - change device attributes
dev NAME (default):指明要管理的設備,dev關鍵字可省略;
up和down:
multicast on或multicast off:啓用或禁用多播功能;
name NAME:重命名接口
mtu NUMBER:設置MTU的大小,默認爲1500;
netns PID:ns爲namespace,用於將接口移動到指定的網絡名稱空間;
mtu 800 , qdisc排隊規則 pfifo_fast 前進前出,state狀態up。默認mode. 可排隊列長度1000。
link show - display device attributes
ip link help - 顯示簡要使用幫助;
ip netns: - manage network namespaces. 簡單介紹。
ip netns list:列出全部的netns
ip netns add NAME:建立指定的netns
ip netns del NAME:刪除指定的netns
ip netns exec NAME COMMAND:在指定的netns中運行命令
ip address - protocol address management.
ip address add - add new protocol address
ip addr add IFADDR dev IFACE
[label NAME]:爲額外添加的地址指明接口別名;
[broadcast ADDRESS]:廣播地址;會根據IP和NETMASK自動計算獲得;
[scope SCOPE_VALUE]:做用域
global:全局可用; 默認
link:接口可用;
host:僅本機可用;
[root@localhost ~]# ip addr add 172.16.40.1/16 dev eno16777736 [root@localhost ~]# ip addr show eno16777736 2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 800 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:91:34:92 brd ff:ff:ff:ff:ff:ff inet 172.16.40.1/16 scope global eno16777736 valid_lft forever preferred_lft forever [root@localhost ~]# ip addr add 172.16.40.2/16 dev eno16777736 [root@localhost ~]# ip addr show eno16777736 2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 800 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:91:34:92 brd ff:ff:ff:ff:ff:ff inet 172.16.40.1/16 scope global eno16777736 valid_lft forever preferred_lft forever inet 172.16.40.2/16 scope global secondary eno16777736 valid_lft forever preferred_lft forever [root@localhost ~]# ifconfig eno16777736 eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 800 inet 172.16.40.1 netmask 255.255.0.0 broadcast 0.0.0.0 ether 00:0c:29:91:34:92 txqueuelen 1000 (Ethernet) RX packets 10102 bytes 937624 (915.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 172 bytes 14634 (14.2 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
用ifconfig只能查看到主地址和別名的地址,同一個接口名稱的多個地址不會顯示出來。
添加別名:
[root@localhost ~]# ip addr add 172.16.40.12/16 label eno16777736:0 dev eno16777736
ip address delete - delete protocol address
ip addr delete IFADDR dev IFACE
[root@localhost ~]# ip addr del 172.16.40.2 dev eno16777736 Warning: Executing wildcard deletion to stay compatible with old scripts. Explicitly specify the prefix length (172.16.40.2/32) to avoid this warning. This special behaviour is likely to disappear in further releases, fix your scripts!
這個也刪除,就是提示咱們要把地址寫全,加上掩碼長度
ip address show - look at protocol addresses
ip addr list [IFACE]:顯示接口的地址;
ip addr flush:
ip address flush - flush protocol addresses
ip addr flush dev IFACE
ip addr flush [ dev STRING ] [ to PREFIX ] [ label PATTERN ]
flush也是用來清除地址的,不過用擦除更好,一擦一大片。
ip addr flush eth0 清除全部地址
ip addr flush eth0 label eth0:0 清除別名
ip addr flush eth0 to 172.16.0.0/16 清除以172.16開頭的
[root@localhost ~]# ip addr flush dev eno16777736 [root@localhost ~]# ip addr show dev eno16777736 2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 800 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:91:34:92 brd ff:ff:ff:ff:ff:ff [root@localhost ~]# ip addr add 172.16.40.100 dev eno16777736 [root@localhost ~]# ip addr add 172.16.40.101 dev eno16777736 [root@localhost ~]# ip addr add 172.16.40.102 dev eno16777736 [root@localhost ~]# ip addr add 192.168.10.10/24 dev eno16777736 [root@localhost ~]# ip addr add 192.168.10.12/24 dev eno16777736 [root@localhost ~]# ip addr show eno16777736 2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 800 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:91:34:92 brd ff:ff:ff:ff:ff:ff inet 172.16.40.100/32 scope global eno16777736 valid_lft forever preferred_lft forever inet 172.16.40.101/32 scope global eno16777736 valid_lft forever preferred_lft forever inet 172.16.40.102/32 scope global eno16777736 valid_lft forever preferred_lft forever inet 192.168.10.10/24 scope global eno16777736 valid_lft forever preferred_lft forever inet 192.168.10.12/24 scope global secondary eno16777736 valid_lft forever preferred_lft forever
咱們發如今添加地址的時候,若是不寫掩碼,默認就是32了。如今咱們清除全部172開頭的地址。
[root@localhost ~]# ip addr flush dev eno16777736 to 172/8 [root@localhost ~]# ip addr show eno16777736 2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 800 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:91:34:92 brd ff:ff:ff:ff:ff:ff inet 192.168.10.10/24 scope global eno16777736 valid_lft forever preferred_lft forever inet 192.168.10.12/24 scope global secondary eno16777736 valid_lft forever preferred_lft forever [root@localhost ~]# [root@localhost ~]# ip addr flush dev eno16777736 #清空吧。
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 del TYPE PRIFIX
ip route show - list routes
ip route flush - flush routing tables
ip route get - get a single route
ip route get TYPE PRIFIX
ip route add TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP]
# ip route add 10.0.0.0/8 via 172.16.0.1 dev eno16777736 src 172.16.40.1
# ip route add default via GW
via就等於route命令的gw,src主要用於同一個接口有多個地址的狀況。
[root@localhost ~]# ip route add 10.0.0.0/8 via 172.16.0.1 [root@localhost ~]# ip route show default via 172.16.0.1 dev eno16777736 proto static metric 100 10.0.0.0/8 via 172.16.0.1 dev eno16777736 172.16.0.0/16 dev eno16777736 proto kernel scope link src 172.16.40.1 192.168.189.0/24 dev eno33554984 proto kernel scope link src 192.168.189.190 metric 100
有多個網卡,想指定網卡爲出口,就能夠用dev來指定。
ip route delete - delete route
ip route del TYPE PRIFIX
[root@localhost ~]# ip route del 10.0.0.0/8 #刪除 [root@localhost ~]# ip route del default
ip route show - list routes
ip route change
[root@localhost ~]# ip route show default via 172.16.0.1 dev eno16777736 proto static metric 100 10.0.0.0/8 via 172.16.0.1 dev eno16777736 src 172.16.40.1
[root@localhost ~]# ip route change 10.0.0.0/8 via 172.16.0.10 [root@localhost ~]# ip route show default via 172.16.0.1 dev eno16777736 proto static metric 100 10.0.0.0/8 via 172.16.0.10 dev eno16777736
ip route flush - flush routing tables
[root@localhost ~]# ip route flush 10.0.0.0/8
ip route get - get a single route
ip route get TYPE PRIFIX
用來獲取單個路由條目
[root@localhost ~]# ip route get 192 192.0.0.0 via 172.16.0.1 dev eno16777736 src 172.16.40.1 cache [root@localhost ~]#
ss命令:
ss [options] [ FILTER ]
選項:
-t:TCP協議的相關鏈接
-u:UDP相關的鏈接
-w:raw socket相關的鏈接
-l:監聽狀態的鏈接
-a:全部狀態的鏈接
-n:數字格式
-p:相關的程序及其PID
-e:擴展格式信息
-m:內存用量
-o:計時器信息
FILTER := [ state TCP-STATE ] [ EXPRESSION ]
TCP的常見狀態:
TCP FSM:
LISTEN:監聽
ESTABLISEHD:創建的鏈接
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
狀態:
ESTABLISHED、LISTENING、CLOSED、FIN-WAIT-一、FIN-WAIT-一、SYN-SENT、SYN-RECV
查看tcp的全部已創建的鏈接
[root@localhost ~]# ss -tan state ESTABLISHED Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 192.168.189.190:22 192.168.189.1:50994 0 52 192.168.189.190:22 192.168.189.1:49923
已連立鏈接,源端口爲22的,也就是本機22端口的。
[root@localhost ~]# ss -tan state ESTABLISHED '( sport = :22 )' Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 192.168.189.190:22 192.168.189.1:50994 0 0 192.168.189.190:22 192.168.189.1:49923 [root@localhost ~]#
只查看某個端口:
[root@localhost ~]# ss -tuan '( sport = :22 )' Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp LISTEN 0 128 *:22 *:* tcp ESTAB 0 0 192.168.189.190:22 192.168.189.1:50994 tcp ESTAB 0 0 192.168.189.190:22 192.168.189.1:49923 tcp LISTEN 0 128 :::22 :::* [root@localhost ~]#
3、配置文件:
上面的各類配置命令都是在當前運行內核中生效,而重啓系統或重啓服務配置就丟了。咱們要把配置保存起來就要編輯配置文件了。系統上也有命令能夠直接在配置文件中生效而不在內核中生效的,還有能夠同時生效的。
IP配置文件:
IP/NETMASK/GW/DNS等屬性的配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE
路由的相關配置文件:/etc/sysconfig/network-scripts/route-IFACE
配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE經過大量參數來定義接口的屬性;可經過vim等文本編輯器直接修改,也可使用專用的命令的進行修改(CentOS 6:system-config-network (setup),CentOS 7: nmtui)
ifcfg-IFACE配置文件參數:
DEVICE:此配置文件對應的設備的名稱;
ONBOOT:在系統引導過程當中,是否激活此接口;
UUID:此設備的唯一標識;
IPV6INIT:是否初始化IPv6;
BOOTPROTO:激活此接口時使用什麼協議來配置接口屬性,經常使用的有dhcp、bootp、static、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_CONTROLLED:是否使用NetworkManager服務來控制接口;
如:
[root@localhost network-scripts]# cat ifcfg-eno16777736 # Generated by dracut initrd NAME="eno16777736" DEVICE="eno16777736" ONBOOT=yes NETBOOT=yes UUID="e6fb36d2-c42d-47fc-a4df-29dec9cf3111" IPV6INIT=yes BOOTPROTO=static IPADDR=172.16.40.10 NETAMSK=255.255.0.0 GATEWAY=172.16.0.1 DNS1=172.16.0.1 TYPE=Ethernet [root@localhost network-scripts]#
在CentOS7裏面有點不同,能夠用prefix來表示掩碼長度,同一個設備能夠用多個IP地址。如:
TYPE=Ethernet BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no NAME=enp0s3 UUID=065a8851-f7ba-4d50-8cbb-ec71cb4a24d3 DEVICE=enp0s3 ONBOOT=yes IPADDR=172.16.40.12 PREFIX=16 IPADDR1=172.16.40.31 #注意看這裏,第二個IP地址。 PREFIX1=16 #使用方式在IPADDR後面加數字就能夠。 這裏的掩碼長度也同樣。
結果就是這種:
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:fd:00:4e brd ff:ff:ff:ff:ff:ff inet 172.16.40.12/16 brd 172.16.255.255 scope global enp0s3 valid_lft forever preferred_lft forever inet 172.16.40.31/16 brd 172.16.255.255 scope global secondary enp0s3 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fefd:4e/64 scope link valid_lft forever preferred_lft forever
可是在配置文件中設置網卡別名,卻一直沒有成功。 之後再說啦。
網絡服務:在咱們的CentOS上面有兩個管理網絡的服務。
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
支持兩種配置方式,但不可混用;
(1) 每行一個路由條目:
TARGET via GW
[root@localhost network-scripts]# cat route-eno16777736 0.0.0.0/0 via 172.16.0.1 10.0.0.1 via 172.16.0.1 192.168.0.0/24 via 192.168.189.1 223.108.1.8 via 10.0.0.1 [root@localhost network-scripts]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.16.0.1 0.0.0.0 UG 0 0 0 eno16777736 10.0.0.1 172.16.0.1 255.255.255.255 UGH 0 0 0 eno16777736 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eno16777736 172.16.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eno16777736 192.168.0.0 192.168.189.1 255.255.255.0 UG 0 0 0 eno33554984 192.168.189.0 0.0.0.0 255.255.255.0 U 100 0 0 eno33554984 [root@localhost network-scripts]#
由於在IP配置裏面已經設置網關了,這裏其實也不用再加上默認路由了。還有就是下一條須要是本機可達的。
(2) 每三行一個路由條目:
ADDRESS#=TARGET
NETMASK#=MASK
GATEWAY#=NEXTHOP
例子:
ADDRESS0=192.168.0.0
NETMASK0=255.255.255.0
GATEWAY0=172.16.100.177
ADDRESS1=192.168.1.10
NETMASK1=255.255.255.255
GATEWAY1=172.16.100.77