p

前言

曾经看到有人炫耀wsl的高度集成性——竟然能够像打开硬盘一样在Windows上打开虚拟机的文件?那可不爽死?
但是wsl的性能实在是太屑了,于是,现在咱就拿Vmware也整一个

本文基于Vmware + Ubuntu 20.04实现,别的组合能在原理上走通应该都一样

打通网络

这一步是可选的,你有千百种方法使宿主机能够连接上虚拟机,只要有一种能用就可以跳过这步
而且,VMware提供的NAT本身应该是能够正确配置的,只有在遇到连接问题时才需要下方操作

默认情况下,宿主机地址为192.168.*.1 (可在任务管理器查看VMnet8)(*是随机数)
虚拟机地址为192.168.*.* (可通过ifconfig命令查看)
只需将虚拟机网络指定为NAT模式似乎就行,甚至不需要特定虚拟网络

下面介绍的是我自己使用的操作

打通虚拟机和宿主机的网络还是挺有用的,可以实现如 虚拟机利用宿主机的网络代理 之类的骚操作
要想实现不依赖外部(比如路由器)进行网络互通,可以使用Vmware提供的NAT机制

配置NAT

Vmware提供了一套虚拟网络适配器,只需要进行适当的配置,使得宿主机和虚拟机跑在同一个虚拟网的同一个子网上,那相互之间的连接肯定不是问题

想要完成这配置,首先打开虚拟网络编辑器

p

然后点击主窗口中的更改设置以使用管理员权限显示所有配置信息

p

默认情况下,Vmware应该本身就分配了一个VMnet8作为NAT模式的虚拟网 (如果没有,就新建一个)
你可以勾选使用本地DHCP服务将IP地址分配给虚拟机,如果你懒得为虚拟机配置静态IP的话
(对于我这种VMnet8下只有一台虚拟机的来说,DHCP约等于静态ip,反正我就没看它变过。。)
你必须勾选将主机虚拟适配器连接到此网络

然后,点开NAT设置
记一下网关的IP,因为配置宿主机的时候需要用到(宿主机如果不指定静态地址,经常和网关重IP,或者飘到别的子网去就离谱)

p

网关似乎默认给的是.2,但是无所谓,如果看着不爽可以改成.1

配置宿主机静态IP

宿主机的静态IP,不配置似乎也行,配置起来最好,能够避免很多奇奇怪怪的问题
我遇到的问题不限于,
宿主机漂移到别的子网
宿主机把网关IP占了导致虚拟机直接没网

打开控制面板\网络和 Internet\网络连接

对着VMNet8右键,属性,Internet协议版本4(TCP/IPv4)

为宿主机指定一个ip并把刚刚记录的网关地址填进去,DNS自己看吧,我这里用的是阿里的

p

一路确认退出,然后可以去任务管理器里看看宿主机在VMnet8中的地址,如果定住了,那就ok

配置虚拟机网络

右键虚拟机,设置,网络适配器,改成上面的那个虚拟网(VMnet8)

确认即可,接下来就可以启动虚拟机,使用ifconfig命令查看ip地址,也可以自己配置一下静态ip

可能的坑

  • Windows快速启动
    只要Windows是快速启动的,我的VMnet必炸,两端都通不了,非常离谱。可以在控制面板\硬件和声音\电源选项\系统设置关闭

配置Samba

Samba是一个SMB协议的实现,允许 Windows 客户访问 Linux 系统上的目录、打印机和文件

安装

sudo apt install samba

基本配置

配置文件位于
/etc/samba/smb.conf

找到配置文件的Share Definitions部分,这一行下面的内容就是共享配置啦

先说一下共享的结构,[]包含的内容是共享的名称,比如题图的Ubuntu

它默认提供了homes的共享,可以取消注释直接用,但是,我不建议,因为,似乎存在一些问题

  • 连接后显示的homes无法打开,不显示鉴权
  • 有了凭据之后才会显示用户目录,但是凭据在哪里输入呢?
  • 也许需要手动在地址里追加一个用户名称?

因此,我建议自己定义一个共享

[Ubuntu]
  comment = libxzr-virtual-machine
  path = /home/libxzr
  browseable = yes
  read only = no
  valid users = libxzr

可以直接放在conf的末尾

然后,新建一个Samba用户

sudo smbpasswd -a 用户名 这个用户名必须是linux下存在的用户,比如libxzr

嗯,用户名也要和上面的valid users对应

之后重复两次密码,账户就建立好了,可以尝试在Windows资源管理器里输入\\虚拟机ip进行连接

p

规范化权限

众所周知,在Ubuntu下新建文件夹的权限默认是775,而新建文件的默认权限是664,我们可以往配置中加入两行使得我们远程创建的东西也具有相同的权限(强迫症)

  directory mask = 0775
  create mask = 0664

规范化权限组

假如你新增了一个用户,那么那个用户就可能在你的目录下创建不属于你的文件,这很令人不爽,可以通过强制覆盖用户/用户组来进行规范

  force user = libxzr
  force group = libxzr

关闭垃圾ACL

这破东西就是个屑
我在使用Visual Studio打开虚拟机中代码的时候遇到了一个问题

p

该文件夹不适用,原因如下:您没有此目录的写入权限

好啊,我的用户,我的文件夹,我没有权限?
搜遍全网,唯一有效的答案是chmod -R 777,smjbwy

这里的问题出在:Visual Studio压根没有尝试写入,而是看了看ACL权限表,啊,因为权限表里都是远程用户,所以,“我觉得你没有权限”

你寄吧谁啊😅

chmod 777之所以能用,是因为它会把ACL中Everyone的权限给足,导致VS觉得,“我可以”

只需要关闭ACL就可以解决这个问题

nt acl support = no

我的完整配置

[Ubuntu]
  comment = libxzr-virtual-machine
  path = /home/libxzr
  browseable = yes
  read only = no
  valid users = libxzr
  directory mask = 0775
  create mask = 0664
  force user = libxzr
  force group = libxzr
  nt acl support = no

映射网络驱动器

我不建议为VMware的这种“有时候下线”的网络驱动器勾选登录时重新连接
因为垃圾Windows有时候会因为连不上而被拖死,直接整一个explorer.exe未响应😀
在桌面上建一个指向网络驱动器的快捷方式,按需映射是好的

拓展配置

有时,可能对树外软链接有需求(比如链接到别的磁盘的挂载点)
此时需要在[global]节下增加

  allow insecure wide links = yes
  wide links = yes

需要注意的是,这可能导致未经授权的目录访问,因为用户可以随机创建指向某些位置的链接

还要一种规避风险的方法

  wide links = yes
  unix extensions = no

但是,这会导致某些特性失效。。。

结语

Enjoy