虚拟机三种网络模式

2023-11-20

基本知识

ipconfig查看信息。
网关(Gateway)又称网间连接器、协议转换器。是你连接到的上层节点的地址。
ip地址是你本身的地址(如果是路由器分配的 那么是路由器所构建的内网地址)
网卡:需要网卡才能连接其他设备 是设备端的
交换机:类似集线器
路由:类似路由器

Virtual Ethernet Adapter
Network Adapter VMnet1虚拟网卡连接
VMnet1虚拟交换机

vmnet1是vmware的虚拟网卡,默认用于host-only模式
vmnet8是vmware的虚拟网卡,默认用于nat模式
这2个网卡,都跟物理主机的本地连接没有关系。

网络适配器VMware Virtual Ethernet Adapter for vmnet1是vmware的虚拟网卡

专用网络是两个企业间的专线连接,这种连接是两个企业的内部网之间的物理连接。专线是两点之间永久的专用电话线连接。和一般的拨号连接不同,专线是一直连通的。这种连接的最大优点就是安全。除了这两个合法连入专用网络的企业,其他任何人和企业都不能进入该网络。所以,专用网络保证了信息流的安全性和完整性。
域是微软的活动目录的概念,只要你的机器加入了活动目录(和工作组不同),且在网络中检测到你所加入的活动目录,那么就会显示出域网络

桥接模式Bridged

在这里插入图片描述
物理机上虚拟网卡VM0相当于交换机(集线器),一头连到了家用路由器,另外N头接所有需要上网的电脑。虚拟机 和 物理机同等地位。
在这里插入图片描述

所以虚拟机的网络配置和物理机保持一模一样。
如果物理机是固定IP,这里虚拟机也要固定IP,把IP末尾改一下其他DNS不变。
这里物理机自动分配,于是虚拟机也自动分配。
在这里插入图片描述

NAT模式

NAT模式借助虚拟NAT设备和虚拟DHCP服务器,使得虚拟机可以联网。在NAT模式中,主机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起连接在虚拟交换机VMnet8上,这样就实现了虚拟机联网。
在这里插入图片描述
在这里插入图片描述

类似路由器,物理机虚拟出了一个路由器,然后虚拟机连接到这个虚拟路由器。

虚拟机在物理机的一个子网中,虚拟机的地址是内网地址,虚拟机所有上网都是借助物理机NAT功能把内网IP转换成外网IP,因此对外面网络上花花绿绿的机器来说,看到的永远只是外网IP。
类似于我现在一个笔记本、一个手机都是通过家用路由器上网,一个192.168.1.2,一个192.168.1.3,但是对百度来说,它所看到的源IP绝对不是这个,而是经过路由器转换后的电信提供的公网IP。百度无法从这一个IP判断是我的笔记本还是手机在上网。

在这里插入图片描述
在这里插入图片描述
内网把DNS发到192.168.204.2,就会有人来做这个DNS查询,这实际上是因为上述虚拟网络编辑器中配置了网关192.168.204.2,VMware就来我们完成。

剩下只需要保证虚拟机连上VM8,且IP在这个网段内,就好啦~

虚拟出一个路由器,然后其他设备连接到这个路由器的dns服务器地址

在这里插入图片描述
在这里插入图片描述

Host-Only(仅主机模式)

什么叫做仅主机?就是虚拟机只能跟物理机联系,不能直接上互联网。
想象就是两台家用电脑,一根网线把它们连起来。这时候如果双方IP掩码都在一个段,就可以相互通信;如果不在就连不了,因为对方并没有DHCP的能力。
在这里插入图片描述
Host-Only模式其实就是NAT模式去除了虚拟NAT设备,然后使用VMware Network Adapter VMnet1虚拟网卡连接VMnet1虚拟交换机来与虚拟机通信的。之所以称之为仅主机模式,就是虚拟机只能和宿主机进行通信,不能连接互联网,也不能在局域网进行访问和被访问。他和NAT模式一样,独立使用一块虚拟机网卡,一般名称为VMware Virtual Ethernet Adapter for VMnet1在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三种网络模式在的生活中类比

以下箭头均代表访问方式为:主动请求,被动接收

红色代表:局域网内的访问

绿色代表:可以访问外网,比如互联网

一、仅主机模式

在这里插入图片描述

二、NAT模式(地址转换模式)

在这里插入图片描述

此种情况相当于,虚拟机是个小学生,还没有自己的支付宝账号和银行卡,他可以外界交互,去购物,但是都是以父母的身份去购物,拿着父母的支付宝或银行卡。此时父母(物理主机)可以访问外网,虚拟也可以,不过是透过父母去间接访问外网。

