本文简单梳理总结一下Linux网络基本管理的常用命令,主要的目的是加深记忆吧。
网络的基本概念这里就不多说,从Linux主机接入网络,以CentOS 7系统为主,先简单从网络接口开始。
传统的命名方式一般有下面两种:
(1) 以太网:ethX, [0,1, …],例如eth0, eth1, ...
(2) PPP网络:pppX, [0,1, ...], 例如ppp0, ppp1, ...
在CentOS 7 上,网络接口的命名方式发生了变化,不再是以往的风格了,它用一种可预测的方案来命名,命名规则如下:
(1) 如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,则根据此索引进行命名,如eno1, eno2, ...
(2) 如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,如ens1, ens2, ...
(3) 如果硬件接口的物理位置信息可用,则根据此信息命名,如enp2s0, ...
(4) 如果用户显式定义,也可根据MAC地址命名,例如enx122161ab2e10,...
(5) 上述均不可用,则仍使用传统方式命名
命名格式由传输的介质类型和物理接口类型组成:
按传输介质类型分:
en : ethernet 以太网
wl : wlan 无线局域网
ww : wwan 无线广域网
物理接口类型分:
o<index>: 集成设备的设备索引号
s<slot>: 扩展槽的索引号
x<MAC>: 基于MAC地址命名
p<bus>s<slot>: 基于总线及槽的拓扑结构进行命名
说完接口命名,接下来开始具体说明常用工具的使用。
配置一台Linux主机接入网络,一是把主机设置为动态获取,需要依赖本地的DHCP服务;二是手动静态配置。
与设置相关的命令有很多,下面大概梳理一下:
下面分别介绍这三个家族命令的使用。
ifconfig命令:设置网络接口
作用:接口及地址查看和管理
查看的查看的用法:
# ifconfig -a //显示所有接口,包括inactive状态的接口# ifconfig [INTERFACE] //查看指定接口的状态信息 [root@localhost~]# ifconfig eno33554984
设定的常用用法:
# ifconfig INTERFACEIP/PREFIXLEN [up|down] [root@localhost ~]# ifconfigeno33554984 172.16.1.2/16 [root@localhost ~]# ifconfigeno33554984 172.16.1.2/16 up#ifconfig INTERFACE IP netmask NETMASK [root@localhost ~]# ifconfigeno33554984 172.16.1.2 netmask 255.255.0.0#ifconfig INTERFACE [-]promisc [root@localhost ~]# ifconfigeno33554984 promisc //开启混杂模式 [root@localhost ~]# ifconfigeno33554984 -promisc //关闭混杂模式# ifconfigINTERFACE_LABEL IPADDR/NETMASK [root@localhost ~]# ifconfigeno33554984:0 192.168.137.5/24 //labelipaddress
管理IPv6地址:
add addr/prefixlendel addr/prefixlen
每条命令都会立即送往内核中的TCP/IP协议栈,并会立即生效。
route命令:路由查看及管理
路由条目类型:
主机路由:目标地址为单个IP;
网络路由:目标地址为IP网络;
默认路由:目标为任意网络,0.0.0.0/0.0.0.0
查看:
# route -n
添加:
# route add [-net|-host] target [netmask Nm] [gw GW] [[dev] If] # route add-net 10.0.0.0/8 gw 192.168.10.1 dev eth1 # route add -net 0.0.0.0/0.0.0.0 gw 192.168.10.1 # route add default gw 192.168.10.1
删除:
# route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If] # route del -net 10.0.0.0/8 gw 192.168.10.1 # route del default
查看结果中各个字段的含义如下:
Destination 表示路由的目标IP地址
Gateway 表示网关使用的主机名或者IP地址,“*” 表示没有网关
Genmask 表示路由的网络掩码,在把它与路由的目标地址进行比较之前,内核通过Genmask和数据包的IP地址进行按位“与”操作来设置路由。
Flags 表示路由的标志。可用的标志及其意义:U 表示路由在启动,H 表示target是一台主机,G 表示使用网关,R 表示对动态路由进行复位设置,D 表示动态路由, M 表示修改路由,! 表示拒绝路由
Metric 表示路由的单位开销
Ref 表示依赖本路由现状的其他路由数目
Use 表示路由表条目被使用的数目
Iface 表示路由所发送的包的目的网络
netstat命令:查看网络连接状态
作用:netstat主要用于Linux查看自身的网络状况,如开启的端口、在为哪些用户服务,以及服务的状态等,此外,它还显示系统路由表、网络接口状态等。可用说,它是一个综合性的网络状态查看工具。
显示路由表:
# netstat -rn -r:显示内核路由表 -n:数字格式显示
显示网络连接:
# netstat [--tcp|-t] [--udp|-u] [--udplite|-U] [--sctp|-S] [--raw|-w][--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]][--program|-p]
常用选项:
-t:TCP协议的相关连接,连接均有其状态;FSM(Finate State Machine)
-u:UDP相关的连接
-w:raw socket相关的连接
-l:处于监听状态的连接
-a:所有状态
-n:以数字格式显示IP和Port;
-e:扩展格式
-p:显示相关的进程及PID;
常用组合选项:-tan, -uan, -tnl, -unl, -tunlp
显示接口的统计数据:
# netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e][--verbose|-v] [--program|-p] [--numeric|-n]
所有接口:netstat-i
指定接口:netstat-I<IFace>
ifup/ifdown命令:激活/禁用网络设备
用法:
# ifup# ifup eno33554984# ifdown # ifdown eno33554984
说明:通常使用以保存的配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE来识别接口并完成配置。如果要修改网卡MAC地址,修改之前要禁用网络设备,应使用ifdown 命令,否则系统会报错。
hostname命令:配置主机名
查看当前主机名:
# hostname
配置主机名:
# hostname HOSTNAME
说明:在一个局域网中,每台机器都有一个主机名,使得主机与主机之间便于区分。可以根据每台机器的功能来为其命名。hostname设置的主机名在系统重启后将失效,要想永久生效,应该手动修改配置文件/etc/hosts(Redhat/Fedora或以此为基础打包的发行版)。
hostnamectl命令: CentOS 7 专用
# hostnamectlstatus : 显示当前主机名信息# hostnamectlset-hostname : 设定主机名,永久有效
ip命令:网络集成设置工具
作用:ip命令是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具,例如:ifconfig、route等。几乎所有的Linux发行版本都支持ip命令。
常用的几个用法:
# ip [ OPTIONS] OBJECT { COMMAND | help } OBJECT = {link | addr | route | netns }
说明:所有的对象名都可以简写,例如address可以简写为addr,还可以按“Tab”键进行命令补全。
OBJECT常用选项:
ip link:属性配置
# ip link set: [root@localhost ~]# ip link seteno50332208 up //激活网卡 [root@localhost ~]# ip link seteno50332208 down //禁用网卡 [root@localhost ~]# ip link set eno50332208multicast on //启用多播功能 [root@localhost ~]# ip link seteno50332208 multicast off //禁用多播功能 [root@localhost ~]# ip link seteno50332208 name NI1 //重命名接口 [root@localhost ~]# ip link seteno50332208 mtu 1500 //设置MTU的大小,默认1500 [root@localhost ~]# ip link seteno50332208 netns newns //将接口移动到newns网络名称空间# ip link show //displaydevice attributes# ip link help //显示简要使用帮助;
ip netns:网络名称空间配置
[root@localhost~]# ip netns list //列出所有的netns[root@localhost~]# ip netns add newns2 //创建指定的netns[root@localhost~]# ip netns del newns2 //删除newns2exec NS_NAME COMMAND:在指定的netns中运行命令[root@localhost ~]# ip netns exec newnsip link show eno50332208
ip addr:接口ip地址管理
# ip addr show //显示每个接口的ip地址# ip addr add //添加ip地址 [root@localhost~]# ip addr add 192.168.150.137/24 dev eno33554984 //添加ip地址 [root@localhost~]# ip addr add 192.168.210.10/24 dev eno33554984 label eno33554984:0 broadcast192.168.210.255 scope link //[label NAME]:为额外添加的地址指明接口别名 //[broadcast ADDRESS]:广播地址,会根据IP和NETMASK自动计算得到; //[scope SCOPE_VALUE]: global:全局可用 link:接口可用 host:仅本机可用# ip addr delete //删除地址 [root@localhost~]# ip addr del 192.168.210.10/24 dev eno33554984 # ip addr show // look at protocol addresses [root@localhost~]# ip addr show eno33554984 //显示接口的地址 # ip addr flush // flush protocol addresses [root@localhost~]# ip addr flush dev eno33554984
ip route:路由表管理
# ip route // routing table management //ip route show- display route //iproute add - add new route //iproute change - change route //iproute replace - change or add new one# ip route add TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP] [root@localhost~]# ip route add 192.168.0.0/24 via 10.0.0.1 dev eth1 src 10.0.20.100 [root@localhost~]# ip route add default via GW # ip route del // delete route# ip route del TYPE PRIFIX [root@localhost ~]# ip route delete192.168.1.0/24# iproute show // list routes TYPE PRIFIX # iproute flush // flush routing tables TYPE PRIFIX# iproute get // get a single route# iproute get TYPE PRIFIX [root@localhost ~]# ip route get192.168.0.0/24
ss命令:显示网络状态信息
作用:ss类似netstat,能显示网络状态信息。
用法:
# ss [options] [ FILTER ]
options:
-t:TCP协议的相关连接
-u:UDP相关的连接
-w:raw socket相关的连接
-l:监听状态的连接
-a:所有状态的连接
-n:数字格式
-p:相关的程序及其PID
-e:扩展格式信息
-m:内存用量
-o:计时器信息
FILTER: [ state TCP-STATE ] [ EXPRESSION ]
TCP FSM:
LISTEN:监听
ESTABLISHED:建立的连接
FIN_WAIT_1
FIN_WAIT_2
SYN_SENT
SYN_RECV
CLOSED
EXPRESSION:
dport=
sport=
示例:'( dport = :22 orsport = :22)'
[root@localhost~]# ss -tan '( dport = :22 or sport =:22 )'[root@localhost~]# ss -tan state ESTABLISHED
配置文件
/etc/sysconfig/network-scripts/route-INTERFACE //路由的配置文件
支持两种配置方式,但不可混用
(1) 每行一个路由条目:
TARGET via GW
(2) 每三行一个路由条目:
ADDRESS#=TARGET
NETMASK#=MASK
GATEWAY#=NEXTHOP
/etc/sysconfig/network-scripts/ifcfg-INTERFACE // IP/NETMASK/GW/DNS/等属性的配置文件
配置文件/etc/sysconfig/network-scripts/ifcfg-INTERFACE通过大量参数来定义接口的属性,可用vim等文本编辑器直接修改,也可以使用专用的命令的进行修改(CentOS 6:system-config-network (setup),CentOS 7: nmtui)
ifcfg-INTERFACE配置文件参数说明:
DEVICE:此配置文件对应的设备的名称
ONBOOT:在系统引导过程中,是否激活此接口
UUID:此设备的惟一标识
IPV6INIT:是否初始化IPv6
BOOTPROTO:激活此接口时使用什么协议来配置接口属性,常用的有dhcp、bootp、static、none
TYPE:接口类型,常见的有Ethernet,Bridge
DNS1:第一DNS服务器指向
DNS2:备用DNS服务器指向
DOMAIN:DNS搜索域
IPADDR: IP地址
NETMASK:子网掩码;CentOS 7支持使用PREFIX以长度方式指明子网掩码
GATEWAY:默认网关
USERCTL:是否允许普通用户控制此设备
PEERDNS:如果BOOTPROTO的值为“dhcp”,是否允许dhcpserver分配的dns服务器指向覆盖本地手动指定的DNS服务器指向;默认为允许
HWADDR:设备的MAC地址
NM_CONTROLLED:是否使用NetworkManager服务来控制接口
为别名添加配置文件
DEVICE=IFACE_LABEL
BOOTPROTO:别名不支持动态获取地址,只能指定为static或none
注意:可以直接复制一份其他网卡的配置文件,再在里面做修改
例如:
[root@localhost~]# cd /etc/sysconfig/network-scripts[root@localhost network-scripts]# cp ifcfg-eno33554984 ifcfg-eno33554984:0[root@localhost network-scripts]# vim ifcfg-eno33554984:0DEVICE="eno33554984:0"ONBOOT=yesNETBOOT=yesIPV6INIT=noIPADDR=172.16.2.2PREFIX=24BOOTPROTO=noneTYPE=Ethernet