ifconfig命令:接口及地址查看和管理

configure a network interface


ifconfig [interface]

默认只能显示激活的接口;

-a:显示所有接口,包括inactive状态的接口;

例如:

]# ifconfig:查看网络接口;CentOS6,7显示方式会有不同;

Bcast:IP广播地址;

HWaddr/eth0:硬件MAC地址;

txqueuelen:传输队列长度;

RX:接收(总报文数量、单位、错误、丢弃、溢出、帧等数量);

TX:发送(总报文数量、单位、错误、丢弃、溢出、帧等数量);

]# ifconfig -a:查看所有接口;


ifconfig INTERFACE [aftype] options | address ...

设定接口IP地址;

常用格式:

ifconfig IFACE IP/MASK [up]

ifconfig IFACE IP netmask NETMASK

注意:命令行执行的命令立即送往内核中的TCP/IP协议栈并立即生效;


例如:

]# ifconfig eth1 192.168.10.100/24 up:指定eth1的IP地址并激活;

]# ifconfig eth1 192.168.10.100 netmask 255.255.255.0


options:

[-]promis:是否启用混杂模式;

[-]arp:是否启用arp协议;

[-]allmulti:是否启用组播;


例如:

]# ifconfig eth1 promisc:在eth1接口启用混杂模式;

]# ifconfig eth1 -promisc:在eth1接口关闭混杂模式;


route命令:路由查看及管理

路由条目类型:

主机路由:目标地址为单个主机IP;

网络路由:目标地址为IP子网落;

默认路由:目标为任意网络,0.0.0.0/0.0.0.0


查看路由:

]# route -n

-n:不反解IP地址为主机名称,以数字方式显示;

添加路由:

route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]

[-net|-host]:指定路由类型为网络路由或主机路由;

target:路由的IP地址;

[netmask Nm]:掩码可省;

[gw Gw]:指明下一跳地址,必须与本地主机地址在同一网段;


例如:

]# route -n

U:表示up状态;

G:表示网关;

Destination:为目标网络;

Metric:到达目标网络要经过的开销,即度量值;

Iface:经过本地的接口发送;

]# route add -net 10.0.0.0/8 gw 192.168.10.1 dev eth1

添加路由,到10.0.0.0/8这个网络,要经过192.168.10.1的下一跳地址;dev eth1可省略;

]# route add -net 0.0.0.0/0.0.0.0 gw 192.168.10.1 dev eth1

或:]# route add default gw 192.168.10.1

指明默认网关(192.168.10.1必须与本地主机在同一网段);


删除路由:

route del [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]


例如:

]# route del -net 10.0.0.0/8 gw 192.168.10.1

如果路由仅有这一条10.0.0.0/8网段的,可省略gw参数;

]# route del default:删除默认路由;


iproute家族:


ip命令:

show / manipulate routing, devices, policy routing and tunnels


ip [ OPTIONS ] OBJECT { COMMAND | help }

OBJECT := { link | addr | route | netns }

link:网络设备配置;

ip link set:改变设备属性;

dev NAME(default):指明要管理的设备,dev关键字可省略;

up和down:启用和禁用接口;

multicast on或multicast off:启用或禁用多播功能;

name NAME:重命名接口(先down掉接口,才能改名);

mtu NUMBER:设定mtu大小;默认1500字节;

txqlen|txqueuelen NUMBER:设定发送队列长度;

netns PID:ns为namespace,内核支持名称空间,用于将接口移动到指定的网络名称空间;


例如:

]# ip link set eth1 down:禁用eth1接口;

]# ip link set dev eth1 up:启用eth1接口;

]# ip link set eth1 multicast on:启用eth1接口多播;

]# ip link set eth1 name eno666:把eth1接口重命名为eno666;

ip link show:显示设备属性(查看二层设备的属性,与IP地址无关);

ip link list

例如:

]# ip link show:类似ifconfig命令;

qdisc:队列;

pfifo_fast:队列类型先进先出;

qlen:队列长度;

link/ether:MAC地址;

brd:MAC的广播地址;

]# ip link show:查看二层设备的属性;

]# ip link list:同show功能;

]# ip li l:命令简写;

]# ip li sh:命令简写;

注意:命令可简写,只要是唯一识别的命令;

ip link help:显示简要使用帮助;



netns:网络名称空间;

ip netns add NETNAMESPACE_NAME:设定网络名称空间名称;

