一、知识整理
1、跨网络通信:路由
路由的分类:主机路由;网络路由;默认路由。
将主机接入网络,需要配置网络相关设置。一般包括如下内容:主机名;IP/MASK;路由:默认网关;DNS服务器:主、次、第三DNS服务器。
2、网络配置文件:IP、MASK、GW、DNS相关配置文件
/etc/sysconfig/network-scripts/ifcfg-IFACE
路由相关配置文件:
/etc/sysconfig/network-scripts/route-IFACE
3、dmesg查看开机信息
[root@localhost ~]# dmesg | grep SELinux [ 0.000137] SELinux: Initializing. [ 0.000153] SELinux: Starting in permissive mode [ 1.642242] SELinux: Registering netfilter hooks [ 9.496131] SELinux: 2048 avtab hash slots, 105321 rules. [ 9.506233] SELinux: 2048 avtab hash slots, 105321 rules. [ 9.531455] SELinux: 8 users, 105 roles, 4952 types, 302 bools, 1 sens, 1024 cats [ 9.531458] SELinux: 83 classes, 105321 rules [ 9.535006] SELinux: Completing initialization
4、lsmod查看绑定模块:
[root@localhost ~]# lsmod | grep tcp tcp_diag 12591 0 inet_diag 18543 3 tcp_diag,dccp_diag,udp_diag
rmmod删除模块
网络接口识别并命名相关的udev配置文件:
/etc/udev/rules.d/70-persistent-net.rules
udev:udev 是Linux kernel 2.6系列的设备管理器。它主要的功能是管理/dev目录底下的设备节点。它同时也是用来接替devfs及热插拔的功能,这意味着它要在添加/删除硬件时处理/dev目录以及所有用户空间的行为,包括加载固件时Linux 2.6.13内核。
卸载网卡驱动:modprobe -r e1000
modprobe e1000启动网卡模块
e1000是使用ethtool -i eth0命令查看,找到driver
[root@localhost ~]# ethtool -i eno16777736 driver: e1000 version: 7.3.21-k8-NAPI firmware-version: bus-info: 0000:02:01.0 supports-statistics: yes supports-test: yes supports-eeprom-access: yes supports-register-dump: yes supports-priv-flags: no
5、临时别名:ifconfig eno16777736:1 ####/#
删除别名 ifconfig eno16777736:1 down
启用和禁用网卡:ifconfig eth0 up/down
6、本地解析器:解析器执行正向和逆向查询,联网时先查询本地解析再通过DNS解析。
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析),也可反向解析。DNS协议运行在UDP协议之上,使用端口号53。
/etc/hosts 本地主机名数据库和IP地址的映像;对小型独立网络有用;通常,在使用DNS前检查。
getent hosts 查看/etc/hosts内容
[root@localhost ~]# getent hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 127.0.0.1 localhost localhost.localdomain localhost6 localhost6.localdomain6 [root@localhost ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
cat /etc/resolve.conf 查看配置DNS
[root@localhost ~]# cat /etc/resolv.conf # Generated by NetworkManager # No nameservers found; try putting DNS servers into your # ifcfg files in /etc/sysconfig/network-scripts like so: # DNS1=xxx.xxx.xxx.xxx # DNS2=xxx.xxx.xxx.xxx # DOMAIN=lab.foo.com bar.foo.com
cat /etc/nsswitch.conf 可以更改优先级,默认hosts优先于DNS。
将hosts: files dns一行files和dns互换,用于改变优先级。
7、route配置文件/etc/sysconfig/network-scripts/route-IFACE
两种格式:第一种 #### via GW
第二种:每三行定义一条路由
ADDRESS1=TARGET
NETMASK1=mask
GATEWAY1=GW
格式是:ADDRESS#=TARGET
NETMASK#=mask
GATEWAY#=GW
8、在网卡配置文件中添加一行DOMAIN=magedu.com。在/etc/hosts文件中添加一行
#.#.#.# www.magedu.com
重启网络服务后,在/etc/resolv.conf会多出一行search magedu.com。此时用ping命令直接ping www. 会自动识别本地解析,ping #.#.#.#。
9、centos7网络属性配置:rhel7基于硬件,设备拓扑和设置类型命名:
systemd对网络设备的命名方式:
①如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,且可预测,根据此索引进行命名,例如eno1;
②如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,例如ens1;
③如果硬件接口的物理信息可用,则根据此信息进行命名,例如enp2s0;
④如果用户显式启动,也可根据MAC地址进行命名,例如enx2387a1dc56;
⑤上述均不可用时,则使用传统命名机制。
网卡名称:基于BIOS支持biosdevname中,内置网卡em1,em2;pci卡:pYpX(y:slot插槽,X:port端口)。
PCI定义局部总线的标准,支持10台外设,64位寻址:pci插槽,基于局部总线的扩展插槽。
网卡名称含义:
en:Ethernet 有线局域网
wl:wlan 无线局域网
ww:wwan无线广域网
o <> 集成设备的设备索引号
s<> 扩展槽的索引号
x<MAC> 基于MAC地址的命名
p<bus>s<slot> enp2s1
网卡命名过程:
第一步:udev,辅助工具程序/lib/udev/rename_device;/usr/lib/udev/rules.d/60-net.rules
第二步:biosdevname 会根据/usr/lib/udev/rules.d/71-biosdevname.rules;
[root@localhost ~]# cat /usr/lib/udev/rules.d/60-net.rules ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{type}=="1", PROGRAM="/lib/udev/rename_device" , RESULT=="?*", NAME="$result"
第三步:通过检测网络接口设备,根据/usr/lib/udev/rules.d/75-net-description.rules。
二、命令详解及事例
1、route命令:查看路由route -n;添加路由route -add
route add -net #.#.#.# gw #.#.#.# dev eth#
route del -net #.#.#.# netmask #.#.#.#
route del -host #.#.#.#
2、ip命令:ip [opt] OBJECT {help|COMMAND}
OBJECT:link|addr|route
ip link :network device configuration
[root@localhost ~]# ip link set dev eno16777736 up [root@localhost ~]# ip link set dev eno16777736 down [root@localhost ~]# ifup eno16777736 RTNETLINK answers: File exists [root@localhost ~]# ifdown eno16777736 [root@localhost ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT
qlen 1000 link/ether 00:0c:29:51:36:20 brd ff:ff:ff:ff:ff:ff
ip link show [dev IFACE] 指定接口
[up] 仅显示处于激活状态的接口
ip addr {add|del} ADDR dev STRING
[LABEL] 添加地址时指明网卡别名
[scope {global|link|host}] :指明作用域
global 全局可用,默认。
当三块网卡,两块网络组挂掉之后,第三块继承了IP,也可以继续用。因为IP是写入内核中的,并不是写在网卡上,当定义为global后,全局可用。
link 仅链接可用
host 本机可用
[broadcast ADDRESS] 指明广播地址
ip address show :look at protocol addresses
[root@localhost ~]# ip addr add 172.16.100.13/16 dev eno16777736 label eno16777736:1 [root@localhost ~]# ifconfig eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.1.54.250 netmask 255.255.0.0 broadcast 10.1.255.255 inet6 fe80::20c:29ff:fe51:3620 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:51:36:20 txqueuelen 1000 (Ethernet) RX packets 14445 bytes 1328780 (1.2 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 841 bytes 98076 (95.7 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eno16777736:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.16.100.13 netmask 255.255.0.0 broadcast 0.0.0.0 ether 00:0c:29:51:36:20 txqueuelen 1000 (Ethernet) [root@localhost ~]# ip addr flush dev eno16777736 label eno16777736:1
清空一个网卡上的所有地址:ip addr flush
[root@localhost ~]# ifconfig eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.1.54.250 netmask 255.255.0.0 broadcast 10.1.255.255 inet6 fe80::20c:29ff:fe51:3620 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:51:36:20 txqueuelen 1000 (Ethernet) RX packets 16177 bytes 1442437 (1.3 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 925 bytes 107932 (105.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ip route add 添加路由
ip route default via 172.16.0.1
ip route add 192.168.0.0/16 via172.16.0.1
ip route add 192.168.1.22 via172.16.0.1
ip route delete
ip route del 192.168.1.22
显示路由 ip route show|list
清空路由表 ip route flush [devv IFACE] [via PREFIX]
ip route flush dev eth0
3、ss命令:netstat通过遍历proc来获取socket信息,ss使用netlink与内核tcp_diag模块通信获取socket信息。
-t tcp协议相关
-u udp协议相关
-w 裸套接字相关
-l listen状态的连接
-x unix sock相关
-a 所有
-n 数字格式
-p 相关的程序及PID
-e 扩展的信息
-m 内存用量
-o 计时器信息
TCP常见的状态:tcp finite(有限的) state machine
LISTEN 监听
ESTABLESHED 已建立的连接
FIN_WAIT_1
FIN_WAIT_2 四次断开信号
SYN_SENT
SYN_RECV 三次握手信号
CLOSED 关闭状态,数据传输完毕,暂时性
[root@localhost ~]# ss sport = :ssh Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp ESTAB 0 0 10.1.54.250:ssh 10.1.250.66:50129 [root@localhost ~]# ss dport = :ssh Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
ss -n dport = :ssh 目标端口destination
ss -n sport = :ssh 源端口source
常用组合:
[root@localhost ~]# ss -tan 数字格式显示tcp连接的所有信息 State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25套接字,代表一个主机 *:* ESTAB 0 52 10.1.54.250:22 10.1.250.66:50129 LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::*
[root@localhost ~]# ss -tanl 数字格式显示tcp连接的listen状态的所有信息 State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* [root@localhost ~]# ss -tanlp 数字格式包括PID和命令显示tcp连接的listen状态的所有信息 State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* users:(("sshd",pid=1211,fd=3))LISTEN0 100 127.0.0.1 :25 *:* users:(("master",pid=2350,fd=13))LISTEN 0 128 :::22 :::* users:(("sshd",pid=1211,fd=4))LISTEN 0 100 ::1:25 :::* users:(("master",pid=2350,fd=14))[root@localhost ~]# ss -uan 显示PID,udp连接的所有信息 State Recv-Q Send-Q Local Address:Port Peer Address:Port UNCONN 0 0 127.0.0.1:323 *:* UNCONN 0 0 ::1:323 :::*
显示所有已经建立的HTTP连接
[root@localhost ~]# ss -o state established '( dport = :http or sport = :http )' Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
找出所有连接X服务器的进程
[root@localhost ~]# ss -x src /tmp/.X11-unix/* Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
列出当前的socket详细信息:
[root@localhost ~]# ss -s Total: 548 (kernel 714) TCP: 5 (estab 1, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0 Transport Total IP IPv6 * 714 - - RAW 0 0 0 UDP 2 1 1 TCP 5 3 2 INET 7 4 3 FRAG 0 0 0
4、RHEL7和Centos 7中默认的网络服务有NetworkManager提供,这是动态控制及配置网络的守护进程,在centos6中并不稳定,它用于保持当前网络设备及连接处于工作状态,同时也支持传统的ifcfg类型的配置文件,支持bond to team。可以用命令工具nmcli来控制NetworkManager,此命令需要NetworkManager是运行状态,在7中还支持补全,使用起来功能更加强大。
nmcli命令相当于直接修改文件,重启网络即生效。
网络组:是将多个网卡聚合在一起的方法,从而实现冗余和提高吞吐量。网络组不同于bonding技术,它能提供更好的性能和扩展性,网络组由内核驱动和teamd守护进程实现。
网络组的方式:runner;broadcast;roundrobin;activebackup;loadbalance;lacp(implements the 802.3ad Link Aggregation Control Protocol)。
5、网络组team#和接口port#之间的关系:
启动网络组接口或port都不会启动另一个;当禁止team#时port一定禁止,反之不然;没有port的team#可以启动静态IP;启用DHCP连接时,没有Port的team会等待port#的加入。
一、课后练习
1、配置模拟路由
步骤一:用两个系统添加网卡,分别为eth0和eth1,添加新网卡的配置文件。若为centos7系统,为方便可更改文件使网卡使用普通命名方式。方法如下:
方法一:编辑/etc/default/grub配置文件,将其中GRUB_CMDLINE_LINUX的内容删除并改为GRUB_CMDLINE_LINUX=”net.ifnames=0 rhgb quiet”;为grub2生成其配置文件,使用命令grub2-mkconfig -o /etc/grub2.cfg;重启系统,但并没有生效,需要再更改网卡的配置文件device新名字,重启网络服务。
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.1.54.250 netmask 255.255.0.0 broadcast 10.1.255.255
inet6 fe80::20c:29ff:fe51:3620 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:51:36:20 txqueuelen 1000 (Ethernet)
方法二:直接修改/boot/grub2/grub.cfg;将linux16开头的一行最后添加,如下:
linux16 /vmlinuz-0-rescue-b2197fdfc4d146048b4934eb2a563b8c
root=/dev/mapper/centos-root ro net.ifnames=0 rhgb quiet
重启,更改文件生效。
步骤二:编辑配置文件,模拟为两个路由器,因此只需要写如下几行即可,
更改四个网卡的配置文件,组成如下方式:
关闭两台路由器的NetworkManager服务,关闭防火墙,重启网络生效。
步骤三:添加路由
查看路由:路由器两个端口的路由在配置完成后重启网络的时候就会自动生成,如果无意清空所有路由,则会出现无法添加路由或网络不可达的状况。使用route和route -n查看:
配置路由,使用命令或者直接编辑修改配置文件。此处使用命令:
注意:路由器本机的两个接口不需要配置,默认就可以直接到达,因为默认路由自动生成,要想到达130的网络直接使右侧路由器的eth1口经过左侧路由器的eth1口即可。
步骤四:开通路由功能
默认是无法作为路由器工作的,需要更改一个文件启用路由功能:
步骤五:添加主机并测试
添加两个主机,此处使用一个windows和一个centos7作为主机,形成如下关系:
配置完成后,使用ping -I IPACE ####命令测试。其中windows的IP可以在高级设置里面添加一个新的IP。
使用ping命令进行测试,先用右侧的路由器对130.1网段检测:
再用主机对左侧的centos7进行测试:
问题:在实验的过程中,使用左侧的eth0对windows主机进行ping不能通,实验了多种方法包括重启网络,关闭防火墙,关闭NetworkManager服务和SELinux服务,重新配置路由皆不能成功,最后重启并重新配置解决。证明虚拟机的此主机还是有一定的不稳定性。
2、nmcli命令配置网络组
步骤一:添加一块网卡,使用ifconfig -a查看名字,此处在7中改了文件,因此是普通命名方式。手动生成新网卡的配置文件。
步骤二:使用命令创建网络组
首先启动服务
[root@localhost network-scripts]# service NetworkManager start Redirecting to /bin/systemctl start NetworkManager.service
设定名称和模式为loadbalance
[root@localhost network-scripts]# nmcli connection add type team con-name team0 ifname team0 config '{"runner":{"name":"loadbalance"}}' 成功添加的连接 'team0'(c5d804b2-825c-40df-858f-08e15df45a66)。 [root@localhost network-scripts]# nmcli connection modify team0 ipv4.addresses 10.1.54.250/16 给定网络为静态,manual [root@localhost network-scripts]# nmcli connection modify team0 ipv4.method manual 连接网卡,con-name默认为team-slave-eth0,可以自行添加 [root@localhost network-scripts]# nmcli connection add type team-slave con-name team-slave-eth0 ifname eth0 master team0 成功添加的连接 'team-slave-eth0'(91b061f6-57b2-41eb-a004-ec89fabebd0b)。 [root@localhost network-scripts]# nmcli connection add type team-slave con-name team-slave-eth1 ifname eth1 master team0 成功添加的连接 'team-slave-eth1'(b2fa5eeb-e564-4571-a218-be821d1e1770)。 [root@localhost network-scripts]# nmcli connection up team0 成功激活的连接(D-Bus 激活路径:/org/freedesktop/NetworkManager/ActiveConnection/3) [root@localhost network-scripts]# nmcli device disconnect eth1 Device 'eth1' successfully disconnected. [root@localhost network-scripts]# nmcli device connect eth1 Device 'eth1' successfully activated with '093c0f9c-2401-402d-b9cc-f97921e5c33c'. [root@localhost ~]# nmcli connection up team-slave-eth1 成功激活的连接(D-Bus 激活路径:/org/freedesktop/NetworkManager/ActiveConnection/8) [root@localhost ~]# teamdctl team0 state setup: runner: loadbalance ports: eth1 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0 eth0 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0
步骤三:测试网络组
经过测试,主备模式的网络组在虚拟机模拟情况下依然有缺陷,像bonding的mode0模式,次断开主能用,主断开次不能使用。其他模式相对稳定。
删除网络组时,将生成的所有文件删除,重启网络服务即可。
原创文章,作者:SilencePavilion,如若转载,请注明出处:http://www.178linux.com/45655