一些信息 part4

【转载】由于不懂VMware上网模式以及如何在虚拟机代理被老板狠狠教训,学会后让老板刮目相看

转载自由于不懂VMware上网模式以及如何在虚拟机代理被老板狠狠教训,学会后让老板刮目相看 - 不买Huracan不改名 - 博客园 (cnblogs.com)

如有侵权,请及时联系liu_kanxi#163.com(@置换#)

写在前面

本文的目的主要是:

1,搞懂VMware三种网络模式
2,如何在宿主机使用代理的情况下,虚拟机也可以使用。

环境说明

1,VMware中安装了Ubuntu20.04虚拟机,其中VM版本信息如下

img

2,宿主机系统:win10

3,代理软件:clash for windows 0.20.27

VMware三种网络模式介绍:

img

可以看到有三种网络模式: VMnet0 桥接模式(Bridged) , VMnet1 仅主机模式(Host-Only) ,NAT模式(Network Address Translation,网络地址转换)

打开vmware虚拟机,我们可以在选项栏的“编辑”下的“虚拟网络编辑器”中看到VMnet0(桥接模式)、VMnet1(仅主机模式)、VMnet8(NAT模式),其中VMnet0表示的是用于桥接模式下的虚拟交换机;VMnet1表示的是用于仅主机模式下的虚拟交换机;VMnet8表示的是用于NAT模式下的虚拟交换机

同时在 设置->网路和Internet->状态->更改网络适配器中,在主机上对应的有VMware Network Adapter VMnet1和VMware Network Adapter VMnet8两块虚拟网卡,它们分别作用于仅主机模式与NAT模式下。在“网络连接”中我们可以看到这两块虚拟网卡,如果将这两块卸载了,可以在vmware的“编辑”下的“虚拟网络编辑器”中点击“还原默认设置”,可重新将虚拟网卡还原。

img

img

还看到我有一块物理网卡: intel(R) Wi-Fi 6 AX200 160MHz
那为什么没有VMware Network Adapter VMnet0虚拟网卡?不急往下看

Bridged(桥接模式)

桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。其网络结构如下图所示

img

img

如何设置桥接模式:

在VMware 编辑中找到虚拟网络编辑器 选对桥接的网卡,这里我选择自己的真网卡 intel(R) Wi-Fi 6 AX200 160MHz

img

然后点击虚拟机->设置->网络适配器

img

到此,就算设置好了。当然你也可以设置一下虚拟机的ip(也可以不用,因为虚拟机一般都是自动获取的)

【虚拟机运行命令 nmtui 或者直接在设置网络中 点击右边的齿轮配置 】

img

到此虚拟机就可以直接上网了。。。。


但这个时候宿主机是可以ping 虚拟机的

img

但是发现虚拟机ping 物理机失败

img

原来这是因为防火墙设置的原因 ,修改一下防火墙规则

img

NAT(网络地址转换模式)

NAT模式借助虚拟NAT设备和虚拟DHCP服务器,使得虚拟机可以联网。其网络结构如下图所示:

img

在NAT模式中,物理机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起连接在虚拟交换机VMnet8上,(虚拟NAT设备连接着真网卡和虚拟交换机Vmnet8,于是虚拟机的请求就可以想办法让真网卡代劳) 这样就实现了虚拟机可以上网。

那要虚拟网卡VMware Network Adapter VMnet8有什么用呢?原来我们的VMware Network Adapter VMnet8虚拟网卡主要是为了实现主机与虚拟机之间的通信。在之后的设置步骤中,我们可以加以验证。

