笔者经常需要做网络实验,GNS3就是笔者最喜欢用的模拟器,为了便于实验,需要能从macos上直接ssh登陆模拟出来的vm,并且vm需要上公网。经过研究,已解决此问题,并以此分享出来

tag: macos, vmware, gns3, vm上公网

小慢哥的原创文章,欢迎转载


环境说明

本文基于以下环境:

▷ 宿主:macOS Mojave

▷ GNS3版本:2.1.14

▷ GNS3内部的VM运行在:GNS3 VM里

▷ GNS3 VM运行在:VMware Fusion 专业版 11.0.1

▷ centos7.3是运行在GNS3 VM里的Qemu虚拟机

可以理解为在macOS上运行了VMware,在VMware里运行了GNS3 VM,在GNS3 VM里运行了Qemu虚拟机。

对,就是"俄罗斯套娃"。

想让GNS3内的VM上Internet公网,有2种方法,接下来分别详细讲解

方法1(内置)

GNS3内置一个nat cloud,只要将vm连上这个nat cloud就可以上公网(上图中的Nat1就是nat cloud)

实现原理:nat cloud会对数据包进行SNAT,将源IP转换成macOS上出公网对应的本机ip。比如macOS是用wifi上网,wifi dhcp分配给macOS的ip是192.168.1.10,那么nat cloud就会将自己的ip出公网数据包的源IP转换为192.168.1.10

▪ 优点:无需任何额外配置,GNS3内置实现

▪ 缺点:无法从macOS上直接ssh连接到vm(即图上的centos7.3-1,本文接下去的部分若无特殊说明,均用vm表示),只能通过vnc连接

方法2(推荐)

采用vmnet + GNS3 VM加网卡 + 自定义cloud + pfctl + 开启ip_forward

▪ 优点:vm不仅可以上网,还可以从mac上连接到vm里做管理

▪ 缺点:配置相对复杂,需要对macos、vmware、gns3、网络原理有一定了解

1️⃣ vmware偏好设置里新增一张网卡,这里为vmnet2,然后按下图所示进行配置

▷ “允许该网络上的虚拟机连接到外部网络(使用NAT)”不要勾选,因为测试发现bug(比如虚拟机里访问Internet公网,响应时有时无,延时也很严重,怀疑是GNS3 VM的bug)

▷ “将Mac主机连接到该网络”要勾选,这样在macos上才能出现vmnet2网卡

▷ 子网IP是自动生成的,这里是172.16.71.0/24,对应macos上vmnet2的ip是172.16.71.1/24

2️⃣ GNS3 VM加网卡

在vmware里打开GNS3 VM的配置,添加一张网卡,如下图红框里的网络适配器3就是笔者添加的网卡

3️⃣ 自定义cloud

如下图,要选择“Run the cloud node on the GNS3 VM”

名字任意,这里叫做mgr-cloud

注意,只需要将eth2(即上一步新增的网络适配器3)Add进来

4️⃣ 在macos上通过pfctl配置nat,以及允许vmnet2流量进出

a. sudo vim /etc/pf.anchors/vmware-gns3,内容如下

图上的en7是笔者mac上的有线网卡,en0是我mac上的wifi网卡(因为在公司是用有线网卡,在家里是用wifi上网,所以按上面这样配置2条,就无需担心网络切换会导致nat失败)

b. sudo vim /etc/pf.conf,内容如下(红框内容是需要增加的)

c. 校验配置文件并生效:

# 校验
sudo pfctl -vnf /etc/pf.anchors/vmware-gns3
sudo pfctl -vnf /etc/pf.conf # 生效
sudo pfctl -ef /etc/pf.conf

pfctl会在mac开机时自动执行,无需每次都手工执行

5️⃣ 开启ip_forward

sudo sysctl -w net.inet.ip.forwarding=1

注意:该命令在mac重启后就会失效,因此在使用GNS3时候需要手工执行一次

测试

方法1不符合需求,就不再赘述

方法2的测试:此时,vm里应该已经通过dhcp获得ip地址,并且可以直接从mac上ssh登陆vm。然后在vm里只需要手工增加一条网关(网关指向mac上vmnet2的ip,笔者环境对应的是172.16.71.1),就可以通过mac上公网。另外,vm里的dns需要手工配置(比如指向8.8.8.8)

附:多台vm上公网

如果需要多台vm上公网,可以自行添加一个hub或switch

