admin 管理员组

文章数量: 1184232

一开始服务部署到了虚拟机,且虚拟机是nat模式,此时服务需要和同一个局域网的其他主机通信,就需要将nat模式转换成桥接模式,可以理解为nat模式的虚拟机属于主机的附属设备,桥接模式的虚拟机属于局域网中独立的网络节点。

NAT模式

虚拟机​​通过共享宿主机的IP​​访问外网,由宿主机通过端口转发进行​​IP伪装​,就类似于​家用的路由器原理。

原理:宿主机在启动时会​自动构建一个虚拟局域网​​(例如 10.0.2.0/24 网段),该网段与现实物理网络(例如路由器网段 192.168.0.1/24)​​完全隔离​​,彼此不互通,宿主机的虚拟DHCP服务​​为虚拟机分配该虚拟网段的内网 IP​​(如 10.0.2.15),用于虚拟网络内部通信,当虚拟机向其他主机发送数据包时,会被宿主机拦截并改写,宿主机再用自己的​​真实IP替换​​虚拟机的源地址。

桥接模式

虚拟机完全接入物理网络​​,成为与宿主机平等的独立设备,可直接与同一个局域网的其他主机进行通信。

nat模式与桥接模式的区别

NAT模式转桥接模式

虚拟机配置

首先虚拟机设置为桥接模式

虚拟机->编辑->虚拟网络编辑器,连到宿主机正在使用的网卡上,连到其他网卡就上不了网了

查看宿主机正在使用的网卡,还要勾选开启主机的桥接协议。

将虚拟机的网络适配器改为桥接模式

网络配置

ip addr

查看网卡

编辑 netplan 配置文件,每台主机的配置文件可能不一样,可以通过ls /etc/netplan/查看,我的是01-network-manager-all.yaml

sudo vim /etc/netplan/01-network-manager-all.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ens160:
      dhcp4: no
      addresses: [192.168.0.101/24]  # 与宿主机同网段,子网掩码255.255.225.0对应/24
      routes:
        - to: 0.0.0.0/0
          via: 192.168.0.1  # 宿主机网关
      nameservers:
        addresses: [改为自己内网DNS的ip地址, 8.8.8.8]  # 内网dns的ip地址

以上代码的子网掩码和网关必须和宿主机一样,通过ifconfig查看宿主机的子网掩码和网关

要变的是以下两部分

虚拟机可以分配的ip地址范围192.168.0.1 至 192.168.0.254,除了路由器地址192.168.0.1以及宿主机正在用的地址192.168.0.112。

内网的dns可以通过ifconfig查看,但为了安全一般都用dns的域名表示,可以通过resolv.conf查看具体的内网DNS的ip地址

cat /etc/resolv.conf

应用配置

sudo netplan apply

重启网络服务

sudo systemctl restart networking

检查 IP 地址是否成功

验证网络连通性

我实测了一下,虚拟机的服务在nat模式下也是可以被同一局域网的其他主机访问的,需要配置宿主机的端口转发,允许所有接口访问

app.run(host="0.0.0.0", port=5000, debug=True) 

本文标签: 虚拟机 桥接 模式 NAT