您的位置:首页 > 理论基础 > 计算机网络

网络管理if,ip.ss

2015-12-30 13:53 816 查看
这里主要是关于网络属性管理命令ifcfg家族和iproute家族的使用,还有如何通过配置文件来配置。
ifcfg已经存在很多年了,现在倒是有种功成身退的感觉。在CentOS7上面已经默认不安装了。iproute与内核密切相关,它的名称可能在不能的系统上也不相同。iproute、iproute2、iproute3。

目录:
一、ifcfg
二、iproute

三、配置文件

一、

ifcfg家族:

ifconfig:配置IP,NETMASK
route:路由
netstat:状态及统计数据查看

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

ifconfig [INTERFACE] 显示指定接口信息。
ifconfig -a:显示所有接口,包括inactive非活动状态的接口;



ifconfig interface [aftype] options | address ...
options:[-]promisc 设置工作在混杂模式,-promisc表示取消。
ifconfig IFACE IP/MASK [up|down]
ifconfig IFACE IP netmask NETMASK

可以设置IP地址为0,以请除接口地址。



设置地址并工作在混杂模式。







别名:这是后来加上的,IP地址跟上面有点不同。
[root@localhost ~]# ifconfig eno16777736:0 172.16.40.100/16
[root@localhost ~]# ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 800
inet 172.16.40.1  netmask 255.255.0.0  broadcast 0.0.0.0
ether 00:0c:29:91:34:92  txqueuelen 1000  (Ethernet)
RX packets 10251  bytes 953348 (931.0 KiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 204  bytes 16582 (16.1 KiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno16777736:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 800
inet 172.16.40.100  netmask 255.255.0.0  broadcast 172.16.255.255
ether 00:0c:29:91:34:92  txqueuelen 1000  (Ethernet)


route命令:路由查看及管理
路由条目类型:
主机路由:目标地址为单个IP;
网络路由:目标地址为IP网络;
默认路由:目标为任意网络,0.0.0.0/0.0.0.0

查看: -n为以数字方式显示(不会反解名称)
# route -n



上面红线部分为默认路由,也就是默认网关。 下面两个为两个接口的直连路由。

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

删除172.16.0.0的直连路由。






用route del default 也一样。

现在不能上网和访问172.16.0.0网段的主机喽。



主机路由
对单主机的,我们这里因为是局域网内,所以不用设置gw(gateway),直接网卡出去。




现在呢,有去往172.16.40.1的主机路由。但不能访问其它同网段的主机。

路由表
做这些实验一定要注意arp表




因为没有路线可以到达172.16.0.1,所以默认路由添加失败。




默认路由就是网卡,其实就是去往任何地址的数据都从eno16777736这个接口出去,所以就可以局域网通信了。就算不是同一个网段,只要物理链路可以到达,数据就可以到达(一般情况),只不过人家回复的数据去了网关,而没有到我们这里而已。
当然了在这里设置成这样没有任何的价值,只是为了更容易理解路由表。

默认路由




这样就可以到外网了,我们发往局域网的数据也会到网关那里,只不过网关发现目地是本地,就会丢弃了。而且要有到达172.16.0.1的




恢复正常完工。

netstat命令:
Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships

显示路由表:netstat -rn
-r:显示内核路由表
-n:数字格式

跟route -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>

指定接口这里,-I与接口之间一定不能有空格




ifup/ifdown命令:只用于启用或关闭接口,ifconfig也有这个功能。
注意:通过配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE来识别接口并完成配置;

二、iproute
iproute2家族:
ip OBJECT:
addr:地址和掩码;
link:接口
route:路由
ss:状态及统计数据查看

ip命令有许多的OBJECT所组成,好像在CentOS7上面的很多命令都是这样,如: systemctl,localectl。
OBJECT :
{ link | addr | addrlabel | route | rule | neigh | ntable | tunnel | tuntap | maddr | mroute | mrule | monitor | xfrm | netns | l2tp | tcp_metrics }

ip link 网络设备配置命令,如启用禁用,改变MTU和MAC地址。
ip addr 主要是用来管理IP地址的, IP或IPV6。
ip route 管理路由。
ip rule 管理路由策略,用来控制路由的选择策略,从而控制数据不同的走向。
ip neigh/neighbour ARP表的管理。
ip tunnel 隧道配置。
ip maddr 多播地址管理。
ip mroute 多播路由管理。
ip monitor 状态监控,如:IP或路由的状态的持续监控。
ip xfrm 设备xfrm, 转换数据报的格式,数据包进行加密。

ip netns 管理网络名称空间
看起来好强大,但我们这里只介结下前三个,其它的说实话,不会



其实ip这个命令虽然很复杂,但每一步都有help。看起来非常清楚。








show / manipulate routing, devices, policy routing and tunnels

ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT := { link | addr | route | netns }

注意: OBJECT可简写,各OBJECT的子命令也可简写;

ip link: network device configuration
ip link set - change device attributes
dev NAME (default):指明要管理的设备,dev关键字可省略;
up和down:
multicast on或multicast off:启用或禁用多播功能;
name NAME:重命名接口
mtu NUMBER:设置MTU的大小,默认为1500;
netns PID:ns为namespace,用于将接口移动到指定的网络名称空间;


ip

mtu 800 , qdisc排队规则 pfifo_fast 前进前出,state状态up。默认mode. 可排队列长度1000。

link show - display device attributes
ip link help - 显示简要使用帮助;

ip netns: - manage network namespaces. 简单介绍。
ip netns list:列出所有的netns
ip netns add NAME:创建指定的netns
ip netns del NAME:删除指定的netns
ip netns exec NAME COMMAND:在指定的netns中运行命令








ip address - protocol address management.

ip address add - add new protocol address
ip addr add IFADDR dev IFACE
[label NAME]:为额外添加的地址指明接口别名;
[broadcast ADDRESS]:广播地址;会根据IP和NETMASK自动计算得到;
[scope SCOPE_VALUE]:作用域
global:全局可用; 默认
link:接口可用;
host:仅本机可用;




[root@localhost ~]# ip addr add 172.16.40.1/16 dev eno16777736
[root@localhost ~]# ip addr show eno16777736
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 800 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:91:34:92 brd ff:ff:ff:ff:ff:ff
inet 172.16.40.1/16 scope global eno16777736
valid_lft forever preferred_lft forever
[root@localhost ~]# ip addr add 172.16.40.2/16 dev eno16777736
[root@localhost ~]# ip addr show eno16777736
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 800 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:91:34:92 brd ff:ff:ff:ff:ff:ff
inet 172.16.40.1/16 scope global eno16777736
valid_lft forever preferred_lft forever
inet 172.16.40.2/16 scope global secondary eno16777736
valid_lft forever preferred_lft forever
[root@localhost ~]# ifconfig eno16777736
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 800
inet 172.16.40.1  netmask 255.255.0.0  broadcast 0.0.0.0
ether 00:0c:29:91:34:92  txqueuelen 1000  (Ethernet)
RX packets 10102  bytes 937624 (915.6 KiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 172  bytes 14634 (14.2 KiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
用ifconfig只能查看到主地址和别名的地址,同一个接口名称的多个地址不会显示出来。

添加别名:
[root@localhost ~]# ip addr add 172.16.40.12/16 label eno16777736:0 dev eno16777736

ip address delete - delete protocol address
ip addr delete IFADDR dev IFACE

[root@localhost ~]# ip addr del 172.16.40.2 dev eno16777736
Warning: Executing wildcard deletion to stay compatible with old scripts.
Explicitly specify the prefix length (172.16.40.2/32) to avoid this warning.
This special behaviour is likely to disappear in further releases,
fix your scripts!
这个也删除,就是提示我们要把地址写全,加上掩码长度

ip address show - look at protocol addresses
ip addr list [IFACE]:显示接口的地址;

ip addr flush
ip address flush - flush protocol addresses
ip addr flush dev IFACE
ip addr flush [ dev STRING ] [ to PREFIX ] [ label PATTERN ]

flush也是用来清除地址的,不过用擦除更好,一擦一大片。
ip addr flush eth0 清除所有地址
ip addr flush eth0 label eth0:0 清除别名
ip addr flush eth0 to 172.16.0.0/16 清除以172.16开头的
[root@localhost ~]# ip addr flush dev eno16777736
[root@localhost ~]# ip addr show dev eno16777736
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 800 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:91:34:92 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]# ip addr add 172.16.40.100 dev eno16777736
[root@localhost ~]# ip addr add 172.16.40.101 dev eno16777736
[root@localhost ~]# ip addr add 172.16.40.102 dev eno16777736
[root@localhost ~]# ip addr add 192.168.10.10/24 dev eno16777736
[root@localhost ~]# ip addr add 192.168.10.12/24 dev eno16777736
[root@localhost ~]# ip addr show eno16777736
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 800 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:91:34:92 brd ff:ff:ff:ff:ff:ff
inet 172.16.40.100/32 scope global eno16777736
valid_lft forever preferred_lft forever
inet 172.16.40.101/32 scope global eno16777736
valid_lft forever preferred_lft forever
inet 172.16.40.102/32 scope global eno16777736
valid_lft forever preferred_lft forever
inet 192.168.10.10/24 scope global eno16777736
valid_lft forever preferred_lft forever
inet 192.168.10.12/24 scope global secondary eno16777736
valid_lft forever preferred_lft forever
我们发现在添加地址的时候,如果不写掩码,默认就是32了。现在我们清除所有172开头的地址。
[root@localhost ~]# ip addr flush dev eno16777736 to 172/8
[root@localhost ~]# ip addr show eno16777736
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 800 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:91:34:92 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.10/24 scope global eno16777736
valid_lft forever preferred_lft forever
inet 192.168.10.12/24 scope global secondary eno16777736
valid_lft forever preferred_lft forever
[root@localhost ~]#
[root@localhost ~]# ip addr flush dev eno16777736        #清空吧。


ip route - routing table management
ip route add - add new route
ip route change - change route
ip route replace - change or add new one
ip route add TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP]
ip route delete - delete route
ip route del TYPE PRIFIX
ip route show - list routes
ip route flush - flush routing tables
ip route get - get a single route
ip route get TYPE PRIFIX

ip route add TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP]
# ip route add 10.0.0.0/8 via 172.16.0.1 dev eno16777736 src 172.16.40.1
# ip route add default via GW
via就等于route命令的gw,src主要用于同一个接口有多个地址的情况。
[root@localhost ~]# ip route add 10.0.0.0/8 via 172.16.0.1
[root@localhost ~]# ip route show
default via 172.16.0.1 dev eno16777736  proto static  metric 100
10.0.0.0/8 via 172.16.0.1 dev eno16777736
172.16.0.0/16 dev eno16777736  proto kernel  scope link  src 172.16.40.1
192.168.189.0/24 dev eno33554984  proto kernel  scope link  src 192.168.189.190  metric 100
有多个网卡,想指定网卡为出口,就可以用dev来指定。

ip route delete - delete route
ip route del TYPE PRIFIX

[root@localhost ~]# ip route del 10.0.0.0/8    #删除
[root@localhost ~]# ip route del default

ip route show - list routes

ip route change
[root@localhost ~]# ip route show
default via 172.16.0.1 dev eno16777736  proto static  metric 100
10.0.0.0/8 via 172.16.0.1 dev eno16777736  src 172.16.40.1
[root@localhost ~]# ip route change 10.0.0.0/8 via 172.16.0.10
[root@localhost ~]# ip route show
default via 172.16.0.1 dev eno16777736  proto static  metric 100
10.0.0.0/8 via 172.16.0.10 dev eno16777736


ip route flush - flush routing tables

[root@localhost ~]# ip route flush 10.0.0.0/8

ip route get - get a single route
ip route get TYPE PRIFIX
用来获取单个路由条目

[root@localhost ~]# ip route get 192
192.0.0.0 via 172.16.0.1 dev eno16777736  src 172.16.40.1
cache
[root@localhost ~]#


ss命令:
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 FSM:
LISTEN:监听
ESTABLISEHD:建立的连接
FIN_WAIT_1:
FIN_WAIT_2:
SYN_SENT:
SYN_RECV:
CLOSED:

EXPRESSION:
dport =
sport =
示例:'( dport = :22 or sport = :22)'
~]# ss -tan '( dport = :22 or sport = :22 )'
~]# ss -tan state ESTABLISHED