三、桥接模式

在这里插入图片描述

此种情况相当于,虚拟机已经长大成人,有也自己的独立身份,有自己的支付宝账号和银行卡,他可以直接与外界交互,去购物,无需再透过父母的身份去购物。此时父母(物理主机)可以访问外网,虚拟也可以独立,直接的访问外网。

隧道

Tunnel 中文译作隧道。平时开发中,我们或多或少都会碰到这个词。

我们先借助现实中的一个例子来看看隧道的作用。

西成高铁北起西安,南至成都,线路全长643公里,设计时速250公里。自古以来,进入天府之国就是一件异常艰难之事,群峰环伺的四川无论从哪个方向进入都步履维艰。我们知道西安和成都之间隔有秦岭天险,它就挡在那里,高铁总不能像飞机一样从天上飞越过去。又要快,又不能飞,唯一的方法就是在秦岭群山之间挖隧道,让高铁从隧道里面穿过秦岭。

来到我们的网络世界。你想访问Remote Server,但可惜你和它之间隔着防火墙。这个防火墙就如同秦岭横亘在那里,躲是躲不过去的,那怎么办呢?

这个时候就得上Tunnel了。Tunnel的概念不难理解,它有两个鲜明的特点值得列出来:

它需要借助 middle man 来中继数据。这很好理解。通信双方但凡可以直连,就不需要借助别人了。
这个 middle man 既可以是用户态应用,如我们下文要聊的 HTTPS Proxy,也可以位于内核态模块,如我们之前聊过的基于 flannel.1 实现的 VXLAN。
middle man 所中继的数据在大部分应用场景下是被加密过的,这就使得 middle man 退化为一个管道的角色,而不再具备数据嗅探的功能。数据不经加密通过隧道的一个例子是 Flannel VXLAN 模式。
我们来看看到目前为止,我们经常使用的隧道有哪些:

HTTPS proxy 所涉及到的 tunnel 。它是通过 HTTPS proxy 不断地 relay 客户端和服务器的数据来实现的。
SSH tunnel 。它是利用了防火墙开放 22 端口来实现的。当然,如果防火墙把 22 端口关闭了,那这招就失效了。
VPN tunnel 。
基于 flannel VXLAN 模式所实现的 K8s Overlay 网络模型。
我们来一个一个瞧瞧。

HTTPS Proxy Tunnel
说到HTTPS Proxy,不得不先提起 HTTP Proxy。如图 1所示。HTTP Proxy 如同一个中间人:
在这里插入图片描述

客户端浏览器向它发起 TCP 连接,并把实际需要访问的 web service 放在 GET 和 HOST HTTP header 中。
它收到请求后,解析 HTTP header,并向真正的 web service 发起请求。
稍后它再将 web service 返回的内容返回至客户端。
在上述这个过程中,HTTP Proxy 同时维持了2个 TCP 连接。因为它非常清楚地知道客户端和服务端之间的对话内容,所以带来了安全隐患。另外有些无良的 Proxy 还会自己往服务端所返回的 HTML 页面里面添加烦人的广告。
时代在变,技术在变,需求也在变。如今放眼望去,大部分网站都在使用 HTTPS 。这个时候再使用 HTTP Proxy 的话,就会出现一个问题:只有 Proxy 能看到 web service 的证书,但客户端却只能接收到 Proxy 的证书。很明显,Proxy 证书里面的名字和客户端所想要访问的地址完全不同,这个时候浏览器会毫不留情地给出一个警告,TLS handshake 也没法通过。

为了解决这个问题,HTTPS Proxy 应运而生。图 2 展示了它的工作流程。

① 客户端浏览器首先向 HTTPS Proxy 发起 TCP 连接,但在 HTTP 请求里,用的是 CONNECT 方法。

② HTTPS Proxy 收到这个连接后,利用 CONNECT 请求里面的数据,向 google.com 发起 TCP 连接。

③ 从此以后 HTTPS Proxy 只负责 relay 客户端和 google.com 之间的数据,不会做任何解析,也没有办法解析,因为它根本没有参与 TLS handshake 这个过程。它所 relay 的数据包括:TLS handshake 数据包(如证书、加密算法、加密秘钥等)、加密过之后的HTTP payload。

在步骤 ③ 这里,HTTPS Proxy 通过对客户端及服务端会话数据的透明转发,实现了 tunnel 的效果。

需要强调的是上述过程中,浏览器从始至终都没有和 google.com 发起直接的TCP连接,通信双方所有的数据都是经过 HTTPS Proxy中转的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

