【DIY小记】VMWare设置主机连接到的Ubuntu虚拟机的网络端口

很多同学在自己机器上玩开发的时候,都会用到VMWareVirtualBox之类的虚拟OS容器装一个带GUILinux OS,然后在里面另外安装开发工具做开发。这里面遇到的最经典问题,就是比如我在虚拟机里面起了个MySQLRedis之类的服务,如果DB的客户端/GUI工具是放在主机里面,不在虚拟机里,那怎么连进去?这个问题,本文提供一种解决方案。

本文采取的虚拟机环境如下:

  • 主机:Win11
  • 虚拟机容器:VMWare Workstation 16
  • 虚拟机:Ubuntu 22.04

首先需要了解到,VMWare场景下,我们通常用NAT模式新开一个网段来管理虚拟机的网络配置,而虚拟机内部,假设使用IPV4,会默认采取DHCP机制,自动设置一个IP跟相应的网络配置。相关资料可以看这几篇文档:

  • 网络中的NAT模式
  • DHCP百度百科

而为了让我们主机能连到虚拟机内部,实际上是满足下面两个条件之一即可:

  • 主机知道虚拟机的IP,能够直连虚拟机IP
  • 主机端口和某个IP的虚拟机端口存在转发映射关系

在本文的场景下,解决方案是第二种。具体配置如下:

首先,在VMWare编辑菜单打开虚拟网络编辑器,选中用于管理你虚拟机网络的一组虚拟网络(比如是NAT模式,名字是VMnet8这种)。如果你不确定你的虚拟机是不是NAT模式,可以在虚拟机自己的设置里查看硬件 -> 网络适配器项目,看是不是NAT模式

选中NAT模式虚拟网络配置之后,点击NAT设置按钮,即可进入到端口转发映射设置。

NAT端口设置

在其中,我们可以看到NAT网络的子网IP子网掩码网关IP,这些信息都会在后续的虚拟机内部设置里用上,而再下面的端口转发部分,就是需要我们手动配置的内容。其中包括几项:

  • 虚拟机IP地址:虚拟机的IP+端口
  • 类型:TCP/UDP,标识什么类型的数据包会被转发
  • 主机端口:选定一个主机端口,这样发到主机端口的指定类型的数据包会被转发到对应虚拟机IP地址

比如虚拟机里面MySQL开在3306端口,那么虚拟机IP地址一项就填虚拟机IP:3306,类型填TCP,主机端口填一个自己喜欢的即可。

那么这里就遗留另外一个问题:虚拟机IP怎么填?这里的话,以Ubuntu为例,由于默认是用DHCP机制分配IP,因此IP可能不是固定的。所以我们要做的是,在虚拟机中去设置固定一个IP,然后把这个IP回填到虚拟机IP地址一项当中。

在此之前,首先回到VMWare虚拟网络编辑器当中,选中刚才NAT的一组虚拟网络,点击DHCP设置按钮,我们可以看到网络的配置跟DHCP的分配地址:

DHCP设置

这里我们只需要记住的信息是起始IP地址结束IP地址。我们后面设置虚拟机固定的IP地址时,需要在这个范围之内。

然后进入虚拟机,以笔者用的Ubuntu 22.04为例,右上角开关按钮点击下拉Settings一栏,选择Network页签,然后选中当前连接到的网络点设置图标进入设置界面。

Ubuntu网络设置面板

由于先前设置的网络IP都是IPV4的,因此在网络选项当中,选中IPV4页签,即可开始编辑。编辑的内容如下所示:

Ubuntu的IPV4设置

这里需要编辑几个点:

  • IPV4 Method:选择Manual,表示手动配置
  • Addresses:地址,这里新建一行
    • Address:网段分配的IP地址,也就是我们所要设置的虚拟机固定IP,参考上面DHCP设置里的网段范围自选一个
    • Netmask:子网掩码,在上面NAT设置当中有相关信息
    • Gateway:网关IP,在上面NAT设置当中有相关信息
  • DNS:DNS的IP,这个场景填写跟Gateway一样的即可

弄好之后Apply,然后重启虚拟机,就可以试试看行不行了。注意,主机一边,需要发请求到先前端口转发设置里的主机端口,才能够生效!

版权声明
本文为博客HiKariのTechLab原创文章,转载请标明出处,谢谢~~~