一、路由记录
1、路由分类
主机路由(主机的地址)
网络路由(到主机的那个网络的地址)
默认路由(未知地址0.0.0.0)
优先级:精度越高,优先级越高
使用route -n可以查询路由记录
2、路由表
由多个路由记录组成,每个路由记录有以下4项组成部分:
1目标
(1)主机
(2)网络 网络ID
(3)未知 0.0.0.0
2 netmask
3 接口interface ,发往目标地址从哪个接口发出去
4 网关gateway:下一个路由器的邻近本路由器的接口的IP
如现在有一网络环境图所示:
我们来写一下R1,R2,R3的路由表:
R1:
接口:接口必须是R1上的接口。
网关:10.1.0.0与R1是直连的,它们之间没有下一个路由器了,它们是挨着的,网关地址就是接口的IP地址。可以写10.1.0.1,也可以干脆不写或写成0.0.0.0。
同理,10.2.0.0也一样。
R2:
R3:
还有另一种写法,如R3可以写成如下形式:
将前两行合并,就是说,只要是除了后两行的网络地址,其他地址都使用5接口,网关都是10.3.0.1。这就是我们刚才提过的默认路由。当我们的路由器处于边界的时候,可以用未知网络。(R1也可以这么写,R2就不行)
二、基本网络配置
1、配置内容
将Linux主机接入到网络,需要配置网络相关设置。
一般包括如下内容:
主机名
IP/netmask
路由:默认网关
DNS服务器
主DNS服务器
次DNS服务器
第三DNS服务器
2、CentOS 6网卡
接口命名方式:
以太网:eth[0,1,2,…]
ppp:ppp[0,1,2,…](这个现在基本不用)
网络接口识别并命名相关的udev配置文件:
/etc/udev/rules.d/70-persistent-net.rules
查看网卡:
dmesg |grep –i eth
ethtool -i eth0
卸载网卡驱动:
modprobe -r e1000
rmmod e1000
装载网卡驱动:
modprobe e1000
3、修改网卡名
首先使用ip a查看网卡信息
看到有两块网卡
我们打开/etc/udev/rules.d/70-persistent-net.rules文件
我们可以试试将eth2改成hehe。
然后保存并退出。
改完之后不会立即生效,我们将网卡驱动卸载并重新挂载一下。
首先查看一下eth3的驱动模块名称为pcnet32
然后我们使用rmmod卸载那个网卡
查看一下,果然少了一个网卡
然后使用modprobe重新加载模块
如图,修改名称成功。
4、ifconfig命令
ifconfig [interface]
ifconfig -a 查看所有网卡
ifconfig IFACE [up|down] 启用|禁用网卡
ifconfig interface [aftype] options |address ...
ifconfig IFACE IP/netmask [up] 配置地址
ifconfig IFACE IP netmask NETMASK 配置地址
注意:立即生效,重启或使用servcie network restart后失效。
启用混杂模式:[-]promisc
PS:使用ifdown eth0将IP地址删掉,不禁用网卡,ifup eth0将IP激活。
5、修改ip地址
(1)使用system-config-network-tui
进入配置界面
选中第一个网卡,回车
在这里修改地址,改成192.168.37.105,然后OK,Save保存并退出。
但是此时修改过之后并没有生效,
我们需要重启一下服务,使用service network restart
修改成功
(2)使用setup
选择第四个选项
选择第一个
点击OK
选择Activate激活一下,然后退出
使用service network restart将网络服务重启一下
修改成功
三、网络配置,文件
1、IP等配置文件
IP、MASK、GW、DNS相关配置文件:
/etc/sysconfig/network-scripts/ifcfg-IFACE
路由相关的配置文件:
/etc/sysconfig/network-scripts/route-IFACE
/etc/sysconfig/network-scripts/ifcfg-IFACE:
说明参考/usr/share/doc/initscripts-9.49.30/sysconfig.txt
DEVICE:此配置文件应用到的设备
ONBOOT:在系统引导时是否激活此设备。如果是no代表网卡禁用
HWADDR:对应的设备的MAC地址(如果想修改MAC地址,需要将HWADDR改为MAC才能生效)
BOOTPROTO:激活此设备时使用的地址配置协议,常用的dhcp,static, none, bootp。如果是none或者static表示IP地址是手工配置的,如果改成dhcp就是自动获取的。如果改成自动获取,那么下面配置的IPADDR,GATEWAY,DNS1,MACADDR等都将失效。
NM_CONTROLLED:NM是NetworkManager的简写,此网卡是否接受NM控制;建议CentOS6为“no”。
(NM有可能会影响我们的配置,因此最好的方法是使用service NetworkManager stop将它禁用,然后再使用chkconfig NetworkManager off设置成开机不启动,这样以后就都不会影响了。)
TYPE:接口类型;常见有的Ethernet,Bridge
UUID:设备的惟一标识
NAME:这个链接配置的名字
IPADDR:指明IP地址
NETMASK:子网掩码
(或者写成PREFIX=16,与NETMASK=255.255.0.0是一样的)
GATEWAY:默认网关
(配置网关也可以在/etc/sysconfig/network文件中写入)
(如果两个文件都写了并且写的不一样,以/etc/sysconfig/network-scripts/ifcfg-eth#中写的为准)
DNS1:第一个DNS服务器指向
DNS2:第二个DNS服务器指向
USERCTL:普通用户是否可控制此设备
DOMAIN:可以当输入网址不全时自动补齐
PEERDNS:如果BOOTPROTO的值为“dhcp”,是否允许dhcp server分配的dns服务器指向信息直接覆盖至/etc/resolv.conf文件中
基本必须项:
保存后记得要使用service network restart重启生效(Centos6)
systemctl restart nstwork (Centos7)
使用cat 查看/etc/resolv.conf查看配置
2、route 路由管理命令(临时更改,重启失效)
查看路由表:route -n
(可以查看网关,第一列为0.0.0.0那一行)
添加路由:route add
route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
-host 主机路由
目标:192.168.1.3 网关:172.16.0.1
# route add -host 192.168.1.3 gw 172.16.0.1 dev eth0
-net 网络路由
目标:192.168.0.0 网关:172.16.0.1
# route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1 deveth0
# route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0
默认路由,网关: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]
目标:192.168.1.3 网关:172.16.0.1
# route del -host 192.168.1.3
目标:192.168.0.0 网关:172.16.0.1
# route del -net 192.168.0.0 netmask 255.255.255.0
默认路由,网关:172.16.0.1
# route del default gw 172.16.0.1 删除网关
转发路由:
如果想当路由器,需要启用转发功能
0是不转发,改成1是转发(这个设置重启网络服务就没了,所以要最后设这个值)
确认防火墙:
配置完路由需要确认防火墙是否关闭
先使用iptables -vnL查看里面是否是空的,如果不是空的,执行chkconfig iptables off让它开机以后不开启,然后使用service iptables stop让它关掉(Centos6)
systemctl disablefirewalld systemctl stop firewalld(Centos7)
3、路由记录配置文件(永久生效)
/etc/sysconfig/network-scripts/route-IFACE (这个文件需要自己建立)
注意:需service network restart重启才能生效
两种方式可以添加:
(1) TARGET via GW
如:10.4.0.0/16 via 192.168.37.100
(2) 每三行定义一条路由
ADDRESS#=TARGET
NETMASK#=mask
GATEWAY#=GW
4、netstat命令
Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员(Multicast Memberships) 等等。
显示网络连接:
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
常用组合:
-tan, -uan,-tnl, -unl
显示路由表:
netstat{--route|-r} [--numeric|-n]
-r: 显示内核路由表
-n: 数字格式
显示接口统计数据:
netstat{--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--program|-p][--numeric|-n]
# netstat -i 查看所有网卡
# netstat–I=IFACE 或netstat –IIFACE或 ifconfig -s eth0查看某一个网卡
(etc/services可以查看端口号对应哪个程序:
)
5、ip命令
配置Linux网络属性:ip命令
ip - show /manipulate routing, devices, policy routing and tunnels
ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT:= { link | addr | route }
link数据链路层 addr网络层 route路由
ip link - network device configuration
set dev IFACE
可设置属性:
up/down:激活/禁用指定接口
ifup/ifdown
show [dev IFACE]:指定接口
[up]:仅显示处于激活状态的接口
网卡配置
ip addr { add | del } IFADDR dev STRING(ip addr可以简写成ip a) 查看{增加|删除}网卡信息
与ifconfig不同的是,ip a能更详细的看出网卡状态,是否断开或被禁用:
添加:
[label LABEL]:添加地址时指明网卡别名
[scope{global|link|host}]:指明作用域
global: 全局可用(默认)
link: 仅链接可用
host: 本机可用
[broadcast ADDRESS]:指明广播地址
ip address show -look at protocol addresses 查看网卡信息
[dev DEVICE]
[label PATTERN]
[primary and secondary]
ip address flush - 使用格式同show
ip addr add 172.16.100.100/16 dev eth0label eth0:0 添加别名
ip addr del 172.16.100.100/16 dev eth0label 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
ip route add 192.168.0.0/24 via 172.16.0.1
网络路由:NETWORK/MASK
ip route add 192.168.1.13 via 172.16.0.1
添加网关:ip routeadd default via GW dev IFACE
ip route add default via 172.16.0.1
删除路由:ip route delete
ip route del TARGET
显示路由:ip route show|list
清空路由表:ip route flush [dev IFACE] [via PREFIX]
ip route flush dev eth0
6、ss命令
格式:ss [OPTION]... [FILTER]
netstat通过遍历proc来获取socket信息,ss使用netlink与内核tcp_diag模块通信获取socket信息。(类似于netstat命令)
选项:
-t: tcp协议相关
-u: udp协议相关
-w: 裸套接字相关
-x:unix sock相关
-l: listen状态的连接
-a: 所有
-n: 数字格式
-p: 相关的程序及PID
-e: 扩展的信息
-m:内存用量
-o:计时器信息
FILTER : [ state TCP-STATE ] [ EXPRESSION ]
TCP的常见状态:
tcp finite statemachine:
LISTEN: 监听
ESTABLISHED:已建立的连接
FIN_WAIT_1
FIN_WAIT_2
SYN_SENT
SYN_RECV
CLOSED
EXPRESSION:
dport =
sport =
示例:’( dport = :ssh orsport = :ssh )’
常用组合:
-tan, -tanl,-tanlp, -uan
常见用法:
ss -l 显示本地打开的所有端口
ss -pl 显示每个进程具体打开的socket
ss -t -a 显示所有tcp socket
ss -u -a 显示所有的UDPSocekt
ss -o stateestablished ‘( dport = :ssh or sport = :ssh )‘ 显示所有已建立的ssh连接
ss -o state established ‘( dport = :http orsport = :http )‘ 显示所有已建立的HTTP连接
ss -s 列出当前socket详细信息
过滤信息:
(一共两种格式的地址,有ffff这种的是IPV6地址)
取连接状态远程IP,将IP按照访问次数大小排序
ss -nt|sed -rn "/^ESTAB/s/.*[:[:space:]]([^[:space:]]+):.*$/\1/p"|sort |uniq -c |sort -rn
7、网卡别名
(1)使用命令,仅当前生效:
对虚拟主机有用
将多个IP地址绑定到一个NIC上
eth0:1 、eth0:2、 eth0:3
ifconfig命令:
ifconfig eth0:1192.168.1.100/24 up 添加别名
ifconfig eth0:1down 删除别名
ip命令:
ip addr add 172.16.1.2/16 dev eth0 添加别名
ip addr add 172.16.1.1/16 dev eth0 label eth0:1
ip addr add 172.16.1.2/16 dev eth0 label eth0:1
ip addr del 172.16.1.1/16 dev eth0 label eth0:1 删除别名
ip addr flush dev eth0 清除eth0所有别名
(2)写入文件,永久生效:
为每个设备别名生成独立的接口配置文件
关闭NetworkManager服务
ifcfg-ethX:xxx 新建文件
必须使用静态联网,不能自动获取
DEVICE=eth0:0
IPADDR=10.10.10.10
NETMASK=255.0.0.0
ONPARENT=yes 将内容填入
注意:service network restart 生效
设置成功
(参考文档:/usr/share/doc/initscripts-*/sysconfig.txt)
四、网络接口配置
1、bonding
将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。直接给两块网卡设置同一IP地址是不可以的。通过bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址
2、Bonding工作模式
Mode 0 (balance-rr)
轮转(Round-robin)策略:从头到尾顺序的在每一个slave接口上面发送数据包。本模式提供负载均衡和容错的能力
Mode 1 (active-backup)
活动-备份(主备)策略:只有一个slave被激活,当且仅当活动的slave接口失败时才会激活其他slave。为了避免交换机发生混乱此时绑定的MAC地址只有一个外部端口上可见
Mode 3 (broadcast)
广播策略:在所有的slave接口上传送所有的报文,提供容错能力(会显示dup重复提示)
active-backup、balance-tlb 和 balance-alb模式不需要交换机的任何特殊配置。其他绑定模式需要配置交换机以便整合链接。如:Cisco 交换机需要在模式 0、2 和 3 中使用EtherChannel,但在模式4中需要 LACP和 EtherChannel
3、Bonding配置
(首先将两个网卡都改为仅主机模式然后再执行以下操作。)
创建bonding设备的配置文件
/etc/sysconfig/network-scripts/ifcfg-bond0 bond设备
DEVICE=bond0
BOOTPROTO=none
XXX(配地址)
BONDING_OPTS= “miimon=100 mode=0” (miimon 是用来进行链路监测的。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一条线路不通就转入另一条线路 mode=0为模式定义)
网卡设备,
/etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1
将两个网卡都进行如下配置:
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0属于哪个bond设备(只要有这句话,前面配置过的地址就都失效了,只会看bond0中的地址)
SLAVE=yes (从属,就是奴隶)
USERCTL=no
查看bond0状态:/proc/net/bonding/bond0
删除bond0
1)ifconfig bond0 down 先临时停掉,禁用
2)将两个网卡配置文件中从属关系那两行删掉
3)rmmod bonding 然后将绑定模块删掉
4)重启网络服务
详细帮助:
/usr/share/doc/kernel-doc-version/Documentation/networking/bonding.txt
https://www.kernel.org/doc/Documentation/networking/bonding.txt
五、CentOS7
1、网卡命名
在CentOS7中,是基于硬件,设备拓扑和设置类型来命名的,不是传统的eth0,eth1格式,这样是保证了某方面的稳定性,但是不便于管理,我们可以修改它为传统的名称。
编辑/etc/default/grub配置文件
在GRUB_CMDLINE_LINUX="rhgb quiet 那行后面添加net.ifnames=0"
(我们也可以编写一个sed命令让它直接添加进去:
sed -r ‘/^GRUB_CMDLINE_LINUX/s/"$/net.ifnames=0"/‘ /etc/default/grub
这样可以将这行代码写入到初始化脚本中,以后直接执行一下就修改完成了,就不需要进入文件来修改了。)
然后使用以下命令为grub2生成其配置文件:
grub2-mkconfig -o /boot/grub2/grub.cfg
然后重启系统。
上面的方式是修改了模板文件,通过它生成配置文件,那个配置文件才是真正起作用的能起作用的文件。
因此还有另一种方法,直接修改配置文件:/boot/grub2/grub.cfg
找到linux16那行,在后面添加net.ifnames=0
然后保存,重启即可
2、网络配置工具
CentOS7主机名
修改主机名:
CentOS6:
(进入文件/etc/sysconfig/network,添加HOSTNAME一行,保存退出。
这样修改过是重启后生效,于是我们使用hostname centos8.localdomain使当前生效,然后就改成了。
)
CentOS7:
方法一:配置文件:/etc/hostname,默认没有此文件,通过DNS反向解析获取主机名,主机名默认为:localhost.localdomain
方法二:使用命令hostnamectl set-hostname centos9.magedu.com即可修改成功
如果删除文件/etc/hostname,则恢复主机名localhost.localdomain
显示主机名信息
hostname
hostnamectl status
CentOS 7网络配置工具
图形工具:nm-connection-editor
字符配置tui工具:nmtui
命令行工具:nmcli
3、nmcli工具
(1)地址配置工具:nmcli
nmcli [ OPTIONS ] OBJECT{ COMMAND | help }
OBJECT:
device - showand manage network interfaces 设备
nmcli device help
connection -start, stop, and manage network connections 配置文件(网络层)
nmcli connection help
nmcli connection [show]查看配置文件:
也可以跟链接名,可以查看这套配置的相关信息
(2)添加配置文件:
nmcli connection add type ethernet con-name eth1-office ifname eth1
type指定类型 con-name链接名(自己指定) ifname接口名(对哪个接口进行配置) 如果没有指定IP相关设置则默认自动获取IP
添加成功
然后你会发现自动生成了ifcfg-eth1-office文件
其中NAME这行代表了链接名。因此我们也可以修改文件中的这行来修改链接名。
我们将它改为home,然后保存退出
然后使用nmcli connection reload重新加载以下配置文件
修改成功。
PS:一个网卡可以有多个配置文件,但一次只能生效一个配置文件,注意UUID不能冲突。
(3)修改IP地址等属性:
nmcli connection modify IFACE[+|-]setting.property value
IFACE:链接名(不是网卡名)
setting.property:
ipv4.method manual/auto 手动/自动获取
ipv4.addresses ip地址
ipv4.gateway 网关
ipv4.dns1 DNS
也可以使用+/-再添加/减少一套IP
查看文件,拥有两套IP地址了
修改链接名:connection.id,将eth1-home改为eth1
查看一下信息,修改成功
修改配置文件执行生效:systemctl restart network
nmcli con reload
nmcli命令生效:nmcli con down eth0(链接名);nmcli con up eth0
工具和文件对应如下图:
(4)nmcli实现bonding:
添加bonding接口
nmcli con add type bond con-name mybond0 ifname mybond0 mode active-backup
(这里的mode不能写mode0或者mode1那种了,必须写具体的名字)
cat/proc/net/bonding/bond0 查看bond0情况
添加从属接口
nmcli con add type bond-slave ifname ens7 master mybond0
nmcli con add type bond-slave ifname ens3 master mybond0
注:如果没有为从属接口提供连接名,则该名称是由接口名称加类型构成
要启动绑定,则必须首先启动从属接口
nmcli con up bond-slave-eth0
nmcli con up bond-slave-eth1
启动绑定
nmcli con up mybond0
PS:如果将bond0 down了,两个从属接口也会被down,需要将它们3个都重新up
(5)网络组Network Teaming
网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量
网络组不同于旧版中bonding技术,提供更好的性能和扩展性
网络组由内核驱动和teamd守护进程实现.
多种方式
runner
broadcast
roundrobin
activebackup
loadbalance
lacp (implements the 802.3ad Link Aggregation Control Protocol)
启动网络组接口不会自动启动网络组中的port接口
启动网络组接口中的port接口总会自动启动网络组接口
禁用网络组接口会自动禁用网络组中的port接口
没有port接口的网络组接口可以启动静态IP连接
启用DHCP连接时,没有port接口的网络组会等待port接口的加入
创建网络组接口:
nmcli con add type team con-name CNAME ifname INAME [config JSON]
CNAME 连接名,INAME 接口名
JSON 指定runner方式
格式:‘{"runner":{"name": "METHOD"}}‘
METHOD 可以是broadcast,roundrobin,activebackup, loadbalance, lacp
创建port接口:
nmcli con add type team-slave con-name CNAME ifname INAME master TEAM
CNAME 连接名
INAME 网络接口名
TEAM 网络组接口名
连接名若不指定,默认为team-slave-IFACE
teamdctl 查看team工作状态
nmcli dev dis INAME
nmcli con up CNAME
INAME 设备名 CNAME 网络组接口名或port接口
(6)网桥
桥接:把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。网桥就是这样一个设备,它有若干个网口,并且这些网口是桥接起来的。与网桥相连的主机就能通过交换机的报文转发而互相通信。
主机A发送的报文被送到交换机S1的eth0口,由于eth0与eth1、eth2桥接在一起,故而报文被复制到eth1和eth2,并且发送出去,然后被主机B和交换机S2接收到。而S2又会将报文转发给主机C、D。
(没有容错功能,配完了之后MAC地址也不会变成相同的)
配置实现网桥:
创建软件网桥
nmcli con add type bridge con-name br0 ifname br0 创建网桥
nmcli connection modify br0 ipv4.addresses 192.168.74.100/24 ipv4.method manuall 添加IP地址
nmcli con addtype bridge-slave con-name br0-port0 ifname eth0master br0 添加物理网卡
查看网桥
cat/etc/sysconfig/network-scripts/ifcfg-br0
cat/etc/sysconfig/network-scripts/ifcfg-br0-port0
brctl show
删除网桥 brctl delbr br0
删除网桥中网卡 brctl delif eth0
注意:NetworkManager只支持以太网接口接口连接到网桥,不支持聚合接口
六、网络工具
1、测试网络工具
在命令行下测试网络的连通性
显示主机名
hostname
测试网络连通性
ping
mtr
显示正确的路由表
ip route
确定名称服务器
nslookup
host
host www.qq.com 172.17.0.1
dig
dig www.qq.com @172.17.0.1
跟踪路由
traceroute
tracepath
2、网络客户端工具
ftp,lftp:子命令:get从服务器上下载文件、mget下载多个文件、put上传到服务器、mput上传多个、ls、help
ftp匿名访问:用户名anonymous/ftp 密码随意敲
lftp直接默认匿名连接
pwd查看当前目录,但是注意显示的/并不是真正的根,而是172.17.0.1/var/ftp这个目录,这样比较安全
加!就是对本机内容进行操作
lftp [-p port] [-u user[,password]] SERVER
lftpget URL
wget [option]...[URL]...
-q: 静默模式
-c: 断点续传
-P:保存在指定目录
-O: 保存为指定的文件名
--limit-rate=: 指定传输速率,单位K,M等
links URL
--dump
--source
lftp 比ftp方便:直接匿名登录 支持tab补全 显示各种类型文件的颜色