状态:
ESTABLISHED、LISTENING、CLOSED、FIN-WAIT-1、FIN-WAIT-1、SYN-SENT、SYN-RECV

查看tcp的所有已建立的连接

[root@localhost ~]# ss -tan state ESTABLISHED
Recv-Q Send-Q                    Local Address:Port                      Peer Address:Port
0      0                       192.168.189.190:22                       192.168.189.1:50994
0      52                      192.168.189.190:22                       192.168.189.1:49923
已连立连接,源端口为22的,也就是本机22端口的。

[root@localhost ~]# ss -tan state ESTABLISHED '( sport = :22 )'
Recv-Q Send-Q                    Local Address:Port                      Peer Address:Port
0      0                       192.168.189.190:22                       192.168.189.1:50994
0      0                       192.168.189.190:22                       192.168.189.1:49923
[root@localhost ~]#
只查看某个端口:
[root@localhost ~]# ss -tuan '( sport = :22 )'
Netid State      Recv-Q Send-Q             Local Address:Port               Peer Address:Port
tcp   LISTEN     0      128                            *:22                            *:*
tcp   ESTAB      0      0                192.168.189.190:22                192.168.189.1:50994
tcp   ESTAB      0      0                192.168.189.190:22                192.168.189.1:49923
tcp   LISTEN     0      128                           :::22                           :::*
[root@localhost ~]#


