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

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

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

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

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

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

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

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

首先,在VMWare编辑菜单打开虚拟网络编辑器,选中用于管理你虚拟机网络的一组虚拟网络(比如是NAT模式,名字是VMnet8这种)。如果你不确定你的虚拟机是不是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的分配地址:
在这里插入图片描述

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

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

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

这里需要编辑几个点:

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

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Windows下,可以使用bat批处理脚本来批量检测远程端口。Telnet是一种远程终端连接服务,可以通过它来连接到远程主机的特定端口。以下是一个使用Telnet命令在批处理脚本中批量检测远程端口的例子: @echo off setlocal set ip_list=file_path\ip_list.txt set port=80 for /f %%i in (%ip_list%) do ( telnet %%i %port% | find "Connected" > nul if errorlevel 1 ( echo %%i:%port% is closed ) else ( echo %%i:%port% is open ) ) pause 在以上示例中,首先我们定义了要检测的IP列表文件的路径,即ip_list.txt文件,然后我们设定了要检测的端口号,此处设定为80端口。接着使用for循环读取ip_list.txt文件中的每个IP地址。 在每次循环中,我们使用telnet命令连接到远程主机的指定端口。如果端口成功连接,则表示端口是开放的,telnet命令的输出会包含"Connected"关键字。我们使用find命令查找telnet命令的输出中是否包含"Connected"关键字。 如果find命令找到了"Connected"关键字,则说明端口是开放的,我们将显示"IP地址:端口号 is open"的消息。否则,即端口连接,我们将显示"IP地址:端口号 is closed"的消息。 最后,我们使用pause命令来暂停脚本的运行,以便我们可以查看检测结果。 需要注意的是,Telnet命令在默认情况下可能未启用,需要手动在Windows设置中启用Telnet客户端功能。此外,Telnet命令在Windows 10及更高版本中可能已被淘汰,可以考虑使用其他工具如ncat或PowerShell来代替Telnet命令进行远程端口检测。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值