推荐链接:
网络属性配置详解
网络基础:
我们知道在计算机网络中两个主机交换数据时,一般是流式数据;而数字设备间为了完成信号传输时钟频率是至关重要的;进而我们现在用到协议来规则、标准或约定计算机之间的数据交换;现在我们用的协议有TCP/IP:协议簇,它使用起来方便,但是边界较模糊;后来ISO组织为了规范TCP/IP,OSI参考模型随之诞生,虽然它已经无法取代TCP/IP的地位,但它更容易理解;
TCP/IP五层体系结构:
应用层(application layer) 直接为用户的应用进程提供服务 各应用层协议(HTTP,FTP,SMTP等) 运输层(transport layer) 负责向两个主机中进程之间的通信提供服务 TCP 和 UDP 协议的作用范围(提供进程之间的逻辑通信) 网络层(network layer) 负责为分组交换网上的不同主机提供通信服务 IP(Internet Protocol,因特网协议)(提供主机之间的逻辑通信) ARP(Address Resolution Protocol,地址解析协议) ICMP(?Internet Control Message Protocol,因特网控制消息协议) IPv6、ICMPv6、ND、MLD等 数据链路层(data link layer) 将源自网络层来的数据可靠地传输到相邻节点的目标机网络层 物理层(physical layer) 为数据端设备提供传送数据通路、传输数据
D 从224.0.0.0到239.255.255.255。
E 240.0.0.0到255.255.255.254保留
169开头的IPv4地址
“自动专用IP地址”,其地址范围为:169.254.0.0/16,子网掩码为255.255.0.0。
127.0.0.1地址
“环回地址”(Loopback Address),是主机IP堆栈内部的IPv4地址,主要用于网络软件测试以及本地机进程间通信;在IP网络中就是用来测试主机TCP/IP协议是否工作正常
0.0.0.0地址
0.0.0.0地址代表所有IPv4地址,常用于默认路由配置,或者代表整个不确定的IP地址范围(对未知IP进行路由
路由器:
路由器(Router),是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号。
路由表的生成: 静态指定:小范围可靠 动态学习:需要专门的协议帮助完成:rip2(基本废弃), ospf 路由条目: 目标地址 下一跳(nexthop)(也可以叫网关) 目标地址的类别: 主机:主机路由 网络:网络路由 0.0.0.0/0.0.0.0:默认路由
两台主机如何实现通信?
操作系统静态视角划分:硬件,内核,库,应用程序
对linux主机来讲系统启动后有两个层面:
- 内核空间:内核线程运行的位置
- 用户空间:各进程运行的集合
内核提供的功能有:内核管理,网络协议栈,驱动程序,内存管理,文件系统等
我们把TCP协议栈分为两层:
- 通信子网
- 资源子网
通信子网在内核中实现;资源子网在用户空间上实现,是服务、进程完成资源交换的表现形式的;
两台真正的通信是靠进程间通信的,而进程间通信彼此之间是靠套接字通信的,而每一个主机标识自己地址的方式是套接字,套接字是由ip和端口组成;真正的套接字是靠内核提供的;
什么是端口:
端口是用来实现标识本地主机上每个一个进程的唯一数字标识;是进程用来实现网络通信的数字标识;大小为16bits:端口有效使用范围1-65535;其中1-1023:固定分配,而且只有管理员有权限启用;1024-4w半固定;4W以上端口临时;
网络属性配置:
将Linux主机接入到网络中需要从三方面进行配置:
- IP/NETMASK:本地通信
- 路由(网关):跨网络通信
- DNS服务器地址:基于主机名的通信
对于linux系统来说DNS配置3个就够了:主DNS服务器地址、备用DNS服务器地址、第三备用DNS服务器地址;
注意:只有第一个DNS服务器挂了才会访问下一个DNS服务器
网络属性配置方式:
- 静态指定:命令,修改配置文件
- 动态分配:依赖于本地网路有DHCP服务
命令: ifcfg家族:ifconfig命令(配置IP,NETMASK)、route命令(路由)、netstat命令(状态及统计数据查看) iproute家族:ip命令(管理对象:addr地址和掩码、link接口、route路由)、ss命令(状态及统计数据查看) PS:ss命令在网络连接众多时比netstat性能要好很多; CenOS 7 :nm(Network Manager)家族:mcli(命令行工具)、nmtui:text window工具 注意: (1)DNS服务器指定: 编辑配置文件:/etc/resove.conf (2)本地主机名配置: hostname命令: 配置文件:/etc/sysconfig/network CentOS 7 : hostnamectl命令 修改配置文件: RedHat及相关发行版 /etc/sysconfig/network-scripts/ifcfg-NETCARD-NAME
网络接口命名方式:
网络接口命名方式: 传统命名: 以太网:ethX,[0,oo),如eth0,eth1... PPP网络:pppX,[0,...),如ppp9,ppp1... 可预测功能命名方案(CentOS): 支持多种不同的命名机制: Fireware,拓扑结构 (1) 如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,则根据此索引进行命名,如eno1, eno2, ... (2) 如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,如ens1, ens2, ... (3) 如果硬件接口的物理位置信息可用,则根据此信息命名,如enp2s0, ... (4) 如果用户显式定义,也可根据MAC地址命名,例如enx122161ab2e10, ... 上述均不可用,则仍使用传统方式命名; 命名格式的组成: en:ethernet wl:wlan ww:wwan 名称类型: o<index>:集成设备的设备索引号; s<slot>:扩展槽的索引号; x<MAC>:基于MAC地址的命名; p<bus>s<slot>:基于总线及槽的拓扑结构进行命名;
网络属性配置之命令
ifcfg命令家族:ifconfig,route,netstat
ifconfig命令:接口及地址查看和管理 ifconfig [interface] 不跟参数:显示当前或当的所有接口,激活状态的; # ifconfig -a:显示所有接口,包括inactive状态的接口; ifconfig interface [aftype] options | address ... #实现地址配置 # ifconfig IFACE IP/MASK [up|down] # ifconfig IFACE IP netmask NETMASK # ifconfig IFACE 0 删除网卡地址 options: [-]promisc 混杂模式;减号是去掉此功能; 注意:立即送往内核中的TCP/IP协议栈,并生效; 管理IPv6地址: add addr/prefixlen del addr/prefixlen
演示: CentOS 7 [root@centos7 ~]# ifconfig eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.110 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::20c:29ff:fefc:81b2 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:fc:81:b2 txqueuelen 1000 (Ethernet) RX packets 159 bytes 19117 (18.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 116 bytes 14163 (13.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 UP:激活状态 BROADCAST:支持广播功能 MULTICAST:执行组播(即多播)功能 RUNNING:启动状态 mtu 1500:支持网卡最大的传输单位1500字节; inet 192.168.1.110 netmask 255.255.255.0 broadcast 192.168.1.255 inet 192.168.1.110:网络地址 netmask 255.255.255.0 :子网掩码 broadcast 192.168.1.255:广播地址 ether 00:0c:29:fc:81:b2 txqueuelen 1000 (Ethernet) ether 00:0c:29:fc:81:b2:以太网地址 txqueuelen 1000 (Ethernet):传输队列长度 RX packets 159 bytes 19117 (18.6 KiB):接收的报文大小 RX errors 0 dropped 0 overruns 0 frame 0:接收时错误、丢失、溢出、帧的数量 TX packets 116 bytes 14163 (13.8 KiB):传出的数据报文,一共字节 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 注意:这里需要关注的是errors\drooped数量 CentOS 6 [root@centos6 ~]# ifconfig eth0 Link encap:Ethernet HWaddr 00:0C:29:FB:24:6E inet addr:192.168.1.113 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fefb:246e/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:794092 errors:0 dropped:0 overruns:0 frame:0 TX packets:13268 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:51277004 (48.9 MiB) TX bytes:12174059 (11.6 MiB) 配置网卡 第一种:ifconfig IFACE IP/MASK [up|down] [root@centos7 ~]# ifconfig eno16777736:1 192.168.10.100/24 up [root@centos7 ~]# ifconfig eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.110 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::20c:29ff:fefc:81b2 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:fc:81:b2 txqueuelen 1000 (Ethernet) RX packets 716 bytes 71297 (69.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 279 bytes 31677 (30.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eno16777736:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.10.100 netmask 255.255.255.0 broadcast 192.168.10.255 ether 00:0c:29:fc:81:b2 txqueuelen 1000 (Ethernet) 第二种:ifconfig IFACE IP netmask NETMASK [root@centos7 ~]# ifconfig eno16777736:1 192.168.20.200 netmask 255.255.255.0 [root@centos7 ~]# ifconfig eno16777736:1 eno16777736:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.20.200 netmask 255.255.255.0 broadcast 192.168.20.255 ether 00:0c:29:fc:81:b2 txqueuelen 1000 (Ethernet) [root@centos7 ~]# ping -c 1 192.168.10.100 PING 192.168.10.100 (192.168.10.100) 56(84) bytes of data. 64 bytes from 192.168.10.100: icmp_seq=1 ttl=64 time=0.049 ms --- 192.168.10.100 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.049/0.049/0.049/0.000 ms
route命令:路由查看及管理 路由条目类型: 主机路由:目标地址为单个IP; 网络路由:目标地址为IP网络; 默认路由:目标为任意网络, 0.0.0.0/0.0.0.0 查看: # route -n 以数字形式显示,而不要反解; 添加: route add [-net|-host] target [netmask Nm] [gw GW] [[dev] If] 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 #删除默认网关
演示: [root@centos7 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eno16777736 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eno16777736 192.168.20.0 0.0.0.0 255.255.255.0 U 0 0 0 eno16777736 Destination:target 目标地址,如果是0.0.0.0,其后Gateway代表默认网关地址; Genmask:目标网络掩码地址 Gateway:下一跳, 192.168.1.0 0.0.0.0 :0.0.0.0本地主机网关地址,直连路由 Flags:路由标志;U:up启用状态,G:gateway网关 Metric:度量值;到达网络所需开销; Iface:经过自己的哪个网卡; 设置 添加 到达10.0.0.0/8网络,经过192.168.10.1地址;注意下一跳必须与自己的模块网卡处于一个网段中,而且地址必须存在,否则会有问题的; [root@centos7 ~]# route add -net 10.0.0.0/8 gw 192.168.10.2 dev eno16777736 [root@centos7 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eno16777736 10.0.0.0 192.168.10.2 255.0.0.0 UG 0 0 0 eno16777736 10.0.0.0 192.168.10.1 255.0.0.0 UG 0 0 0 eno16777736 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eno16777736 192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eno16777736 删除 [root@centos7 ~]# route del -net 10.0.0.0/8 gw 192.168.10.2 [root@centos7 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eno16777736 10.0.0.0 192.168.10.1 255.0.0.0 UG 0 0 0 eno16777736 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eno16777736 192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eno16777736 [root@centos7 ~]# route del -net 10.0.0.0/8 gw 192.168.10.1
netstat命令: Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships 显示路由表: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 传输层协议: tcp:面向连接的协议;通信开始之前,要建立一个虚链路;通信完成后还要拆除连接; udp:无连接的协议;直接发送数据报文; 显示接口的统计数据: netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--verbose|-v] [--program|-p] [--numeric|-n] 所有接口: netstat -i 指定接口: netstat -I<IFace>
演示: [root@centos7 ~]# netstat -tn Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 52 192.168.1.110:22 192.168.1.103:63602 ESTABLISHED Proto:协议 Recv-Q:接收队列长度 Send-Q:发送队列长度 Local Address:本机地址 Foreign Address:远程地址 State:状态 TCP连接的状态转移: 在TCP传输连接的建立和释放中的通信双方主机的这些状态称之为“有限状态机”(Finite State Machine,FSM)。 状 态 描述 CLOSED #呈阻塞、关闭状态,表示主机当前没有活动的传输连接或正在进行传输连接 LISTEN #呈监听状态,表示服务器正在等待新的传输连接进入 SYN RCVD #表示主机已收到一个传输连接请求,但尚未确认 SYN SENT #表示主机已经发出一个传输连接请求,等待对方确认 ESTABLISHED #传输连接建立,通信双方进入正常数据传输状态 FIN WAIT 1 #(主动关闭)主机已经发送关闭连接请求,等待对方确认 FIN WAIT 2 #(主动关闭)主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求 TIMED WAIT #完成双向传输连接关闭,等待所有分组消失 CLOSING #双方同时尝试关闭传输连接,等待对方确认 CLOSE WAIT #(被动关闭)收到对方发来的关闭传输连接请求,并已确认 LAST ACK #(被动关闭)等待最后一个关闭传输连接确认,并等待所有分组消失
ifup/ifdown命令: 注意:通过配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE来识别接口并完成配置;
配置主机名:
hostname命令: 查看:hostname 配置:hostanma HOSTNAME 当前系统有效,重启后无效; hostnamectl命令(CentOS 7): hostnamectl status:显示当前主机名信息; hostnamectl set-hostname:设置主机名,永久有效; 配置文件:/etc/sysconfig/network HOSTNAME=<HOSTNAME> 注意:此方法的设置不会立即生效;但以后会一直有效;
配置DNS服务器指向:
配置文件:/etc/resolve.conf nameserver DNS_SERVER_IP 最多有3台主机被当作DNS主机地址 如何测试(host/nslookup/dig): # dig -t A FQDN #主机名解析,不经过hosts文件 FQDN --> IP # dig -x IP IP --> FQDN
iproute家族:ip,ss
[root@localhost ~]# rpm -qi iproute Name : iproute Version : 3.10.0 Release : 21.el7 [root@localhost ~]# uname -r 3.10.0-229.el7.x86_64 注意: iproute跟内核密切相关的,版本信息也是对应的
ip命令:
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 修改设备属性 类似于ifconfig命令功能 dev NAME (default):指明要管理的设备,dev关键字可省略; up和down:是否支持地址解析 multicast on或multicast off:启用或禁用多播功能; name NAME:重命名接口 mtu NUMBER:设置MTU的大小,默认为1500; netns PID:ns为namespace,用于将接口移动到指定的网络名称空间;只能CentOS 7 上做; ip link show - display device attributes 显示二层设备属性 也可以 ip link list显示 ip link help - 显示简要使用帮助; 演示: [root@centos7 ~]# ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000 link/ether 00:0c:29:fc:81:b2 brd ff:ff:ff:ff:ff:ff qdisc:队列 pfifo_fast :队列类型pfifo_fast 先进先出队列 state UP:状态 mode DEFAULT qlen 1000:支持的队列长度 关掉多播: [root@centos7 ~]# ip link set eno16777736 multicast off [root@centos7 ~]# ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eno16777736: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000 link/ether 00:0c:29:fc:81:b2 brd ff:ff:ff:ff:ff:ff 将接口移动到指定的网络名称空间 [root@centos7 ~]# ip netns add mynet [root@centos7 ~]# ip link set eno16777736 netns mynet [root@centos7 ~]# ip netns exec mynet ip link show #在虚拟网络中的使用命令查看 [root@centos7 ~]# ip netns del mynet #删除虚拟网络空间后,其里网卡设备也就还原原位置了;
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地址 ip address add - add new protocol address#地址添加 ip addr add IFADDR dev IFACE [label NAME]:为额外添加的地址指明接口别名; 注意:指明别名后,ifconfig命令才能看到;ifconfig默认显示第一个添加的主地址; [broadcast ADDRESS]:广播地址;会根据IP和NETMASK自动计算得到; [scope SCOPE_VALUE]:作用域 global:全局可用; link:接口可用; host:仅本机可用; ip address delete - delete protocol address#地址删除 ip addr delete IFADDR dev IFACE ip address show - look at protocol addresses#地址查看 ip addr list [IFACE]:显示接口的地址; ip address flush - flush protocol addresses#地址清空;接口上的地址 ip addr flush dev IFACE ip addr help #地址管理帮助信息 演示: 添加多个地址,指明别名 [root@centos7 ~]# ip addr add 192.168.30.200/24 dev eno16777736 [root@centos7 ~]# ip addr add 192.168.20.200/24 dev eno16777736 [root@centos7 ~]# ip addr list 2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:fc:81:b2 brd ff:ff:ff:ff:ff:ff inet 192.168.1.110/24 brd 192.168.1.255 scope global dynamic eno16777736 valid_lft 3907sec preferred_lft 3907sec inet 192.168.10.100/24 brd 192.168.10.255 scope global eno16777736:1 valid_lft forever preferred_lft forever inet 192.168.20.200/24 scope global eno16777736 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fefc:81b2/64 scope link 指明别名 [root@centos7 ~]# ip addr add 10.1.1.11/8 dev eno16777736 label eno16777736:2 [root@centos7 ~]# ip addr list|grep 10.1.1.11 inet 10.1.1.11/8 scope global secondary eno16777736:2 [root@centos7 ~]# ifconfig | grep -B2 10.1.1.11 eno16777736:2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.1.1.11 netmask 255.0.0.0 broadcast 0.0.0.0
ip route - routing table management:路由表管理 ip route add - add new route:添加路由 ip route change - change route:修改路由 ip route replace - change or add new one:替换路由 TYPE PREFIX (default) :PREFIX是ip地址,路由类型可省略; dev NAME:接口名,不指明则自动获取; via ADDRESS:下一跳 src ADDRESS:指明原地址 如: ip route add TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP] 示例: # ip route add 192.168.0.0/24 via 10.0.0.1 dev eth1 src 10.0.20.100 # ip route add default via GW ip route delete - delete route:删除路由 ip route del TYPE PRIFIX 示例: # ip route delete 192.168.1.0/24 ip route show - list routes:显示路由信息,可以显示某个特定后缀的; TYPE PRIFIX ip route flush - flush routing tables:清空路由表 TYPE PRIFIX ip route get - get a single route:获取单条路由 ip route get TYPE PRIFIX 示例:ip route get 192.168.0.0/24 演示: [root@centos7 ~]# ip addr add 10.0.10.100/8 dev eno16777736 [root@centos7 ~]# ip addr add 10.0.20.100/8 dev eno16777736 [root@centos7 ~]# ip route add 192.168.0.0/24 via 10.0.0.1 dev eno16777736 #添加路由,下一跳要存在,这里实验用请忽略 [root@centos7 ~]# ip route list default via 192.168.1.1 dev eno16777736 proto static metric 100 10.0.0.0/8 dev eno16777736 proto kernel scope link src 10.1.1.10 192.168.0.0/24 via 10.0.0.1 dev eno16777736 192.168.1.0/24 dev eno16777736 proto kernel scope link src 192.168.1.110 192.168.1.0/24 dev eno16777736 proto kernel scope link src 192.168.1.110 metric 100 [root@centos7 ~]# ip route add 192.168.3.0/24 via 10.0.0.1 dev eno16777736 src 10.0.20.100 #添加路由,指明从接口那个ip出去 [root@centos7 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eno16777736 10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 eno16777736 192.168.0.0 10.0.0.1 255.255.255.0 UG 0 0 0 eno16777736 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eno16777736 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eno16777736 192.168.3.0 10.0.0.1 255.255.255.0 UG 0 0 0 eno16777736 [root@centos7 ~]# ip route list default via 192.168.1.1 dev eno16777736 proto static metric 100 10.0.0.0/8 dev eno16777736 proto kernel scope link src 10.1.1.10 192.168.0.0/24 via 10.0.0.1 dev eno16777736 192.168.1.0/24 dev eno16777736 proto kernel scope link src 192.168.1.110 192.168.1.0/24 dev eno16777736 proto kernel scope link src 192.168.1.110 metric 100 192.168.3.0/24 via 10.0.0.1 dev eno16777736 src 10.0.20.100 [root@centos7 ~]# ip route del 192.168.0.0/24 #删除路由信息
ss命令:
ss(Socket Statistics的缩写)命令可以用来获取 socket统计信息,此命令输出的结果类似于 netstat输出的内容,但它能显示更多更详细的 TCP连接状态的信息,且比 netstat 更快速高效。它使用了 TCP协议栈中 tcp_diag(是一个用于分析统计的模块),能直接从获得第一手内核信息,这就使得 ss命令快捷高效。在没有 tcp_diag,ss也可以正常运行。
ss [options] [ FILTER ] 选项: -t:TCP协议的相关连接 -u:UDP相关的连接 -w:raw socket相关的连接 -l:监听状态的连接 -a:所有状态的连接 -n:数字格式 -p:相关的程序及其PID -e:扩展格式信息 -m:内存用量 -o:计时器信息 过滤器:只看某种状态的连接 FILTER := [ state TCP-STATE ] [ EXPRESSION ]
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: 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对连接中断的确认 all : 所有以上状态 connected : 除了listen and closed的所有状态 synchronized :所有已连接的状态除了syn-sent bucket : 显示状态为maintained as minisockets,如:time-wait和syn-recv. big : 和bucket相反. EXPRESSION: dport = sport = 示例:'( dport = :22 or sport = :22 )' ~]# ss -tan '( dport = :22 or sport = :22 )' ~]# ss -tan state ESTABLISHED ss使用IP地址筛选 ss src ADDRESS_PATTERN ss dst ADDRESS_PATTERN src:表示来源 dst:表示目的 ADDRESS_PATTERN:表示地址规则 如下: ss src 120.33.31.1 # 列出来之20.33.31.1的连接 # 列出来至120.33.31.1,80端口的连接 ss src 120.33.31.1:http ss src 120.33.31.1:80 ss使用端口筛选 ss dport OP PORT 远程端口和一个数比较;ss sport OP PORT 本地端口和一个数比较。 OP 可以代表以下任意一个: <= or le : 小于或等于端口号 >= or ge : 大于或等于端口号 == or eq : 等于端口号 != or ne : 不等于端口号 < or gt : 小于端口号 > or lt : 大于端口号 常用选项: ss -l 显示本地打开的所有端口 ss -pl 显示每个进程具体打开的socket ss -t -a 显示所有tcp socket ss -u -a 显示所有的UDP Socekt ss -o state established '( dport = :smtp or sport = :smtp )' 显示所有已建立的SMTP连接 ss -o state established '( dport = :http or sport = :http )' 显示所有已建立的HTTP连接 ss -x src /tmp/.X11-unix/* 找出所有连接X服务器的进程 ss -s 列出当前socket详细信息: 演示: [root@centos6 ~]# ss -tan state established '( dport = :22 or sport = :22 )' Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 192.168.1.113:22 192.168.1.103:63070 [root@centos6 ~]# ss sport = :22 State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 52 192.168.1.113:ssh 192.168.1.103:63070 [root@centos6 ~]# ss src 192.168.1.113:22 State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 52 192.168.1.113:ssh 192.168.1.103:63070
网络属性配置之修改配置文件
IP/NETMASK/GW/DNS等属性的配置文件:
/etc/sysconfig/network-scripts/ifcfg-IFACE
IFACE:接口名称;
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服务来控制接口;
当然我们也可以使用专用的命令的进行修改(CentOS 6:system-config-network (setup),CentOS 7: nmtui)
给接口配置多个地址
ip addr之外,ifconfig或配置文件都可以; (1) ifconfig IFACE_LABEL IPADDR/NETMASK ip addr add IFADDR dev IFACE label NAME IFACE_LABEL: eth0:0, eth0:1, ... (2) 为别名添加配置文件; DEVICE=IFACE_LABEL BOOTPROTO:网上别名不支持动态获取地址;因此可以是static, none
演示:一个接口给多个地址,添加别名 [root@centos7 ~]# ifconfig eno16777736:0 10.0.1.100/8 [root@centos7 ~]# ip addr add 10.0.2.200/8 dev eno16777736 label eno16777736:1 [root@centos7 ~]# ifconfig eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.110 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::20c:29ff:fefc:81b2 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:fc:81:b2 txqueuelen 1000 (Ethernet) RX packets 13918 bytes 1392671 (1.3 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 8770 bytes 1785754 (1.7 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eno16777736:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.1.100 netmask 255.0.0.0 broadcast 10.255.255.255 ether 00:0c:29:fc:81:b2 txqueuelen 1000 (Ethernet) eno16777736:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.2.200 netmask 255.0.0.0 broadcast 0.0.0.0 ether 00:0c:29:fc:81:b2 txqueuelen 1000 (Ethernet)
生效方式:
网络服务: 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
CenOS 7 :nm(Network Manager)家族
nmcli命令: nmcli [ OPTIONS ] OBJECT { COMMAND | help } OBJECT := { general | networking | radio | connection | device | agent } general - general NetworkManager status and operations;通用功能 COMMAND := { status | hostname | permissions | logging } networking - get or set general networking state of NetworkManager:网络相关 COMMAND := { [ on | off | connectivity ] } radio - get or set radio switch states :无线相关 COMMAND := { all | wifi | wwan | wimax } device - show and manage network interfaces :管理网络接口;类似ip link COMMAND := { status | show | connect | disconnect | delete | wifi | wimax } connection - start, stop, and manage network connections :配置连接 类似ip add COMMAND := { show | up | down | add | edit | modify | delete | reload | load } modify [ id | uuid | path ] <ID> [+|-]<setting>.<property> <value> 如何修改IP地址等属性: # nmcli conn modify IFACE [+|-]setting.property value ipv4.address ipv4.gateway ipv4.dns1 ipv4.method manual 演示: [root@centos7 ~]# man nmcli [root@centos7 ~]# nmcli dev show GENERAL.设备: eno16777736 GENERAL.类型: ethernet GENERAL.硬盘: 00:0C:29:FC:81:B2 GENERAL.MTU: 1500 GENERAL.状态: 100 (连接的) GENERAL.CONNECTION: eno16777736 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/0 WIRED-PROPERTIES.容器: 开 IP4.地址[1]: 192.168.1.109/24 IP4.网关: 192.168.1.1 IP4.DNS[1]: 124.207.160.106 IP4.DNS[2]: 219.239.26.42 IP6.地址[1]: fe80::20c:29ff:fefc:81b2/64 IP6.网关: GENERAL.设备: lo GENERAL.类型: loopback GENERAL.硬盘: 00:00:00:00:00:00 GENERAL.MTU: 65536 GENERAL.状态: 10 (未管理) GENERAL.CONNECTION: -- GENERAL.CON-PATH: -- IP4.地址[1]: 127.0.0.1/8 IP4.网关: IP6.地址[1]: ::1/128 IP6.网关: [root@centos7 ~]# nmcli dev status 仅显示当前活动的连接 设备 类型 状态 CONNECTION eno16777736 ethernet 连接的 eno16777736 lo loopback 未管理 -- [root@centos7 ~]# nmcli device disconnect eno16777736 #禁用接口 [root@centos7 ~]# nmcli device connect eno16777736 #启用接口 [root@centos7 ~]# nmcli conn modify eno16777736 +ipv4.address 10.0.1.100 #添加地址 [root@centos7 ~]# nmcli conn up eno16777736 #启动新的 Ethernet 连接 成功激活的连接(D-Bus 激活路径:/org/freedesktop/NetworkManager/ActiveConnection/3) [root@centos7 ~]# ip addr list | grep 10.0.1.100 inet 10.0.1.100/32 brd 10.0.1.100 scope global eno16777736 其他参考: 在 RedHat/CentOS 7.x 中使用 nmcli 命令管理网络 http://linux.cn/article-5410-1.html
路由的相关配置文件:
/etc/sysconfig/network-scripts/route-IFACE
支持两种配置方式,但不可混用;
(1) 每行一个路由条目: TARGET via GW (2) 每三行一个路由条目: ADDRESS#=TARGET NETMASK#=MASK GATEWAY#=NEXTHOP
其他命令:nmap, ncat, tcpdump命令
nmap命令: nmap(Network Mapper),是linux系统中一个常用的网络管理工具,可以扫描端口、嗅探主机所在的网络环境,以及判断网络中主机的操作系统等; nmap [扫描类型...] [选项] {扫描目标说明} nmap [Scan Type...] [Options] {target specification} nmap localhost #查看主机当前开放的端口 nmap -p 1024-65535 localhost #查看主机端口(1024-65535)中开放的端口 nmap -PS 192.168.21.163 #探测目标主机开放的端口 nmap -PS22,80,3306 192.168.21.163 #探测所列出的目标主机端口 nmap -O 192.168.21.163 #探测目标主机操作系统类型 nmap -A 192.168.21.163 #探测目标主机操作系统类型 nmap --help #更多nmap参数请查询帮助信息 示例: -sn: Ping Scan 只进行主机发现,不进行端口扫描 -PE/PP/PM: 使用ICMP echo, timestamp, and netmask 请求包发现主机。-PO[protocollist]: 使用IP协议包探测对方主机是否开启 nmap -sn 192.168.64.0/24|awk -F "[ .]+" '/192/ {print $8}' nmap -PE 192.168.64.0/24 演示: [root@centos7 ~]# nmap localhost #查看主机当前开放端口 Starting Nmap 6.40 ( http://nmap.org ) at 2015-12-31 16:06 CST Nmap scan report for localhost (127.0.0.1) Host is up (0.0000070s latency). Other addresses for localhost (not scanned): 127.0.0.1 Not shown: 998 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds nmap参考: Nmap扫描原理与用法 http://www.2cto.com/Article/201210/158960.html
其他参考:http://img1.51cto.com/attachment/201305/31/2033581_1369962477MN7p.jpg