ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

VMware+Ubuntu+NS3:Win10虚拟机搭建网络仿真环境全流程

VMware+Ubuntu+NS3:Win10虚拟机搭建网络仿真环境全流程 折腾虚拟机这件事网上的教程一搜一大把但真正能让零基础的人从头到尾顺下来的并不多。大部分教程要么默认你已经会了要么写到一半直接跳过关键步骤。这篇我尽量把所有坑都提前踩一遍按实际操作顺序写从Win10上装VMware到Ubuntu系统安装再到最后把NS3跑起来一条线走到底。NS3那部分是很多人装虚拟机的主要目的我会把它放在最后单独讲配置过程也是实打实验证过的。如果你是第一次接触Linux或者只是想在Windows里开一个Ubuntu环境学习网络仿真这篇文章应该刚好够用。1. 安装前先把三件事准备好1.1 先检查Win10的虚拟化是否开启虚拟机软件的工作方式决定了它必须借助CPU的虚拟化指令集也就是常说的VT-x或AMD-V。如果这个开关没开后面VMware启动Ubuntu的时候会直接报错说什么“此主机支持Intel VT-x但Intel VT-x处于禁用状态”这时候再回头折腾BIOS会浪费很多时间。先教你在不重启的情况下检查虚拟化状态打开任务管理器CtrlShiftEsc切到“性能”选项卡点CPU右下角会有一个“虚拟化已启用/已禁用”的显示。如果显示已禁用就需要进BIOS开启不同品牌的主板路径不太一样常见的位置在Advanced→CPU Configuration或者Security→Virtualization选项名一般是Intel Virtualization Technology或者SVM Mode把它设为Enabled保存重启。这个步骤一定要放在安装VMware之前做因为虚拟机能不能装得起取决于硬件层是否准备好了。我遇到过不少朋友在VMware上卡了好几天最后发现就是BIOS里一个开关没开。另外提醒一句有些办公电脑或老笔记本BIOS里可能被锁了虚拟化选项这种情况还是先用Hyper-V或者在另一台机器上操作比较现实。1.2 下载Ubuntu镜像版本别选错Ubuntu的版本号特别容易让人迷糊什么22.04、24.04、24.10还有Desktop版、Server版小白第一次看到官网的下载页面基本是懵的。我推荐大多数学习者下载Ubuntu 22.04 LTS Desktop 64位版本原因很直白LTSLong Term Support代表长期支持官方会持续更新到2027年稳定性经过了大量用户验证而且网上所有教程和资料基本都是围绕这个版本写的。在Win10上用VMware安装Ubuntu记住一个原则选64位镜像。你下载的ISO文件会是一个大约4GB到5GB的镜像文件文件名大概是这样的ubuntu-22.04.5-desktop-amd64.iso。下载地址直接去清华镜像站或者阿里云镜像站速度比Ubuntu官方快很多。如果你下载的是Server版需要全程命令行安装对零基础用户来说体验不太友好所以第一次装系统建议还是选Desktop版。下载完成之后最好校验一下SHA256值不是必须但能防止下载到损坏的文件。Windows下可以用PowerShell执行Get-FileHash命令来校验省心一点也可以直接用7-Zip打开ISO看看文件结构是否正常。1.3 VMware Workstation Pro下载安装VMware Workstation是目前在Win10上跑虚拟机最成熟的方案之一。过去需要购买许可证后来官方针对个人使用推出了免费版安装包可以直接从官网下载版本号一般在17及以上。下载时注意选择Windows版本别选成Linux版本的安装包。安装基本就是一路Next唯一要注意的是一开始不要勾选“稍后输入许可证”如果有这个选项通常默认提供的就是个人免费许可直接沿用即可。安装完成后Windows如果弹出防火墙提示勾选允许访问否则后续虚拟机和主机之间的网络可能不通。注意如果Win10开了“核心隔离→内存完整性”这类基于虚拟化的安全功能VMware启动虚拟机时偶尔会提示“Device/Credential Guard不兼容”这是Hyper-V与VMware在虚拟化层抢资源导致的。处理方法有两种要么在Windows安全中心里关闭“内核隔离”的“内存完整性”要么在“启用或关闭Windows功能”里取消勾选Hyper-V。自己做实验的话关闭内存完整性是最直接的影响不大但如果是公司电脑这里建议先咨询IT管理员。2. 新建虚拟机跟着向导点就行2.1 关键配置内存、处理器和磁盘这样分配打开VMware Workstation菜单栏“文件→新建虚拟机”选“典型推荐”就好不用进自定义。随后会让你选择安装程序光盘映像文件这里直接把下载好的Ubuntu ISO路径填进去。硬件配置这一步对新手影响比较大给一个参考方案你可以根据自己的电脑配置来调整硬件推荐配置说明内存4GB虚拟机内存至少给4GB2GB跑Ubuntu桌面会很卡处理器核心数2核如果CPU是四核以上给2核比较合理硬盘60GB新建时选“将虚拟磁盘拆分成多个文件”方便以后迁移网络模式NAT最常见也是默认模式不用额外配置新手常见的误区是把所有核心和所有内存都分给虚拟机比如一台16GB内存的机器非要给虚拟机分8GB以上。这样做只会导致宿主机卡死虚拟机本身也没有明显提速。虚拟机拿走的资源是真实独占的记得留下足够的余量给Win10自己用。磁盘这里要单独说一句新建虚拟磁盘时容量设定是最大值实际使用是动态增长的。所以即使你设置60GB刚开始在Win10磁盘上占用的一般只有几GB不需要担心空间被占满。选“将虚拟磁盘拆分成多个文件”是更适合常规情况的选择方便在VMware里做快照和管理。2.2 网络选NAT还是桥接VMware给虚拟机提供了好几种网络模式新手配置时不必每个都弄懂核心就两个NAT和桥接。NAT模式下虚拟机通过宿主机共享上网外部设备访问不到虚拟机但虚拟机可以正常连接互联网。桥接模式下虚拟机会被当作一台独立的设备出现在局域网里可以直接和其他机器互通也可以获取局域网IP。在Win10上安装Ubuntu虚拟机做学习或者跑NS3实验绝大多数场景直接用NAT就好。为什么要这样因为NAT不需要任何额外配置宿主机能上网虚拟机就能上网而且不容易出现IP冲突之类的问题。如果你后面需要宿主机访问虚拟机里的SSH服务NAT模式也可以实现只要在VMware虚拟网络编辑器里加一条端口转发规则就行。桥接模式更接近物理机环境但一定要保证虚拟机的IP段和局域网一致否则会出现虚拟机无法访问外网、别人也找不到虚拟机的情况。对于零基础用户桥接模式暂时可以先不碰等NAT用熟练了再去尝试。2.3 引导虚拟机前的三个常见启动问题点“开启此虚拟机”之后有几种情况是新手很容易慌的。第一种情况是黑屏或者卡在VMware的启动Logo。这大概率不是VMware坏了而是Win10上Hyper-V或者内核隔离跟VMware冲突导致的。处理方式就是我前面提到的检查“Windows功能”里是否勾选了Hyper-V建议取消勾选并关闭内核隔离中的“内存完整性”然后重启电脑。第二种情况是提示“Inte l VT-x处于禁用状态”。这个在上文已经说过了去BIOS开虚拟化。千万不要以为是镜像文件坏了这类报错跟镜像文件完全没有关系。第三种情况是加载ISO后开机显示“Operating system not found”。通常是虚拟机的CD/DVD设置里没有正确挂载ISO文件或者下载的ISO文件本身不完整。打开虚拟机设置在“CD/DVD (SATA)”里选“使用ISO映像文件”浏览到下载好的镜像再勾选“启动时连接”。这三个问题占了VMware新手报错的大部分比例提前知道处理方式后面会顺利很多。3. Ubuntu系统安装过程中的细节3.1 语言选择与最小安装Ubuntu启动后会进入一个试用和安装的界面。左侧是英文列表拉到最下面可以看到中文简体选择中文的话安装界面就会变成中文。对于零基础用户系统安装和后续操作最好都用中文因为遇到问题时中文报错容易读懂很多。不过如果你想学Linux本身我建议最后还是把系统语言设成英文中文环境在部分终端工具和脚本输出上会有一点点兼容问题但这不是硬性要求看个人喜好。在“更新和其他软件”这一页安装类型建议选“正常安装”更新项可以先不勾选“为Ubuntu下载更新”这样能省安装时间系统装完以后再换国内源更新也是完全一样的。图形界面和办公软件会一起装着后面自己再按需卸载就好。其实这里有一个容易被忽略的选项“安装Ubuntu时下载更新”和“安装第三方软件”。第三方软件一般指MP3解码器、WiFi网卡驱动等这类组件在虚拟机里不一定用得上建议先不装。装完系统后用命令安装驱动和处理解码器比安装时一次性拉取要可控得多。3.2 分区方案默认全盘安装完全够用到了“安装类型”这一步Ubuntu会问你怎么分区。如果你对Linux的分区结构不熟悉直接选“清除整个磁盘并安装Ubuntu”就行。这里要明确一点它清除的是虚拟磁盘不是Win10里的真实C盘、D盘。虚拟磁盘在Windows里不外乎几个大文件这些文件已经归属于VMware虚拟机了所以放心操作。如果你打算以后在虚拟机里做正式实验建议在磁盘分配时给根分区留足够的空间。默认方案通常会把剩余空间全部分给根目录/这对绝大多数人来说已经足够了。Linux里的数据分区规划是比较灵活的事情新手阶段不必一上来就套用“必须分/boot、/、/home”这种老旧思路。当然如果你坚持手动分区供参考的方案是一个ext4的根分区挂载点选择“/”一个swap分区大小设置为内存的两倍是比较老的说法现在分配4GB左右即可如果想单独存放家目录可以再分一个挂载点为“/home”的分区。但说实话在虚拟机里做这些分区的价值有限默认全盘安装更省心后面出现问题重装成本也低。3.3 设置用户名密码安装过程中会让你设置计算机名称和一个登录用户这个用户就是Ubuntu里的管理员具备sudo权限可以执行系统管理操作。计算机名称一般不用太刻意默认就好但用户名建议用小写英文尽量不要包含中文或大写字母否则后面在终端里使用路径时会很麻烦。密码一定要记住因为后面执行sudo和安装软件时需要解锁权限。如果你忘密码虽然可以进recovery mode重置但操作起来确实麻烦。可以在安装时选择“自动登录”这样每次开机不用输入密码就能直接进桌面虚拟机嘛安全要求没那么高。3.4 第一次开机后的VMware Tools安装完成后系统会提示重启重启进入Ubuntu桌面第一步建议先在VMware菜单栏选择“虚拟机→安装VMware Tools”。不过这里有个更适合现代Ubuntu版本的方式VMware 17本身对较新的Ubuntu提供open-vm-tools支持。使用内置的VMware Tools安装包往往需要在终端里挂载并手动编译操作繁琐。更好的是直接在Ubuntu终端执行sudo apt update sudo apt install open-vm-tools-desktop -y这个包能让你在虚拟机和宿主机之间共享剪贴板拖拽文件还能自动适应窗口分辨率效果和VMware Tools一致。如果你已经安装完VMware Tools也有可能出现版本冲突最常见的就是剪贴板共享失效、窗口分辨率无法自动缩放。处理方法很简单sudo apt purge open-vm-tools-desktop再重新安装一遍。这个包对虚拟机体验的提升非常明显这一块建议按官方推荐来不要跳过。4. 装完后别急着用先把环境调顺手4.1 换国内软件源让apt不再几十KB/s安装完Ubuntu之后第一件要做的就是把/etc/apt/sources.list里的软件源地址换成国内镜像。不换源的话apt update和apt install的速度会让你怀疑人生我曾经在默认源下执行 apt upgrade等了一个多小时还没完成换源以后几分钟就搞定。Ubuntu 22.04的源配置格式已经变成了DEB822格式配置文件路径是/etc/apt/sources.list.d/ubuntu.sources。直接用文本编辑器打开它把里面的地址替换成清华镜像地址或阿里云镜像地址。比如把http://archive.ubuntu.com/ubuntu/替换成https://mirrors.tuna.tsinghua.edu.cn/ubuntu/。如果不想用文本编辑器也可以直接执行命令用sed简单替换。替换完成之后执行 sudo apt update 刷新软件列表再执行 sudo apt upgrade 把所有系统包更新到最新状态。这一步建议在配置中文输入法和开发环境之前完成因为后续几乎所有软件安装都依赖apt源。4.2 安装中文输入法Ubuntu系统装好后默认输入法在虚拟机里会出现调不出来或者候选框不显示中文的问题。这是虚拟机用户常抱怨的“Ubuntu中文输入法怎么设置”的根源其实操作起来没有想象中麻烦。Ubuntu 22.04默认桌面是GNOME自带的IBus框架可以安装中文拼音输入法。执行sudo apt install ibus-libpinyin -y然后在“设置→区域与语言→输入源”里添加“汉语Intelligent Pinyin”再在输入源中切换到拼音即可。如果你以前在Windows上习惯了搜狗输入法Ubuntu下也有搜狗输入法Linux版需要在官网下载deb安装包然后安装不过搜狗输入法依赖的fcitx框架在GNOME上偶尔有兼容小问题。自己踩过几次坑之后我更推荐直接用系统自带的IBus中文拼音虽然词库比不上搜狗但在虚拟机里日常打几个命令、脚本注释、读文档已经完全够用了。如果你习惯用“CtrlSpace”切换中英文可以去“设置→键盘快捷键”里把输入法切换快捷键改成熟悉的组合或者直接用SuperSpace。4.3 开启SSH服务让Win10直接连进虚拟机很多人在虚拟机里复制粘贴一大段命令的时候会觉得“字体放大了还是会模糊”这是因为虚拟机图形界面本身的分辨率和字体渲染跟宿主机有差异。一个更好用的做法是在Win10上用终端SSH连接进Ubuntu虚拟机这样所有操作都发生在命令行窗口里字体渲染由Win10终端负责体感会舒服很多。在Ubuntu虚拟机里执行sudo apt install openssh-server -y然后确保SSH服务启动sudo systemctl enable --now ssh。用ip addr命令查看虚拟机的IP地址然后在Win10的终端里输入 ssh 用户名虚拟机IP回车输入密码就能进入Ubuntu的终端。如果是NAT网络模式虚拟机默认IP一般是192.168.xx.xx而且Win10和虚拟机在同一个NAT网段内SSH默认可以直连。如果连接不上先检查Ubuntu防火墙sudo ufw status如果ufw是启用的执行sudo ufw allow ssh开放22端口。再不行就用ping测试宿主机和虚拟机之间的连通性大多数SSH无法连接问题都是防火墙或者网段不对导致的。用SSH方式还有一个额外的好处你可以在Win10上用VS Code的Remote-SSH扩展直接连接虚拟机写代码、看文件、远程改配置视觉体验比在虚拟机图形桌面里开发好很多。4.4 共享文件夹和拖拽传输虽然VMware默认支持在虚拟机和宿主机之间拖拽文件但大文件拖拽经常会出现拷贝到一半卡住、或者文件权限不对的情况。比较稳的方案是用共享文件夹。在虚拟机关机状态下“虚拟机设置→选项→共享文件夹”选择“总是启用”添加一个Windows目录比如D:\share这样在Ubuntu里就能以 /mnt/hgfs/share 的方式访问到宿主机目录。开机进系统后如果看不到共享目录通常是因为open-vm-tools没有安装完整重新安装open-vm-tools-desktop并重启即可。共享文件夹设置好以后在Windows里往D:\share丢安装包Ubuntu里解压或安装不用U盘不用网络传输非常方便。反过来Ubuntu里生成的仿真结果、trace文件也可以直接写到共享目录Windows里立刻就能看到。4.5 终端字体与美化建议既然提到命令行操作就多说一句终端字体。很多人纠结“WSL Ubuntu写代码最推荐的字体”其实虚拟机里的Ubuntu也是同一个Linux环境字体选择逻辑完全一致。我自己推荐的是Sarasa Term SC更纱黑体终端版和JetBrains Mono前者中文显示效果好后者代码连字看着舒服。把字体文件放到/usr/share/fonts/truetype目录下执行sudo fc-cache -f刷新字体缓存再到终端“偏好设置→字体”里选择即可。字体改完之后终端阅读代码的体验提升非常明显尤其是打开大文件时。5. 结尾重磅NS3从源码编译到第一次仿真5.1 NS3是什么为什么装在虚拟机里NS3是一款开源网络仿真器全称Network Simulator 3广泛用于网络协议研究、课程实验、科研项目的前期验证。和GNS3、EVE-NG这类模拟器不同NS3不是用真实镜像去搭建网络拓扑而是通过C和Python描述节点、信道、协议栈、流量然后仿真运行。它更适合做协议层面的数据分析比如TCP拥塞控制改进、路由算法对比、排队延迟研究。为什么要在虚拟机里装NS3NS3的安装过程涉及大量依赖包和源码编译如果直接在Win10上装需要搞一套Cygwin或者借助WSL配置成本很高而且后续可视化Nsight动画在Windows下的显示并不理想。在Ubuntu虚拟机里编译NS3流程和文档都是最标准的原生态做法出现问题也好排查。如果你的机器配置不太高编译NS3时建议不要让虚拟机占用过多CPU资源编译过程会让CPU长时间高负载虚拟机配置太高可能反而拖垮宿主机。NS3本身运行时不怎么吃内存2GB内存也能跑编译阶段内存充裕点会舒服一些4GB是够用的。5.2 编译前依赖包安装NS3推荐从源码编译虽然官方也提供了apt安装版本但代码研究场景下源码版更灵活。我推荐下载ns-allinone-3.4x这个打包版本比如ns-allinone-3.40因为它会把ns-3、netanim、bake等组件一起打包省去很多手工拼接的麻烦。编译之前要把系统依赖装齐。下面的命令建议直接复制到终端执行sudo apt update sudo apt install build-essential g python3 python3-dev python3-setuptools \ python3-pip pkg-config sqlite3 gsl-bin libgsl-dev libgslcblas0 \ libxml2 libxml2-dev libgtk-3-dev libboost-all-dev libpcap-dev \ libsqlite3-dev libncurses-dev python3-matplotlib python3-numpy \ python3-scipy python3-pandas python3-seaborn openmpi-bin openmpi-common \ openmpi-doc libopenmpi-dev libfl-dev libfl-dev unzip cmake这一串装完之后可以敲python3 --version确认Python版本NS3 3.40以上版本对Python3的支持已经很成熟了。依赖包如果有个别装上失败一般是因为源里没这个包或者源没更新先执行sudo apt update再重试。5.3 编译配置与构建进入ns-allinone-3.40目录用./build.py --enable-examples --enable-tests编译整个项目。这个命令会依次编译NS3和相关的可视化组件整个过程中终端会疯狂刷日志不用管它耐心等待即可。编译完成后最好执行一下基础的测试确认编译产物没问题./test.py --no-build ./ns3 run first如果你只是想要一个精简版可以只配置NS3本身而不带examples和tests比如进ns-3.40目录后执行./ns3 configure --enable-examples --enable-tests再执行./ns3 build。这种方式比构建整个ns-allinone要快一些但缺少一些工具链组件。第一次安装我还是建议用完整的ns-allinone避免后续想跑官方示例时发现少东西。编译时长取决于机器性能性能好的机器大概十几分钟性能一般的话可能需要半小时以上。这段时间可以去喝杯水或者顺手把中文输入法的设置收个尾。提示编译期间如果报错“libcrypto.so找不到”或“cannot find -lfl”通常是flex和libfl-dev没有装成功重新执行sudo apt install flex libfl-dev后再build即可。5.4 跑一个基础验证first.cc编译好之后用官方自带示例验证安装是否成功。进入ns-3.40目录执行./ns3 run first如果输出一段包含“At time 2s client sent 1024 bytes to 149.1.1.2 port 9”的日志说明NS3已经可以正常工作了。这个示例模拟了两个节点之间通过点对点信道通信很容易理解代码在examples/tutorial/first.cc用VS Code打开看一遍基本就能理解NS3的脚本结构节点创建、链路安装、协议栈安装、应用安装、仿真启动。如果运行之后屏幕上什么都没有或者日志卡住多半是NS3运行目录不对。确认你在ns-3.40目录下执行./ns3 run first而不是在ns-allinone-3.40根目录下直接运行。NS3的仿真结果通常以trace文件形式输出比如运行first后会生成一个first.tr文件用文本编辑器打开就能看到每个包的发送时间、源地址、目的地址。这也是后面做网络实验最常打交道的文件类型建议从一开始就养成查看.tr文件的习惯。5.5 常见报错速查NS3新手安装中最常见的问题我整理一下方便你对照排查报错信息原因解决办法python3 not foundPython开发包缺失sudo apt install python3-dev python3-piplibcrypto.so: cannot open shared object fileOpenSSL库缺失sudo apt install libssl-devNo rule to make target buildconfigure没有执行成功先执行./ns3 configure 再 build“./ns3: No such file or directory”当前目录不是ns-3.x进入源码目录不要用ns-allinone根目录磁盘空间不足编译中间文件占空间检查根分区剩余空间至少留5GB以上编译过程中g内存不足虚拟机内存分配太小给虚拟机分配至少4GB内存关闭其他应用fatal error: pybind11/embed.h: No such file or directoryPython绑定依赖缺少sudo apt install pybind11-dev如果遇到表格里没有的问题优先搜索报错的前几行关键词绝大多数NS3编译问题都是依赖缺失引起的报错信息里一般会直接提示缺少哪个库或者哪个头文件按提示apt安装对应开发包即可。5.6 NS3运行NS-3动态可视化与脚本扩展NS3安装好之后还有两个实验阶段经常用到的能力可以顺手验证。一个是NetAnim动画工具。ns-allinone里已经编译好了进入netanim-3.109目录运行./NetAnim命令可以打开可视化界面。仿真脚本运行后输出xml动画文件就能在NetAnim里把节点、链路、数据包流动的过程以动画形式展示。网络拓扑一目了然非常适合课程作业和汇报演示。另一个是借助矩阵库进行绘图。NS3本身不直接绘图但配合Python的matplotlib可以快速把trace文件里的数据绘制成曲线。比如分析TCP吞吐量、RTT变化都可以用Python脚本读取.tr文件后绘制这比用Gnuplot省事。前面依赖里已经装了matplotlib和numpy所以你直接用就行不用再折腾。我自己的经验是第一次跑通NS3之后建议按顺序跑examples/tutorial里的second.cc和third.cc这两个示例分别演示了多节点拓扑和无线网络配置比只看first.cc更容易理解NS3的“节点-链路-应用-仿真”模型。把这几个示例吃透后面自己写仿真脚本就不会发怵了。最后分享一个小技巧NS3编译出的可执行文件体积较大虚拟机根分区空间容易越来越少定期用sudo apt clean清理apt缓存再用du -sh *查一下当前目录下哪些文件夹占了空间这是保持虚拟机长期流畅工作的习惯。装好NS3后如果一切顺利整套环境基本能支撑你做完本科或研究生阶段的大多数网络仿真实验也不用再为Windows下跑Linux工具链的问题折腾了。
返回列表