V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
amiwrong123
V2EX  ›  程序员

想要 ssh 到 VMware 虚拟机里,虚拟机设置为桥接或 NAT,有区别吗

  •  
  •   amiwrong123 · 2023-09-23 10:50:07 +08:00 · 3983 次点击
    这是一个创建于 430 天前的主题,其中的信息可能已经有所发展或是发生改变。

    主要目的是 ssh 到 Ubuntu16 虚拟机,练习 Linux 环境下的 C 语言编程,以及练习下 Linux 环境下的命令使用(用 vscode 的远程功能,结合 MobaXterm )。本机环境是 win10 环境。

    PS:各位大佬,这个问题可能比较蠢。虽然我感觉桥接和 NAT ,对于我这个目的来说,应该没有本质区别。

    第 1 条附言  ·  2023-09-23 12:48:23 +08:00

    我查看了“虚拟网络编辑器”,看了里面vmnet8的设置,并没有设置什么端口转发。 并且,NAT网络子网是192.168.135.xxx子网,然后我的虚拟机自身的ip是192.168.135.128。

    然后我在宿主机里,直接ssh 192.168.135.128,发现是可以上去的。 所以大家说的端口转发,为啥我这里不需要呢?

    第 2 条附言  ·  2023-09-23 12:53:33 +08:00

    另外附上,我宿主机里面,vmnet8网卡的ip信息:

    同样的,也是192.168.135网段,ip地址是192.168.135.1。

    并且,也没有和网关192.168.135.2冲突。

    第 3 条附言  ·  2023-09-23 21:04:42 +08:00

    各位大佬,还有两个问题呢,求解答:

    就是不管是桥接模式对应的虚拟网卡vmnet0,还是NAT模式对应的虚拟网卡vmnet8。虚拟机去上网的时候,其实根本没有通过这些虚拟网卡的。

    而且,我现在理解,这两个虚拟网卡,只是为了主机和虚拟机之间能通讯:

    • vmnet8网卡,只是为了,当前主机和虚拟机能通讯。
    • vmnet0网卡,是为了,当前网段中 所有主机(包括当前主机)和虚拟机通讯。

    不知道这个理解对不对?

    另外,桥接模式下,有一个“复制物理网络连接状态”选项可以选,不知道这个选项到底起到了什么作用?

    50 条回复    2023-09-25 15:37:35 +08:00
    kujou
        1
    kujou  
       2023-09-23 10:51:12 +08:00
    你如果在母鸡 ssh 过去,没区别。
    LLaMA2
        2
    LLaMA2  
       2023-09-23 11:10:04 +08:00
    是的。
    桥接时 VM 的网络和宿主机是平级
    NAT 时 VM 的网络是宿主的下级
    WingXi
        3
    WingXi  
       2023-09-23 11:13:33 +08:00   ❤️ 1
    桥接的话, 宿主机和虚拟机是处于同一个网段地址内

    NAT 的话, 虚拟机是在另外一个子网内。 这种模式下,相互之间要实现访问,要么做 端口映射, 要么手工配置路由表(如果你的虚拟机平台支持的话)
    crysislinux
        4
    crysislinux  
       2023-09-23 11:23:04 +08:00 via Android
    楼上说的对,nat 的话要做端口映射,桥接的话不知道 IP 稳定不,感觉还是 nat 好点
    amiwrong123
        5
    amiwrong123  
    OP
       2023-09-23 12:06:18 +08:00 via Android
    @crysislinux
    不稳定是指,因为 dhcp ,每次虚拟机开机,分配到的 ip 地址,都不一样吗
    tabit
        6
    tabit  
       2023-09-23 12:21:53 +08:00
    @amiwrong123 可以在虚拟机一侧配置静态 IP ,不存在 IP 变动问题。具体区别 2 楼已经说得很清楚了
    amiwrong123
        7
    amiwrong123  
    OP
       2023-09-23 12:24:35 +08:00
    @tabit #6
    好的。我理解,如果开启着 DHCP 的话,不管是桥接还是 NAT ,都会有 ip 地址变化 的问题吧。
    tabit
        8
    tabit  
       2023-09-23 12:28:52 +08:00
    @amiwrong123 如果虚拟机使用 DHCP 获取 IP 的话,是的
    crysislinux
        9
    crysislinux  
       2023-09-23 12:45:29 +08:00 via Android
    @amiwrong123 同一个路由器的话基本上还是分配同一个 IP ,换了网络变的可能性就大了。nat 的话,端口映射到本机的,你就用 127.0.0.1 就好了
    amiwrong123
        10
    amiwrong123  
    OP
       2023-09-23 12:53:54 +08:00
    @crysislinux #9
    嗯,笔记本一般只在家里用,网络应该不会变。我试了,就算开启了 DHCP ,多次重启虚拟机的 ip 也不会变。
    amiwrong123
        11
    amiwrong123  
    OP
       2023-09-23 12:55:29 +08:00
    @kujou #1
    @ye4tar #2
    @WingXi #3
    @crysislinux #4
    @tabit #6
    @crysislinux #9
    各位大佬,看一下附言的问题呗,我看大家都说,ssh 到 NAT 虚拟机的话,都需要开端口映射。为啥我的就不需要呢?
    cjpjxjx
        12
    cjpjxjx  
       2023-09-23 13:07:48 +08:00   ❤️ 1
    VMware Workstation 虚拟机安装后默认就会给宿主机添加两张虚拟网卡 VMnet1 和 VMnet8 ,分别用于“仅主机模式”和“NAT 模式”,你虚拟机网卡选了“NAT 模式”,虚拟机获取的 IP 就是和主机 VMnet8 虚拟网卡的 IP 在同一个网段,当然可以直接访问,你可以在宿主机用 route print 查看到直连路由表

    区别:
    桥接模式虚拟机需要连接到外部路由器,获取的 IP 地址是外部路由器分配的,所以除了宿主机,其他和宿主机同网段的设备也可以直接访问到虚拟机,如果是在公司或其他特殊环境,外部路由器做了 arp 绑定或没有 dhcp ,使用这个模式就可能连不上网或获取不了 IP 地址

    NAT 模式 IP 地址是宿主机分配的,你的宿主机就相当于是一个路由器,虚拟机获取的 IP 地址和宿主机本身的 IP 地址不在一个网段,和宿主机同网段的的设备就无法直接访问到虚拟机了,需要在宿主机做端口映射才可以,
    cjpjxjx
        13
    cjpjxjx  
       2023-09-23 13:10:25 +08:00
    可以看一下这个:
    vmware 虚拟机网络配置详解
    https://blog.51cto.com/u_15169172/2710721
    studyrun
        14
    studyrun  
       2023-09-23 13:19:46 +08:00
    区别就是一个是桥接一个是 nat ,看似是废话
    桥接的话,虚拟机网络和主机是平级,两者访问要经过路由器,好处是其他设备能直接访问虚拟机,坏处是网络速度受到路由器和网卡限制
    nat 虚拟机就在主机下面了,坏处是局域网其他设备不能直接访问虚拟机,好处是主机和虚拟机之间网速不受限制,其他设备还是限制的
    Cu635
        15
    Cu635  
       2023-09-23 13:21:33 +08:00
    vmware 的 nat 网络,guest 和 host 是可以通信的,host 上直接 ssh 虚拟机 guest 就可以了。如果是别的电脑连接 host 中的 nat 虚拟机 guest ,这个时候需要端口转发。

    virtualbox 的“nat”网络,guest 和 host 是不可以直接通信的,配置端口转发之后 ssh localhost 是一个解决方案,而 virtualbox 的类似于 vmware nat 网络的“guest 和 host 能够通信,同时又是 nat 模式”的网络设置,叫“nat network”……

    可能是有人弄混了?

    当然,对于 virtualbox 软件,当别的电脑连接 host 中的 nat 虚拟机 guest 的时候,也是需要端口转发的。
    amiwrong123
        16
    amiwrong123  
    OP
       2023-09-23 13:31:56 +08:00 via Android
    @Cu635
    如果是别的电脑连接 host 中的 nat 虚拟机 guest ,这个时候需要端口转发。
    ——
    原来如此,刚好家里边有第 2 个笔记本电脑,我试一下这个端口转发可不可以
    amiwrong123
        17
    amiwrong123  
    OP
       2023-09-23 13:33:13 +08:00 via Android
    @studyrun
    好处是主机和虚拟机之间网速不受限制
    ——
    就冲这一点的话,我觉得还是设置成 nat 模式比较好
    yolee599
        18
    yolee599  
       2023-09-23 13:35:50 +08:00 via Android
    NAT 模式相当于虚拟机生成了一个独立的内网,桥接模式相当于虚拟机弄了一个交换机把 Guest 暴露到了和 Host 同一个网络
    NAT 模式 Host 想要访问 Guest 得做端口转发,桥接模式不用。
    amiwrong123
        19
    amiwrong123  
    OP
       2023-09-23 13:35:52 +08:00 via Android
    @cjpjxjx
    可以在宿主机用 route print 查看到直连路由表
    ——
    那我等会儿看一下这个命令的结果,估计能让我能更加理解这个原理。
    他这个命令应该是把我,真实的无线网卡和虚拟机 vmnet8 网卡的信息都列出来了吧
    yolee599
        20
    yolee599  
       2023-09-23 13:38:53 +08:00 via Android
    @amiwrong123 #17 你这说法不对,NAT 模式的网络拓扑软件模拟的,性能取决于虚拟机软件的性能。而桥接是系统内核的功能,性能最好
    ww2000e
        21
    ww2000e  
       2023-09-23 13:39:16 +08:00
    桥接相当于多一个网卡直接连进局域网,nat 网上解释很多
    amiwrong123
        22
    amiwrong123  
    OP
       2023-09-23 13:42:50 +08:00 via Android
    @yolee599
    你这么说的话好像也有道理。
    kujou
        23
    kujou  
       2023-09-23 14:00:03 +08:00 via Android
    nat 时母鸡和虚拟机不需要映射,ip 也不会变化。
    桥接时 ip 是否变化又路由器决定
    studyrun
        24
    studyrun  
       2023-09-23 14:03:19 +08:00
    @yolee599 #20 不知道你说的性能指什么性能,如果单论网速的话,本机的 nat 还是能轻松超过 2.5G 网卡的路由器(或交换机)的,这个可以用 iperf3 测试下就知道了
    GeruzoniAnsasu
        25
    GeruzoniAnsasu  
       2023-09-23 16:12:42 +08:00
    @studyrun 链路上的同网段机器不需要经过路由器转发。所以桥接和 NAT 不应该会有区别。

    我的 wsl 和宿主机就是桥接的:

    sinotw
        26
    sinotw  
       2023-09-23 16:21:45 +08:00 via iPhone
    虚拟机和宿主机总是在一个子网里,如果从宿主机 ssh 虚拟机,那肯定是没问题的,如果是桥接,在子网的其他主机 ssh 虚拟机也没问题,但 nat 时,其他主机并不在宿主机和虚拟机组成的子网里,所以没有特殊设置的话是不能 ssh 到虚拟机的
    Hopetree
        27
    Hopetree  
       2023-09-23 16:26:55 +08:00
    强烈建议桥接模式,然后设置静态 IP ,这样你的虚拟机就跟主机一样的网络环境,其他同网络的也可以访问虚拟机,桥接网络和设置静态 IP 参考: https://tendcode.com/subject/article/vmware-bridged-network/
    Admstor
        28
    Admstor  
       2023-09-23 16:37:03 +08:00
    如果用桥接模式

    安装后本机出现的那 2 个虚拟网卡禁用也没啥影响

    而且桥接模式会更像一个和你电脑平级的虚拟机
    迁移后网络修改也更容易,甚至都不需要修改
    akira
        29
    akira  
       2023-09-23 16:46:54 +08:00
    桥接破事情少一点。 不熟悉网络的话,无脑上桥接简单点。
    fuis
        30
    fuis  
       2023-09-23 17:13:34 +08:00
    我基本上都是桥接+tailscale ,比较方便
    studyrun
        31
    studyrun  
       2023-09-23 17:37:12 +08:00
    @GeruzoniAnsasu #25 我用的 VMware ,笔记本用的 WiFi ,桥接模式两者只有百兆带宽(链接带宽 866Mbps )。

    > 链路上的同网段机器不需要经过路由器转发。
    这个前提应该是有交换机,wsl 我很久没用了,我记得它是有配虚拟交换机的,你这个速度很可能是走了虚拟交换机
    ysc3839
        32
    ysc3839  
       2023-09-23 17:53:49 +08:00 via Android
    @GeruzoniAnsasu @yolee599
    Windows 版 VMware 的桥接功能是 VMware 实现的,不是操作系统实现的,Linux 版未知。
    印象中 Windows 版 VMware 的桥接功能似乎更类似集线器,虚拟机和苏主机通信会绕到上层交换机,网速会受到限制,而且虚拟机内用 Wireshark 能抓到宿主机网卡收发的包,发现这种情况后我后面都不敢用桥接了。另外宿主机通过 WiFi 联网时,虚拟机桥接也获取不到 IP 地址,所以没特殊需求的话我还是不用桥接。
    另外,Linux 下 libvirt 的桥接需要手动配置个 Linux 的网桥,把宿主机和虚拟机网卡添加进网桥,然后坑就来了,添加后宿主机要上网就只能在网桥这个设备(如 br0)上配置 IP 地址,原来的网卡是用不了的,也就是说如果你在很多地方写了网卡名称(如 eth0),那就必须全都改掉,非常麻烦。因此我没有特殊需求都不会使用桥接,VMware 和 libvirt 的 NAT 模式,虚拟机都可以访问宿主机,并没有什么大问题。
    shijingshijing
        33
    shijingshijing  
       2023-09-23 18:12:06 +08:00
    桥接的话,Host 和 Guest 要通过路由器进行通信;如果只是 Host 和 Guest 之间 ssh ,scp ,没有上网的需要,选 Host-only 就可以了,Host 主机 192.168.2.1 ; Guest 虚拟机 192.168.2.33 这种配置,不管 Host 主机是否能连到外网或者路由器,Guest 都能通过这个 Host-only 的网卡与 Host 主机通信。
    iceheart
        34
    iceheart  
       2023-09-23 19:03:39 +08:00 via Android
    nat 模式,你在宿主机上连虚拟机,就相当于在路由器上访问内网,当然可以直连。
    别的机器上就没这待遇了。

    桥接的意思,就是相当于把宿主机,虚拟机,外边的机器插在一个交换机上,相互访问无压力。
    amiwrong123
        35
    amiwrong123  
    OP
       2023-09-23 19:33:59 +08:00
    @ysc3839 #32
    另外宿主机通过 WiFi 联网时,虚拟机桥接也获取不到 IP 地址
    ----
    是这样的吗,那还有点麻烦呢。我笔记本是直接用的网线连接,回头我试试用 wifi 看看。
    amiwrong123
        36
    amiwrong123  
    OP
       2023-09-23 19:37:21 +08:00
    @shijingshijing #33
    没有上网的需要,选 Host-only 就可以了
    -----
    还是有上网的需求的,vscode 的插件安装没有网的话,很不方便。还得离线安装。
    amiwrong123
        37
    amiwrong123  
    OP
       2023-09-23 19:39:54 +08:00
    @Admstor #28
    迁移后网络修改也更容易,甚至都不需要修改
    ----
    这个怎么理解啊
    amiwrong123
        38
    amiwrong123  
    OP
       2023-09-23 19:52:07 +08:00
    @Hopetree #27
    看了这个文章,意思就是,就算路由器是开着 DHCP 服务的,我这个桥接的虚拟机 也可以强行设置一个 静态的 ip 地址呗
    ysc3839
        39
    ysc3839  
       2023-09-23 19:55:04 +08:00 via Android
    @amiwrong123 建议试试,原因是标准的 WiFi 协议不能实现下级交换机
    https://v2ex.com/t/968325#r_13554569
    yolee599
        40
    yolee599  
       2023-09-23 20:01:58 +08:00 via Android
    @studyrun #24 #32 嗯,我是参考 QEMU 的网络介绍得出的结论,估计 Windows 和 Linux 有差别。见下面链接的 User Networking (SLIRP) 章节:
    https://wiki.qemu.org/Documentation/Networking
    amiwrong123
        41
    amiwrong123  
    OP
       2023-09-23 20:19:58 +08:00
    @sinotw #26
    虚拟机和宿主机总是在一个子网里,如果从宿主机 ssh 虚拟机,那肯定是没问题的
    ----
    是的,我现在才理解这个道理。因为我的这个宿主机是有这个 虚拟网卡 vmnet8 的。

    而其他的主机是没有这个虚拟网卡 vmnet8 ,其他的主机只能访问到我的宿主机。所以才需要端口转发,让其他的主机访问我的宿主机的某个端口,再转发到我的宿主机能访问到的虚拟机上面去。

    不知道上面的理解,正不正确。
    amiwrong123
        42
    amiwrong123  
    OP
       2023-09-23 20:57:42 +08:00
    @cjpjxjx #13
    看了你这篇文章,我大概懂了。

    在 NAT 模式下,那个 vmnet8 网卡,只是用来 host 与 guest 之间通信的。虚拟机上网时,根本就没走 vmnet8 网卡,而且通过虚拟 NAT 设备,去上的网。

    我现在想理解一下,桥接模式下,那个 vmnet0 网卡,是不是也应该这么理解呀?只是用来 host 与 guest 之间通信的。

    https://zhuanlan.zhihu.com/p/568564392
    这篇文章却说:VMware0 没啥用,桥接可以上网的物理网卡,虚拟机就可以直接上网。而 VMnet0 是为物理机创建的虚拟桥接网卡,桥接 VMnet0 ,只能实现 VMnet0 虚拟网络内互通,无法访问外网,效果跟主机模式是一样的。
    churchmice
        43
    churchmice  
       2023-09-23 23:15:38 +08:00 via Android
    我已经能预见到结局了
    折腾两天把这些有的没的搞完了然后也不想学了
    yeqizhang
        44
    yeqizhang  
       2023-09-23 23:25:33 +08:00
    @amiwrong123 没有虚拟网卡 vmnet0 。 是 vmnet0 交换机....
    openbsd
        45
    openbsd  
       2023-09-24 09:37:35 +08:00
    @amiwrong123 #11
    你用的应该是 Workstation
    宿主机自身 ssh NAT 的虚拟机不需要端口映射的
    openbsd
        46
    openbsd  
       2023-09-24 09:39:16 +08:00
    @amiwrong123 #16
    第二个笔记本连接前 理论上应该还需要配置宿主机器的防火墙
    Hopetree
        47
    Hopetree  
       2023-09-24 12:14:28 +08:00
    @amiwrong123 是的,静态 IP 就是固定 IP ,很重要
    qbqbqbqb
        48
    qbqbqbqb  
       2023-09-24 18:00:48 +08:00
    @yolee599 事实上 QEMU 真正实用方案里都不用 SLIRP 做 NAT 联网(用户态实现,性能太差),比如 libvirt ,用这个工具配置 NAT 网络用的是虚拟网卡(一般都是 bridge vnet 模式,实际上就是一个不添加物理接口的网桥;并不是那个真正的虚拟网卡 tun/tap )+ iptables NAT 的实现。也就是说 Linux 里,虚拟机的“桥接”和“NAT”都可以是内核实现。

    而且不同虚拟化软件的差别也并非“Windows 和 Linux”的差别,主要还是看具体的虚拟化实现方案。
    比如说 Linux 的 QEMU ,本体主要是个硬件模拟器,用它来实现全系统虚拟机的功能,自然有一些功能(比如刚才提到的网络;另外还有硬件加速 KVM 等)需要依赖于内核的实现;同时为了方便非 root 、无权限用户,又添加了像 SLIRP 这样的简易的用户态网络实现。
    而 Windows 上的 VMWare 软件,本身就是自成一体的虚拟化方案,里面的虚拟网络功能都是自有的实现,不依赖 Windows 本身的桥接、NAT ( Windows 本身也内置 NAT ,比如 ICS 网络共享)等功能。
    如果 Windows 上换成 Hyper-V ,情况又不一样。
    qbqbqbqb
        49
    qbqbqbqb  
       2023-09-24 18:17:03 +08:00
    @qbqbqbqb 更正:上述表述有一些错误。linux qemu 实用的 NAT 网络宿主端为 tap 虚拟接口+网桥+iptables NAT 的形式(之前表述中“不使用 tap”有错)。
    WingXi
        50
    WingXi  
       2023-09-25 15:37:35 +08:00
    @amiwrong123 我说到的是原理上肯定是需要的。

    因为你并没有在你的帖子里面说你具体在什么系统下面用的哪个虚拟机的产品。

    可能有一些虚拟机默认已经帮你配制了对应的转发端口,所以你用起来就会觉得是直接可以用。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3241 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 13:19 · PVG 21:19 · LAX 05:19 · JFK 08:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.