0.目录
1.网络参数设置(ifcfg命令家族)
1.1命令ifconfig,用于管理IP相关属性
1.1.1 显示网卡信息
不指定任何参数默认显示所有已激活(启用)的网卡信息1,也可显示指定网卡:
[root@localhost ~]% ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:05:75:B2 # HWaddr为MAC地址
inet addr:192.168.0.131 Bcast:192.168.0.255 Mask:255.255.255.0 # IPv4地址、广播地址、掩码
inet6 addr: fe80::20c:29ff:fe05:75b2/64 Scope:Link # IPv6地址
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 # 状态、特性
RX packets:366 errors:0 dropped:0 overruns:0 frame:0 # 接收、接收错误、接收时丢失等的数据包数
TX packets:227 errors:0 dropped:0 overruns:0 carrier:0 # 发送、发送错误、发送时丢失等的数据包数
collisions:0 txqueuelen:1000
RX bytes:34937 (34.1 KiB) TX bytes:27677 (27.0 KiB)
该网卡当前的状态、特性用大写单词显示:
字符串 | 意义 |
---|---|
UP | 已启用 |
BROADCAST | 支持广播 |
RUNNING | 正在运行 |
MULTICAST | 支持组播 |
MTU | 最大传输单元(Maximum Transmission Unit),这里指的是数据链路层最大传输单元(帧),一般是1500字节 |
1.1.2 管理IP地址
启用与禁用网卡eth1:
[root@localhost ~]% ifconfig eth1 down # 禁用
[root@localhost ~]% ifconfig eth1 up # 启用
配置网卡eth1的IP和掩码为192.168.0.0/24:
[root@localhost ~]% ifconfig eth1 192.168.0.1/24 # 使用IP后直接跟掩码的方式,掩码可写成长度24,也可写成完整的“255.255.255.0”
[root@localhost ~]% ifconfig eth1 | grep "inet addr"
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
[root@localhost ~]% ifconfig eth1 172.16.0.1 netmask 255.255.0.0 # 使用关键字netmask指定掩码,只能写成完整的,不能使用长度
[root@localhost ~]% ifconfig eth1 | grep "inet addr"
inet addr:172.16.0.1 Bcast:172.16.255.255 Mask:255.255.0.0
删除IP地址,把IP指定为“0”即可:
[root@localhost ~]% ifconfig eth1 0
[root@localhost ~]% ifconfig eth1 # 可看到该网卡没有IPv4地址了
eth1 Link encap:Ethernet HWaddr 00:0C:29:05:75:BC
inet6 addr: fe80::20c:29ff:fe05:75bc/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1920 errors:0 dropped:0 overruns:0 frame:0
TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:531526 (519.0 KiB) TX bytes:1962 (1.9 KiB)
此外,若需为一个网卡配置多个IP,则需使用网卡别名2,格式为“网卡名:数字”:
[root@localhost ~]% ifconfig eth1 192.168.0.100
[root@localhost ~]% ifconfig eth1:0 192.168.100.1 # 网卡eth1现在有两IP地址
1.2 命令route,用于管理本地路由表
1.2.1 显示本地路由表
不加任何参数,显示本地路由表:
[root@localhost ~]% route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.100.0 * 255.255.255.0 U 0 0 0 eth1
172.16.0.0 192.168.0.131 255.255.255.0 UG 0 0 0 eth0
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
192.168.0.0 * 255.255.255.0 U 0 0 0 eth1
link-local * 255.255.0.0 U 1002 0 0 eth0
default 192.168.0.131 0.0.0.0 UG 0 0 0 eth0
字段 | 意义 |
---|---|
Destination | 目标地址。默认情况下,如能反解成主机名,则以主机名显示 |
Gateway | 网关(下一跳)。如果一个条目没有网关(*号),则表示目标地址与当前主机在同一网段,报文无需发至网关 |
Genmask | 掩码 |
Flags | 标记。U表示启用(up),G表示网关(Gateway)。注意网关可以有多个,默认网关只有1个。默认网关是目标地址为default(0.0.0.0)那个条目 |
Iface | 表示到达指定目标地址,由本机的哪个网卡发送报文 |
当条目众多时,把目标地址反解为主机名可能会消耗很多时间。所以最好使用选项“-n”使其全用数字表示:
[root@localhost ~]% route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
172.16.0.0 192.168.0.131 255.255.255.0 UG 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 # 169.254.X.X就是link-local
0.0.0.0 192.168.0.131 0.0.0.0 UG 0 0 0 eth0 # 0.0.0.0就是default
# 网关也由*号变为0.0.0.0
1.2.2 在本地路由表添加、删除路由条目
格式:route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
其中net、host表示添加的目标地址是主机还是某网络;dev用来指定到达目标地址的报文用本机哪个网卡发送(可不手动指定让系统默认选择)。其他都很好理解。
举两例:
添加一个路由条目,到达网络172.18.0.0/16的报文,下一跳是192.168.0.200,且由网卡eth0发出;
添加一个路由条目,到达主机192.168.80.1的报文,下一跳是192.168.0.220,且由网卡eth1发出
[root@localhost ~]% route add -net 172.18.0.0/16 gw 192.168.0.200 dev eth0
[root@localhost ~]% route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.80.1 192.168.0.220 255.255.255.255 UGH 0 0 0 eth1 # 添加的主机路由
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
172.16.0.0 192.168.0.131 255.255.255.0 UG 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
172.18.0.0 192.168.0.200 255.255.0.0 UG 0 0 0 eth0 # 添加的网络路由
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 192.168.0.131 0.0.0.0 UG 0 0 0 eth0
删除路由条目格式:route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]
参数只要能确定要删除的条目即可,未必要全列出。
比如,删除目标地址为网络192.168.0.0的路由条目:
[root@localhost ~]% route -n | grep 192.168.0.0 # 有2个符合要求的条目
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
[root@localhost ~]% route del -net 192.168.0.0/24
[root@localhost ~]% route -n | grep 192.168.0.0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
[root@localhost ~]% route del -net 192.168.0.0/24
[root@localhost ~]% route -n | grep 192.168.0.0 # 可以看出这个命令每次只删除1个条目,删2次才全删掉
[root@localhost ~]%
# 如只想准确的删除其中一个,应把dev指定上
默认网关的添加和删除,只需将网络路由中的参数变为0.0.0.0/0.0.0.0即可;或不再使用-net指定,直接使用default也一样。
[root@localhost ~]% route del default
[root@localhost ~]% route add default gw......
1.3 命令netstat,用于网络状态查看、数据统计
1.3.1 显示路由信息
使用该命令的“-r”选项用于显示本地路由表,效果类似直接使用命令route:
[root@localhost ~]% netstat -r -n # 同样使用选项“-n”显示为数字形式,否则默认反解为主机名
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 192.168.0.131 0.0.0.0 UG 0 0 0 eth0
1.3.2 查看网络连接
查看网络连接的各选项:
选项 | 意义 |
---|---|
–tcp或-t | 查看基于tcp的已建立的连接 |
–udp或-u | 查看基于udp的已建立的连接 |
–listening或-l | 查看处于监听状态的连接(比如等待访问的服务,还没有客户端与之建立连接时) |
–program或-p | 当使用-l查看监听状态的连接时,此选项可显示发起监听的相关进程及其PID |
–all或-a | 查看所有状态的连接 |
–numeric或-n | IP和端口使用数字格式显示3。IP和端口默认都会反解,IP会反解为主机名,端口被反解为服务名,比如22号端口被表示为ssh |
-e | 使用扩展格式查看。扩展格式额外显示user字段(表示哪个用户连接的),inode字段(表示当前连接对应的套接字文件的inode号) |
比如,查看基于tcp的网络连接:
[root@localhost ~]% netstat -t
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.0.131:ssh 192.168.0.101:57215 ESTABLISHED
各字段 | 意义 |
---|---|
Proto | 该连接基于什么协议 |
Recv-Q | 接收队列报文数量 |
Send-Q | 发送队列报文数量 |
Local Address | 连接的本地主机的IP地址 |
Foreign Address | 连接的远端主机的IP地址及端口 |
State | 连接状态4 |
其他选项也可如此使用以查看对应的连接,不过更常用的是它们的一些组合,比如:
查看基于TCP(-t)或UDP(-u),且处于监听状态(-l)的服务,并显示发起监听的进程号及其PID,使用数字格式(-n)显示:
[root@localhost ~]% netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1662/rpcbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1937/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1758/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2039/master
tcp 0 0 0.0.0.0:53274 0.0.0.0:* LISTEN 1720/rpc.statd
tcp 0 0 :::45837 :::* LISTEN 1720/rpc.statd
tcp 0 0 :::111 :::* LISTEN 1662/rpcbind
tcp 0 0 :::22 :::* LISTEN 1937/sshd
tcp 0 0 ::1:631 :::* LISTEN 1758/cupsd
tcp 0 0 ::1:25 :::* LISTEN 2039/master
udp 0 0 0.0.0.0:989 0.0.0.0:* 1662/rpcbind
udp 0 0 0.0.0.0:111 0.0.0.0:* 1662/rpcbind
udp 0 0 0.0.0.0:631 0.0.0.0:* 1758/cupsd
udp 0 0 127.0.0.1:659 0.0.0.0:* 1720/rpc.statd
udp 0 0 0.0.0.0:68 0.0.0.0:* 1766/dhclient
udp 0 0 0.0.0.0:58567 0.0.0.0:* 1720/rpc.statd
udp 0 0 :::989 :::* 1662/rpcbind
udp 0 0 :::111 :::* 1662/rpcbind
udp 0 0 :::58685 :::* 1720/rpc.statd
常用的组合还有tan5、uan、tnl等等,可根据需要进行组合(其实大不了写全tuanlpe。。。)。
2.网络参数设置(iproute命令家族)
ifcfg命令家族很古老了,应该会被更强大的iproute命令家族逐步取代。iproute程序包包含很多工具,此处仅列出命令“ip”和“ss”。
2.1 命令ip,用于管理网络参数
格式:ip [ OPTIONS ] OBJECT { COMMAND | help }
其选项不常用,不同OBJECT可以实现不同功能,各OBJECT有各自子命令(可使用help查看)。
各OBJECT和其子命令均可用其前若干个字母进行简写(只要能唯一识别即可)。
2.1.1 管理IP地址
addr项目用来管理地址,常用子命令:
子命令 | 使用格式 | 意义 |
---|---|---|
show或list | ip addr show [dev STRING] | 查看所有网卡或STRING网卡的IP |
add | ip addr add ADDR dev STRING | 把地址ADDR添加给设备STRING添加路由示例 |
del | ip addr del ADDR dev STRING | 把地址ADDR从设备STRING上删除删除路由示例 |
flush | ip addr flush [dev STRING] | 一次性删除所有网卡的所有IP,或一次性删除一个网卡的所有IP |
各命令示例:
查看网卡eth0的IP:
[root@localhost ~]% ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:05:75:b2 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.131/24 brd 192.168.0.255 scope global eth0
inet6 fe80::20c:29ff:fe05:75b2/64 scope link
valid_lft forever preferred_lft forever
可以看到它也显示了各状态、特性(ifconfig说明过不再赘述),且有IPv4、IPv6地址。
添加IP地址192.168.10.10/24给网卡eth1:
[root@localhost ~]% ip addr add 192.168.10.10/24 dev eth1
[root@localhost ~]% ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:05:75:bc brd ff:ff:ff:ff:ff:ff
inet 192.168.10.10/24 scope global eth1
再分别添加地址172.19.100.1/16、192.168.10.99/24给eth1:
[root@localhost ~]% ip addr add 172.19.100.1/16 dev eth1
[root@localhost ~]% ip addr add 192.168.10.99/24 dev eth1
[root@localhost ~]% ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:05:75:bc brd ff:ff:ff:ff:ff:ff
inet 192.168.10.10/24 scope global eth1 # 192.168.10.0网段内的主地址
inet 172.19.100.1/16 scope global eth1
inet 192.168.10.99/24 scope global secondary eth1 # 192.168.10.0网段内的备用地址
可以看到eth1有了3个地址,并且192.168.10.0网段内区分了主备地址6。先添加的为主地址。
上述是直接添加的地址,也可像命令ifconfig,为网卡的别名添加地址。意思是一样的,都是为同一网卡添加多个地址:
[root@localhost ~]% ip addr add 192.168.100.35/24 dev eth1 label eth1:0 # 使用关键字“label”来添加别名,同时添加地址
[root@localhost ~]% ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:05:75:bc brd ff:ff:ff:ff:ff:ff
inet 192.168.10.10/24 scope global eth1
inet 172.19.100.1/16 scope global eth1
inet 192.168.100.35/24 scope global eth1:0 # 效果也是给这个网卡新添加了一个地址
inet 192.168.10.99/24 scope global secondary eth1
删除IP,语法同添加,关键字改为delete即可:
[root@localhost ~]% ip addr show | grep "192.168.100.35"
inet 192.168.100.35/24 scope global eth1:0
[root@localhost ~]% ip addr delete 192.168.100.35/24 dev eth1 # 从eth1删除地址192.168.100.35/24
[root@localhost ~]% ip addr show | grep "192.168.100.35"
[root@localhost ~]%
清空一个网卡的所有IP,语法同上,关键字改为flush即可:
[root@localhost ~]% ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:05:75:bc brd ff:ff:ff:ff:ff:ff
inet 192.168.10.10/24 scope global eth1
inet 172.19.100.1/16 scope global eth1
inet 192.168.10.99/24 scope global secondary eth1
[root@localhost ~]% ip addr flush eth1
[root@localhost ~]% ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:05:75:bc brd ff:ff:ff:ff:ff:ff # eth1没有任何IP了
2.1.2 管理网卡
link项目,用于管理网卡。
常用子命令 | 子子命令 | 意义 |
---|---|---|
show | 显示所有网卡(包括未启用的)的属性信息(数据链路层信息,比如MAC、MTU,但不显示IP等) | |
set | up/down | 用于启用、禁用网卡 |
multicast on/off | 用于启用、禁用网卡的多播功能 | |
name | 重命名网卡 | |
mtu | 设定mtu,默认是1500字节 | |
netns | 把网卡添加至指定网络名称空间 |
除添加网卡至指定网络名称空间,其他都很好理解,不再演示效果。添加网卡至网络名称空间示例
2.1.3 管理本地路由表
route项目用于管理路由,各子命令:
子命令 | 格式及意义 |
---|---|
add7 | 常用格式为add [type] TARGET [dev DEVICE] via NEXT_HOP [src ADDR] ,表示添加一个路由条目,目标地址是TARGET,由网卡DEVICE发出,下一跳(即网关)是NEXT_HOP。如果该网卡有多个IP,可指明源地址使用ADDR8。 |
delete | 删除路由条目,格式同add。实际使用的格式更简单,未必要列出所有参数。系统会删除一个满足所列参数的条目。 |
show | 显示路由条目。默认显示所有的,也可通过指定参数,仅显示符合所列参数的条目。 |
flush | 清空路由条目。不指定任何参数表示清空所有路由条目。 |
示例:
添加路由条目及需注意:
[root@localhost ~]# ip route show # 查看当前所有路由条目
default via 192.168.0.131 dev eth0 proto static
[root@localhost ~]# ip route add 172.16.0.0 via 192.168.0.131
[root@localhost ~]# ip route add 172.16.0.0 via 192.168.0.131 # 由于添加内容一样,所以提示已存在
RTNETLINK answers: File exists
[root@localhost ~]# ip route add 172.16.0.0/16 via 192.168.0.131 # 但是只要加上掩码,系统就会认为不一样,虽然意义一样
[root@localhost ~]# ip route show
172.16.0.0 via 192.168.0.131 dev eth0
172.16.0.0/16 via 192.168.0.131 dev eth0 # 被认为是两路由条目
default via 192.168.0.131 dev eth0 proto static
[root@localhost ~]# ip route add 192.168.100.1/24 via 192.168.0.131 # 如果目标地址是主机,则不能加掩码
RTNETLINK answers: Invalid argument
[root@localhost ~]# ip route add 192.168.100.1 via 192.168.0.131
[root@localhost ~]# ip route show
192.168.100.1 via 192.168.0.131 dev eth0
172.16.0.0/16 via 192.168.0.131 dev eth0 scope link
default via 192.168.0.131 dev eth0 proto static
其他子命令不再赘述。
2.1.4 管理网络名称空间
项目netns用于管理网络名称空间(此功能目前仅centos7支持)。
一个网络名称空间可看作一个主机(虚拟机),一主机上可建立多个网络名称空间。
可把当前主机上的指定网卡,移动至指定网络名称空间。通过这种方式,可以构建出复杂的虚拟网络。
netns各子命令:
子命令 | 意义 |
---|---|
show或list | 列出当前主机的所有网络名称空间 |
add | 添加网络名称空间 |
delete | 删除指定网络名称空间。如果此网络名称空间,有之前从当前主机移动至的网卡,则这些网卡又会回到本机 |
exec | 相当于“远程连接”到了网络名称空间,可在其中执行网络管理命令 |
示例:
添加一个网络名称空间:
[root@localhost ~]% ip netns add ns1
[root@localhost ~]% ip netns list
ns1
把网卡ens33移至网络名称空间ns1,并分别在本机和网络名称空间查看网卡设备:
[root@localhost ~]% ip link show # 本机有2网卡设备
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
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 qlen 1000
link/ether 00:0c:29:b7:6c:86 brd ff:ff:ff:ff:ff:ff
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:b7:6c:90 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]% ip link set ens33 netns ns1 # 把网卡
[root@localhost ~]% ip link show # 此时查看,本机只有1个网卡了
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:b7:6c:90 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]% ip netns exec ns1 ip link show # 此时使用netns的exec子命令,“连接”至网络命名空间ns1,并在其后直接执行网卡查看命令。可以看到其中的网卡ens33
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether 00:0c:29:b7:6c:86 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]% ip netns delete ns1 # 删除网络命名空间ns1
[root@localhost ~]% ip link show # 可看到网卡ens33又回到本机
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
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 qlen 1000
link/ether 00:0c:29:b7:6c:86 brd ff:ff:ff:ff:ff:ff
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:b7:6c:90 brd ff:ff:ff:ff:ff:ff
2.2 命令ss,用于网络状态查看、数据统计
常用选项同命令netstat,不再列出。性能优于netstat。
下面是在centos7上的显示结果。
[root@localhost ~]% ss -tanlpe
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:* users:(("sshd",pid=977,fd=3)) ino:17353 sk:ffff880037748000 <->
LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=1715,fd=13)) ino:18941 sk:ffff8800377487c0 <->
LISTEN 0 128 :::22 :::* users:(("sshd",pid=977,fd=4)) ino:17355 sk:ffff880039ce0000 v6only:1 <->
LISTEN 0 100 ::1:25 :::* users:(("master",pid=1715,fd=14)) ino:18942 sk:ffff880039ce0880 v6only:1 <->
此外,ss支持筛选。只需在选项后跟state [ TCP_state ][expression]
。
其中TCP_state是TCP连接所处的状态,expression是一些特定条件组成的表达式。
比如:
[root@localhost ~]% ss -tanl state established # 仅查看TCP的状态为已建立的连接
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 52 192.168.0.104:22 192.168.0.101:51339
expression的条件限定有多种,比如源端口号(sport)、目标端口号(dport)等,可在man文档中查看。
3.网络相关的配置文件
命令设置的网络参数、路由条目等都是立即生效但不是永久有效;配置文件设置的都是永久有效,但不会立即生效。
配置文件设置完成如需生效则应重启network服务,或重启主机。
3.1 网卡配置文件路径及命名
3.1.1 路径
对于红帽系列来说,系统上所有网卡的配置文件为/etc/sysconfig/network-scripts/目录下,名为ifcfg-NETWORK_NAME的文件,其中NETWORK_NAME为各网卡名,lo为本地回环。
如centos6的:
[root@localhost ~]% ls /etc/sysconfig/network-scripts/ifcfg*
/etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-lo
centos7的路径也一样,只是命名不同:
[root@localhost ~]% ls /etc/sysconfig/network-scripts/ifcfg*
/etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-lo
3.1.2 网卡命名
3.1.2.1 传统命名
传统命名:
类别 | 命名 |
---|---|
以太网 | eth#。其中“#”为数字,由0开始依次向后。 |
PPP网络 | ppp#。其中“#”为数字,由0开始依次向后。 |
3.1.2.2 可预测命名机制
从红帽7开始出现可预测命名机制。由网络类型、命名类型相结合。
网络类型易理解,只是和传统命名稍有不同:
网络类别 | 命名 |
---|---|
以太网(ethernet) | en |
无线局域网(wlan) | wl |
无线广域网(wwan) | ww |
分割线————————
命名类型 | 命名 |
---|---|
以集成设备 | o#。其中“#”为集成设备的设备索引号9,是由系统生成的以数字组成的字符串。 |
以扩展槽设备 | s#。其中“#”为扩展槽索引号,也是由系统生成的以数字组成的字符串。 |
以确定总线的扩展槽设备 | p#s#。p后的“#”为总线索引号;s后的“#”为扩展槽索引号。所以表示的意义是哪个总线上的哪个扩展槽设备。 |
以MAC地址命名 | x#。其中“#”为网卡的MAC地址。 |
上述如均无法使用,则仍使用传统命名。
系统在使用可预测机制命名时,上述规则的使用有一定的优先级,本文不关心。
比如仍以上述列出的centos7的网卡为例:
[root@localhost ~]% ls /etc/sysconfig/network-scripts/ifcfg*
/etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-lo
# ens33,表示网络类型是以太网,是扩展槽设备,索引号是33
3.2 通过网卡配置文件设置网络参数
网卡配置文件中各参数及意义:
参数 | 意义 |
---|---|
DEVICE | 设备名称。最好设置的与网卡名一致以便识别 |
ONBOOT | 系统启动时是否激活此网卡 |
NETBOOT | 是否支持网络引导 |
UUID | 设备唯一标识。由于是设备固定的标识,如不知道就不要乱指定,不设置即可 |
IPV6INIT | 是否初始化IPV6协议栈。如不使用IPV6,这项就选择“no” |
BOOTPROTO | 系统启动时使用什么协议获取地址。可选的有dhcp、static、none等,其中static和none都表示使用静态地址。 |
TYPE | 该网卡的借口类型。可选的有Ethernet、bridge等 |
DNS1、DNS2、DNS3 | 第1、2、3DNS服务器指向设置。DNS指向也可在/etc/resolv.conf10中设置 |
DOMAIN | 当前主机所在的DNS搜索域 |
DEFROUTE | 该网卡是否是默认路由使用的接口(一般不用设置) |
GATEWAY | 默认网关 |
IPADDR | 设置IP地址 |
NETMASK | 掩码,须使用点分十进制表示。在centos7中是PREFIX,须使用长度表示。 |
USERCTL | 是否允许普通用户控制此设备 |
PEERDNS | 当BOOTPROTO为dhcp时,此选项表示是否允许dhcp服务器分配过来的dns服务器地址覆盖本地手动指定的dns服务器地址。默认是允许 |
NM_CONTROLLED | 是否允许NetworkManager服务控制网卡。centos7版本之前的NetworkManager服务不完善,此项最好选择no,并禁用NetworkManager服务,仍仅由network服务进行管理 |
HWADDR | MAC地址。由于MAC地址是固定的,如不知道,就不要在此处乱指定,不设置即可 |
注意,如果配置文件中为网卡别名设置了IP地址,则BOOTPROTO只能为static或none,因为网卡别名的地址不支持动态获取,只能静态指定。
除了直接编辑配置文件外,也有专门的命令用于修改配置文件,这样可以避免在配置文件中的语法错误。centos6使用的是命令system-config-network(简化的是setup);centos7使用的是nmtui11。
这两命令都是打开一个配置窗口进行设置,很简单不再赘述。
3.3 各网卡关于路由条目的配置文件
各网卡用于配置路由条目的配置文件为/etc/sysconfig/network-scripts/route-NETWORK_NAME(如没有则自行创建)。
默认路由(即默认网关)可在网卡配置文件中进行设置,所以此处的路由条目主要配置非默认路由(指定的网络路由或主机路由)。
在这些配置文件中可使用2种方式配置路由条目(但不可混用):
1、每行一个路由条目,格式为:“目标地址 via 下一跳”
2、每3行一个路由条目,格式为(#为数字用以区隔各条目):
ADDRESS#=目标地址
NETMASK#=掩码
GATEWAY#=下一跳
以第1种为例:
[root@localhost ~]% ip route show
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.131 metric 1
172.14.0.0/16 via 192.168.0.200 dev eth0 proto static
default via 192.168.0.131 dev eth0 proto static # 显示当前路由条目
[root@localhost ~]% ip route delete 172.14.0.0/16 # 删除目标网络为172.14.0.0/16的路由条目
[root@localhost ~]% ip route show
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.131 metric 1
default via 192.168.0.131 dev eth0 proto static
[root@localhost ~]% cat << EOF > /etc/sysconfig/network-scripts/route-eth0 # 把目标网络为172.16.0.0/16,下一跳是192.168.0.200的路由条目添加至eth0的路由配置文件中
> 172.16.0.0/16 via 192.168.0.200
> EOF
[root@localhost ~]% service network restart # 重启网络服务
Shutting down interface eth0: Device state: 3 (disconnected)
[ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: Active connection state: activated
Active connection path: /org/freedesktop/NetworkManager/ActiveConnection/5
[ OK ]
[root@localhost ~]% ip route show # 可看到重启后该路由条目生效
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.131 metric 1
172.16.0.0/16 via 192.168.0.200 dev eth0 proto static
default via 192.168.0.131 dev eth0 proto static
默认路由为192.168.0.131在网络服务重启后也生效了,因为笔者机器的网卡配置文件中设置的默认网关是这个,和本例无关。
4.主机名设置
这里说的主机名,只是主机的一个标示,并不是指FQDN。
命令hostname用于显示和修改主机名。
[root@localhost ~]% hostname
localhost.localdomain
[root@localhost ~]% hostname local
[root@localhost ~]% hostname
local
命令修改立即生效但不是永久有效。如需永久有效,需在配置文件/etc/sysconfig/network中编辑HOSTNAME这个变量。
在centos7中还可使用命令hostnamectl。这个命令修改结果是永久有效的(修改了配置文件)
其子命令status用于显示主机名;子命令set用于设置主机名等。
(完)
- 选项“-a”可显示包括未激活网卡在内的所有网卡。 ↩
- 实际就是同一个网卡,只是用一个别名对应一个IP而已。 ↩
- 也可仅把IP用数字表示,或是仅把端口用数字表示,使用选项[–numeric-hosts]、[–numeric-ports]等,具体可使用man文档查看,这个不赘述。 ↩
- 基于UDP的连接是没有状态的。
TCP有3次握手、4次断开,期间连接状态会随之变化。这里显示的就是当前状态。 ↩ - “netstat -tan”就相当于“netstat -tn”和“netstat -tln”,因为“-a”表示所有状态,包括已建立的和处于监听状态的。 ↩
- 因为一个网卡不能同时使用同一网段的两地址,所以有主、备。
命令ifconfig显示的只是主地址(其他地址是通过网卡别名),而命令ip是直接显示该网卡所有地址。 ↩ - 命令change、replace,使用格式同add。前者表示修改已存在的路由条目;后者表示替换路由条目(如果有旧的就替换、没有就添加)。
这应该不常用,路由条目的修改和替换一般是先删除再创建即可,所以不列出了。 ↩ - type为路由类型,可省是因为ip命令会自动判断是何种路由类型。如确实需指定可在man文档中查看(除了常用的主机类型、网络类型,还有其他多种类型)。
如手动指明源地址ADDR,显然它要和下一跳处于同一网段。不指明系统会使用默认。 ↩ - 索引号是系统如何生成的本文不述,只需了解命名规则即可。下同。 ↩
- 其中在nameserver后直接填写DNS服务器IP地址即可,也是可以写3个。windows的DNS指向只能写俩。 ↩
- nmtui是打开一个编辑窗口设置,nmcli是使用命令行设置。nm家族命令只有centos7有。本文不述。 ↩