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: 集成设备的设备索引号
s: 扩展槽的索引号
x: 基于MAC地址的命名
ps: enp2s1 总线加插槽

将7的命名改为传统命名:
sed -i 's@GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet@& net.ifnames=0@' /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:详细显示指令的执行过程

补充用到的配置文件的原始安装格式