1. 程式人生 > >Linux-網絡部分總結(二實驗)

Linux-網絡部分總結(二實驗)

wlan grub net host 修改配置 object 發送數據 發出 firmware

Linux-網絡部分總結(二實驗)

實驗前期準備

REL=cat /etc/redhat-release | sed -nr "s#.* ([0-9]).*#\1#p"
unselinux(){
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/‘ /etc/selinux/config
setenforce 0
};unselinux
unfirewalld () {
if [ $REL =~ 6 ];then
chkconfig iptables off
service iptables stop
echo "Close the firewalld 6 "
elif [ $REL =~ 7 ];then

systemctl stop firewalld
systemctl disable firewalld
echo "Close the firewalld 7 "
fi
};unfirewalld
日常關閉防火墻和selinux

配置開始

配置網絡ip地址

centos 6(7) ip地址都存放在/etc/sysconfig/network-scripts/
裏面的ifcfg-eth0/ens33
DNS解析 /etc/resolv,config
vim /etc/udev/rules.d/70-persistent-net.rules 裏面網卡名
eth|ethtool -i eth0 查看網卡模塊狀態 eth0網卡來自e1000

modprobe -r e1000|rmmod e1000 卸載網卡驅動模塊卸載
modprobe e1000 恢復模塊 完成網卡名的啟動

/etc/sysconfig/network-scripts/ifcfg-eth0 的格式 稍微配置了一下6,7一樣
DEVICE=eth0
NAME="System eth0"
BOOTPROTO=static=none dhcp
IPADDR=192.168.60.133
NETMASK=255.255.255.0
GATEWAY=192.168.60.1
DNS1=114.114.114.114
DNS2=8.8.8.8
ONBOOT=yes 到這都是必須配置的,下面的自己選擇咯

TYPE=Ethernet
UUID=ad0682f9-4e4c-43fb-87f0-c69eb6418f38
NM_CONTROLLED=yes
HWADDR=00:0C:29:F8:74:31
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no

CentOS 7使用基於硬件,設備拓撲和設置類型命名:
(1)systemd對網絡設備的命名方式
(a) 如果Firmware或BIOS為主板上集成的設備提供的索引信息可用,且可預測則根據此索引進行命名,例如eno1
(b) 如果Firmware或BIOS為PCI-E擴展槽所提供的索引信息可用,且可預測,則根據此索引進行命名,例如ens1
(c) 如果硬件接口的物理位置信息可用,則根據此信息進行命名,例如enp2s0
(d) 如果用戶顯式啟動,也可根據MAC地址進行命名,enx2387a1dc56
(e) 上述均不可用時,則使用傳統命名機制
基於BIOS支持啟用biosdevname軟件 |內置網卡:em1,em2 pci卡:pYpX Y:slot ,X:port
(2) 名稱組成格式
en: Ethernet 有線局域網
wl: wlan 無線局域網
ww: wwan無線廣域網
名稱類型:
o<index>: 集成設備的設備索引號
s<slot>: 擴展槽的索引號
x<MAC>: 基於MAC地址的命名
p<bus>s<slot>: enp2s1 總線加插槽

將7的命名改為傳統命名:
sed -i ‘[email protected]_CMDLINE_LINUX="crashkernel=auto rhgb [email protected]& [email protected]‘ /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot 重啟生效 並按照上面的ifcfg-eth0內容配置對應的地址

配置主機名

CentOS 6 /etc/sysconfig/network|/etc/hosts
li
centos 7 是沒有/etc/sysconfig/
hostnamectl set-hostname "centos7.localdomain"
hostnamectl set-hostname "centos7.localdomain" --static
hostnamectl set-hostname "centos7.localdomain" --pretty

配置路由

route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.60.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

hostname (){
if [ $REL =~ 7 ];then
hostnamectl set-hostname "centos7.localdomain"
hostnamectl set-hostname "centos7.localdomain" --static
hostnamectl set-hostname "centos7.localdomain" --pretty
hostname centos7.localdomain
sed -i ‘s/^127.*/& centos7.localdomain/‘ /etc/hosts
elif [ $REL =~ 6 ];then
sed -i ‘s/HOSTNAME=.*/HOSTNAME=centos6.localdomain/‘ /etc/sysconfig/network
hostname centos6.localdomain
else echo "i don‘t know"
fi
};hostname

