Linux 实操篇 - 网络配置

注意
本文最后更新于 2024-02-18,文中内容可能已过时。

Linux 实操篇 - 网络配置

这一章讲的太浅了。

Linux 网络配置原理图

关于虚拟机和主机的三种连接模式,其实之前在《Linux 基础篇 - VM 和 Linux 的安装》已经学习过。但是也是讲得很浅显,具体的三种模式的区别查看《Vmware 虚拟机三种网络模式详解》

/etc/sysconfig/network-scripts/ifcfg-eth33 中的格式:

注释以 # 开头。

最重要的就是四个配置项,缺一不可:

1
2
3
4
5
6
7
8
#IP
IPADDR=172.16.20.143
# 子网掩码
NETMASK=255.255.255.0
# DNS
DNS1=172.16.20.2
# 网关
GATEWAY=172.16.20.2

其他配置:

1
2
3
4
5
6
7
8
#IP 的配置方法 [none|static|bootp|dhcp](引导时不使用协议 | 静态分配 IP|BOOTP 协议|DHCP 协议)
BOOTPROTO="static"
# 系统启动的时候网络接口是否有效(yes/no)
ONBOOT="yes"
# DEVICE 接口名(设备,网卡)
# HWADDR  MAC 地址 hardware address
# TYPE 网络类型(通常是 Ethemet)
# UUID 随机 id

修改/etc/sysconfig/network-scripts/ifcfg-eth33之后重启网卡:

/etc/init.d/network restart

或者

service network restart


DNS 服务也可以在/etc/resolv.conf中配置,添加或者修改 nameserver,配置 DNS 服务,不需要重启

查看网络 IP 和网关

在 VMWare 软件多顶部工具栏 -> 编辑 -> 虚拟网络编辑器 点击右下角的更改设置,然后选中相应的虚拟交换机即可查看相关设置。

参考《Vmware 虚拟机三种网络模式详解》

看看就行了

查看 windows 环境的中 VMnet8 网络配置 (ipconfig指令)

看看就行了。

IP 只有在同一个网段才可以相互通讯

查看 linux 的网络配置ifconfig

ifconfig

Linux ifconfig 命令用于显示或设置网络设备。

ifconfig可设置网络设备的状态,或是显示目前的设置。

1
ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<网络设备类型><硬件地址>][io_addr<I/O地址>][irq<IRQ地址>][media<网络媒介类型>][mem_start<内存地址>][metric<数目>][mtu<字节>][netmask<子网掩码>][tunnel<地址>][-broadcast<地址>][-pointopoint<地址>][IP地址]
  • [IP地址]:指定网络设备的 IP 地址。

  • add <地址>:设置网络设备 IPv6 的 IP 地址。

  • del <地址>:删除网络设备 IPv6 的 IP 地址。

  • down:关闭指定的网络设备。

  • up:启动指定的网络设备。

  • <hw<网络设备类型><硬件地址>:设置网络设备的类型与硬件地址。

  • io_addr<I/O地址>:设置网络设备的I/O地址。

  • irq<IRQ地址>:设置网络设备的 IRQ。

  • media<网络媒介类型>:设置网络设备的媒介类型。

  • mem_start<内存地址>:设置网络设备在主内存所占用的起始地址。

  • metric<数目>:指定在计算数据包的转送次数时,所要加上的数目。

  • mtu<字节>:设置网络设备的 MTU。

  • netmask<子网掩码>:设置网络设备的子网掩码。

  • tunnel<地址>:建立 IPv4 与 IPv6 之间的隧道通信地址。

  • -broadcast<地址>:将要送往指定地址的数据包当成广播数据包来处理。

  • -pointopoint<地址>:与指定地址的网络设备建立直接连线,此模式具有保密功能。

  • -promisc:关闭或启动指定网络设备的 promiscuous 模式。

  • [网络设备]:指定网络设备的名称。

用法:

输入:ifconfig

左侧三个是网络设备,ens33 是网卡,对应的配置文件路径是/etc/sysconfig/network-scripts/ifcfg-ens33,lo 是什么?TODO,

lo 是 loopback 的缩写,表示环回接口,网络配置一定需要有环回接口。

Loopback 接口是虚拟接口,是一种纯软件性质的虚拟接口。任何送到该接口的网络数据报文都会被认为是送往设备自身的。大多数平台都支持使用这种接口来模拟真正的接口。这样做的好处是虚拟接口不会像物理接口那样因为各种因素的影响而导致接口被关闭。事实上,将 Loopback 接口和其他物理接口相比较,可以发现 Loopback 接口有以下几条优点:

  • Loopback 接口状态永远是 up 的,即使没有配置地址。这是它的一个非常重要的特性。

  • Loopback 接口可以配置地址,而且可以配置全 1 的掩码,可以节省宝贵的地址空间。

  • Loopback 接口不能封装任何链路层协议。

