Linux网络相关属性配置管理
Linux中的网络配置一般分为两种配置方式,一种是命令的配置方式,一般情况下,利用命令配置网络是立即生效,但是在重启系统后之前命令的配置信息则再无作用;另一种是对网络相关的配置文件的修改来实现网络的配置,其配置不会立即生效,在系统重启后会永久有效。一般对网络的配置包含:网络接口的配置、路由的配置、DNS的配置等。下面我们分别介绍通过命令和配置文件对网络的配置。
命令相关的配置
ifcfg命令家族
ifconfig:对网络接口进行管理
route:显示或管理路由表
netstat:输出显示网络的连接、路由表、接口统计信息等
ifconfig命令
命令用法:
ifconfig [-v] [-a] [-s] [interface]
ifconfig [-v] interface [aftype] options | address …
常用选项及使用方法:
Options/Using | Function |
---|---|
-a | 显示所有接口信息,包括inactive状态的接口 |
-s | 显示接口的简要信息 |
-v | 显示一些更加详细的错误信息 |
# ifconfig IFACE IP/MASK [up] | 配置某个接口的IP地址 |
# ifconfig IFACE IP netmask NETMASK | 配置某个接口的IP地址 |
IFACE up | 启动指定接口 |
IFACE down | 禁用指定接口 |
add addr/preficlen | 添加IPv6地址 |
del addr/preficlen | 删除IPv6地址 |
示例
- 添加/修改一个IPv4地址:
- 添加/删除IPv6地址:
route命令
路由条目的类型:
- 主机路由:目标为单个IP
- 网络路由:目标地址为IP网络
- 默认路由:目标为任意主机,0.0.0.0/0.0.0.0
查看路由表
命令格式:
route -n (以数字的形式显示地址信息)
添加一个路由信息
命令格式:
route add [-net | -host] target [netmask Nm] [gw GW] [[dev] If]
添加路由信息命令下常用的选项:
Options | Function |
---|---|
-net | 添加一条网络路由 |
-host | 添加一条主机路由 |
示例:
删除一个路由信息
命令格式:
route del [-net | -host] target [gw GW] [netmask Nm] [[dev] If]
示例:
netstat命令
显示路由表
命令格式:
netstat -rn
常用选项:
Options | Function |
---|---|
-r | 显示内核路由表 |
-n | 数字格式显示 |
显示网络连接
命令格式:
netstat [–tcp|-t] [–udp|-u] [–raw|-w] [–listening|-l] [–all|-a] [–numeric|-n] [–extend|-e[–extend|-e]] [–program|-p]
常用选项:
Options | Function |
---|---|
-t | TCP协议的相关连接,连接均有其状态;FSM(Finate State Machine) |
-u | UDP相关的连接 |
-w | raw socket相关的连接 |
-l | 处于监听状态的连接 |
-a | 显示所有状态的连接 |
-n | 以数字格式显示IP和Port |
-e | 扩展格式 |
-p | 显示相关的进程及PID |
常用组合:
Options | Function |
---|---|
-tan | 以数字格式显示TCP相关的所有连接 |
-uan | 以数字格式显示UDP相关的所有连接 |
-tnl | 以数字格式显示TCP相关的处于监听状态连接 |
-tunlp | 以数字格式显示TCP和UDP相关的处于监听状态连接的进程及PID |
显示接口的统计数据
命令格式:
netstat {–interfaces|-I|-i} [iface] [–all|-a] [–extend|-e] [–verbose|-v] [–program|-p] [–numeric|-n]
常用选项:
Options | Function |
---|---|
-i | 查看所有处于活动状态的接口的统计数据,相当于ifconfig -s命令 |
-I<IFACE> | 指定接口的统计数据 |
示例:
ifup/ifdown命令:
该两个命令通过配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE来识别接口并完成配置。如果某个接口没有其对应的接口配置文件,那么这两个命令就不能使用。
在CentOS 6中当配置好一个接口的配置文件时,利用ifup命令启动该程序时可能出现以下状况:
重启网络服务也出现下面的问题:
这是由于在CentOS 6中使用了NetworkManager服务对网络进行管理,可能是该技术在CentOS 6上还不是很成熟,在运行的过程中会出现一些问题,遇上上面的问题时,可以禁用NetworkManager服务完成操作,操作如下:
完成以上步骤即可使用ifup命令通过配置文件来启用指定网卡。
iproute2命令家族
ip命令:显示或管理网络设备、路由、路由策略
ss命令:显示网络层的数据统计
ip命令
ip link
ip link: 网络设备管理
- ip link set: 设置网络设备的属性
Attributes | Introduction |
---|---|
dev NAME (default) | 指明要管理的设备,dev关键字可省略 |
up and down | 启用或关闭指定的网络设备 |
multicast on/off | 启用或禁用多播功能 |
mtu NUMBER | 设置MTU的大小,默认为1500 |
netns PID | ns为namespace,用于将接口移动到指定的网络名称空间 |
- ip link show: 显示网络设备属性信息
- ip link help: 显示简要帮助信息
ip netns
ip netns: 网络命名空间管理
Options | Function |
---|---|
list | 列出所有的netns |
add NAME | 创建指定的netns |
del NAME | 删除指定的netns |
exec NAME COMMAND | 在指定的netns中运行命令 |
示例:
ip address
ip address: 网络协议地址管理
Options | Function | Example |
---|---|---|
add | 添加新的协议地址 | ip addr add IFADDR dev IFACE ;IFADDR := label NAME(为额外添加的地址指明接口别名);broadcast ADDRESS(广播地址,会根据IP和NETMASK自动计算得到);scope SCOPE_VALUE(SCOPE_VALUE的值有global: 全局可用;link: 接口可用;host: 仅本机可用) |
delete | 删除地址协议 | ip addr delete IFADDR dev IFACE |
show | 查看接口的属性及地址信息 | ip addr show [IFACE] |
flush | 清除地址协议 | ip addr flush dev IFACE |
示例:
**注意:**利用命令设置的一个网络设备的多个地址,会立即生效,但是系统或者网络服务重启后则失效。
ip route
ip route: 路由表管理
Options | Functions | Example |
---|---|---|
add | change | replace | 添加/修改/添加或者修改路由 | ip route add TYPE PRIFIX via GW [dev IFACE] [src SOURCE_IP] |
delete | 删除指定的路由 | ip route del TYPE PRIFIX |
show | 显示路由表信息 | ip route show TYPE PRIFIX |
flush | 清空路由表信息 | ip route flush TYPR PRIFIX |
get | 查看单个指定的路由信息 | ip route get TYPE PRIFIX |
示例:
ss命令
ss命令是和netstat基本相似的一个程序,可以显示和netstat命令相似的信息,也可以更多的显示TCP状态信息
命令使用格式
ss [options] [ FILTER ]
常用选项
Options | Function |
---|---|
-t | TCP协议的相关连接 |
-u | UDP相关的连接 |
-w | raw scoket相关的连接 |
-l | 监听状态的连接 |
-a | 所有状态的连接 |
-n | 数字格式 |
-p | 相关的程序及其PID |
-e | 扩展格式信息 |
-m | 内存用量 |
-o | 计时器信息 |
FILTER的写法
FILTER := [state STATE-FILTER] [EXPRESSION]
TCP的状态
state | Introuduction |
---|---|
established | 代表一个打开的连接,数据可以传送可以传送给用户 |
syn-sent | 在发送连接请求后等待匹配的连接请求 |
syn-recv | 在接收和发送一个连接请求后等待对连接请求的确认 |
fin-wait-1 | 等待远程TCP的连接中断请求,或先前的连接中断请求的确认 |
fin-wait-2 | 从远程TCP等待连接中断请求 |
time-wait | 等待足够的时间以确保远程TCP接收到连接中断请求的确认 |
closed | 没有任何连接状态 |
close-wait | 等待从本地用户发来的连接中断请求 |
last-ack | 等待原来发向远程TCP的连接中断请求的确认 |
listen | 侦听来自远方TCP端口的连接请求 |
closing | 等待远程TCP对连接中断的确认 |
STATE-FILTER
STATE-FILTER可以是以上的TCP的状态,也可以是以下的字段:
Field | Introduction |
---|---|
all | TCP所有的状态 |
connected | 除listen和closed状态外的所有状态 |
synchronized | 所有已连接的状态除了syn-sent |
bucket | 显示状态为maintained as minisockets,如:time-wait和syn-recv |
big | 与bucket相反 |
EXPRESSION
ss命令下的EXPRESSION可以匹配本地和远程的地址以及端口号,还可以将本地或远程的端口和一个端口号或者协议相比较。即就是EXPRESSION支持OP操作。支持的OP操作有:
OP | Introduction |
---|---|
<= or le | 小于或等于端口号 |
>= or ge | 大于或等于端口号 |
== or eq | 等于端口号 |
!= or ne | 不等于端口号 |
< or gt | 小于端口号 |
> or lt | 大于端口号 |
下面是EXPRESSION相关的例子:
1、~]# ss '( sport <= :22 or dport <= :22 )' 显示源端口或者目标端口大于等于22的连接
2、~]# ss sport = :http 显示源端口为http的连接
3、~]# ss state connected sport = :http 显示TCP除listen和closed状态外的所有状态的源端口为80的连接
nmcli命令(CentOS 7)
nmcli是CentOS 7上面完成网卡所有配置的命令,并可以将执行的命令直接写入配置文件中,永久有效。下面介绍nmcli的基本用法:
命令使用的方法
~]# nmcli [OPTIONS…] { help | connection | device} [COMMAND] [ARGUMENTS…]
管理网络连接
~]# nmcli connection {show | up | down | modify | add | edit | clone | delete | monitor | reload | load | import | export} [ARGUMENTS…]
显示和管理网络接口
~]# nmcli device {status | show | set | connect | reapply | modify | disconnect | delete | monitor | wifi | lldp} [ARGUMENTS…]
网卡信息的查看
-
查看所有网络连接
~]# nmcli connection show
-
查看活动的网络连接
~]# nmcli connection show -active
-
查看指定的网卡的详细信息
~]# nmcli connection show DEVICE
-
显示设备的连接状态
~]# nmcli device status
-
显示所有网络设备的详细信息
~]# nmcli device show
-
显示指定设备的详细信息
~]# nmcli device DEVICE
网卡状态的修改
-
启用网络连接
~]# nmcli connection up DEVICE_NAME
-
关闭网络连接(可被自动激活)
~]# nmcli connection down DEVICE
-
禁止网卡连接
~]# nmcli device disconnetc DEVICE
-
删除网络连接的配置文件
~]# nmcli connection delete DEVICE_NAME
- 重新读取网络配置文件
~]# nmcli connection reload
网卡配置的修改
网卡配置的修改命令格式
如何修改IP地址属性:
~]# nmcli conn modify IFACE
[+|-]setting.property value
ipv4.address
ipv4.gateway
ipv4.dns1
ipv4.method
-
设置指定网卡自动启动
~]# nmcli connection modify ens37 connection.autoconnect yes
-
设置IP地址的获取方式(手动或者DHCP)
~]# nmcli connection modify ens37 connection.autoconnect yes
~]# nmcli connection modify ens37 ipv4.method manual ipv4.addresses 172.16.20.3/16
-
修改IP地址
~]# nmcli connection modify ens37 ipv4.addresses 192.168.237.130/24
-
修改网关
~]# nmcli connection modify ens37 ipv4.gateway 192.168.237.3
-
为指定网卡添加第二个IP地址
~]# nmcli connection modify ens37 +ipv4.addresses 192.168.237.133/24
-
添加DNS
~]# nmcli connection modify ens37 ipv4.dns 114.114.114.114
-
添加备用DNS
~]# nmcli connection modify ens37 +ipv4.dns 8.8.8.8
-
删除备用DNS
~]# nmcli connection modify ens37 -ipv4.dns 8.8.8.8
配置文件相关的配置
Linux的一个重要的哲学思想是一切皆文件,其内涵就是所有的服务、设备的配置都是通过文件来管理的。而对文件的配置一般情况下不会立即生效,在重启系统或重新读取配置文件后永久生效。通过文件对网络进行配置,我们首要的是先知道网络设备相关的文件,以及网关、路由、DNS相关的配置文件。
IP/NETMASK/GW/DNS等属性的配置文件:
/etc/sysconfig/network-scripts/ifcfg-IFACE 其中IFACE为接口名称
路由相关的配置文件:
/etc/sysconfig/network-scripts/route-IFACE
域名服务器的配置文件:
/etc/resolv.conf
下面主要介绍相关文件里的内容及如何配置
- /etc/sysconfig/network-scripts/ifcfg-IFACE文件中得每个字段代表的含义:
Filed | Introduction |
---|---|
DEVICE | 此配置文件对应的设备的名称 |
ONBOOT | 在系统引导过程中,是否激活此接口 |
UUID | 此设备的唯一表标识 |
IPV6INIT | 是否初始化IPv6 |
BOOTPROTO | 激活此接口时使用什么协议配置接口属性,常用的有dhcp bootp static |
TYPE | 接口类型,常见的有Ethernet Bridge |
DNS1 | 第一DNS服务器指向 |
DNS2 | 备用DNS服务器指向 |
DOMAIN | DNS搜索域 |
IPADDR | IP地址 |
NETMASK | 子网掩码;CentOS 7支持使用PREFIX以长度方式指明子网掩码 |
GATEWAY | 默认网关 |
USERCTL | 是否允许普通用户控制此设备 |
PEERDNS | 如果BOOTPROTO的至为"dhcp",是否允许dhcp server分配的dns服务器指向覆盖本地手动指定的DNS服务器指向;默认为允许 |
NM_CONTROLLED | 是否使用NetworkManager服务来控制接口 |
前面说过,通过配置文件配置的网络需要重启系统或者重新读入配置文件,也就是重新启动网络服务,那么如何重启网络服务呢?
CentOS 6管理网络服务:
~]# service SERVICE {start|stop|restart|status}
CentOS 7 管理网络服务:
~]# systemctl {start|stop|restart|status} SERVICE[.service]
所以在CentOS 6和7中分别重启网络服务的命令是:
~]# service network restart
~]# systemctl restart network.service
-
/etc/sysconfig/network-scripts/route-IFACE对非默认网络路由的配置
支持两种配置方式,但不可混用
- 每行一个路由条目
TARGET via GW
- 每三行一个路由条目
ADDRESS#=TARGET
NETMASK#=MASK
GATEWAY#=NEXTHOP
-
给接口配置多个地址
ip addr之外,ifconfig或配置文件都可以。
- ifconfig命令的配置
~]# ifconfig IFACE_LABEL IPADDR/NETMASK
其中IFACE_LABEL为:eth0:0, eth0:1
-
配置文件的配置
为别名添加配置文件:
配置文件中的两个字段不同以往文件中的字段:
DEVICE=IFACE_LABEL
BOOTPROTO: 网卡别名不支持动态获取地址,所有该项只能设置成static或none