linux 网络工具
- 1. ip命令簇
- 4.1 address
- 4.2 link
- 4.3 route
- 4.4 rule
- 2. 其他常用命令
- 2.1 ifup/ifdown
- 2.2 配置主机名
- 2.3 设置DNS服务器指向
- 2.4 配置域名解析
- 2.5 ss
- 2.6 路由相关配置文件
- 2.7 查看机器可用端口
- 2.8 traceroute
- 2.9 dhclient
1. ip命令簇
Linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig是net-tools中已被废弃使用的一个命令,许多年前就已经没有维护了。iproute2套件里提供了许多增强功能的命令,ip命令即是其中之一。
NAME
ip - show / manipulate routing, devices, policy routing and tunnels
SYNOPSIS
ip [ OPTIONS ] OBJECT { COMMAND | help }
OPTIONS:
命令 | 作用 |
---|---|
-V | 显示指令版本信息 |
-f [family] | 指定要使用的协议。协议标识可以是inet、inet6、ipx、dnet、bridge、link 之一。如果此选项不存在,则从其他参数中推测协议族。如果命令行的其余部分没有提供足够的信息来推测该族,则ip会退回到默认值,通常是 inet 或 any 。link 是一个特殊的系列标识符,表示不涉及网络协议。 |
-s | 输出更为详细的信息。如果这个选项出现两次或者多次,输出的信息将更为详细。 |
-4 | 是 -f inet 的简写。 |
-6 | 是 -f inet6 的简写。 |
-0 | 是 -f link 的简写。 |
-o | 对每条记录都使用单行输出。 |
-r | 查询域名解析系统,用获得的主机名代替主机IP地址。 |
OBJECT:
可以针对哪些网络参数进行动作,包括有:
对象 | 说明 |
---|---|
address | 网络设备的IP(v4或者v6)地址信息 |
link | 网络设备信息 |
maddress | 多播地址 |
mourte | 组播路由缓存条目 |
monitor | 监控网络链接消息 |
netns | 管理网络命名空间 |
ntable | 管理邻居表缓存操作 |
neighbour | 邻居表 |
route | 路由表 |
rule | IP策略 |
tunnel | IP隧道 |
tuntap | 管理tun/tap设备 |
COMMAND:
对象 | 说明 |
---|---|
add | 新增 |
delete | 删除 |
show(or list) | 显示 |
set | 设置参数 |
由于该命令涉及功能实在庞大,所以挑选些常用的进行演示:
4.1 address
address是最常用的option之一,主要针对ip地址设置
-
显示当前IP地址信息
可以写成
ip address 或 ip addr 或 ip ad 或 ip a由于在OBJECT中只有address以a为首字母,所以只要能区分出来是address,那么address|addr|ad|a都可以
[root@node1 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 ... 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:79:08:6b brd ff:ff:ff:ff:ff:ff inet 192.168.71.183/24 brd 192.168.71.255 scope global noprefixroute dynamic ens33 valid_lft 83848sec preferred_lft 83848sec inet6 fe80::3872:4f8b:dbfc:1aa2/64 scope link noprefixroute valid_lft forever preferred_lft forever ...
-
给设备enp0s8设置ip地址(临时)
ip addr add 192.168.1.200/24 dev enp0s8
-
给设备enp0s8移除ip地址
[root@node1 ~]# ip addr add 192.168.71.184/24 dev ens33 [root@node1 ~]# ip addr del 192.168.71.184/24 dev ens33
4.2 link
link是针对设备设置的option
- 列出所有设备
[root@node1 ~]# ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 00:0c:29:79:08:6b brd ff:ff:ff:ff:ff:ff
- 启动一个网络设备
[root@node1 ~]# ip l set ens33 up
- 开启混杂模式
ip link set dev enp0s8 promisc on
- 设置MTU值,即设置最大传输单元
ip link set enp0s8 mtu 1000
- 设置mac地址
ip link set enp0s8 address a0:0a:b0:0b:c0:0c
- 添加一对虚拟网卡
ip link add r1-inside type veth peer name r1-outside
4.3 route
route是设置路由相关信息的option
[root@node1 ~]# ip route
default via 192.168.71.1 dev ens33 proto dhcp metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.18.0.0/16 dev docker_gwbridge proto kernel scope link src 172.18.0.1
192.168.71.0/24 dev ens33 proto kernel scope link src 192.168.71.183 metric 100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
显示路由表做简要说明如下:
- 路由第一部分是一个IP或者IPv6地址,也可以跟着一个斜杠和掩码长度(如:192.168.0.0/24)。如果没有掩码长度,ip命令就假定是一个单一ip 地址。
- dev 是关键字,其后面是网卡的名字
- via 关键字,其后面是下一跳路由器的地址。其实就是网关IP。
- metric 关键字,其后面跟一个数字,定义路由的优先值。Metric的值越小,优先级越高,没有则为0。
- src 关键字,其后面跟一个IP地址,在向目的发送数据包时,选择的源地址。
- proto关键字,其后面是IP地址设置的方式,如:static、dhcp,比较特殊的是kernel。
- 列出所有路由,show可缺省
[root@node1 ~]# ip route
default via 192.168.71.1 dev ens33 proto dhcp metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.18.0.0/16 dev docker_gwbridge proto kernel scope link src 172.18.0.1
192.168.71.0/24 dev ens33 proto kernel scope link src 192.168.71.183 metric 100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
- 添加一个缺省网关
ip route add default via 10.0.3.254 dev enp0s8
- 删除一个缺省网关
ip route deletedefault via 10.0.3.254 dev enp0s8
4.4 rule
rule是策略路由相关的option
基于策略的路由比传统路由在功能上更强,使用更灵活,它使网络管理员不仅能够根据目的地址而且能够根据报文大小、应用或IP源地址等属性来选择转发路径。
在linux系统中,一条路由策略rule主要包含三个信息,即rule的优先级,条件,路由表。其中rule的优先级数字越小表示优先级越高,然后是满足什么条件下由指定的路由表来进行路由。
在linux系统启动时,内核会为路由策略数据库配置三条缺省的规则,即rule 0,rule 32766, rule 32767(数字是rule的优先级,0优先级最高)
[root@node1 ~]# ip rule show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
在linux系统中是按照rule的优先级顺序依次匹配。假设系统中只有优先级为0,32766及32767这三条规则。那么系统首先会根据规则0在本地路由表里寻找路由,如果目的地址是本网络,或是广播地址的话,在这里就可以找到匹配的路由;如果没有找到路由,就会匹配下一个不空的规则,在这里只有32766规则,那么将会在主路由表里寻找路由;如果没有找到匹配的路由,就会依据32767规则,即寻找默认路由表;如果失败,路由将失败。
有3个默认的规则,在/etc/iproute2/rt_tables中存储。
[root@node1 ~]# cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
...
- 255 :local 本地路由表存有本地接口地址,广播地址,已及NAT地址. local表由系统自动维护…管理员不能操作此表
- 254:main 主路由表 传统路由表,ip route若没指定表亦操作表254.一般存所有的路由
- 253:default 默认路由表一般存放默认路由
进行路由时,正是根据路由规则来进行匹配,按优先级从高到低匹配,直到找到合适的规则.所以在应用中配置默认路由是必要的
语法:
[root@node1 ~]# ip rule help
Usage: ip rule { add | del } SELECTOR ACTION
ip rule { flush | save | restore }
ip rule [ list [ SELECTOR ]]
SELECTOR := [ not ] [ from PREFIX ] [ to PREFIX ] [ tos TOS ] [ fwmark FWMARK[/MASK] ]
[ iif STRING ] [ oif STRING ] [ pref NUMBER ] [ l3mdev ]
[ uidrange NUMBER-NUMBER ]
ACTION := [ table TABLE_ID ]
[ nat ADDRESS ]
[ realms [SRCREALM/]DSTREALM ]
[ goto NUMBER ]
SUPPRESSOR
SUPPRESSOR := [ suppress_prefixlength NUMBER ]
[ suppress_ifgroup DEVGROUP ]
TABLE_ID := [ local | main | default | NUMBER ]
SELECTOR具体参数如下:
From — 源地址
To — 目的地址(这里是选择规则时使用,查找路由表时也使用)
Tos — IP包头的TOS(type of sevice)域
Dev — 物理接口
Fwmark — 防火墙参数
ACTION动作:
Table 指明所使用的表
Nat 透明网关
Action prohibit 丢弃该包,并发送 COMM.ADM.PROHIITED的ICMP信息
Reject 单纯丢弃该包
Unreachable丢弃该包, 并发送 NET UNREACHABLE的ICMP信息
策略路由一般手工添加路由表,路由表的添加只需编辑rt_tables文件,规定表序号,表名即可
ip rule add from 192.168.1.112/32 [tos 0x10] table 202 pref 999 prohibit
ip rule add to 192.168.1.2 pref 1000 table 201
ip rule add from 192.168.1.0/24 pref 1001 table 201
ip rule add [from 0/0] table test1 pref 1003
以上内容参考乐大师
2. 其他常用命令
2.1 ifup/ifdown
ifup - bring a network interface up
ifdown - take a network interface down
ifup iface/ifdown iface
启用关闭网卡
注意:通过配置文件/etc/sysconfig/network-scripts/ifcfg-iface来识别接口并完成配置,所以没有配置文件无法使用此命令
2.2 配置主机名
-
hostname命令:
查看:hostname
配置:hostname HOSTNAME重启后失效
-
hostnamectl命令:
hostnamectl status显示当前主机名设定
hostnamectl set-hostname abc 设置主机名设置立即生效,而且会写入/etc/hostname文件
-
修改配置文件:/etc/hostname
root@ubuntu:~# cat /etc/hostname ubuntu1
重启后生效
-
nmcli gen hostname
[root@node1 ~]# nmcli gen hostname node1-centos [root@node1 ~]# cat /etc/hostname node1-centos
设置立即生效,而且会写入/etc/hostname文件
2.3 设置DNS服务器指向
配置文件/etc/resolv.conf
nameserver 8.8.8.8
注意:最多可以设置3个域名
2.4 配置域名解析
配置文件:/etc/hosts
192.168.70.128 cluster-endpoint
2.5 ss
用于显示socket状态
ss [option] [filter]
option选项:
选项 | 说明 |
---|---|
-t | tcp |
-u | udp |
-w | raw socket |
-l | 监听连接 |
-a | 所有状态 |
-n | 数字格式 |
-p | 相关程序及其pid |
-e | 扩展格式信息 |
-m | 内存用量 |
-o | 计时器信息 |
[root@node1 ~]# ss -nltp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
...
LISTEN 0 128 [::]:80 [::]:* users:(("nginx",pid=1354,fd=7),("nginx",pid=1353,fd=7),("nginx",pid=1352,fd=7))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1155,fd=4))
LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=1347,fd=13))
[root@node1 ~]# ss -nltp|grep 22
LISTEN 0 5 192.168.122.1:53 *:* users:(("dnsmasq",pid=1636,fd=6))
LISTEN 0 128 *:22 *:* users:(("sshd",pid=1155,fd=3))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1155,fd=4))
详细参考:Linux之ss命令
2.6 路由相关配置文件
CentOS的网络配置文件路径位于/etc/sysconfig/network-scripts/目录下,其中ifcfg-*
文件为网络接口的配置文件,route-*
文件为路由配置文件
永久添加路由 重启network服务生效 支持用#注释
-
方法一
a、添加默认网关,即默认路由
两块网卡在配置文件ifcfg-ethX中不配置网关,在/etc/sysconfig/network中设置默认网关
vim /etc/sysconfig/network GATEWAY=192.168.14.254
b、添加路由 创建/etc/sysconfig/static-routes配置文件
vim /etc/sysconfig/static-routes any net 192.168.15.0/24 gw 192.168.14.254 any host 123.57.223.144 gw 192.168.14.254 any host 123.57.190.33/32 gw 192.168.8.1
-
方法二
在/etc/sysconfig/network-scripts/下创建配置文件route-ethXvim /etc/sysconfig/network-scripts/route-eth0 0.0.0.0/0 via 192.168.14.254 dev eth0 这条为默认路由,另一种格式 default 192.168.14.254 dev eth0 192.168.15.0/24 via 192.168.14.254 dev eth0 123.57.223.144 via 192.168.14.254 dev eth0 vim /etc/sysconfig/network-scripts/route-eth1 123.57.190.33 via 192.168.8.1 dev eth1
配置完重启服务 service network restart
2.7 查看机器可用端口
[root@node-252 ~]# sysctl -a |grep port_range
net.ipv4.ip_local_port_range = 32768 60999
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.ens33.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
2.8 traceroute
显示数据包到主机间的路径,traceroute命令用于追踪数据包在网络上的传输时的全部路径,Centos7默认发送的数据包大小是60字节。
通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。
traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间
(ms)和设备的名称
(如有的话)及其ip地址
。
命令格式
traceroute [-dFlnrvx][-f<存活数值>][-g<网关>…][-i<网络界⾯>]\
[-m<存活数值>][-p<通信端⼝>][-s<来源地址>][-t<服务类型>][-w<超时秒数>]\
[主机名称或IP地址][数据包大小]
主机:指定目的主机IP地址或主机名。
命令选项
-d:使用Socket层级的排错功能;
-f<存活数值>:设置第一个检测数据包的存活数值TTL的大小;
-F:设置勿离断位;
-g<网关>:设置来源路由网关,最多可设置8个;
-i<网络界面>:使用指定的网络界面送出数据包;
-I:使用ICMP回应取代UDP资料信息;
-m<存活数值>:设置检测数据包的最大存活数值TTL的大小;
-n:直接使用IP地址而非主机名称;
-p<通信端口>:设置UDP传输协议的通信端口;
-r:忽略普通的Routing Table,直接将数据包送到远端主机上。
-s<来源地址>:设置本地主机送出数据包的IP地址;
-t<服务类型>:设置检测数据包的TOS数值;
-v:详细显示指令的执行过程;
-w<超时秒数>:设置等待远端主机回报的时间;
-x:开启或关闭数据包的正确性检验。
示例
[root@node-136 ~]# traceroute -n 110.242.68.3 -m 50 -I
traceroute to 110.242.68.3 (110.242.68.3), 50 hops max, 60 byte packets
1 192.168.81.1 0.497 ms 0.465 ms 0.437 ms
2 42.180.224.129 23.652 ms 23.630 ms 23.636 ms
3 42.87.241.213 14.185 ms 14.148 ms 13.821 ms
4 113.230.175.153 51.780 ms 51.995 ms 52.711 ms
5 219.158.104.206 46.380 ms 46.832 ms *
6 110.242.66.166 34.280 ms 34.513 ms 34.470 ms
7 221.194.45.130 36.360 ms 35.232 ms 35.641 ms
8 * * *
9 * * *
10 * * *
11 110.242.68.3 34.648 ms 34.787 ms 34.467 ms
记录按序列号从1开始,每个记录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是ms,其实3就是-q
的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果用traceroute -q 4 http://rumenz.com
,表示向每个网关发送4个数据包。
同一行有多个ip,因为到达目标主机的路径有多个,所以路径中的ip可能也会显示多个
有时我们traceroute一台主机时,会看到有一些行是以星号
表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台DNS出现问题时,不能解析主机名、域名时,也会 有延时长的现象;您可以加-n参数来避免DNS解析,以IP格式输出数据。
如果在局域网中的不同网段之间,我们可以通过traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。
2.9 dhclient
用dhclient动态配置IP地址。dhclient 命令与网卡的设备名(如eth0)一起使用时,向DHCP服务器请求一个IP地址和其他功能:
dhclient eth0
一般而言,由DHCP服务器配置的网络选项包括:IP地址、子网掩码、访问外部网络的网关地址以及此网络上任何DNS服务器的IP地址。
换言之,dhclient eth0命令不仅能像ip命令那样分配IP地址,而且还会在路由表中建立默认的路由(由ip route命令可以得到路由表)。此外,它还会把DNS服务器的IP地址添加到/etc/resolv.conf配置文件中。