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
打开设置窗口,分别进行设置;
转载于:https://blog.51cto.com/linsj/1755419