三、配置文件:
上面的各种配置命令都是在当前运行内核中生效,而重启系统或重启服务配置就丢了。我们要把配置保存起来就要编辑配置文件了。系统上也有命令可以直接在配置文件中生效而不在内核中生效的,还有可以同时生效的。

IP配置文件
IP/NETMASK/GW/DNS等属性的配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE
路由的相关配置文件:/etc/sysconfig/network-scripts/route-IFACE

配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE通过大量参数来定义接口的属性;可通过vim等文本编辑器直接修改,也可以使用专用的命令的进行修改(CentOS 6:system-config-network (setup),CentOS 7: nmtui)

ifcfg-IFACE配置文件参数:
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”,是否允许dhcp server分配的dns服务器指向覆盖本地手动指定的DNS服务器指向;默认为允许;
HWADDR:设备的MAC地址;

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

如:
[root@localhost network-scripts]# cat ifcfg-eno16777736
# Generated by dracut initrd
NAME="eno16777736"
DEVICE="eno16777736"
ONBOOT=yes
NETBOOT=yes
UUID="e6fb36d2-c42d-47fc-a4df-29dec9cf3111"
IPV6INIT=yes
BOOTPROTO=static
IPADDR=172.16.40.10
NETAMSK=255.255.0.0
GATEWAY=172.16.0.1
DNS1=172.16.0.1
TYPE=Ethernet
[root@localhost network-scripts]#