基于macOS+VMware的GNS3内VM上公网的更多相关文章

  1. 一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库 RxJava,相当好

    https://github.com/ReactiveX/RxJava https://github.com/ReactiveX/RxAndroid RX (Reactive Extensions,响 ...

  2. VM上完美运行macos

    VM上完美运行macos 作者:方辰昱 时间:十月三号 效果图 简要步骤 下载安装VM 下载镜像文件链接,darwin.iso,unlocker,beamoff.合集下载链接:https://pan. ...

  3. GNS3内网配置虚拟机测试

    一.背景:考虑在GNS3内网配置一台虚拟机系统,用于大流量测试. 二.环境: 1.win10系统已安装:GNS3和配套GNS3VM虚拟机(版本号:2.2.7):vmware虚拟机winxp(名称为:W ...

  4. GNS3内网通过cloud与实际网络实现互连互通的实验(使用环回网口)

    一.背景: 在GNS3内构建一个测试网络,该测试网络的设备能够通过cloud访问外部网络设备和Internet网,外部网络也能直接访问GNS3内网的设备. 考虑通过cloud上的环回口连接GNS3内网 ...

  5. VM上成功安装mac os x

    想必很多人在intel . AMD上安装苹果系统,总会遇到很多问题,今天我就将我成功安装的过程给大家分享一下. 下面是我在VM上安装的步骤: 1. 准备软件 OS X Snow Leopard 10. ...

  6. 在vmware 6.5+ubuntu12.04上安装VMware tools出现问题的分析

    笔者已经写了一篇关于安装"VMware Tools",以实现文件共享的文章,那篇文章对于你实现共享操作是足够了, 所以,倘若你赶时间不如直接去在虚拟机的linux中利用VMware ...

  7. 在VM上安装centOS后的网络配置

    花了点时间,研究了下VM上的linux虚拟机的网络配置问题.1.环境主机:winXP SP2,家庭宽带,局域网连到路由器,ip地址为192.168.1.101. 虚拟机:centOS(redhat l ...

  8. 在 Azure 中的 Linux VM 上创建 MongoDB、Express、AngularJS 和 Node.js (MEAN) 堆栈

    本教程介绍如何在 Azure 中的 Linux VM 上实现 MongoDB.Express.AngularJS 和 Node.js (MEAN) 堆栈. 通过创建的 MEAN 堆栈,可以在数据库中添 ...

  9. 如何使用 Jenkins、GitHub 和 Docker 在 Azure 中的 Linux VM 上创建开发基础结构

    若要将应用程序开发的生成和测试阶段自动化,可以使用持续集成和部署 (CI/CD) 管道. 本教程介绍如何在 Azure VM 上创建 CI/CD 管道,包括如何: 创建 Jenkins VM 安装并配 ...

随机推荐

  1. 了解jQuery的$符号

    $是什么? 可以使用typeof关键字来观察$的本质. console.log(type of $); //输出结果为function 因此可以得出结论,$其实就是一个函数.$(); 只是根据所给参数 ...

  2. 基于 Web 的 Go 语言 IDE - Wide 1.4.0 发布!

    Wide 是什么 Wide 是一个基于 Web 的 Go 语言团队 IDE . 在线开发:打开浏览器就可以进行开发.全快捷键 智能提示:代码自动完成.查看表达式.编译反馈. Lint 实时运行:极速编 ...

  3. MSSQL_20160719_在作业步骤中使用sp_send_dbmail遇到的问题

    需求: 在作业步骤中使用sp_send_dbmail发出邮件, 并将数据库中的日志表通过@query参数导出文本作为邮件附件 遇到错误: 服务器 DB-DWH-1,第 1 行  服务器主体 " ...

  4. sql多表关联

    inner join(等值连接) 只返回两个表中联结字段相等的行 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有 ...

  5. 重载(overload)和重写(override)的对比(笔试经常出)

    Day04_SHJavaTraing_4-6-2017 1.重载(overload):    ①权限修饰符(public private 默认):        无关    ②返回值类型:       ...

  6. matlab中的@函数

    原文链接:http://blog.sina.com.cn/s/blog_5e73a8fc0100t9yg.html 这是个函数句柄 @(x,y) 表示未知数是x和y punct     - Funct ...

  7. Ruby. Vs . Python

    前言:从语言的本质上来分析,我对Ruby持反对态度,毕竟语言是为了交流,在表达的效率层面为了正确性必须适当放弃复杂性.且有句老话说的好,Ruby In Rails 才是语言,而Ruby只是这个语言的工 ...

  8. img-responsive class图片响应式

    在BootStrap中,给<img>添加 .img-responsive样式就可以实现图片响应式. 1 <img src="..." class="im ...

  9. python简单的输入与输出

    1 首先利用python完成简单的输出,运行如下: python和c语言类似,但又有所不同,python开发快,语言简洁,我是这样对比学的 输出:print+空格+'要输出的内容',一定要是英文状态下 ...

  10. Shader渲染动画

    一.概述 先看一下Shader类的介绍: /** * Shader is the based class for objects that return horizontal spans of col ...