(因为NAT模式走的还是物理主机的网络,你可以将物理主机看成是一台代理服务器,当我们要访问外部网络资源的时候,首先会去请求物理主机(看上图),然后物理主机会去外部网络拉取请求,然后再转发给虚拟机,虽然用代理来比喻可能不是很准确,由于我们用的是NAT网络地址转换模式,所以我们的网络地址是经过转换后的网络地址,这个地址跟物理主机是不在同一个局域网内的。

img

如何设置程NAT模式

首先,设置虚拟机中NAT模式的选项,打开vmware,点击“编辑”下的“虚拟网络编辑器”,设置NAT参数及DHCP参数。

img

img

img

然后设置虚拟机

img

此时物理机上真网卡ip:192.168.124.21

img

NAT网卡:192.168.121.1

(可以看到物理机和虚拟机有了一个自己的小局域网192.168.121.0小局域网)

img

img

此时虚拟机是可以正常上网的


  • 此时虚拟机 ping 真网卡是可以的192.168.124.21 ping NAT网卡:192.168.121.1也可以(ping不通的话就是防火墙的问题)

宿主机ping 虚拟机192.168.121.128是可以的 ,也就是互相可以ping通


之前,我们说过VMware Network Adapter VMnet8虚拟网卡的作用,那我们现在就来测试一下。

将VMware Network Adapter VMnet8虚拟网卡禁用

img

img

发现虚拟机依然可以上网,如此看来,虚拟机能连外网,确实不是通过VMware Network Adapter VMnet8虚拟网卡(废话上面都说了为啥,当然不是这块网卡的作用

那么为什么要有这块虚拟网卡呢?VMware Network Adapter VMnet8的作用是宿主机与虚拟机之间的通信,关闭VMware Network Adapter VMnet8虚拟NAT网卡后,宿主机ping不通虚拟机

img

虚拟机(此时是192.168.121.128)也pingNAT网卡192.168.121.1失败

但是ping真网卡192.168.124.21可以(废话因为此时可以上网,是就是通过真网卡上网的)

img

然后,将VMware Network Adapter VMnet8启用之后,发现宿主机可以ping虚拟机了

img

虚拟机也可以ping通两块网卡 ,可以互相ping通了

img

所以由上可以看出VMware Network Adapter VMnet8 的真实作用:完成宿主机与虚拟机之间的通信

这就是NAT模式,利用虚拟的NAT设备以及虚拟DHCP服务器来使虚拟机连接外网,而VMware Network Adapter VMnet8虚拟网卡是用来与虚拟机通信的。

Host-Only(仅主机模式)

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

img

通过上图,我们可以发现,如果要使得虚拟机能联网,我们可以将主机网卡共享给VMware Network Adapter VMnet1网卡,从而达到虚拟机联网的目的。接下来,我们就来测试一下。

首先设置“虚拟网络编辑器”,可以设置DHCP的起始范围。

img

设置虚拟机为Host-Only模式。

img

发现虚拟机的ip也已经同步更改

img

宿主机和虚拟机都可以相互ping通,但虚拟机此时无法上网(其实也是可以上网的,由于本人暂时用不到,自行百度)

img

img

img

虚拟机如何使用主机代理:

1.设置程NAT模式(见上文)

2.查看主机上Clash for Windows的端口,并打开Allow LAN开关,表示允许局域网代理。将鼠标悬停在Allow LAN开关上下方可以显示clash的ip

img

img

设置成NAT网卡地址+端口号

img

写在后面:

参考链接: https://zhuanlan.zhihu.com/p/345954703

对应文章教程: Vmware虚拟机三种网络模式详解\_哔哩哔哩\_bilibili

在linux中,为什么 mv 命令不需要 -r (recursive) 参数

来自思考题解答 - Linux 101 (ustc.edu.cn)

提示

复制文件夹的过程需要创建新的文件和文件夹,而移动文件夹的操作可以看作是「重命名」。

解答

在移动文件夹时,mv 事实上调用了 rename 系统调用,即重命名。由于目录是一个树状结构,那么移动文件夹只需要修改这个「文件夹节点」本身的位置与名称即可,不需要对文件夹内的文件(它的子树)做递归的操作。而假使在复制的时候只处理单个「文件夹节点」,那么复制得到的新文件夹中存储的文件和原文件夹存储的文件就会指向相同的文件(而不是再复制一份新的),而这是不符合「复制」这个操作的预期的,所以在复制时,需要递归地复制「文件夹节点」和它的子树,这就是 mv 不需要 -rcp(以及其他类似的操作)需要 -r 的原因。

Linux的进程启动顺序

来自进程、前后台、服务与例行性任务 - Linux 101 (ustc.edu.cn)

按照 PID 排序时,我们可以观察系统启动的过程。Linux 系统内核从引导程序接手控制权后,开始内核初始化,随后变为 init_task,初始化自己的 PID 为 0。随后创建出 1 号进程(init 程序,目前一般为 systemd)衍生出用户空间的所有进程,创建 2 号进程 kthreadd 衍生出所有内核线程。随后 0 号进程成为 idle 进程,1 号、2 号并非特意预留,而是产生进程的自然顺序使然。

由于 kthreadd 运行于内核空间,故需按大写 K(Shift + k)键显示内核进程后才能看到。然而无论如何也不可能在 htop 中看到 0 号进程本体,只能发现 1 号和 2 号进程的 PPID 是 0。

bash的kill命令不能杀除被挂起的进程吗?

回答来自claude-3.5-sonnet

q1:

bash的kill命令不能杀除被挂起的进程吗?

a1:

bash 的 kill 命令实际上可以用来终止被挂起(suspended)的进程,但有一些注意事项:

  1. 默认信号:
    kill 命令默认发送 SIGTERM (15) 信号。对于挂起的进程,这个信号可能不会立即生效,因为进程在挂起状态下不会处理大多数信号。
  2. 使用 SIGKILL:
    要确保终止一个挂起的进程,你可以使用 SIGKILL (9) 信号。这个信号不能被进程捕获或忽略。
    例如:kill -9 <PID>
  3. 恢复后终止:
    有时,先恢复进程然后再终止它可能更有效:

    • 使用 fg 命令将进程带到前台
    • 然后使用 Ctrl+C 终止它
      或者使用 bg 命令将其放到后台,然后使用 kill 命令
  4. 查看进程状态:
    使用 ps 命令查看进程状态,确保你在尝试终止正确的进程。
  5. 作业控制:
    如果进程是在当前 shell 会话中挂起的,你也可以使用作业控制命令,如 jobs 来查看,然后用 kill %<job number> 来终止。
  6. 权限问题:
    确保你有终止该进程的权限。有时可能需要使用 sudo 来获得足够的权限。

总的来说,kill 命令确实可以用于终止挂起的进程,但可能需要使用正确的信号(如 SIGKILL)或采取额外的步骤来确保进程被成功终止。

最后修改:2024 年 08 月 07 日
如果觉得我的文章对你有用,请随意赞赏