ip link set IFACE netns NETNAMESPACE_NAME:把指定接口移动到指定网络名称空间中;

ip netns exec  NETNAMESPACE_NAME COMMAND:在网络名称空间中执行命令;


ip netns :manage network namespaces

ip netns add NAME:创建指定的netns;

ip netns del NAME:删除指定的netns;

ip netns list:列出所有的netns;

ip netns exec NAME COMMAND:在指定的netns中执行命令;

例如:

]# ip netns add mynet:设定网络名称空间为mynet;

]# ip link set eno33554984 netns mynet:把接口移动到网络名称空间为mynet中;

]# ip link show:此时就看不到eno33554984接口了;

]# ip netns exec mynet ip link show:使用exec才能查看网络名称空间为mynet中的接口;


addr:协议地址管理

ip address add:添加新的协议地址;

ip addr add IFADDR dev IFACE 

可在一个接口加多个IP地址;

同网段IP地址显示为secondary;

[label NAME]:为额外添加的地址指明接口别名,使用ifconfig就能显示了;

[broadcast ADDRESS]:广播地址,会根据IP和NETMASK自动计算得到;

[scope SCOPE_VALUE]:

SCOPE_VALUE:

global:全局可用:

site:

link:接口可用,仅自己ping自己可以,不用于和其它主机通信;

host:仅本机可用;


例如:

]# ip ad show:查看接口地址;

]# ifconfig eth1 0:删除eth1的地址;

]# ip addr add 192.168.10.101/24 dev eth1:添加eth1接口地址为192.168.10.101;

]# ip addr show eth1:查看eth1接口地址;

]# ifconfig eth1:查看eth1接口地址;

]# ip addr add 10.0.10.100/8 dev eth1:添加eth1接口第二个IP地址;

]# ifconfig:只能显示接口的第一IP地址;查看多地址可使用ip addr show;

如果想让ifconfig显示一个接口的多个地址,要在设置多地址时,添加标签后,才能显示;

]# ip addr add 10.1.1.10/8 dev eth1 label eth1:0:给eth1第二地址配置label名称为eth:0;

ip address del:删除协议地址;

ip addr del IFADDR dev IFACE


例如:

]# ip addr del 10.1.1.10/8 dev eth1:删除eth1接口的地址;


ip address show:查看协议地址;

ip addr list [IFACE]:显示指定接口的地址;


ip address flush:清空所有协议地址(linux可以在一个接口上添加多个地址);

ip addr flush dev IFACE:清空指定接口上所有地址;

例如:

]# ip addr flush dev eth1:删除eth1上的所有地址;


说明:flush和show可以使用模式,查找或删除以什么开头的ip地址的功能;


ip route命令:

routing table management


ip route add:添加路由;

dev NAME:设置由哪个接口出去;

via ADDRESS:下一跳地址(gw);

src ADDRESS:配置一个接口有多个地址时,要指明源地址;


ip route add TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP]

ip route add default via GW:添加默认路由;


例如:

]# ip addr add 10.0.10.100/8 dev eth1:添加eth1接口ip地址;

]# ip route add 192.168.0.0/24 via 10.0.0.1 dev eth1

到达192.168.0.0网络通过eth1接口到达下一跳地址为10.0.0.1出去,注意确保主机在10.0.0.0网络上;

]# ip route add 192.168.1.0/24 via 10.0.0.1 dev eth1 src 10.0.20.100

通过eth1接口下的10.0.20.100地址,经下一跳10.0.0.1达到192.168.1.0网络,注意确保主机在10.0.0.0网络上;

]# ip route list:查看路由表;

]# ip route add default via 172.18.0.1 dev eth0

添加默认路由,通过eth0接口,经下一跳172.18.0.1地址出去,注意确保主机在172.18.0.0网络上;


ip route change:更改路由;使用格式同ip route add;

ip route replace:替换路由;使用格式同ip route add;


ip route delete:删除路由条目;

ip reoute del TYPE PREFIX

例如:

]# ip route del 192.168.1.0/24:删除192.168.1.0这条路由;


ip route show:查看路由表;

ip route show TYPE PREFIX

例如:

~]# ip route show src 172.18.252.23:显示原地址172.18.252.23能到达的路由;


ip route flush:清空路由表;同show用法;

ip route flush TYPE PREFIX

例如:

]# ip route flush 10/8:清空10网段的路由;

注意:删除IP地址是大范围时,因为大范围包括小范围有时删不掉;


ip route get:获取指定路由条目;