SSH Tunnel
经过研究,你发现因为防火墙的原因,虽然客户端和服务器之间无法直接通信,但有一个好消息:防火墙对端口 22 是开放的。

如果把你的请求作为 payload 放到访问 22 端口的网络包里面,不就可以通过这防火墙了吗?

如图5所示。这就如同在防火墙里面挖了一条隧道出来,看到图中那个正穿过 SSH tunnel 的红色长条吗?像不像正在穿过秦岭隧道的高铁?

当然这个网络包的接收端是一个侦听在 22 端口的SSH server。它收到这个网络包后做什么事情不重要,重要的是你的请求已经成功地穿过了防火墙,且被投递出去了。不单如此,借助SSH自带的Secure加持,数据还是加密投递的。用一送一的感觉有没有?

好吧,知道 SSH server 收到数据后干了什么也很重要。图 5只是一个示意图,二哥总想把它背后的细节给大家扒拉一遍。在本例中,local client 真正想访问的是 192.168.4.23:32020 这个服务。当然它无法直接访问。

SSH client 侦听在 localhost:9300。
当客户端访问 localhost:9300 时,实际上访问请求会被 SSH Client 封装并经过 SSH tunnel 送至 SSH server端。SSH server 侦听在 192.168.5.24:22 。
SSH server端再向 192.168.4.23:32020 发起请求。

图 6:通过SSH tunnel来将请求穿越防火墙细节图
在这里插入图片描述

二哥在文章《​​如何对Pod容器进行remote debug​​》里详细描述了 SSH Tunnel 的使用场景。

VPN
二哥在文章《tun设备的妙用-VPN篇》及《tun设备的妙用-OpenVPN篇全流程补充》详细介绍了VPN的工作原理以及客户端通过VPN向企业内部服务发起请求时所涉及到的具体过程。附图如下,细节跳过。
在这里插入图片描述
在这里插入图片描述

实战

链接yun 隧道

在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

