草庐IT

(一看就会)让VM虚拟机之间联网并能相互ping通

懂.py的小陈 2023-04-21 原文

VM多台虚拟机之间的网络问题

我以两台虚拟机为例。如果要三台四台五台都是一样的道理,不过ip的第四段不能冲突

有三种:

  1. 我只想让虚拟机之间能ping通就行,不需要访问公网
  2. 我只想让虚拟机能联网,不需要虚拟机之间ping
  3. 我想两台虚拟机ping通,又要同时访问公网

1.我只想让虚拟机之间能ping通就行,不需要访问公网

1)选择网卡

VM安装之后我们会有两块虚拟机的网卡,一个是单机模式的网卡,一个是NAT模式的网卡

解释一下:

单机模式可以让虚拟机之间ping通,但是由于网卡的限制,是不能访问公网的

NAT模式就不一样了,如果设置的好,可以访问公网又可以虚拟机之间ping通

由于我们不需要访问公网,所以这次选择VMnet1这块网卡

2)为虚拟机设置网卡

第一步:打开VMware

第二步:打开所需要ping通的两台虚拟机

第三步:在一台虚拟机右键,点最下面的设置

然后选择主机模式(单机模式)

然后第二台同理,网络模式选择主机模式

3)查看主机模式下的网卡ip,并对虚拟机的网卡进行配置

因为主机模式是一个内网,不需要访问公网 ,所以可以完全按照我的步骤,ip地址相同都没问题(我输入1你就输入1)

鼠标移到这个位置右键

点击网络和Interne设置

点击VMnet1网卡的属性(右键以后的最后一个)

点击属性以后

按照我的输入ip地址子网掩码

知道了我们的网卡ip,那就需要对虚拟机的网卡进行配置了

小科普:

两台虚拟机要想能ping通

ip地址的前三段就必须相同:

例如:(前提条件:A和B两台必须在同一块网卡)

A:192.168.11.2

B:192.168.11.3

然后就是可以ping通了

但是我刚刚只是设置了网卡的ip地址还没对虚拟机的网卡进行配置,现在就对网卡进行配置

现在进行虚拟机网卡配置

由于我的系统是CentOS7,所以我就以Centos7的为例

vi /etc/sysconfig/network-scripts/ifcfg-ens33
# 有的人是ifcfg-ens32,网卡名称是系统自己生成的,到时候输出到ifcfg-en之后就按Tab键补全就行

可能有人会问:为什么这么黑?

那是因为我对Linux比较熟悉了,所以喜欢用这个全是黑的Linux,我大一刚接触Linux的时候也有这个问题(喜欢图形化界面),到了大二也就是现在,我现在更喜欢这种黑不溜秋的页面了,哈哈

现在网卡还没有配置好,所以我暂时不能通过SSH连接到虚拟机,等等我设置好网卡之后就可以SSH连接到虚拟机了

把文件保存了哈:Esc > :wq > 回车

重启网卡:

systemctl restart network

查看当前的虚拟机IP地址

ip add

这个时候就可以通过SSH连接了,然后我就换一个工具连接这个虚拟机了

输入登录账户和密码之后就是:

因为在虚拟机不好复制的虚拟机网卡信息:

所以我通过SSH把他复制出来

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="7eb9ae53-22e0-4d67-aac8-d8a69eed5855"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.11.2

第二台虚拟机的网卡配置

vi /etc/sysconfig/network-scripts/ifcfg-ens33
# 有的人是ifcfg-ens32,网卡名称是系统自己生成的,到时候输出到ifcfg-en之后就按Tab键补全就行

操作和上面的一样,就是IPADDR不一样

另外一个的网卡信息我帮你写好了哈,如下:

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="7eb9ae53-22e0-4d67-aac8-d8a69eed5855"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.11.3

IP地址冲突会导致另外一台不能上网

2.我只想让虚拟机能联网,不需要虚拟机之间ping

因为我要让虚拟机访问公网,所以必须换网卡,选择VMnet8这块网卡

1)配置VMnet8这块网卡

我前面说过,所以会简单点

小科普:

要想让虚拟机能够上网,在ip和子网掩码这两个必须走自动获取

  • 如果不自动获取,就是和主机(单机)模式没啥区别

可能你们会问

那ip地址没办法自己设置咋整?

答:那就拿自动获取的IP地址去修改相应的配置

我的VMnat8网卡的IP地址为192.168.137.1

那我虚拟机的网卡设置成192.168.137.3就行了(还没结束哈,还要多加一些信息)

第一个: GATEWAY=VMnet8自动获取的ip地址的前三段最后一段是2

第二个: DNS1=VMnet8自动获取的ip地址的前三段最后一段是2

怎么查看网关?
  1. 打开虚拟网络编辑器,选择NAT

选择NAT设置

查看网关就行,其他别动

最后如下:

怎么查看VMnet8自动获取的IP地址?

在windows打开cmd终端并输入:

ipconfig