ip route get TYPE PREFIX

前提是路由表内要有路由条目,否则查询不到;

例如:

]# ip route get 10.0.0.0/8:查看到达10.0.0.0的路由从本地哪个端口出去的;


ss命令:

another utility to investigate sockets


ss [options] [ FILTER ]

选项:

-t:查看tcp协议相关的链接;

-u:查看udp相关的链接;

-w:查看raw socket相关的链接;

-l:查看监听状态的链接;

-a:查看所有状态的链接;

-n:以数字格式显示;

-p:查看相关的进程及其PID;

-e:查看扩展格式信息;

-m:查看内存用量;

-o:查看计时器信息;


FILTER := [ state TCP-STATE ] [ EXPRESSION ]

TCP状态过滤功能,讲完后的的内容才会理解此处命令;


TCP的常见状态:

LISTEN:监听;

ESTABLISHED:建立的连接;

FIN_WAIT_1:发送断开后等待断开确认;

FIN_WAIT_2:收到断开后确认断开;

SYN_SENT:确认收到断开信号;

SYN_RECV:确认

CLOSED:


EXPRESSION:

dport:目标端口;

sport:源端口;

例如:'(dport=:22 or sport=:22'

]# ss -tan state ESTABLISHED:查看tcp连接状态为ESTABLISHED的信息;

]# ss -tan '( dport = :22 or sport = :22 )':查看tcp连接中源端口为22或目标端口为22的信息;

]# ss -tan state ESTABLISHED:仅查看tcp连接中ESTABLISHED状态的信息;


配置文件:

通过修改配置文件来配置网络属性;


IP地址配置文件:


IP/NETMASK/GW/DNS等属性的配置文件:

/etc/sysconfig/network-scripts/ifcfg-IFACE

IFACE:为接口名称;


路由的相关配置文件:

/etc/sysconfig/network-scripts/route-IFACE

通过大量参数来定义接口的属性,其可通过vim等文本编辑器直接修改,也可使用专用的命令进行修改

CentOS 6:system-config-network或setup

CentOS 7:nmtui

注意:

通过命令配置的网络属性,只是当时立即生效,重启后无效;

在配置文件中配置的网络属性,是永久生效的,但不能立即生效,或让内核重读配置文件即立即生效;


ifcfg-IFACE配置文件参数:网卡配置文件

CentOS 6:/etc/sysconfig/network-scripts/ifcfg-eth0

CentOS 7:/etc/sysconfig/network-scripts/ifcfg-eno16777736


DEVICE:此配置文件对应的设备的名称;应于ifcfg-IFACE文件的IFACE名称保持一致;

ONBOOT:在系统引导过程中,是否激活此接口;

UUID:此设备的唯一标识;

IPV6INIT:是否初始化IPv6协议栈;

BOOTPROTO:激活此接口时使用什么协议来配置接口属性;

dhcp、bootp、static、none(也表示静态);

TYPE:接口类型:常见的有Ethernet,Bridge;

DNS1:第一DNS服务器指向;

DNS2:备用DNS服务器指向;

DNS3:备用DNS服务器指向;

DOMAIN:DNS搜索域;

DEFROUTE:是否为默认路由使用的接口;

GATEWAY:默认网关;

IPADDR:本机IP地址;

NETMASK:子网掩码,CentOS 7支持使用PREFIX以长度发方式指明掩码;

USERCTL:是否允许普通用户控制此设备(激活、停掉);

IPV4_FAILURE_FATAL:IPV4故障时是否把网卡down掉;

PEERDNS:如果BOOTPROTO的值为"dhcp",是否允许dhcp server分配的dns服务器指向覆盖本地手动指定的DNS服务器指向;默认为yes允许;

HWADDR:硬件设备的MAC地址(复制网卡的地址,或删除也可以);


NM_CONTROLLED:是否使用NetworkManager服务来控制接口配置;


操作系统开始时为什么会读取这个配置文件来配置网络接口属性?因为主机开始时有一个服务程序,会读取这个配置文件,并通过这个配置文件中加载各种参数值,然后使用命令配置在接口上,所以开机后就生效了;

这个配置文件内核不会自动读取,而是开机时会自动启动一个网络服务,这个服务中有些脚本,能够通过读取此配置文件的参数,来获取接口的属性,并使用相应命令来配置接口;


网络服务:有2个

network

NetworkManager

CentOS 6:功能不完善,集群、虚拟化桥接接口都不能实现;