虚拟机三种网络模式 的相关文章

  • 从 Python 调用 PARI/GP

    我想打电话PARI GP http pari math u bordeaux fr dochtml gpman html仅从Python计算函数nextprime n 对于不同的n是我定义的 不幸的是我无法得到帕里蟒蛇 http code
  • 域套接字“sendto”遇到“errno 111,连接被拒绝”

    我正在使用域套接字从另一个进程获取值 就像 A 从 B 获取值一样 它可以运行几个月 但最近 A 向 B 发送消息时偶尔会失败 出现 errno 111 连接被拒绝 我检查了B域套接字绑定文件 它是存在的 我也在另一台机器上做了一些测试 效
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

    假设我有一个字符串5a 这是 ASCII 字母的十六进制表示Z 我需要找到一个 Linux shell 命令 它将接受一个十六进制字符串并输出该十六进制字符串代表的 ASCII 字符 所以如果我这样做 echo 5a command im
  • 如何在shell中输出返回码?

    我正在尝试通过调用自定义 shell 脚本sh bin sh c myscript sh gt log txt 2 gt 1 echo 该命令的输出是创建的后台进程的 PID 我想指导 bin sh保存返回码myscript sh到某个文件
  • 如何授予 apache 使用 NTFS 分区上的目录的权限?

    我在一台带有 20GB 硬盘的旧机器上运行 Linux Lubutu 12 10 我有一个 1 TB 外部硬盘 上面有一个 NTFS 分区 在该分区上 有一个 www 目录 用于保存我的网页内容 它在启动时自动安装为 media t515
  • 多处理:仅使用物理核心?

    我有一个函数foo它消耗大量内存 我想并行运行多个实例 假设我有一个有 4 个物理核心的 CPU 每个核心有两个逻辑核心 我的系统有足够的内存来容纳 4 个实例foo并行但不是 8 个 此外 由于这 8 个核心中的 4 个是逻辑核心 我也不
  • 查找哪个程序运行另一个程序

    我有一个 NAS 运行在 Redhat Linux 的有限版本上 我按照指示破解了它 这样我就可以访问 shell 这很有帮助 我还做了一些修改 其他人也做过修改 除了一个问题之外 它们似乎都工作得很好 不知何故 每隔 22 天 系统就会关
  • 如何使用 GOPATH 的 Samba 服务器位置?

    我正在尝试将 GOPATH 设置为共享网络文件夹 当我进入 export GOPATH smb path to shared folder I get go GOPATH entry is relative must be absolute
  • Gtk-ERROR **:检测到 GTK+ 2.x 符号

    我正在使用 gcc 编译我的 c 应用程序 并使用以下标志 gcc evis c pkg config cflags libs gtk 2 0 libs clutter gtk 1 0 libs gthread 2 0 Wall o evi
  • 删除 Git 存储库,但保留所有文件

    在我使用 Linux 的过程中的某个时刻 我决定将我的主目录中的所有内容都放入源代码管理中是个好主意 我不是在问这是否是一个好主意 我是在问如何撤销它 删除存储库的原因是我最近安装了 Oh My Zsh 而且我非常喜欢它 问题是我的主目录有
  • “make install”将库安装在 /usr/lib 而不是 /usr/lib64

    我正在尝试在 64 位 CentOS 7 2 上构建并安装一个库 为了这个目的我正在跑步 cmake DCMAKE BUILD TYPE Release DCMAKE INSTALL PREFIX usr DCMAKE C COMPILER
  • MySQL 中的创建/写入权限

    我的设备遇到一些权限问题SELECT INTO OUTFILE陈述 当我登录数据库并执行简单的导出命令时 例如 mysql gt select from XYZ into outfile home mropa Photos Desktop
  • 需要一些建议来开始在 ARM(使用 Linux)平台上编程

    我 也许 很快就会在托管 Linux 发行版的 ARM 平台上工作 我不知道哪个发行版 我知道该项目涉及视频流 但我无法告诉你更多信息 其实我只收到通知 还没见到任何人 我从来没有在这样的平台上工作过 所以我的想法是在项目开始之前进行测试
  • 如何减去两个 gettimeofday 实例?

    我想减去两个 gettimeofday 实例 并以毫秒为单位给出答案 这个想法是 static struct timeval tv gettimeofday tv NULL static struct timeval tv2 gettime
  • Linux - 从第二个选项卡获取文本

    假设我们有这样的文件 一些文本11 一些文本12 一些文本13 一些文本21 一些文本22 一些文本23 文本由制表符分隔 我们知道第 1 列中的一些文本 但希望从第 2 列中获取文本 我知道我可以通过以下方式获取线路 grep somet
  • waitpid() 的作用是什么?

    有什么用waitpid 它通常用于等待特定进程完成 或者如果您使用特殊标志则更改状态 基于其进程 ID 也称为pid 它还可用于等待一组子进程中的任何一个 无论是来自特定进程组的子进程还是当前进程的任何子进程 See here http l
  • Linux:如何设置进程的时区?

    我需要设置在 Linux 机器上启动的各个进程的时区 我尝试设置TZ变量 在本地上下文中 但它不起作用 有没有一种方法可以使用与系统日期不同的系统日期从命令行运行应用程序 这可能听起来很愚蠢 但我需要一种sandbox系统日期将被更改的地方
  • 在两次之间每分钟执行一次 Cronjob

    我需要在 crontab 中每分钟运行一个 bash 脚本8 45am and 9 50am每天的 Code 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 8 home pull sh gt ho
  • 子目录中的头文件(例如 gtk/gtk.h 与 gtk-2.0/gtk/gtk.h)

    我正在尝试使用 GTK 构建一个 hello world 其中包括以下行 include

