网络管理命令
ip命令
配置Linux网络属性:ip命令,不过该命令的操作只是临时操作,重启以后配置丢失
ip-show / manipulate routing, devices, policy routing and tunnels
ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT := { link | addr | route }
示例:
ip link - network device configuration
set dev IFACE
可设置属性:
up and down:激活或禁用指定接口
ifup/ifdown
show [dev IFACE]:指定接口
[up]:仅显示处于激活状态的接口
示例1:显示所有接口的状态
示例2:关闭eth1口,然后显示eth1接口的状态,而后显示其他状态是up的接口
ip addr { add | del | change } IFADDR dev STRING
[label LABEL]:添加地址时指明网卡别名
[scope {global|link|host}]:指明作用域
global: 全局可用;
link: 仅链接可用;
host: 本机可用;
[broadcast ADDRESS]:指明广播地址
ip address show -look at protocol addresses
[dev DEVICE]
[label PATTERN]
[primary and secondary]
ip address flush -使用格式同show
ip addr add 172.16.0.100/16 dev eth2 label eth2
ip addr del 172.16.0.100/16 dev eth2 label eth2
ip addr flush dev eth2 label eth2
示例1:使用ip addr命令添加一个ip
示例2:改变eth2的ip地址
示例3:删除eth2的ip信息
示例4:此命令不会保存在配置文件中,只是暂时存放在内存里面,使用请注意
ip route - routing table management
添加路由:ip route add
ip route add TARGET via GW dev IFACE srcSOURCE_IP
TARGET:
主机路由:IP
网络路由:NETWORK/MASK
ip route add 192.168.0.0/24 via 172.16.0.1
ip route add 192.168.1.13 via 172.16.0.1
添加网关:ip route add default via GW dev IFACE
ip route add default via 172.16.0.1
删除路由:ip route delete
ip route del TARGET
显示路由:ip route show|list
清空路由表:ip route flush [dev IFACE] [via PREFIX]
ip route flush dev eth0
示例1:添加172.16.0.0/16的路由
示例2:添加一个网关
示例3:删除默认网关路由
示例4:删除相关的所有路由
netstat命令:
显示网络链接
Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships、
常用选项:
-t: tcp协议相关
-u: udp协议相关
-w: raw socket相关
-l: 处于监听状态
-a: 所有状态
-n: 以数字显示IP和端口;
-e:扩展格式
-p: 显示相关进程及PID
常用组合:
-tan, -uan, -tnl, -unl,-rn,tnlp
显示路由表:
netstat {--route|-r} [--numeric|-n]
-r: 显示内核路由表
-n: 数字格式
显示接口统计数据:
netstat{--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--program|-p] [--numeric|-n]
# netstat -i
# netstat -IIFACE
示例1:查看所有tcp协议的状态
示例2:查看所有udp的协议状态
示例3:查看所有正在监听的tcp协议
示例4:查看所有正在监听的udp协议
示例5:查看所有tcp和udp协议状态以及进程号
ss命令
格式:ss[OPTION]... [FILTER]
netstat通过遍历proc来获取socket信息,ss使用netlink与内核tcp_diag模块通信获取socket信息。
选项:
-t: tcp协议相关
-u: udp协议相关
-w: 裸套接字相关
-x:unixsock相关
-l: listen状态的连接
-a: 所有
-n: 数字格式
-p: 相关的程序及PID
-e: 扩展的信息
-m:内存用量
-o:计时器信息
FILTER := [ state TCP-STATE ] [ EXPRESSION ]
TCP的常见状态:
tcpfinite state machine:
LISTEN: 监听
ESTABLISHED:已建立的连接
FIN_WAIT_1
FIN_WAIT_2
SYN_SENT
SYN_RECV
CLOSED
EXPRESSION:
dport=
sport =
示例: ’( dport= :sshor sport = :ssh)’
常用组合:
-tan, -tanl, -tanlp, -uan,tunl
常见用法示例:
ss -l 显示本地打开的所有端口
ss -pl 显示每个进程具体打开的socket
ss -t -a 显示所有tcp socket
ss -u -a 显示所有的UDP Socekt
ss -o state established ‘( dport = :ssh or sport = :ssh )‘ 显示所有已建立的SSH连接
ss -s 列出当前socket详细信息:
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服务器的进程
nmcli命令(注意,此命令只适用于CentOS 7的版本,6版本的这个命令并不好使)
地址配置工具:nmcli
nmcli[ OPTIONS ] OBJECT { COMMAND | help }
device -show and manage network interfaces
nmcli device help
connection -start, stop, and manage network connections
nmcli connection help
修改IP地址等属性:
nmcli connection modify IFACE [+|-] setting.property value
setting.property:
ipv4.addressesipv4.gateway
ipv4.dns1 ipv4.methodmanual | dhcp
修改配置文件执行生效:systemctl restart network
nmcli con reload
nmcli命令生效:nmcli con down eth0 ;nmcli con up eth0
示例1:新增网卡,设置它的IP地址
添加了一个新的网卡,系统自动识别为eth1,网卡名字Wired connetion 1,此处作用的是NetworkManager,否则新建一个网卡的时候应该没有名字。
此处我清理掉上图的信息,此时查看接口的状态
添加网卡信息,设置该网卡为手动设置,配置ip地址,网关,dns,开机自动启动,此处会生成配置文件
配置完看了一下,ip已经起来了,连服务都没重启呢。并且测试过连通性也是没问题
示例2:新增绑定一个新的配置文件home和ip地址,但是我们发现,此处文件并没有绑定接口
此处用nmcli device status可以看见接口eht1已经是工作中,但是此命令不能看见接口绑定的是哪个配置文件,我们发现ip还是以前的ip
此处用nmcli con up home的命令启用接口,然后我们发现eth1接口此时用的是home的配置文件,这样的话就可以把接口切换过来
也可以用nmcli con down +conf文件这样方式来切换
如果对以上的配置文件有需要自己改动的地方,则手动编辑之,然后输入nmcli con reload命令重新导入配置文件即可。例如编辑ip地址和网卡的NAME
编辑完,配置文件并不会马上生效,我们可以用nmcli con reload的命令重新加载配置文件,发现网卡的NAME属性已经生效,但是ip还是没有改变
此处重启网络服务,ip已经起来了。
相关工具
网络接口配置tui工具:nmtui(nmcli的图形化工具,个人还是建议用命令的,此处不再演示)
使用nmcli配置网络
NeworkManager是管理和监控网络设置的守护进程
设备即网络接口,连接是对网络接口的配置。一个网络接口可有多个连接配置,但同时只有一个连接配置生效。
显示所有包括不活动连接
nmclicon show
显示所有活动连接
nmclicon show –active
显示网络连接配置
nmclicon show "home"
显示设备状态
nmcli dev status
显示网络接口属性
nmclidev show eno16777736(CentOS7的网卡的命名)
创建新连接home,IP自动通过dhcp获取
nmclicon add con-name home type Ethernet ifname eth1
删除连接
nmclicon del home
创建新连接eth1 ,指定静态IP,不自动连接
nmcticon add con-name static ifname eth1 autoconnect no type Ethernet ip4 10.1.156.71/16 gw4 10.1.0.1
启用home连接配置
nmcli con up home
启用eth1连接配置
nmclicon up eth1
查看帮助
nmclicon add help
修改连接设置
nmcli con mod “eth1” connection.autoconnect no
nmcli con mod “eth1” ipv4.dns 10.1.0.1
nmcli con mod “eth1” +ipv4.dns 8.8.8.8
nmcli con mod “eth1” -ipv4.dns 8.8.8.8
nmcli con mod “eth1” ipv4.addresses “172.16.0.100 172.16.0.1”
nmcli con mod “eth1” +ipv4.addresses 10.10.10.10/16
设备配置被保存在文本文件中
/etc/sysconfig/network-scripts/ifcfg-<name>
帮助文档列出完整选项列表:/usr/share/doc/initcripts-*/sysconfig.txt
修改连接配置后,需要重新加载配置
nmcli con reload
nmcli con down “system eth0” 可被自动激活
nmcli con up “system eth0”
nmcli dev dis eth0 禁用网卡,访止被自动激活
示例2:新增绑定一个新的配置文件home和ip地址,但是我们发现,此处文件并没有绑定接口
此处用nmcli device status可以看见接口eht1已经是工作中,但是此命令不能看见接口绑定的是哪个配置文件,我们发现ip还是以前的ip
此处用nmcli con up home的命令启用接口,然后我们发现eth1接口此时用的是home的配置文件,这样的话就可以把接口切换过来
也可以用nmcli con down +conf文件这样方式来切换
如果对以上的配置文件有需要自己改动的地方,则手动编辑之,然后输入nmcli con reload命令重新导入配置文件即可。例如编辑ip地址和网卡的NAME
编辑完,配置文件并不会马上生效,我们可以用nmcli con reload的命令重新加载配置文件,发现网卡的NAME属性已经生效,但是ip还是没有改变
此处重启网络服务,ip已经起来了。
删除home的配置文件
修改网卡开机自动链接为no
nmcli con mod “work” connection.autoconnect no
设置DNS地址
nmcli con mod “work” ipv4.dns 10.1.0.1
增加一组DNS地址
nmcli con mod “work” +ipv4.dns 8.8.8.8
删除掉8.8.8.8的dns
nmcli con mod “work” -ipv4.dns 8.8.8.8
修改ip到其他地址
nmcli con mod “work” ipv4.addresses “172.16.0.100/24 ipv4.gateway 172.16.0.1”
增加一个ip地址
nmcli con mod “work” +ipv4.addresses 10.1.156.71
注意:以上的修改操作并不会马上生效,生效需要重启网卡服务systemctl restart network
图形工具(此工具只能在图形界面下面启动)
nm-connection-editor
网络组Network Teaming(同样只适用于CentOS 7)
网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量
网络组不同于旧版中bonding技术,提供更好的性能和扩展性
网络组由内核驱动和teamd守护进程实现.
多种方式runner
broadcast 广播
roundrobin 循环
activebackup 备份
loadbalance 负载均衡
lacp 接口聚合(implements the 802.3ad Link Aggregation Control Protocol)
网络组
启动网络组接口不会自动启动网络组中的port接口
启动网络组接口中的port接口不会自动启动网络组接口
禁用网络组接口会自动禁用网络组中的port接口
没有port接口的网络组接口可以启动静态IP连接
启用DHCP连接时,没有port接口的网络组会等待port接口的加入
创建网络组接口
nmclicon add type team con-name CNAME ifname INAME [config JSON]
CNAME为连接名,INAME为接口名
JSON为指定runner方式
格式:‘{"runner": {"name": "METHOD"}}‘
METHOD可以是broadcast,roundrobin,activebackup,loadbalance,lacp.
创建网络组接口实例
首先创建网络组接口,名为team0的接口,模式为备份模式
nmcli con add type team con-name team0 ifname team0
config ‘{"runner": {"name": "activebackup"}}‘
给接口配置ip地址等信息
nmcli con mod team0 ipv4.addresses 10.1.156.156/16
nmcli con mod team0 ipv4.method manual
创建port接口
nmcli con add type team-slave con-name CNAME ifname INAME master TEAM
CNAME连接名,INAME网络接口名,TEAM网络组接口名.
连接名若不指定,默认为team-slave-IFACE.
nmcli device disconnect INAME 关闭指定的真实接口
nmcli connection up CNAME 指定配置文件的接口up
INAME设备名CNAME网络组接口名或port接口
网络组实例
nmcli con add type team-slave ifname eth0 master team0
nmcli con add type team-slave ifname eth1 master team0 con-name team0-eth1
nmcli con up team0 启用team0接口
nmcli dev dis eth0 关闭掉原来的接口
teamdctl team0 state
完整示例:创建网络组
首先创建网络组接口,名为team0的接口,模式为备份模式
nmcli con add type team con-name team0 ifname team0
config ‘{"runner": {"name": "activebackup"}}‘
给接口配置ip地址等信息
nmcli con mod team0 ipv4.addresses 10.1.156.156/16
nmcli con mod team0 ipv4.method manual
创建port接口
nmcli con add type team-slave con-name team0-eth0 ifname eth0 master team0
nmcli con add type team-slave con-name team0-eth1 ifname eth1 master team0
启用team0接口,但是可以看见port的接口的配置文件还没有生效
使port接口生效,有两种方法
第一种:直接关闭掉原来的接口
第二种:直接nmcli connection up 指定port接口配置文件,此处用第二种
可以看见接口已经起来了
此时可以用teamdctl team0 state的命令来查看网络组接口的状态,发现接口已经起来了
此时的主端口是eth1
首先测试一下ping team0口来看看连通性,发现是通的
此时断开eth1,然后再查询teamdctl team0 state命令
可以看见eth1已经断开,此时作用的是eth0
重新链接eth1,再断开eth0,然后再查询teamdctl team0 state命令
可以看见eth0已经断开,此时作用的是eth1
最后,重新链接eth0,然后再查询teamdctl team0 state命令
可以看见eth0已经链接上,此时作用的是eth1,此时实验完毕
写在最后:由于虚拟机的关系,对此命令实现的效果有问题,所以后面测试的就不截图了,只保存接口状态的的截图了。
如果需要测试接口的话,也可以用watch -n1 ‘netstat -Ieth0‘和watch -n1 ‘netstat -Ieth1‘同时查看接口的流量状态,可以发现是,只有active port的接口才会有流量,当actice port接口断开切换到另外一个接口的时候,另外一个接口才会有流量
此时作用的是eth0,可以对比两个图,可以发现只有eth0接口的流量有变化
此处关擦eth0接口的接收RX和发送TX流量变化
使用nmcli配置主机名
rhel6之前主机名配置文件:/etc/sysconfig/network
rhel7.0主机名配置文件:/etc/hostname ,默认没有这个文件,通过DNS反向解析获取主机名,主机名默认为:localhost.localdomain
显示主机名信息
hostname
hostnamectl status
创建并修改文件并生效
hostnamectlset-hostname desktopX.example.com
删除文件,恢复主机名localhost.localdomain
DNS设置,存放在/etc/resolv.conf文件中
PEERDNS=no 表示当IP通过dhcp自动获取时,dns仍是手动设置,不自动获取。等价于下面命令:
nmclicon mod “system eth0” ipv4.ignore-auto-dns yes
示例:设置主机名
查看此时计算机名状态,此时是centos.localdomain
改一个主机名,可以看见,马上生效了,这点比起CentOS6上面还是要方便不少
测试网络命令
在命令行下测试网络的连通性
显示主机名
hostname
测试网络连通性
ping
mtr
显示正确的路由表
ip route
确定名称服务器使用:
nslookup
host
dig
跟踪路由
traceroute
Tracepath
网络客户端工具
lftp, ftp, lftpget, wget
lftp [-p port] [-u user[,password]] SERVER
子命令:
get、mget、ls、help
lftp
put 单个文件上传
get 单个文件下载,可以补全,ftp的不能
mget 多个东西下载,也可以支持补全,支持通配符
mput 多个上传
ftp FTP
如果需要匿名登陆,可以使用anonymous或者ftp,密码是空密码或者随便一个
pwd 显示在ftp里面的目录
lcd 显示本机当前的位置
lcd PATH:切换到其他的下载目录
在ftp里面下载的东西的话默认会下载到lcd的目录
get 文件名:下载文件指令,如果文件名有空格,需要在文件名前后加上“”双引号
cd 切换目录
passive 切换ftp的工作模式,默认是主动模式,通信时候使用端口20传文件,21收文件。
被动模式的时候使用一个大端口号。
help 列出所有的在ftp里面的命令,非本地
quit 退出
ftp和lftp都是交互式
在ftp里面,需要对本地操作,可以再命令前面加上叹号!,如!pwd,作用同在ftp里面输入lcd
ftp 支持通配符
ftp和lftp都是交互式,不能卸载脚本里面
lftpget URL 下文件,并且支持多点续传,多线程下载
wget 可以下载ftp资源和http资源
wget [option]... [URL]...
NAME_A TO NAME_B 改名
-q: 静默模式
-c: 断点续传
-O: 保存位置
--limit-rates=: 指定传输速率
links 连接,可以当浏览器
links url [option]
--dump 抓取网站文字 ex. links a.com > a.txt
--source 抓取网站源码
curl 网址 直接看源码
-I 查看网站各种信息