草庐IT

VMware下的虚拟机网络设置(NAT、桥接、仅主机)

黑白键的约定 2023-05-01 原文

在入门使用VMware搭建Linux的环境时,对于网络的设置时不可避免的,因为linux搭建完成后,或多或少的回去访问外部资源或者被外部资源访问。这时候设置的虚拟机网络连接方式就显得尤为重要,所以在这里整理了一下虚拟机的三种连接方式,以供后续配置的时候可以参考。

一、NAT模式

这是最简单的一种网络连接模式,此模式下虚拟机和主机可以不在同一个网段上,但是虚拟机还是能够正常的访问网络。值得注意的是,在VMware中使用这种方式会默认创建一个新的网络适配器——VMware Virtual Ethernet Adapter for VMnet8,其对应的IP地址也会默认在虚拟机所在网段上。

有一点需要注意的是默认创建的VMware Virtual Ethernet Adapter for VMnet8,并不是虚拟机访问外部网络的关键,它只是作为虚拟机和主机之间通信的一个接口。访问外部网络的关键是这种方式会创建一个虚拟交换机VMnet8,虚拟交换机会将默认创建的网卡与虚拟NAT设备、虚拟DHCP服务器上。

这里值得提一点的是,在VMware和VirtualBox中的NAT是有所不同的,不同之处就是虚拟机和主机之间的访问。在VMware中虚拟机和主机之间是能够相互访问的,因为有了第一张图的VMware Virtual Ethernet Adapter for VMnet8,所以他们是可以访问的,如果禁用,则主机不能访问到虚拟机,但是虚拟机仍然能够正常访问网络,正如上面所说的,这个虚拟网卡并不是虚拟机访问外网的关键。而在VirtualBox中会发现虚拟机和宿主机之间是无法通信的,因为VirtualBox并没有提供类似VMware的vmnet8虚拟网卡,而只有一个NAT服务器。所以下方表格与网上的其他表格会有所不一致,下方的知识针对的VMware。

NAT

虚拟机==》主机

主机==》虚拟机

虚拟机==》其他主机

其他主机==》虚拟机

×

二、桥接模式

在这种模式下,VMare中的虚拟机与网络中真实的主机相差不大,两者之间的IP都是在同一个网段,因此相互之间是可以正常Ping的通,每一个虚拟机都有一个网络中独立的IP地址。之所以能够这样是因为此模式下会通过主机网卡与虚拟机网络搭建了一个桥梁(虚拟网桥),虚拟机才能直接访问网络。

虚拟网桥会自动转发主机网卡上所接受到的所有广播和组播信息,以及目标为虚拟机的单播。所以每一个虚拟机的虚拟网卡都会通过虚拟交换机VMnet0接受到由路由器发出的DHCP信息以及路由信息更新。

此外桥接模式是通过虚拟网桥将主机上的网卡与虚拟交换机Vmnet0连接在一起,而虚拟机上的虚拟网卡 (并不是VMware Network AdapterVMnet1和VMware Network Adapter VMnet8)都连接在虚拟交换机vmnet0上,所以桥接模式的虚拟机IP必须与主机在同一网段且子网掩码网关与DNS也要与主机网卡一致。

桥接

虚拟机==》主机

主机==》虚拟机

虚拟机==》其他主机

其他主机==》虚拟机

三、仅主机模式

仅主机模式其实就是NAT模式去除了虚拟NAT设备,然后使用VMware Network Adapter VMnet1虚拟网卡连接VMnet1虚拟交换机来与虚拟机通信的,此模式下将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯。

如果要想在仅主机模式下访问网络,只能将联网的主机网卡共享给VMware Network Adapter VMnet1。

仅主机

虚拟机==》主机

主机==》虚拟机

虚拟机==》其他主机

×

其他主机==》虚拟机

×

四、总结

对于三种方式可以用一下的例子做个最后的总结:

NAT模式:公司的员工连接公司的WIFI,然后通过公用的一个外网IP地址进行上网。

桥接模式:他跟主机在一个网段,有自己的独立ip,相当于单独一台主机,跟主机处于同一级别,相当于同一层楼两家公司的其中一家。

仅主机模式:这个就像公司的外网断掉,公司的员工通过局域网的方式,相互之间通信、资源访问。但是就是不能访问外网。

有关VMware下的虚拟机网络设置(NAT、桥接、仅主机)的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby-openid:执行发现时未设置@socket - 2

    我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

  3. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  4. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  5. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  6. ruby - 从 Ruby 中的主机名获取 IP 地址 - 2

    我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge

  7. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  8. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  9. ruby-on-rails - 有没有办法为 CarrierWave/Fog 设置上传进度指示器? - 2

    我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r

  10. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

随机推荐