配置虚拟机的网卡信息

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="7eb9ae53-22e0-4d67-aac8-d8a69eed5855"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.137.3
GATEWAY=192.168.137.2
DNS1=192.168.137.2

然后 Esc > :wq > 回车

重启网卡:

systemctl restart network

然后就断开了

如果出现了这个断开连接的问题不必惊慌哈

那是因为你的网卡ip变了,然后你的ssh的ip地址也变了

重新输入你新设置的ip地址就可以了

2)把虚拟机的网卡选择NAT

然后记得点击确定哈,没确定不生效的哈

我的ip地址为:192.168.137.2哈,你们大部分肯定和我不一样,因为是自动获取的IP地址

3)现在检查是否可以访问公网

重启网卡以后,就可以ping 百度了

ping www.baidu.com

3.两台虚拟机能ping通,并能访问公网

有了前面两个的知识,我直接说大致方案

要求:

访问公网(让VMnat8这块网卡自动获取IP地址)

两台虚拟机之间能够ping通(走同一块网卡,只有VMnet8那块网卡能访问公网,所以我们就根据VMnet8这块网卡的IP地址进行改动)

现在我已经让一台虚拟机能够访问公网了,现在我改动另外一台虚拟机就可以了

两台虚拟机的网卡:VMnet8

第一台虚拟机的网卡配置信息:

IPADDR=192.168.137.3
GATEWAY=192.168.137.2
DNS1=192.168.137.2

第二台虚拟机的网卡配置信息:

IPADDR=192.168.137.4
GATEWAY=192.168.137.2
DNS1=192.168.137.2

然后就大功告成了!

两台能联网

两台之间能够ping通

息:

IPADDR=192.168.137.3
GATEWAY=192.168.137.2
DNS1=192.168.137.2

第二台虚拟机的网卡配置信息:

IPADDR=192.168.137.4
GATEWAY=192.168.137.2
DNS1=192.168.137.2

然后就大功告成了!

两台能联网

[外链图片转存中…(img-xdISKZuN-1648733159100)]

两台之间能够ping通

[外链图片转存中…(img-McgHleqh-1648733159100)]

如果还是不会,可以再看看我前面写的

有关(一看就会)让VM虚拟机之间联网并能相互ping通的更多相关文章

  1. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  2. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  3. ruby-on-rails - `a ||= b` 和 `a = b if a.nil 之间的区别? - 2

    我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行

  4. ruby - Ping ruby 网站? - 2

    在Ruby中可以使用哪些替代方法来ping一个ip地址?标准库“ping”库的功能似乎非常有限。我对在这里滚动我自己的代码不感兴趣。有没有好的gem?我应该接受它并忍受它吗?(我在Linux上使用Ruby1.8.6编写代码) 最佳答案 net-ping值得一看。它允许TCPping(如标准ruby​​ping),但也允许UDP、HTTP和ICMPping。ICMPping需要root权限,但其他则不需要。 关于ruby-Pingruby网站?,我们在StackOverflow上找到一个类

  5. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  6. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  7. [工业相机] 分辨率、精度和公差之间的关系 - 2

    📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年

  8. ruby - 无法理解 `puts{}.class` 和 `puts({}.class)` 之间的区别 - 2

    由于匿名block和散列block看起来大致相同。我正在玩它。我做了一些严肃的观察,如下所示:{}.class#=>Hash好的,这很酷。空block被视为Hash。print{}.class#=>NilClassputs{}.class#=>NilClass为什么上面的代码和NilClass一样,下面的代码又显示了Hash?puts({}.class)#Hash#=>nilprint({}.class)#Hash=>nil谁能帮我理解上面发生了什么?我完全不同意@Lindydancer的观点你如何解释下面几行:print{}.class#NilClassprint[].class#A

  9. ruby - 在模块/类之间共享全局记录器 - 2

    在许多ruby​​类之间共享记录器实例的最佳(正确)方法是什么?现在我只是将记录器创建为全局$logger=Logger.new变量,但我觉得有更好的方法可以在不使用全局变量的情况下执行此操作。如果我有以下内容:moduleFooclassAclassBclassC...classZend在所有类之间共享记录器实例的最佳方式是什么?我是以某种方式在Foo模块中声明/创建记录器还是只是使用全局$logger没问题? 最佳答案 在模块中添加常量:moduleFooLogger=Logger.newclassAclassBclassC..

  10. ruby - 在两个 ActiveRecord 类之间合并/复制属性的好方法? - 2

    之前有人问过这个问题,我发现了以下clip关于如何一次设置一个类对象的所有属性,但由于批量分配保护,这在Rails中是不可能的。(例如,您不能Object.attributes={})有没有一种很好的方法可以将一个类的属性合并到另一个类中?object1.attributes=object2.attributes.inject({}){|h,(k,v)|h[k]=vifObjectModel.column_names.include?(k);h}谢谢。 最佳答案 利用assign_attributes使用:without_prote

随机推荐