随机推荐

  • pytest的介绍与使用

    pytest介绍 pytest整合了unittest 包含了unittest中的方法 并且比其更轻便快捷 而且结合Allure报告能够清晰的生成测试报告 1 安装 pip install pytest 2 测试文件 test py test
  • C# 选择ListView 报错误:InvalidArgument=“0”的值对于“index”无效。

    加判断 if this ListView SelectedItems Count gt 0 问题解决
  • flutter 安卓打包出现:Transform‘s input file does not exist:

    我的版本 Android studio 4 0 targetSdkVersion 30 出现了这个问题 解决方案 在你的build gradle文件里面添加一句话就可以了 android studio 4 0 以上打包会出现这个问题 lin
  • 工业安全生产信息化平台的基本架构和关键功能分享

    工业安全生产信息化平台是指利用信息技术手段 将工业安全生产管理与数据采集 传输 处理相结合 实现对工业安全生产全过程的数字化 信息化 智能化管理的平台 它通过集成多种信息系统和设备 实现对重大危险源监控预警 安全风险分级管控 安全生产一张图
  • SpringBoot统一异常拦截处理

    前言 大家你好 这是我的第一篇博客 我会把我所学所悟的知识以最简单的语言描述清楚 让大家通俗易懂 正文 下面我要对springboot 1 5 8 RELEASE 中异常拦截处理进行讲解 项目中我们是一定要碰到的情况就是无论在控制层 业务层
  • 安卓平台下ARM Mali OpenCL编程-GPU信息检测

    对于ARM Mali GPU 目前是支持OpenCL1 1 所以我们可以利用OpenCL来加速我们的计算 一直以来 对于Mali GPU的OpenCL编程 一直没有环境来测试 好不容易弄到一个华为Mate7 却因为华为没有提供OpenCL
  • C#__分析使用Winform开发坦克大战

    窗口 using System using System Collections Generic using System ComponentModel using System Data using System Drawing usin
  • python梯度提升回归树_梯度提升回归树(GBDT)

    梯度提升回归树 GBDT 发布时间 2018 08 30 13 22 浏览次数 1024 标签 GBDT 一 从Boosting思想开始 1 梯度提升回归树是一种从它的错误中进行学习的技术 它本质上就是集思广益 集成一堆较差的学习算法进行学
  • 记录一下实验室的GPU信息

    通过如下查询指令 cd usr local cuda samples 1 Utilities deviceQuery sudo make deviceQuery 最终得到如下信息 Detected 1 CUDA Capable device
  • C# Socket连接请求超时处理

    在Socket的超时时间默认20多秒 而实际连上不需1秒时间 20多秒很多时候用户是不能接受的 而在等待返回结果的这段时间里程序会处于停止响应状态 废话不多说了 先上代码 private delegate string ConnectSoc
  • shell入门学习-位置变量

    1 位置变量定义 在执行脚本或命令时 传递给脚本或命令的参数 2 位置变量demo效果如下图 3 1 sh脚本如下 4 注意 如果脚本后面不输入任何参数 如下图所示 如果脚本后面只添加1个数据 如下图所示 如果脚本后面的参数超过脚本定义的位
  • 解决Review Manager(RM)很卡的方法(方法来源网络)

    1 断网 禁用网络连接 拔网线等均行 看你喜欢 2 利用Windows Win10 自带防火墙程序禁止RM联网 控制面板 网络和internet 系统和安全 windows defender防火墙 高级设置 出站规则 新建规则 下一步 此程
  • jquery的ajax获取后台数据

    前言 这里获取了小米商城的一个后台地址 效果图 源码 div p 后台拿到的总数 span style color red font size 18px span p hr ul ul div
  • 基础知识十一、Python解析网络报文之TCP首部报文解析

    文章目录 一 TCP首部解析器的实现 二 测试逻辑 上一节解析了 IP首部报文后 本节继续解析TCP报文首部 TCP协议处于OSI七层模型的传输层 传输层的作用就是负责管理端到端的通信连接问题 连续ARQ automatic repeat
  • 初始泛型类

    泛型的顶级理解 一 包装类 1 基本数据类型和对应的包装类 2 装箱和拆箱 3 自动装箱和拆箱 二 泛型 1 语法 2 泛型类的使用 3 示例 4 擦除机制 5 泛型上界 6 示例和复杂示例 7 泛型方法 一 包装类 在Java中 由于基本
  • JAVA 【爬虫】 Selenium 无头浏览,禁止加载图片,启动参数,失效,无效

    JAVA Selenium 无头浏览 禁止加载图片 启动参数 失效 无效 可能有如下几个原因 代码问题 命令参数写错 无头浏览 headless 禁止加载图片 blink settings imagesEnabled false Chrom
  • DS1302芯片介绍

    低功耗时钟芯片DS1302可以对年 月 日 时 分 秒进行计时 且具有闰年补偿等多种功能 DS1302的性能特性 实时时钟 可对秒 分 时 日 周 月以及带闰年补偿的年进行计数 用于高速数据暂存的31 8位RAM 最少引脚的串行I O 2
  • MySQL安装与使用(Windows)

    Windows平台提供了两种安装MySQL的方式 1 图形化安装 msi安装文件 链接 link 2 免安装 zip压缩文件 链接 link 安装MySQL 一 图形化安装 1 双击下载的 MySQL 安装文件 进入 MySQL 安装界面
  • Socket编程中的强制关闭与优雅关闭及相关socket选项

    以下描述主要是针对windows平台下的TCP socket而言 首先需要区分一下关闭socket和关闭TCP连接的区别 关闭TCP连接是指TCP协议层的东西 就是两个TCP端之间交换了一些协议包 FIN RST等 具体的交换过程可以看TC
  • 虚拟机三种网络模式

    基本知识 ipconfig查看信息 网关 Gateway 又称网间连接器 协议转换器 是你连接到的上层节点的地址 ip地址是你本身的地址 如果是路由器分配的 那么是路由器所构建的内网地址 网卡 需要网卡才能连接其他设备 是设备端的 交换机