Linux 网络设置
一、查看网络1、查看网络接口地址2、查看更改主机名3、查看路由表条目4、查看网络连接情况netstat 命令ss 命令二、测试网络连接1、测试网络连通性2、跟踪数据包的路由途径3、测试 DNS 域名解析nslookup命令dig 命令三、使用网络配置命令1、临时配置和永久配置的解释2、修改网卡的地址、状态2、添加、删除静态路由与默认路由记录四、修改网络配置文件1、网络接口配置文件2、启用、禁用网络接口配置3、域名解析配置文件一、查看网络
1、查看网络接口地址
主机的网络接口卡(网卡)通常称为网络接口。在 Linux 操作系统中,使用 ifconfig 命令可以查看网络接口的地址配置信息(Interface Configuration)。
注:若没有 ifconfig 命令的,需要先通过 yum 方式安装 net-tools 软件包,才有 ifconfig 命令。
第一种方法查看[root@localhost ~]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.8 netmask 255.255.255.0 broadcast 192.168.10.255inet6 fe80::8c58:4d06:fde9:2d7d prefixlen 64 scopeid 0x20<link>ether 00:0c:29:fe:06:f3 txqueuelen 1000 (Ethernet)RX packets 684409 bytes 987345087 (941.6 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 175406 bytes 15317449 (14.6 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1 (Local Loopback)RX packets 135 bytes 12160 (11.8 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 135 bytes 12160 (11.8 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0第二种方法查看[root@localhost ~]# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:fe:06:f3 brd ff:ff:ff:ff:ff:ffinet 192.168.10.8/24 brd 192.168.10.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::8c58:4d06:fde9:2d7d/64 scope link
ens33:第一块以太网卡的名称。“ens33”中的“en”是“EtherNet”的缩写,表示网卡类型为以太网。lo:“回环”网络接口,“lo”是“loopback”的缩写,它不代表真正的网络接口,而是一个虚拟的网络接口, 其 IP 地址默认是“127.0.0.1”。回环地址通常仅用于对本机的网络测试。inet:表示网络接口的 IP 地址。netmask:表示网络接口的子网掩码。broadcast:表示网络接口所在网络的广播地址。ether:表示网络接口的物理地址(MAC 地址)。“TX”通过该网络接口发送的数据包个数、流量等。“RX”通过该网络接口接收的数据包个数、流量等。
2、查看更改主机名
在 Linux 操作系统中,相当一部分网络服务都会通过主机名来识别主机,如果主机名配置不当,可能会导致程序功能出现故障。使用 hostname 命令可以查看当前主机的主机名。
方法一[root@localhost ~]# hostname//查看原来的主机名localhost.localdomain[root@localhost ~]# hostname www//设置新的主机名[root@localhost ~]# hostname//确认新的主机名www[root@localhost ~]# bash//启用新的Shell 会话,查看变化[root@www ~]#hostname www方法二[root@localhost ~]# vi /etc/hostnamewww通过修改/etc/hostname 来更改的主机名,如果要让其生效,需重启 Linux 系统。方法三[root@localhost ~]# hostnamectl set-hostname www//设置新的主机名[root@localhost ~]# bash//启用新的Shell 会话,查看变化[root@www ~]#hostnamewww
3、查看路由表条目
[root@localhost ~]# routeKernel IP routing tableDestinationGateway Genmask Flags Metric Ref Use Ifacedefault gateway 0.0.0.0 UG 100 0 0 ens33192.168.10.0 0.0.0.0 255.255.255.0 U100 0 0 ens33[root@localhost ~]# route -nKernel IP routing tableDestinationGateway Genmask Flags Metric Ref Use Iface0.0.0.0 192.168.10.2 0.0.0.0 UG 100 0 0 ens33192.168.10.0 0.0.0.0 255.255.255.0 U100 0 0 ens33
Destination 列对应目标网段的地址Gateway 列对应下一跳路由器的地址Iface 列对应发送数据的网络接口若结合“-n”选项使用,可以将路由记录中的地址显示为数字形式,这可以跳过解析主机名的过程,在路由表条目较多的情况下能够加快执行速度。
4、查看网络连接情况
netstat 命令
通过 netstat 命令可以查看当前操作系统的网络连接状态、路由表、接口统计等信息, 它是了解网络状态及排除网络服务故障的有效工具。
netstat 命令常用的选项:
-a:显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)。-n:以数字的形式显示相关的主机地址、端口等信息。-r:显示路由表信息。-l:显示处于监听(Listening)状态的网络连接及端口信息。-t:查看 TCP(Transmission Control Protocol,传输控制协议)相关的信息。-u:显示 UDP(User Datagram Protocol,用户数据报协议)协议相关的信息。-p:显示与网络连接相关联的进程号、进程名称信息(该选项需要 root 权限)。
通常使用“-anpt”组合选项,以数字形式显示当前系统中所有的 TCP 连接信息,同时显
示对应的进程信息。
[root@localhost ~]# netstat -anptActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 00 0.0.0.0:111 0.0.0.0:*LISTEN1/systemd tcp 00 192.168.122.1:53 0.0.0.0:*LISTEN1338/dnsmasq tcp 00 0.0.0.0:22 0.0.0.0:*LISTEN1024/sshd
ss 命令
ss 命令也可以查看网络连接情况,它是 Socket Statistics 的缩写,主要用于获取 socket 统计信息,它可以显示和 netstat 命令类似的输出内容。但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快速更高效。要想使用 ss 命令,首先确保 iproute 程序包已被安装,可以通过 yum 方式进行安装。
ss 命令常用的选项
-h:–help 通过该选项获取更多的使用帮助。-V:–version 显示软件的版本号。-t:–tcp 显示 TCP 协议的 sockets。-u:–udp 显示 UDP 协议的 sockets。-n:–numeric 不解析服务的名称,如 “22” 端口不会显示成 “ssh”。-l:–listening 只显示处于监听状态的端口。-p:–processes 显示监听端口的进程。-a: --all 对 TCP 协议来说,既包含监听的端口,也包含建立的连接。-r: --resolve 把 IP 解释为域名,把端口号解释为协议名称。
[root@localhost ~]# ss -anptState Recv-Q Send-Q Local Address:PortPeer Address:Port LISTEN0128*:111 *:* users:(("systemd",pid=1,fd=43))LISTEN05192.168.122.1:53 *:*
“Local Address:Port” 表示本地监听的 IP 和端口“Peer Address:Port”表示远端连接的 IP 和端口
二、测试网络连接
用户访问网络服务的前提是网络连接处于正常状态。若网络连接不稳定,甚至无法连接, 用户则无法正常访问网络服务。因此,当网络连接出现问题时,需要通过测试网络连接的命令来确定故障点。
1、测试网络连通性
使用 ping 命令可以向目标主机持续地发送测试数据包,并显示反馈结果,直到按 Ctrl
+C 组合键后中止测试,并显示最终统计结果。
[root@localhost ~]# ping PING (103.235.46.39) 56(84) bytes of data.64 bytes from 103.235.46.39 (103.235.46.39): icmp_seq=1 ttl=128 time=210 ms64 bytes from 103.235.46.39 (103.235.46.39): icmp_seq=2 ttl=128 time=210 ms[root@localhost ~]# ping 192.168.10.1PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=0.182 ms64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=0.355 ms
Ping检查连通性有五个步骤:
使用ipconfig /all 或 ifconfig 观察本地网络设置是否正确。Ping 127.0.0.1,127.0.0.1 回送地址Ping回送地址是为了检查本地的TCP/IP协议有没有设置好。Ping本机IP地址,这样是为了检查本机的IP地址是否设置有误。Ping本网网关或本网IP地址,这样的是为了检查硬件设备是否有问题,也可以检查本机与本地网络连接是否正常;(在非局域网中这一步骤可以忽略)。Ping后返回信息的分析。 Request timed out
这是大家经常碰到的提示信息,很多文章中说这是对方机器置了过滤ICMP数据包,从上面工作过程来看,这是不完全正确的,至少有下几种情况。
对方已关机,或者网络上根本没有这个地址。对方与自己不在同一网段内,通过路由也无法找到对方,但有时对方确实是存在的,当然不存在也是返回超时的信息。对方确实存在,但设置了ICMP数据包过滤(比如防火墙设置)。
怎样知道对方是存在,还是不存在呢,可以用带参数 -a 的Ping命令探测对方,如果能得到对方的NETBIOS名称,则说明对方是存在的,是有防火墙设置,如果得不到,多半是对方不存在或关机,或不在同一网段内。错误设置IP地址 Destination host Unreachable 对方与自己不在同一网段内,而自己又未设置默认的路由网线 出了故障
这里要说明一下“destination host unreachable”和 “time out”的区别,如果所经过的路由器的路由表中具有到达目标的路由,而目标因为其他原因不可到达,这时候会出现“time out”,如果路由表中连到达目标的路由都没有,那就会出现“destination host unreachable”。 Source quench received
这个信息比较特殊,它出现的机率很少。它表示对方或中途的服务器繁忙无法回应。
Unknown host——不知名主机
这种出错信息的意思是,该远程主机的名字不能被域名服务器(DNS)转换成IP地址。故障原因可能是域名服务器有故障,或者其名字不正确,或者网络管理员的系统与远程主机之间的通信线路有故障。
No answer——无响应
这种故障说明本地系统有一条通向中心主机的路由,但却接收不到它发给该中心主机的任何信息。故障原因可能是下列之一:中心主机没有工作;本地或中心主机网络配置不正确;本地或中心的路由器没有工作;通信线路有故障;中心主机存在路由选择问题。
Ping 127.0.0.1:127.0.0.1是本地循环地址
如果本地址无法Ping通,则表明本地机TCP/IP协议不能正常工作。
no rout to host
网卡工作不正常。
transmit fai led ,error code
10043网卡驱动不正常
unknown host name
DNS配置不正确。
2、跟踪数据包的路由途径
若服务器上没有 traceroute 命令,可通过 yum 方式安装 traceroute 软件包。traceroute 命令可以用于测试从当前主机到目的主机之间经过了哪些网络结点,并显示各中间结点的连接状态(响应时间)。对于无法响应的结点,连接状态将显示为“*”。
traceroute 命令能够比 ping 命令更加准确地定位网络连接的故障点(中断点),因此执行速度会比 ping 命令稍慢。在网络测试与排错过程中,通常会先使用 ping 命令测试与目的主机的网络连接,如果发现网络连接有故障,再使用 traceroute 命令跟踪查看是在哪个中间结点存在故障。
方法一[root@localhost ~]# traceroutetraceroute to (104.193.88.123), 30 hops max, 60 byte packets1 gateway (192.168.10.2) 0.050 ms 0.026 ms 0.023 ms2 * * *3 * * *方法二[root@localhost ~]# mtrMy traceroute [v0.85]localhost.localdomain (0.0.0.0) Mon Nov 2 10:00:17 Resolver: Received error response 2. (server failure)er of fields quitPacketsPingsHostLoss% Snt Last Avg Best Wrst StDev1. 192.168.10.20.0% 19 0.2 0.4 0.2 1.2 0.02. 192.168.1.10.0% 19 1.7 1.4 1.1 1.9 0.03. 192.168.0.10.0% 18 3.2 2.1 1.4 3.2 0.24. 100.94.128.10.0% 18 56.8 16.4 2.9 103.3 26.75. 58.217.231.37 0.0% 18 5.0 4.9 3.0 6.9 1.0
3、测试 DNS 域名解析
nslookup命令
当域名解析出现异常时,将无法使用域名的形式访问网络中的 Web 站点、电子邮件系统等服务。nslookup 命令是用来测试域名解析的专用工具,使用时只要指定要解析的目标域名作为参数即可。若在执行过程中提示无法找到nslookup 命令,可通过yum 安装bind-utils 程序包的方式来解决。[root@localhost ~]# nslookup Server:8.8.8.8//所使用的DNS 服务器Address:8.8.8.8#53Non-authoritative answer://DNS 解析的反馈结果Name:Address: 45.76.29.156
若出现“…… no servers could be reached”的信息,则表示不能连接到指定的DNS 服务器。若出现“…… can’t find xxx.yyy.zzz: NXDOMAIN”的信息, 则表示要查询的域名不存在。
dig 命令
[root@localhost ~]# dig ; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7 <<>> // dig 的版本及输入参数;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37833;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1//以上显示服务器返回的信息,status 为 NOERROR 状态说明查询成功;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 512;; QUESTION SECTION:;.INA//显示通过 A 记录要查询的域名;; ANSWER SECTION:.498INA220.181..498INA39.156.69.79//经DNS 返回后的查询结果;; Query time: 41 msec;; SERVER: 8.8.8.8#53(8.8.8.8);; WHEN: 一 11月 02 10:14:31 CST ;; MSG SIZE rcvd: 70//查询后的一些统计信息,比如用了 41 毫秒,查询 DNS 服务器的IP 地址,查询的时间等等dig 在查询过程中,还可以指定特点的 DNS 服务器。如果不指定 DNS 服务器,默认会使用/etc/resolve.conf 里面的地址作为 DNS 服务器。[root@localhost ~]# dig @8.8.8.8
三、使用网络配置命令
1、临时配置和永久配置的解释
临时配置:通过命令行直接修改当前正在使用的网络地址,修改后立即可以生效。 这种方式操作简单快速、执行效率高,一般在调试网络的过程中使用。但由于所做的修改并没有固定地存放在静态的文件中,因此当重启 network 服务或重启主机后将会失效。固定配置:通过配置文件来存放固定的各种网络地址,需要重启 network 服务或重启主机后才会生效。这种方式操作上相对要复杂一些,但相当于“永久配置”,一般在需要为服务器设置固定的网络地址时使用。2、修改网卡的地址、状态
ifconfig 网络接口名称 IP 地址 [ netmask 子网掩码 ] ifconfig 网络接口名称 IP 地址[/子网掩码长度]
在对服务器网络进行调试的过程中,有时候需要临时在同一个网卡上使用一个新的 IP 地址,但是又不能覆盖原有 IP 地址而导致服务程序不可用。这时可以为网卡绑定一个虚拟的网络接口,虚拟接口的 IP 地址和网卡原有的 IP 地址都可以正常使用。[root@localhost ~]# ifconfig ens33:0 192.168.10.55可以根据需要添加更多的虚拟接口,如“ens33:1”“ens33:2”等。
2、添加、删除静态路由与默认路由记录
通过“route add”操作可以添加路由记录,结合“-net”选项指定目标网段的地址,结合“gw” 选项指定下一跳路由器的IP地址[root@www ~]# route add -net 目标网段 gw 下一跳地址
[root@www ~]# route del -net 目标网段 gw 下一跳地址添加、删除默认网关记录时,与添加、删除静态路由记录的命令格式类似,但指定目标网段时只需简单地使用“default”表示即可,无须再使用“-net”选项指明网段地址。
[root@www ~]# route del default gw 网关地址 //删除默认网关记录
[root@www ~]# route add default gw 网关地址 //添加新的默认网关记录
四、修改网络配置文件
1、网络接口配置文件
网络接口的配置文件默认位于目录/etc/sysconfig/network-scripts/中,文件名格式为“ifcfg-XXX”,其中“XXX”是网络接口的名称。
[root@localhost ~]# ls /etc/sysconfig/network-scripts/ifcfg-*/etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-lo/etc/sysconfig/network-scripts/ifcfg-ens36[root@localhost network-scripts]# vim ifcfg-ens36TYPE="Ethernet"BOOTPROTO="static"DEFROUTE="yes"DEVICE="ens36"ONBOOT="yes"IPADDR="192.168.20.1"NETMASK="255.255.255.0"GATEWAY="192.168.20.254"
TYPE:设置网卡类型,“Ethernet”表示以太网。BOOTPROTO:设置网络接口的配置方式,值为“static”时表示使用静态指定的 IP
地址,为“dhcp”时表示通过 DHCP 的方式动态获取地址。DEVICE:设置网络接口的名称。ONBOOT:设置网络接口是否在 Linux 操作系统启动时激活。IPADDR:设置网络接口的 IP 地址。ETMASK:设置网络接口的子网掩码。GATEWAY:设置网络接口的默认网关地址。
2、启用、禁用网络接口配置
1)启用网络接口
[root@localhost ~]# systemctl restart network //重启network服务
//会先关闭所有的网络接口,再根据配置文件重新启用所有的网络接口。
//现实环境中不是特殊情况不建议使用
[root@localhost ~]# ifup ens33 或ifconfig ens33 up
2)关闭网络接口
[root@localhost ~]# ifup ens33 或ifconfig ens33 down
3、域名解析配置文件
1)指定为本机提供 DNS 解析的服务器地址
/etc/resolv.conf 文件中记录了本机默认使用的 DNS 服务器的地址信息,对该文件所做的修改将会立刻生效。Linux 操作系统中最多可以指定 3 个(第 3 个以后的将被忽略)不同的 DNS 服务器地址,优先使用第一个 DNS 服务器。
[root@localhost ~]# vim /etc/resolv.conf# Generated by NetworkManagernameserver 8.8.8.8nameserver 114.114.114.114
但是,在 CentOS 7 环境下,如果按照上面方式配置,过一段时间会被系统重新覆盖或者清除,此时需要修改/etc/NetworkManager/NetworkManager.conf 文件,在 main 部分添加“dns=none”配置项。之后需要重启 NetworkManager 服务。确保/etc/resolv.conf 内有配置信息,此时就可以正常解析域名了。
[root@localhost ~]# vi /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifcfg-rh
dns=none
2)本地主机映射文件
/etc/hosts 文件中记录着一份主机名与 IP 地址的映射关系表,一般用来保存经常需要访问的主机的信息。当访问一个未知的域名时,先查找该文件中是否有相应的映射记录,如果找不到再去向 DNS 服务器查询。对于经常访问的一些网站,可以通过在/etc/hosts 文件添加正确的映射记录,减少 DNS 查询过程,从而提高上网速度。当然,若添加了错误的映射记录,则可能导致网站访问出现异常。另外,因为 hosts 文件只保存在本地,所以其中的映射记录也只适用于当前主机,而无法作用于整个网络。
[root@localhost ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
格式为IP地址域名或IP地址主机名
192.168.20.5
192.168.20.55 node1