virbr 是虚拟网桥(Virtual Bridge),virbr0 是虚拟网桥网卡,那 ens33 是什么,不深究了。是本机的网卡


关闭/启动指定网卡

ifconfig eth33 down

ifconfig eth33 up

关闭之后,ifconfig无法看到

重新启动之后,才可以看到。

注意,这里的关闭和启动跟 service network restart 的功能不一样。


配置 IP 地址

ifconfig eth0 192.168.1.56:给 eth0 网卡配置 IP 地址

ifconfig eth0 192.168.1.56 netmask 255.255.255.0:给 eth0 网卡配置 IP 地址,并加上子掩码

ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255:给 eth0 网卡配置 IP 地址,加上子掩码,加上个广播地址

注意:在命令行中修改 IP,不会同步到/etc/sysconfig/network-scripts/ifcfg-ens33中,只在当前 session 生效,重启之后就无效了。

ping 测试主机之间网络连通性

ping

Linux ping 命令用于检测主机。

执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。

1
ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]
  • -d:使用 Socket 的 SO_DEBUG 功能。

  • -c <完成次数>:设置完成要求回应的次数。

  • -f:极限检测。

  • -i <间隔秒数>:指定收发信息的间隔时间。

  • -I <网络界面>:使用指定的网络接口送出数据包。

  • -l <前置载入>:设置在送出要求信息之前,先行发出的数据包。

  • -n:只输出数值。

  • -p <范本样式>:设置填满数据包的范本样式。

  • -q:不显示指令执行过程,开头和结尾的相关信息除外。

  • -r:忽略普通的 Routing Table,直接将数据包送到远端主机上。

  • -R:记录路由过程。

  • -s <数据包大小>:设置数据包的大小。要考虑 MTU

  • -t <存活数值>:设置存活数值 TTL 的大小。

  • -v:详细显示指令的执行过程。

  • -w <deadline>:在 deadline 秒后退出。

  • -W <timeout>:在等待 timeout 秒后开始执行

常用参数: -c  -i  -s  

常用:

ping www.baidu.com:默认会一直ping下去,按Ctrl + C结束,最后会给一个统计

rtt(Round-trip time (RTT) 从浏览器发出请求到接收到服务器回应的事件)的最短时间/平均时间/最长时间/标准差(标准差(Standard Deviation) ,是离均差平方的算术平均数(即:方差))

ping  -c 5  -i 3  www.baidu.com:每隔 3 秒ping一次,一共ping 5 次

linux 网络环境配置

自动获取

会尽量避免 IP 冲突,但是这样的话就不适合做服务器。

设置路径:顶部菜单 应用程序 -> 系统工具 ->  设置 ->  网络 -> 有线连接下右侧齿轮(这就是网卡的设置)

我这里已经设置成固定 IP 了。

固定 IP

参考博客:

Linux 虚拟机设置静态 IP-CSDN 博客

通过 CentOS7 系统图形化界面配置静态 IP-CSDN 博客

直接修改 /etc/sysconfig/network-scripts/ifcfg-ens33 文件

注意,并不一定是ifcfg-ens33这个文件,可以在/etc/sysconfig/network-scripts下用 ll ifcfg-* 搜索一下有多少个配置文件,如果对ifcfg-ens33这个文件的修改不生效,那很有可能是因为生效的是别的ifcfg文件。一个简单的方法就是在图形页面的

然后修改 name 中填的名字对应的ifcfg-<name>对应的文件,即可。比如ifcfg-Wired-connection-1

这个文件之所以在ifcfg-ens33前面生效,可能的原因是因为ifcfg-Wired-connection-1中多了一个 autoconnect_priority=-999的配置,这个以后再研究

配置文件配置项的意义:Linux 配置 IPv4 或 IPv6 地址 - Librarookie - 博客园

NAT 模式

查看虚拟机 NAT 的设置

改了这里的子网 IP,然后应用,NAT 设置中的网关地址和 DHCP 设置中的起始结束 IP 网络地址会自动同步,手动修改为其他网段比如172.16.50.2会报错,提示:网关 IP/起始结束 IP 必须在子网范围内

宿主机上的 VMware Network Adapter VMnet8 会自动同步这里的设置,不需要再手动设置

现在的 ip 段是 172.16.40.0,其实这里可以改成大家都比较熟悉的、192.168.2.0网段,完全可以,直接修改子网 IP 就可以实现,不过学到这里,已经习惯了。算了,不改了,

然后需要修改/etc/sysconfig/network-scripts/ifcfg-ens33中的相关配置为对应得 IP,

1
2
3
4
5
6
BOOTPROTO="static"
ONBOOT="yes"
IPADDR=172.16.40.143  # 为 DHCP 中起始 IP 地址到结束 IP 地址之间的地址
NETMASK=255.255.255.0 # NAT 设置中的子网掩码
DNS1=172.16.40.2  # NAT 设置中的的网关 IP
GATEWAY=172.16.40.2 # NAT 设置中的网关 IP

具体地址根据具体情况来,不过要注意要跟 VMWare 中的虚拟交换机和虚拟网卡在同一网段(NAT 模式下就是 VMnet8 和 VMware Network Adapter VMnet8)

然后重启网卡:

systemctl restart network

桥接模式

设置虚拟机为桥接模式,然后修改 Linux 下的

1
vi /etc/sysconfig/network-scripts/ifcfg-ens33

其中 ens33 为虚拟机网卡名称。不同的网卡对应不同的文件

文件中的这几个属性

1
2
3
4
5
6
BOOTPROTO=static  #static,静态 ip,而不是 dhcp,自动获取 ip 地址。
ONBOOT=yes #开机启用网络配置。
IPADDR=192.168.1.4 #设置我想用的静态 ip 地址,(桥接模式)要和物理主机在同一网段,但又不能相同。
GATEWAY=192.168.1.1  #(桥接模式)和物理主机一样
NETMASK=255.255.252.0 #子网掩码,(桥接模式)和物理主机一样就可以了。
DNS1=192.168.1.1 #DNS,(桥接模式)和物理主机一样就可以了。

然后更新网络

systemctl restart network

然后就可以直接访问宿主机和外网了,同时 ssh 也可以连接了,ssh 服务好像是默认开启的,最好装openssh-server

以下文件可改可不改

1
vi /etc/sysconfig/network

文件中的这几个属性

1
2
3
NETWORKING=yes
HOSENAME=localhsot
GATEWAY=192.168.1.1 #网关地址,(桥接模式)同物理主机的网关地址

设置主机名和 hosts 映射

设置主机名

为了方便记忆,可以给 linux 系统设置主机名,也可以根据需要修改主机名

指令 hostname

可在/etc/hostname修改,然后重启生效

关于hostname命令,可查看《hostname & hostnamectl》

设置 hosts 映射

Linux 的 host 文件地址:/etc/hosts。普通用户只有只读权限。

在 Linux 环境下刷新 DNS 缓存:systemctl restart network

Windows 的 host 文件地址:C:\Windows\System32\drivers\etc\hosts

在 Windows 操作系统中,在 cmd 窗口中输入

ipconfig /displaydns:DNS 域名解析缓存

ipconfig /flushdns :手动清理 DNS 缓存

主机名解析过程分析 (Hosts、DNS)

Hosts 是什么

一个文本文件,用来记录 IP 和 hostname(主机名) 的映射关系。

DNS

DNS,就是 Domain Name System 的缩写,翻译过来就是域名系统,是互联网上作为域名和 IP 地址相互映射的一个分布式数据库

应用实例:用户在浏览器输入了 www.baidu.com

  1. 浏览器先检查浏览器缓存中有没有该域名解析 IP 地址,有就先调用这个 IP 完成解析;

  2. 如果没有,就检查 DNS 解析器缓存,如果有直接返回 IP 完成解析。1、2 这两个缓存,可以理解为本地解析器缓存,一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存他的 IP 地址(DNS 解析记录)

  3. 如果本地解析器缓存没有找到对应映射,检查系统中 hosts 文件中有没有配置对应的域名 IP 映射,如果有,则完成解析并返回。

  4. 如果本地 DNS 解析器缓存和 hosts 文件中均没有找到对应的 IP,则到域名服务 DNS 进行解析域

  5. 最后还没有找到,就到公网的域名服务解析器中找。

当别人把你 DNS 域名解析器黑了,或者很简单,直接修改了你了 hosts 文件,你访问工商银行的网站,指向的是他自己做的假网站,做的跟工商银行的网站一模一样,看起里跟真的一样,你在假网站上输入账号密码什么的,就会被窃取,这个就叫,DNS 域名劫持

关于这部分,可以看看《网络是怎样连接的》的《浏览器生成消息 —— 探索浏览器内部》的寻找相应的 DNS 服务器并获取 IP 地址小节

0%