運維人員也須要具有必定的網絡基礎知識,才能更好的對服務器網絡管理層面進行配置、排查和維護。經由幾個星期的對網絡基礎知識的補充,大概瞭解瞭如下些許關於網絡的基本認知:linux
網絡的結構:硬件+軟件;這一點卻是跟計算機系統的組成相像;算法
網絡的功能:資源共享+數據通訊;前者是後者的目的所在,後者是前者的實現手段;服務器
網絡通訊模型:ISO/OSI七層參考模型 和 TCP/IP四層參考模型網絡
IP地址部分:邏輯地址,子網掩碼,端口的做用,網關做業等等負載均衡
具有以上內容的知識後,就能對linux系統進行詳細的網絡配置了;運維
首先就是進行網卡屬性的設置,包括:socket
自動獲取:在主機所在網絡中,至少有一臺DHCP服務器tcp
手動配置:ide
a.用命令:有如下幾個‘命令家族’:工具
net-tools家族(ifcfg家族)
1.ifconfig(Windows:ipconfig):
查看網絡接口的配置信息
配置網絡屬性
管理接口狀態
2.route:
查看路由信息
配置路由信息(網關,靜態路由,靜態默認路由)
3.netstat:
狀態及統計數據的查看
iproute家族:
ip OBJECT(相似子命令)
OBJECT能夠是:
addr:IP地址和掩碼
link:物理接口的管理
route:路由的管理
ss:
狀態及統計數據查看;
相較於netstat來講,ss幾乎和它的使用方法同樣;可是性能卻要高不少;
nm家族(Network Manager)
nmcli:命令行工具
nmtui:text-window的工具
nm家族只在CentOS7中使用
在CentOS6裏,用的是setup的子命令:
system-config-network
system-config-network-cmd
system-config-network-tui
b.配置文件:一樣,使用命令的方法可使配置信息當即生效,可是系統重啓或者註銷後會失效。所以,就須要對配置文件進行修改,使得配置的網卡的網絡屬性永久生效;
在解除具體CentOS系列中網絡配置步驟以前,咱們還須要瞭解其中的網絡接口;
接口命名的方式有:
a.傳統的命名方式:
根據網絡的類型和特色;
以太網接口:eth#,#是從0開始的整數。
PPP網絡 :ppp#,#也是從0開始的整數;
環回接口:lo(loopback interface)
A類網絡127就是爲環回接口預留的 。根據慣例,大多數系統把IP地址127.0.0.1分配給這 個接口,並命名爲localhost。一個傳給環回接口的IP數據報不能在任何網絡上出現。實際 上,訪問127.x.x.x的全部IP都是訪問環回接口(lo)。
b.可預測的命名方案:(Centos7開始):
這種方案能夠支持不少種命名機制
1.根據Firmware固件進行命名:
即每一臺計算機的網卡在其計算機的硬件固件中都有惟一的標識符,好比:MAC地址,廠商標識,電器編號等;
2.根據物理拓撲結構:
每一臺計算機的主板上都有固定數量的插槽或接口,如主板上第二個插槽鏈接的網卡的第一個物理接口等;
根據不一樣的命名機制能夠有以下的命名標準
1) 若是Firmware或BIOS是主板上集成的設備提供的索引信息而且該信息可用,則根據此索引信息進行設備命名,如:enoX, eno1,eno167777736,...
2) 若是Firmware或BIOS是主板上擴展插槽所提供的索引信息而且該信息可用,則根據此索引信息進行設備命名,如:ensX, ens0,ens2,...
3) 若是硬件接口的物理拓撲的位置信息存在並可用,則能夠根據此信息進行設備命名,如:enp1s0
4) 若是用戶顯式的定義,能夠根據諸如MAC地址進行命名;如:enx000c290045b3
5) 若是上述可預測命名皆不可用,則延用傳統命名方式對網絡設備進行命名;
好,瞭解了網絡接口的命名,接着就是命令的詳細具體使用了;
-------------------------------------------------------------------------------------------
net-tools家族(ifcfg家族)
1.ifconfig命令:
描述:ifconfig - configure a network interface
ifconfig [interface]:用於查看網絡接口的配置信息
若是不帶任何參數,則顯示全部處於激活狀態的網絡接口信息;
若是執行帶有參數,則不管接口是否激活,都顯示出來
ifconfig interfere address 配置網絡信息
ifconfig interface IP/PREFIX_LEN [up/down]
ifconfig interface IP netmask SUBNET_MASK [up/down]
經常使用選項:
-a:顯示全部的網絡接口,不管是否處於激活狀態
2.route
顯示路由表的路由條目 可能包括如下幾種類型
a.主機路由:目標地址是特定的單個ip地址
b.網絡路由:子網路由;主網路由,超網路由(CIDR);分別例如:
10.10.10.0/24
192.168.1.0/24
192.168.0.0/16
c.默認路由:目標地址是0.0.0.0/0的條目
選項:-n
設置路由信息:
route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
route del [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
設置默認網關:
route add default gw 192.168.100.1
default == -net 0.0.0.0 netmask 0.0.0.0
刪除默認網關:
route del default
3.netstat:
a.Print network connections
[--tcp|-t] 只顯示與TCP協議相關的網絡鏈接
[--udp|-u] 只顯示與UDP協議相關的網絡鏈接
[--udplite|-U] 只顯示udolite協議相關的網絡鏈接
[--sctp|-S] 只顯示與sctp協議相關的鏈接
[--raw|-w] 顯示與裸套接字相關的網絡鏈接()
[--listening|-l] 顯示處於監聽狀態的TCP鏈接;
[--all|-a] 查看全部狀態的任意鏈接
[--numeric|-n] 數字化顯示結果中的主機名,端口號,用戶id等等信息
[--numeric-hosts]
[--numeric-ports]
[--numeric-users]
[--extend|-e[--extend|-e]] 擴展格式顯示結果
[--program|-p] 顯示
經常使用選項的組合有 -tan -uan -tnl -unl -tnlp -unlp -tunlp
iproute家族
ip 命令 :
描述 -- show / manipulate routing, devices, policy routing and tunnels(查看 配置路由 設備 策略路由 和 通道)
用法:ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT 能夠是:{ link | addr | route | netns }
OPTION 有 { -V[ersion] | -s[tatistics] | -r[esolve] | -f[amily] { inet | inet6 | ipx | dnet | link } | -o[neline] }
1.ip link COMMAND (COMMAND--add delete set show help)
ip link set DEVICE { up | down } 修改網絡設備的配置參數
ip link set [dev] IFACE_NAME { up | down }:激活或者禁用網絡接口
2.ip netns COMMAND -- 設置內核中的網絡名稱空間
list
add NS_NAME
exec NS_NAME cmd
delete NS_NAME
3.ip addr COMMAND --
add IFADDR dev IFACE_NAME 爲指定的網絡接口添加IP地址
del
flush 清空IP地址
{ show | list }
爲網絡接口增長多個IP地址,而且可以使用ifconfig查看
ip addr add IPADDR dev IFACE_NAME label LABEL_NAME
ip route COMMAND -- 查看和設置路由表信息
ip route { add | del } TARGET/PREFIX via NETX_HOP [dev IFACE_NAME]
ip route list
ss:
another uniity to investigate sockets
1.ss [opt] [ FILTER ]
-t:TCP相關
-u:udp相關
-w raw socket相關
-l 處於監聽狀態的鏈接
-a 全部狀態的套接字鏈接
-n 數字化顯示結果
-p 顯示相關的應用程序和PID
-e 擴展的信息
以上與netstat命令的選項基本相似,不同的有:
-m 內存使用量
-o:計時器信息
[FILTER] = [ state TCP-STATE ] [ EXPRESSION ]
TCP-STATE:TCP協議有限狀態機中全部可用狀態
EXPRESSION
dport= :port
sport= :port
示例:
'( dport = :22 or sport = :22 )'
除了命令配置使得網絡屬性當即生效,還須要配置文件:
CentOS6中與ip mask gateway DNS相關的配置文件
/etc/sysconfig/network-scripts/ifcfg-IFACE_NAME
文件內容格式:
DEVICE 網絡接口的名稱
TYPE 網絡接口的類型 常見的:Ethernet、Bridge、Token Ring ...
HWADDR 物理地址
ONBOOT 在系統引導的過程當中,是否激活此設備
NETBOOT 是否可使用此設備進行網絡引導
BOOTPROTO 激活此接口時使用何種協議來配置此接口的屬性
動態配置:dhcp、bootp
靜態配置:static、none
IPV6INIT 是否在此接口上初始化IPV6協議;
USERCTL 是否容許普通用戶管理此接口
IPADDR 指定此接口的固定IP地址,前提是BOOTPROTO爲static或者none
NETMASK 設置ip地址的子網掩碼
PREFIX 設置ip地址的網絡前綴的位數
GATEWAY 設置默認網關
DNS1 首選dns服務器的地址指向
DNS2 備選DNS服務器的地址指向
DNS3 第三DNS服務器的地址指向
PEERDNS 是否容許從dhcp服務器獲取dns服務器的地址指向替代此文件裏的dns服務器指向,默認值爲容許,即沒有此行信息 默認開啓
注意:NM_CONTROLLED 是否容許NetworkManager服務管理網絡接口;此服務在CentOS6中很是不完善,因此建議不使用此服務進行網絡接口的管理;並且最好永久關閉此服務。
主機名的配置文件 /etc/sysconfig/network
HOSTNAME 當前linux系統使用的主機名稱
命令 hostname 查看當前系統的FQDN (Fully Qualified Domain Name)徹底合格域名/全稱域名
hostname NEW_HOSTNAME
CentOS7中:
與ip mask gateway DNS相關的配置文件
/etc/sysconfig/network-scripts/ifcfg-IFACE_NAME
多數參數與CentOS6相同
UUID 全局惟一標識符,惟一標識此網絡接口
DEFROUTE
NAME
主機名稱的配置文件:/etc/sysconfig/network
# hostnamectl set-hostname NEW_NAME
本地解析配置文件:/etc/hosts
格式: IP地址 主機名(多個主機名空白字符格隔開)
解析器文件:/etc/resolv.conf
靜態路由的配置文件 /etc/sysconfig/network-scripts/route-IFACE_NAME
兩種風格的寫法
1.每條路由信息佔一行
TARGET via NETX_HOP [dev IFACE_NAME]
10.0.0.0/8 via 192.168.100.254
2.每條路由信息佔多行
ADDRESS#=TARGET
NETMASK#=MASK
GATEWAY#=NEXT_HOP
#表示編號數字
Bonding -- 綁定
就是將多塊網卡(網絡接口設備)綁定到同一ip地址,對外提供網絡服務;這些網卡之間能夠實現負載均衡或高可用技術;
經過Bonding,虛擬一個網卡對外提供服務及網絡鏈接,全部的物理網卡都被修改成相同的MAC地址
Bonding的工做模式:
Mode 0 -- 負載均衡解決方案,其負載均衡的算法爲balance-rr(round robin,輪詢)
輪詢策略意味着從頭至尾順序的在沒一個slave接口上發送數據包;該模式能夠提供負載均衡以及容錯的能力;
Mode 1 -- 主備解決方案,(active-backup master-backup).
在此模式中,只有一個slave接口被激活 用於正常數據傳輸;而其餘的接口都監視此接口的工做狀態;當且僅當活動的slave接口失敗的時候,纔會
從其餘備份的接口中選擇一個用於激活;該模式只能實現容錯,沒法進行負載均衡
Mode 3 -- 全廣播解決方案。在全部的slave接口上傳送所有報文,
miimon 用來鏈路監測。若是miimon=100,則系統每100ms監測一次鏈路鏈接的狀態。
使用Bonding的時候,須要配置:
1.建立虛擬接口
2.選擇miimon的監測時間和Bonding的工做模式
3.選擇用於這次Bonding的物理接口
在/etc/sysconfig/network-scripts/ifcfg-bond0文件裏指定Bonding的特性便可:
DEVICE=bond0
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
BONDING_OPTS="miimon=100 mode=0"
IPADDR=172.16.111.11
PREFIX=16
物理網卡配置:
/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no
...
注意不要配置ip地址
Bonding最好在CentOS6裏去實現。在7裏使用網絡組的方式
CentOS7裏的nmcli:
nmcli [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT:connection | device
device - show and manage network interfaces
COMMAND := { status | show | connect | disconnect | delete | wifi | wimax }
connection - start, stop, and manage network connections
COMMAND := { show | up | down | add | edit | modify | delete | reload | load
}
show:顯示全部網絡鏈接的屬性信息;
up|down:啓用或禁用指定的網絡鏈接;
add:添加新的網絡鏈接的;
autoconnect yes|no:是否自動啓動此鏈接,在配置文件中添加ONBOOT=yes|no;
ifname IF_NAME:指定要建立鏈接的目標網絡接口設備名稱;
con-name CON_NAME:爲指定的網絡接口設備建立一個鏈接名稱;
type TYPE:指定網絡設備的接口類型
示例:
# nmcli connection add autoconnect yes ifname eno67109432 con-name eno666 type ethernet
delete:刪除指定的網絡鏈接
# nmcli connection delete CON_NAME
示例:
# nmcli connection delete eno666
reload:不重啓網絡接口,但從新加載其配置文件中的配置信息;
modify:
modify [ id | uuid | path ] <ID> [+|-]<setting>.<property> <value>
<setting>:
802-3-ethernet.mtu
connection.autoconnect
ipv4.addresses
ipv4.dns
ipv4.gateway
ipv4.method
示例:
# nmcli connection modify "系統\ eno50332208" ipv4.addresses 1.2.3.4/8 ipv4.dns 202.202.222.222 ipv4.gateway 1.1.1.1
nmtui: Text User Interface for controlling NetManager
CentOS6 : system-config-network[-tui]或者 setup 中選擇網絡配置
這兩種雖然可使用簡單的圖形界面,但都是修改了配置文件,並不能當即生效,因此要重啓網絡接口;
.
網絡組(Network Teaming)
是將多個網絡接口設備聚合在一塊兒的方法,目的是實現冗餘容錯以及提升可用性和吞吐量;
與Bonding技術相比具備更好的性能以及更好的擴展性;
在CentOS 7中,網絡組是由內核當中的一個內核驅動和一個名爲teamd的守護進程來實現的;
網絡組能夠實現多個工做模式,被稱爲運行器(runner);
包括 broadcast、roundrobin、activebackup、loadbanlance、lacp--IEEE 802.3ad 的標準,全稱link aggregation control protocol,鏈路聚合控制協議
網絡組接口特色:
1.啓動網絡組接口並不會自動啓動網絡組中其餘port接口
2.啓動網絡組終端port接口,也不會自動啓動網絡組接口;
3.禁用網絡組接口,則會當即隨之禁用網絡組中的port接口
4.對於沒有port接口的網絡組接口而言,只能配置靜態IP地址,不能設置從DHCP獲取;若是設置了DHCP,網絡組接口就會一直等待port接口的加入;
建立網絡組接口的方法:
# nmcli connection add type team con-name TEAM_CONF_NAME [ifname IF_NAME] config JSON
JSON是用來指定runner的方式,格式爲:
'{"runner": {"name": "METHOD"}}'
示例:
建立port接口:
nmcli connection add type team-slave [con-name TEAM_CONF_NAME]
注意:若是不指定con-name,則默認的con-name爲team-slave-IF_NAME
# nmcli connection add type team-slave con-name