CentOS 7:功能已经完善;


管理网络服务:

CentOS 6:service SERVICE {start|stop|restart|status}

CentOS 7:systemctl {start|stop|restart|status} SERVICE.service


例如:

]# service network status:查看网络服务状态;

]# service network restart:重启网络服务;自动关闭接口并通过读取配置文件方式设定接口;

只能管理提供配置文件的接口;没有配置文件的接口不能管理;

为eth1接口提供配置文件:

拷贝/etc/sysconfig/network-scripts/ifcfg-eth0文件:

]# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1


编辑配置文件:

]# vim ifcfg-eth1


编辑内容为:

DEVICE=eth1

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=no

BOOTPROTO=none

IPADDR=10.100.100.1

NETMASK=255.0.0.0

IPV6INIT=no

USERCTL=no


重启网络服务:

]# service network restart

重启网络服务,会清空接口配置后,并重新读取接口配置文件自动配置接口;


配置文件修改之后,如果要生效,需要重启网络服务;

建议不要在CentOS 6上使用NetworkManager;

CentOS 6:service network restart

CentOS 7:systemctl restart network.service


在CentOS 7:

拷贝:/etc/sysconfig/network-scripts/ifcfg-eno16777736为eno33554984


]# cp ifcfg-eno16777736 ifcfg-eno33554984


编辑配置文件:

]# vim ifcfg-eno33554984


编辑内容:

# Generated by dracut initrd

NAME="eno33554984"

DEVICE="eth1"

ONBOOT=yes

NETBOOT=yes

IPV6INIT=no

BOOTPROTO=none

TYPE=Ethernet

DEFROUTE=yes

IPADDR=192.168.10.100

PREFIX=24


重启网络服务:

]# service network restart


路由配置文件:


在网卡配置文件中已经配置过网关路由;


用到非默认网关路由时,要永久有效要编辑配置文件:

/etc/sysconfig/network-sripts/route-IFACE


支持两种配置方式,但不能混用;

(1)每行一个路由条目:

TARGET via GW

(2)每三行一个路由条目;

ADDRESS#=TARGET

NETMASK#=MASK

GAETWAY#=NEXTHOP


命令行配置路由:

]#  ip route add 10.0.0.0/8 via 192.168.10.1:到达10.0.0.0/8的网络通过192.168.10.1出去;

重启网络服务会失效;


修改路由配置文件:

第一种方式:每行一个路由条目:

]# vim /etc/sysconfig/network-sripts/route-eno33554984


10.0.0.0./24 via 192.168.10.1


或用第二种方式:每三行一个路由条目;

]# vim /etc/sysconfig/network-sripts/route-eno33554984


ADDRESS0=20.0.0.0

NETMASK0=255.0.0.0

GATEWAY0=192.168.10.2


即通过192.168.10.2到达20.0.0.0网络;


使用ip addr add 10.1.1.10/8 dev eth1 label eth1:0

为接口设配置多IP地址时要配置label,才能是ifconfig显示处接口的多个IP地址;


给接口配置多个地址:

除了ip addr之外,ifconfig或配置文件都可以;


(1)ifconfig IFACE_LABEL IPADDR/NETMASK


IFACE_LABEL:接口标签命名规则:接口名:0,接口名:1;例如:eth0:0,eth0:1,...


例如:

]# ifconfig eno33554984:0 192.168.20.100/24

临时有效;


(2)为别名添加配置文件:不支持dhcp

DEVICE=IFACE_LABEL


永久有效:复制配置文件/etc/sysconfig/network-scripts/ifcfg-eno33554984

]# cp ifcfg-eno33554984 ifcfg-eno33554984:0


编辑配置文件:

]# vim ifcfg-eno33554984:0


编辑内容:

# Generated by dracut initrd

DEVICE="eth1:0"

ONBOOT=yes

NETBOOT=yes

IPV6INIT=no

BOOTPROTO=none

TYPE=Ethernet

DEFROUTE=yes

IPADDR=192.168.20.200

PREFIX=24

注意:对于网卡别名不支持动态获取地址,只能为static、none手动指定,即:

BOOTPROTO=none


地址获得时,如果没在网卡配置文件中指明PEERDNS=no,会改变/etc/resolv.conf里面的地址(增加了);


使用特殊命令直接修改配置文件:

CentOS 7:nmtui

打开设置窗口,分别进行设置;

CentOS 6:setup

打开设置窗口,分别进行设置;