路由:
路由表:目標網絡ID netmask(genmask)|接口(iface)到達目標網絡,應該從本設備的Negev接口發出去就可以到達|網關GATEWAY 到達目標網絡,將數據包交給下一個路由器的鄰近本設備的接口的IP
實驗:關閉防火墻、selinux、NetworkManager
A eth0 routel eth1 eth0 route2 eth1 B
A:192.168.36.123/24 GATEWAY:192.168.36.200
Router1:
eth0 192.168.36.200/24
eth1 10.0.0.200/8
route add -net 172.22.0.0/16 gw 10.0.0.201
echo 1 > /proc/sys/net/ipv4/ip_forward(liunx機器收到報文會扔)
Router2
eth1:10.0.0.201/8
eth0:172.22.0.201/16
route add -net 192.168.36.0/24 gw 10.0.0.200
echo 1 > /proc/sys/net/ipv4/ip_forward
B:172.22.0.123/16 GATEWAY:172.22.0.201
traceroute 172.22.0.123
。。。。。。。。。。
route add -net 172.22.0.0 netmask 255.255.0.0 gw 10.0.0.201
route add -net 192.168.36.0 netmask 255.0.0.0 gw 10.0.0.200
這個實驗就很nice了

配置bond0

網絡接口配置-bonding
將多塊網卡綁定同一IP地址對外提供服務,可以實現高可用或者負載均衡。直接給兩塊網卡設置同一IP地址是不可以的。通過bonding,虛擬一塊網卡對外提供連接,物理網卡的被修改為相同的MAC地址
Bonding工作模式
Mode 0 (balance-rr)輪轉(Round-robin)策略:從頭到尾順序的在每一個slave 接口上面發送數據包。本模式提供負載均衡和容錯的能力
Mode 1 (active-backup)活動-備份(主備)策略:只有一個slave被激活,當且僅當活動的slave接口失敗時才會激活其他slave.為了避免交換機發生混亂此時綁定的MAC地址只有一個外部端口上可見
Mode 3 (broadcast)廣播策略:在所有的slave接口上傳送所有的報文,提供容錯能力
active-backup、balance-tlb 和 balance-alb 模式不需要交換機的任何特殊配置。其他綁定模式需要配置交換機以便整合鏈接。如:Cisco 交換機需要在模式 0、2 和 3 中使用 EtherChannel,但在模式4中需要 LACP和 EtherChannel
首先地址在同一模塊
創建虛擬bonding設備
/etc/sysconfig/network-scripts/ifcfg-bond0--創建bonding設備的配置文件
DEVICE=bond0
NAME=bond
BOOTPROTO=none:配地址省略
BONDING_OPTS= “miimon=100 mode=0”
/etc/sysconfig/network-scripts/ifcfg-eth0|兩個都加入
DEVICE=eth0
MASTER=bond0 。。。
SLAVE=yes 。。。
BOOTPROTO=none:此處地址以無效
USERCTL=no
查看bond0狀態:/proc/net/bonding/bond0|動態觀察主備
cat /sys/class/net/bonding_mas.. 看bond設備
miimon 是用來進行鏈路監測的。如果miimon=100,那麽系統每100ms 監測一次鏈路連接狀態,如果有一條線路不通就轉入另一條線路
刪除bond0 將修改的配置文件恢復
ifconfig bond0 down禁用網卡|lsmod查看模塊是否在運用|rmmod bonding卸載模塊

nmcli實現bonding  

添加bonding接口
nmcli con add type bond con-name mybond0 ifname bond0 mode active-backup
添加從屬接口
nmcli con add type bond-slave ifname ens7 master bond0
nmcli con add type bond-slave ifname ens3 master bond0
註:如無為從屬接口提供連接名,則該名稱是接口名稱加類型構成
要啟動綁定,則必須首先啟動從屬接口
nmcli con up bond-slave-eth0
nmcli con up bond-slave-eth1
啟動綁定
nmcli con up mybond0

配置網橋

網橋:解決沖突域
橋接:把一臺機器上的若幹個網絡接口“連接”起來。其結果是,其中一個網口收到的報文會被復制給其他網口並發送出去。以使得網口之間的報文能夠互相轉發。網橋就是這樣一個設備,它有若幹個網口,並且這些網口是橋接起來的。與網橋相連的主機就能通過交換機的報文轉發而互相通信。
兩臺主機,一個橋接設備,一個v6 v16
橋接設備配置:清地址,工具bridge-utils
brctl show查看橋接設備
brctl addbr br0|brctl show|ip a
brctl addif br0 eth0
brctl addif br0 eth1
ip link set br0 up
brctl showmacs br0 查看mac地址表
ip a a 192.168.60.2 dev br0 加個地址好管理

配置實現網橋
nmcli con add con-name mybr0 type bridge con-name br0 ifname br0
nmcli con modify mybr0 ipv4.addresses 192.168.0.100/24 ipv4.method manual
nmcli con add con-name br0-port0 type bridge-slave ifname eth0 master br0
查看配置文件
cat /etc/sysconfig/network-scripts/ifcfg-br0
cat /etc/sysconfig/network-scripts/ifcfg-br0-port0
工具包 yum install bridge-utils
查看網橋 brctl show
查看CAM表 brctl showmacs br0
添加和刪除網橋 brctl addbr | delbr br0
添加和刪除網橋中網卡 brctl addif | delif eth0
註意:NetworkManager只支持以太網接口接口連接到網橋,不支持聚合接口