在CentOS7里面有点不一样,可以用prefix来表示掩码长度,同一个设备可以用多个IP地址。如:
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=enp0s3
UUID=065a8851-f7ba-4d50-8cbb-ec71cb4a24d3
DEVICE=enp0s3
ONBOOT=yes
IPADDR=172.16.40.12
PREFIX=16
IPADDR1=172.16.40.31                #注意看这里,第二个IP地址。
PREFIX1=16                                    #使用方式在IPADDR后面加数字就可以。 这里的掩码长度也一样。
结果就是这种:
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:fd:00:4e brd ff:ff:ff:ff:ff:ff
inet 172.16.40.12/16 brd 172.16.255.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet 172.16.40.31/16 brd 172.16.255.255 scope global secondary enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fefd:4e/64 scope link
valid_lft forever preferred_lft forever
但是在配置文件中设置网卡别名,却一直没有成功。 以后再说啦。

网络服务:在我们的CentOS上面有两个管理网络的服务。
network
NetworkManager

管理网络服务:控制程序
CentOS 6: service SERVICE {start|stop|restart|status}
CentOS 7:systemctl {start|stop|restart|status} SERVICE[.service]

配置文件修改之后,如果要生效,需要重启网络服务;
CentOS 6:# service network restart
CentOS 7:# systemctl restart network.service

路由:/etc/sysconfig/network-scripts/route-IFACE
支持两种配置方式,但不可混用;
(1) 每行一个路由条目:
TARGET via GW

[root@localhost network-scripts]# cat route-eno16777736
0.0.0.0/0       via    172.16.0.1
10.0.0.1    via    172.16.0.1
192.168.0.0/24    via    192.168.189.1
223.108.1.8    via    10.0.0.1
[root@localhost network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.0.1      0.0.0.0         UG    0      0        0 eno16777736
10.0.0.1        172.16.0.1      255.255.255.255 UGH   0      0        0 eno16777736
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eno16777736
172.16.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eno16777736
192.168.0.0     192.168.189.1   255.255.255.0   UG    0      0        0 eno33554984
192.168.189.0   0.0.0.0         255.255.255.0   U     100    0        0 eno33554984
[root@localhost network-scripts]#
因为在IP配置里面已经设置网关了,这里其实也不用再加上默认路由了。还有就是下一条需要是本机可达的。

(2) 每三行一个路由条目:
ADDRESS#=TARGET
NETMASK#=MASK
GATEWAY#=NEXTHOP

例子:
ADDRESS0=192.168.0.0
NETMASK0=255.255.255.0
GATEWAY0=172.16.100.177

ADDRESS1=192.168.1.10
NETMASK1=255.255.255.255
GATEWAY1=172.16.100.77

谢谢浏览,如有问题,还请指出。谢谢



本文出自 “大蕃茄” 博客,请务必保留此出处http://fanqie.blog.51cto.com/9382669/1729946
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: