文章目录
- 网络模式
- 配网要求
- CentOS
- DHCP
- 虚拟网络
- 桥接模式
- 默认配置
- 测试
- 手动配置
- 测试
- 网络地址转发模式 (NAT)
- 还原配置
- 虚拟网络配置
- 默认配置
- 测试
- 手动配置
- 测试
- 仅主机模式
网络模式
- 桥接模式:
- 主机与虚拟机对等, 虚拟机注册到主机所在的局域网, 会占用该网络的IP
- 该局域网内的所有机器, 包括主机和其他机器和所有虚拟机, 均可互相访问
- 虚拟机可以访问互联网
- 网络地址转发(NAT)模式:
- 可以认为是在主机下建立了一个虚拟局域网, 虚拟机注册到该网络, 不会占用主机所在局域网的IP
- 虚拟机可通过主机访问互联网
- 主机和所有虚拟机可以互相访问
- 虚拟机可以访问主机局域网中的其他机器. 但是反过来不行(貌似NAT-PAT端口多路复用(不同端口指向不同虚拟机)可以实现该功能)
- 仅主机模式:
- 和NAT类似
- 但是虚拟机只能和主机互相访问
- 不能通过主机访问互联网
- 也不能访问主机局域网中的其他机器
配网要求
作为一名 Java 从业者, 通常需要主机与虚拟机具有如下的网络特点
- 主机与各虚拟机之间能够互相访问
- 各虚拟机之间能够互相访问
- 虚拟机能够访问互联网
- 每一台虚拟机的IP地址一经配置则固定不变, 即使主机所在网络发生变化, 也不能影响虚拟机的IP
- 肯定是需要手动配置地址的, DHCP 自动地址会变来变去, 导致虚拟机上部署的服务不可用
- 很多中间件有高可用, 需要互相配置IP地址, 一旦虚拟机IP发生变化, 修改起来会很麻烦
这样看来桥接模式不符合第四点, 仅主机模式模式不符合第三点, 只有NAT模式符合要求
CentOS
- CentOS Stream 9 之前, 网络配置在
/etc/sysconfig/network-scripts
下, 格式是 ifcfg - CentOS Stream 9, 网络配置在
/etc/NetworkManager/system-connections
下, 格式是 keyfile, 就是 ini 配置文件的格式
CentOS Stream 9 也没有了以前配置网络的命令
- service network start/restart/status
- systemctl start/restart/status network
CentOS Stream 9 重新加载网络配置
- nmcli c reload
- nmcli c up ens160, 这里的 ens160 是网卡名, 可根据实际情况更改
CentOS Stream 9 之前的配置大致是这个样子
TYPE=Ethernet # 网络类型为以太网
BOOTPROTO=static # 手动分配IP地址
DEVICE=ens32 # 网卡设备名,设备名和文件名一定要一致
ONBOOT=yes # 网卡随网络服务启动
IPADDR=192.168.1.201 # 网卡IP地址, 要和Windows在同一个网段, 即192.168.1.*
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.1.1 # 默认网关
DNS1=8.8.8.8 # DNS,8.8.8.8为Google提供的免费DNS服务器IP地址
CentOS Stream 9 的默认配置如下, 可以看到默认的 ipv4 配置是自动获取 IP 地址, 如果有 DHCP 服务, 则该配置的虚拟机在启动后, 应该能自动拿到 IP 地址, 可以直接访问互联网
[connection]
id=ens160
uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
type=etherent
autoconnect-priority=-999
interface-name=ens160
timestamp=1692376766[ethernet][ipv4]
method=auto[ipv6]
addr-gen-mode=eui64
method=auto[proxy]
下面的测试均以 CentOS Stream 9 为例, 在 CentOS Stream 9 下的默认配置与效果, 在其他版本下不一定一致, 但大致相同
DHCP
DHCP 服务可以按照一定的规则和限制给客户端动态分配 IP 地址
NAT 模式和仅主机模式, 内置了 DHCP 服务, 桥接模式则使用主机所在局域网的 DHCP 服务, 即这三种网络模式的虚拟机, 如果系统配置了自动获取 IP 地址, 则虚拟机启动后就能获得一定限制内随机的 IP 地址, 每次启动后, 分配的 IP 地址可能会发生变化
虚拟网络
本机目前只连接了无线, 所以本次实验以无线网卡为准
在控制面板中, 我们可以看到网卡的信息, 以太网是有线网卡(本次暂无), WLAN 是无线网卡
当安装了 VMWare Workstation 后, 会多出来 VMnew1 和 VMnet8 两张虚拟网卡
在 VMWare Workstation 的 虚拟网络编辑器 中可以查看和配置这些虚拟网络
VMnet1 对应的是仅主机模式, VMnet8 对应的 NAT 模式, VMnet0 对应桥接模式, 据说桥接模式直接使用了主机网卡, 所以不会在控制面板的网络适配器中显示
桥接模式
默认情况下, 我们用桥接模式创建的 CentOS Stream 9 虚拟机可以直接访问互联网
虽然桥接模式没有 DHCP, 但是桥接模式会使用主机所在局域网的 DHCP 服务
桥接模式下, 虚拟机和主机对等, 应当在相同的网段, 有相同的子网掩码, 所以要配置虚拟机网络, 需要先了解主机当前的网络
在 cmd 中执行 ipconfig
可知
无线局域网适配器 WLAN:连接特定的 DNS 后缀 . . . . . . . :IPv6 地址 . . . . . . . . . . . . : 2409:8a0c:247:8f70:46f:6c47:8c14:77da临时 IPv6 地址. . . . . . . . . . : 2409:8a0c:247:8f70:c96e:29a0:184f:3906本地链接 IPv6 地址. . . . . . . . : fe80::9ce9:cfa2:bedb:b6cc%3IPv4 地址 . . . . . . . . . . . . : 192.168.1.2子网掩码 . . . . . . . . . . . . : 255.255.255.0默认网关. . . . . . . . . . . . . : fe80::1%3192.168.1.1
在局域网连接中查看信息可知
SSID: CMCC-R7tU-5G
协议: Wi-Fi 6 (802.11ax)
安全类型: WPA2-个人
制造商: MediaTek, Inc.
描述: MediaTek Wi-Fi 6 MT7921 Wireless LAN Card
驱动程序版本: 23.32.2.553
网络频带: 5 GHz
网络通道: 48
链接速度(接收/传输): 1201/1201 (Mbps)
IPv6 地址: 2409:8a0c:247:8f70:46f:6c47:8c14:77da
本地链接 IPv6 地址: fe80::9ce9:cfa2:bedb:b6cc%3
IPv6 DNS 服务器: fe80::1%3 (未加密)
IPv4 地址: 192.168.1.2
IPv4 DNS 服务器: 192.168.1.1 (未加密)
汇总可知主机网络信息如下
- 默认网关: 192.168.1.1
- 子网掩码: 255.255.255.0
- 主机地址: 192.168.1.2
- DNS服务器地址: 192.168.1.1
另外, 我的手机也连接了同一个局域网, 手机的地址是 192.168.1.3
所以桥接模式的虚拟机地址可以配置为 192.168.1.4 ~ 192.168.1.254 中和其他设备不冲突的任何一个地址, 具体可以百度网络相关方面的知识
我们以手动配置 192.168.1.129/24 为例, /24 就是子网掩码 255.255.255.0
默认配置
首先查看虚拟网络编辑器中 VMnet0 的配置, 应将其桥接至正确的物理无线网卡上, 默认的自动一般都是没有问题不需要修改的
然后我们看虚拟机设置, 将网络连接修改为桥接模式, 然后启动虚拟机, 通过 ip a
查看虚拟机网络信息
可以看到 ens160 的地址被分配了 192.168.1.5
测试
互相访问试试看
可以看到, 效果与预期一致
- 主机可以访问虚拟机
- 虚拟机可以访问主机
- 虚拟机可以访问主机局域网内的其他机器
- 虚拟机可以访问互联网
- 主机局域网内的其他机器可以访问虚拟机
手动配置
在 /etc/NetworkManager/system-connections
下默认只有一个配置文件 ens160.nmconnection
, 其内容如下
[connection]
id=ens160
uuid=9b698abd-9a30-3055-98c2-8ace52598494
type=ethernet
autoconnect-priority=-999
interface-name=ens160
timestamp=1692431323[ethernet][ipv4]
method=auto[ipv6]
addr-gen-mode=eui64
method=auto[proxy]
在配置节 ipv4 下修改配置如下
method=manual
address1=192.168.1.129/24,192.168.1.1
dns=192.168.1.1
manual
代表手动配置网络地址- address1 则是虚拟机地址 和 网关地址, 这里不配网关地址的话, 无法访问百度
- dns 则是域名解析服务器, 用英文分号分隔, 这里不配置的话没什么影响
执行 nmcli c reload
和 nmcli c up ens160
重新载入网络配置, 可看到 IP 地址已经更改
测试
可见, 测试结果同样与预期完全相同, 即
- 主机可以访问虚拟机
- 虚拟机可以访问主机
- 虚拟机可以访问主机局域网内的其他机器
- 虚拟机可以访问互联网
- 主机局域网内的其他机器可以访问虚拟机
网络地址转发模式 (NAT)
使用 NAT 模式
- 可以不占用主机所在局域网的 IP 地址, 防止不够用(比如公司环境)
- 也可以隔离主机局域网变化对虚拟机网络的影响
- 假如当前是桥接模式的虚拟机, 虚拟机地址是手动指定的, 原本主机地址是 192.168.1.2, 现在换了个路由器, 主机地址变成了 192.168.0.2 了. 如果是少数几台虚拟机, 手动改下 IP 也还能接受, 如果量多的话, 那简直要烦死人
我们以手动配置 192.168.88.150/24 为例, /24 就是子网掩码 255.255.255.0
还原配置
刚刚我们将 ens160 的配置做了修改, 我们先将 ipv4 节的内容还原
[ipv4]
method=auto
虚拟网络配置
在 VMnet8 里可以设置具体的子网 IP 和子网掩码, 该网段是一个虚拟局域网, 和主机所在局域网的网段不一样即可, 同时最好避开常见的 192.168.0.0 / 192.168.1.0 / 192.168.31.0 等路由器默认子网, 默认的 192.168.88.0 就挺好的, 基本不会和主机局域网冲突, 这样当主机切换了局域网时, 不会影响到已配置过网络的虚拟机
NAT 设置 和 DHCP 设置 一般保持不变即可
所以汇总一下 VMnet8 的信息
子网地址: 192.168.88.0
子网掩码: 255.255.255.0
网关地址: 192.168.88.2
默认配置
首先查看虚拟网络编辑器中 VMnet8 的配置, 默认情况下是不需要动的, 除非主机局域网与该虚拟网络发生冲突
然后我们看虚拟机设置, 将网络连接修改为 NAT 模式, 然后重新启动虚拟机, 通过 ip a
查看虚拟机网络信息
注意: 此时系统的 ipv4 网络配置已经被还原为 method=auto
了
可以看到 ens160 的地址被分配了 192.168.88.129
测试
主机地址: 192.168.1.2
手机地址: 192.168.1.3
网关地址: 192.168.1.1
虚拟机地址: 192.168.88.129
互相访问试试看
可见, 结果与预期一致
- 主机可以访问虚拟机
- 虚拟机可以访问主机
- 虚拟机可以访问主机局域网内的其他机器
- 虚拟机可以访问互联网
- 主机局域网内的其他机器不可以访问虚拟机
手动配置
还是修改 /etc/NetworkManager/system-connections/ens160.nmconnection
中的 ipv4 节
method=manual
address1=192.168.88.150/24,192.168.88.2
dns=114.114.114.114;8.8.8.8
manual
代表手动配置网络地址- address1 则是虚拟机地址 和 虚拟网络网关地址, 这里必须配置虚拟网关地址, 否则虚拟机无法访问主机和主机局域网内的其他机器
- dns 则是域名解析服务器, 用英文分号分隔, 不配置的话无法访问互联网
执行 nmcli c reload
和 nmcli c up ens160
重新载入网络配置, 可看到 IP 地址已经更改
测试
可见, 测试结果同样与预期完全相同, 即
- 主机可以访问虚拟机
- 虚拟机可以访问主机
- 虚拟机可以访问主机局域网内的其他机器
- 虚拟机可以访问互联网
- 主机局域网内的其他机器不可以访问虚拟机
仅主机模式
和 NAT 模式类似, 可以自行配置与测试