配置網絡組team

網絡組:是將多個網卡聚合在一起方法,從而實現冗錯和提高吞吐量
網絡組不同於舊版中bonding技術,提供更好的性能和擴展性
網絡組由內核驅動和teamd守護進程實現
實驗:創建網絡組
ip link
nmcli con add type team con-name myteam0 ifname team0 config ‘{"runner": {"name": "activebackup"}}‘
nmcli con mod team0 ipv4.addresses ‘192.168.0.100/24‘
nmcli con mod team0 ipv4.method manual
nmcli con add con-name team0-port1 type team-slave ifname eth1 master team0
nmcli con add con-name team0-port2 type team-slave ifname eth2 master team0
teamdctl team0 state
ping -I team0 192.168.0.254
nmcli dev dis eno1
teamdctl team0 state
nmcli con up team0-port1
nmcli dev dis eno2
teamdctl team0 state
nmcli con up team0-port2
teamdctl team0 state
/etc/sysconfig/network-scripts/ifcfg-team0
DEVICE=team0
DEVICETYPE=Team
TEAM_CONFIG="{\"runner\": {\"name\": \"broadcast\"}}"
BOOTPROTO=none
IPADDR0=172.16.0.100
PREFIX0=24
AME=team0
ONBOOT=yes
/etc/sysconfig/network-scripts/ifcfg-team0-eth1
DEVICE=eth1
DEVICETYPE=TeamPort
TEAM_MASTER=team0
NAME=team0-eth1
ONBOOT=yes
刪除網絡組
nmcli connection down team0
teamdctl team0 state
nmcli connection show
nmcli connectioni delete team0-eth0
nmcli connectioni delete team0-eth1
nmcli connection show

補充上述需要的命令

centos6 工具集 net-tools和 iproute(新) man自己查咯--工具包
setup(圖形工具)centos6的圖形配置工具 功能很強大,建議去找幾篇好的博客了解一下
ifconfig [interface] ip link 命令
ifconfig -a
ifconfig IFACE [up|down] 啟用禁用
ifconfig interface [aftype] options | address ...
ifconfig IFACE IP/netmask [up]
ifconfig eth0:1/2 172.22.0.16|26/16 網卡別名虛擬網卡 會丟默認路由 重啟服務

route 命令 route -n
route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
route add -host 1.1.1.1 gw 172.20.0.1
默認路由,網關:172.16.0.1
route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1
route add default gw 172.16.0.1
route del (刪除路由)
route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]

mtr 地址

tcpdump命令 是一款抓包,嗅探器工具,它可以打印所有經過網絡接口的數據包的頭信息,也可以使用-w選項將數據包保存到文件中,方便以後分析
-i<網絡界面>:使用指定的網絡截面送出數據包
tcpdump -i eth1 +協議及抓對應協議的包

netstat 新命令ss 基本相通
顯示網絡連接
netstat [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]] [--program|-p]
-t: tcp協議相關 -u: udp協議相關
-w: raw socket相關 -l: 處於監聽狀態
-a: 所有狀態
-n: 以數字顯示IP和端口
-e:擴展格式 -p: 顯示相關進程及PID|lsof -i :pid 查看進程誰在用
常用組合 -tan, -uan, -tnl, -unl
顯示路由表:
-r: 顯示內核路由表 -n: 數字格式
顯示接口統計數據
netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--program|-p] [--numeric|-n]
netstat -i 顯示流量
netstat –I=IFACE (不能netstat -I eth0)
ifconfig -s eth0

watch(選項)(參數)
-n # 或--interval watch缺省每2秒運行一下程序,可以用-n或-interval來指定間隔的時間。
-d # 或--differences 用-d或--differences 選項watch 會高亮顯示變化的區域。 而-d=cumulative選項會把變動過的地方(不管最近的那次有沒有變動)都高亮顯示出來。
-t # 或-no-title 會關閉watch命令在頂部的時間間隔,命令,當前時間的輸出。
-h, --help # 查看幫助文檔
watch -n1 netstat -i

ss命令 ss [OPTION]... [FILTER]
netstat通過遍歷proc來獲取socket信息,ss使用netlink與內核tcp_diag模塊通信獲取socket信息
-m:內存用量 -w: 裸套接字相關
-x:unix sock相關 -l: listen狀態的連接
-t: tcp協議相關 -u: udp協議相關
-n: 數字格式 -p: 相關的程序及PID
-e: 擴展的信息 -a: 所有
-o:計時器信息
FILTER : [ state TCP-STATE ] [ EXPRESSION ] 過濾狀態
TCP的常見狀態:tcp finite state machine:
LISTEN: 監聽 ESTABLISHED:已建立的連接
FIN_WAIT_1 FIN_WAIT_2
SYN_SENT SYN_RECV
CLOSED EXPRESSION:
dport = sport =
示例:’( dport = :ssh or sport = :ssh )’
常用組合:-tan, -tanl, -tanlp, -uan
ss -l 顯示本地打開的所有端口
ss -pl 顯示每個進程具體打開的socket
ss -t -a 顯示所有tcp socket
ss -u -a 顯示所有的UDP Socekt
ss -o state established ‘( dport = :ssh or sport = :ssh )‘ 顯示所有已建立的ssh連接
ss -o state established ‘( dport = :http or sport = :http )‘ 顯示所有已建立的HTTP連接
ss -s 列出當前socket詳細信息

ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT := { link | addr | route }
ip link - network device configuration
set dev IFACE
可設置屬性:
up and down:激活或禁用指定接口 ifup/ifdown
show [dev IFACE]:指定接口
[up]:僅顯示處於激活狀態的接口
ip addr = ip a|可以縮寫
ip addr { add | del } IFADDR dev STRING
[label LABEL]:添加地址時指明網卡別名
ip addr add 1.1.1.1/24 dev eth1 兩個地址,ifconfig看不見
ip addr add 1.1.1.1/24 dev eth1 label eth1:test|2 ifconfig看的見別名\
ip a a 1.1.1.1/24 dev wth1 label eth1:3 scope link
[scope {global|link|host}]:指明作用域
global: 全局可用;作用於整個設備每個網卡都可被識別
link: 僅鏈接可用:作用於某一個網卡設備只識別固定網卡
host: 本機可用;僅自己可用,不具有網絡功能
[broadcast ADDRESS]:指明廣播地址
ip address show - look at protocol addresses
[dev DEVICE]
[label PATTERN]
[primary(主要的) and secondary(次要的)]
ip addr flush 使用格式同show
ip addr add 172.16.100.100/16 dev eth0 label eth0:0
ip addr del 172.16.100.100/16 dev eth0 label eth0:0
ip addr flush dev eth0 label eth0:0
ip route - routing table management
添加路由:ip route add
ip route add TARGET via GW dev IFACE src SOURCE_IP
TARGET:
主機路由:IP
網絡路由:NETWORK/MASK
ip route add 192.168.0.0/24 via 172.16.0.1
ip route add 192.168.1.13 via 172.16.0.1
添加網關:ip route add default via GW dev IFACE
ip route add default via 172.16.0.1
刪除路由:ip route del TARGET
顯示路由:ip route show|list
清空路由表:ip route flush [dev IFACE] [via PREFIX]
ip route flush dev eth0
ip link 查看數據鏈路層 ip link show eth1|eth0
ip link set dev eth1 down;ifconfig eth1 down
ip link set dev eth1 up
ip route 查看
ip route add 2.2.2.0/24 via 172.20.0.1 dev eth1
ip route del .....

centos7
圖形工具:nm-connection-editor
字符配置tui工具:nmtui| nmtui-connect| nmtui-edit| nmtui-hostname
命令行工具:nmcli
nmcli connection 查看設備名
nmcli connection modify 原網卡名 connect.id eth1
nmcli connection reload 重新加載
centos6 system-config-network字符界面改網卡名或setup第四項網絡設置
nmcli命令實驗:
nmcli connection show
nmcli connection modify eth1 ipv4.method manual ipv4.addresses 172.22.0.12 ...
nmcli connection up eth1
nmcli [ OPTIONS ] OBJECT { COMMAND | help }
device - show and manage network interfaces
nmcli device help
connection - start, stop, and manage network connections
nmcli connection help
修改IP地址等屬性:
nmcli connection modify IFACE [+|-]setting.property value
setting.property:
ipv4.addresses ipv4.gateway
ipv4.dns1 ipv4.method manual | auto
修改配置文件執行生效:systemctl restart network | nmcli con reload
nmcli命令生效: nmcli con down eth0 ;nmcli con up eth0

ping
-c<完成次數>:設置完成要求回應的次數;
-f:極限檢測;
-i<間隔秒數>:指定收發信息的間隔時間;
-I<網絡界面>:使用指定的網絡界面送出數據包;
-l<前置載入>:設置在送出要求信息之前,先行發出的數據包;
-r:忽略普通的Routing Table,直接將數據包送到遠端主機上;
-R:記錄路由過程;
-s<數據包大小>:設置數據包的大小;
-v:詳細顯示指令的執行過程

補充用到的配置文件的原始安裝格式

Linux-網絡部分總結(二實驗)