virtualbox使用3-配置网络

2023-05-16

终于到正题了,哈哈,开始的动机就是把如何配置网络记下来,省得下次或者日后又要到处搜。

========================================================

网络类型

虚拟机中(或者物理机也应该有相同的概念吧,毕竟虚拟机虚拟机,就是为了虚拟物理机的吗,不过太确定,网络这块一直是半懂不懂的)中的网络类型主要的有3种,NAT, Host-Only,Bridged

  • Bridged 桥接,可以理解为在vm中使用宿主机(以下叫host吧,省事)的网块来进行网络通信,相当于在vm与host的网卡搭了一个桥,所以效果就是vm与host本身处理同等地位,此时可以把vm看成是host机所在网络的另一个台“物理”机,最简单或者说这才是vm的真正目的,虚拟出来一个物理机嘛,不过缺点就是费网址,因为我们用的一般是C类网络,前3段是网络地址,留给主机地址的只有第4段,8位,最多也就255台机(还不算首尾地址需要用来做网络地址和广播地址)。但在实际自己使用的过程中也没有这么多台机吧,所以我感觉这个应该才是主流,不过网上的大部分介绍都是配置的另外两种。不知道是不是有什么其他我还没搞清楚的地方,等有空了在来试着配这种网络吧。
  • Host-Only 仅主机,这个很好理解,就是主机网络,把主机当成一个网关(其实是在主机中新建一个虚拟网卡,virtualbox安装的时候默认建了一个叫“以太网适配器 VirtualBox Host-Only Network”的虚拟网卡),然后其下的所有vm都加入这个网络,就是一个小的局域网,和以前大学宿舍间连网打游戏一样,哈哈。所以这个局域网内的所有vm可以相互通信,但不能访问外网(也就是不能通过host连到Internet)。这个是这次需要配置的主要工作,因为cluster中的vm之间要能彼此相互通信,其实我感觉用桥接更方便啊,看来有时间真要去看看桥接配置。一句话,host-only是下面所有的vm组一个局域网,bridged就是vm加入host所在的局域网
  • NAT 网络地址转换,Network Address Translation,这个是最简单的通信方式,基本不需要配置,纯基于软件(Oracle VM VirtualBox's NAT engine),由其负责刚通信包的地址转换成host所在的地址在转发出去,回来的reply数据包也一样由engine负责转给vm。由于简单不需要配置,所以这也是virtual box给每一个vm默认的网络配置。可以虚拟多个网卡都用NAT,每一个都会分配独立的IP, 从10.0.2.0开始,10.0.3.0 ...以此类推,每一个NAT网卡都相当于一个私有的网络,所以各个vm之间不能相互通信。

附上官方文档对这3种网络模式的原文以方便更准确的理解,来源于Chapter 6. Virtual Networking (virtualbox.org)。

Bridged:

With bridged networking, Oracle VM VirtualBox uses a device driver on your host system that filters data from your physical network adapter. This driver is therefore called a net filter driver. This enables Oracle VM VirtualBox to intercept data from the physical network and inject data into it, effectively creating a new network interface in software. When a guest is using such a new software interface, it looks to the host system as though the guest were physically connected to the interface using a network cable. The host can send data to the guest through that interface and receive data from it. This means that you can set up routing or bridging between the guest and the rest of your network.

Host-Only:

Host-only networking can be thought of as a hybrid between the bridged and internal networking modes. As with bridged networking, the virtual machines can talk to each other and the host as if they were connected through a physical Ethernet switch. As with internal networking, a physical networking interface need not be present, and the virtual machines cannot talk to the world outside the host since they are not connected to a physical networking interface.

NAT:

Network Address Translation (NAT) is the simplest way of accessing an external network from a virtual machine. Usually, it does not require any configuration on the host network and guest system. For this reason, it is the default networking mode in Oracle VM VirtualBox.

以上就是理论部分,由于NAT默认就配置好了,所以只需要在配一个host-only网络即可,也就是配个局域网。其实也很简单,就像大学时一样,配个ip地址,子网掩码,网关,DNS这些即可。Linux现在还有UI了,在UI上配置和在windows里感觉一样,不过一般还都是通过修改配置文件来实现,linux中一切皆文件,不管啥操作,最终落地都是改文件。 

配置Host-Only网络

virtualbox安装的时候就已经默认创建了一个Host-Only Adapter,所以只需要知道apdater的网络配置即可,可以通过“管理-主机网络管理器”来进行查看。如果需要多个(比如搭多个不同的局域网或者默认创建的不知道为啥没了),也可以通过这个界面来新增。从主机网络管理器中可以看到,默认创建的这个是Adapter的网络是192.168.56.1/24,DHCP服务器地址是192.168.56.100/24, 自动分配的ip地址段为192.168.56.101 - 192.168.56.254。不过一般都不会使用DHCP,而是配置静态或者说固定的ip地址,这样方便ssh连接。

配置文件

对于ubuntu操作系统来说,从18.04开始使用新的更清晰的yaml配置文件/etc/netplan/*来进行配置,而不再使用之前版本的/etc/network/interfaces文件来配置。这也是我一开始为啥会奇怪我装的ubuntu居然没有这个文件,还在好奇他的网络是怎么通的呢,坑死我了。。。。

附上两个不同配置文件的样例, 来自Configuring Network between Host and Guest VM in VirtualBox | Yury Zhauniarovich.

/etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface (it receives address automatically - dhcp)
auto enp0s3
iface enp0s3 inet dhcp

# Secondary interface with static ip (we need to configure this section)
auto enp0s8               # put the name of the new interface
iface enp0s8 inet static  # we choose IP address manually (static) 
address 192.168.56.5      # ip address that we have chosen (each VM should have different IP in the 192.168.56.0/24 network) 
netmask 255.255.255.0     # /24 network
# gateway 192.168.56.1      # if you don't have access to the Internet try to comment this option

/etc/netplan/01-netconfig.yaml

network:
  version: 2
  ethernets:
    enp0s3:
      dhcp4: yes
    enp0s8:
      dhcp4: no
      addresses: [192.168.56.10/24]
      # gateway4: 192.168.56.1

相比来说,很明显新版本的配置文件更简单清晰明了易懂方便快捷(此处省略一万字的表扬),旧版的那个难记又难懂(此处同样省略大概5千字的吐槽吧,不过好在我不用管他,哈哈)

对于配置文件来说,我安装的ubuntu 22来说,自动生成的配置文件名是/etc/netplan/00-installer-config.yaml,其默认内容是:

# This is the network config written by 'subiquity'
network:
  ethernets:
    enp0s3:
      dhcp4: true
  version: 2

其实我已经添加了Host-Only Adapter了,不过并没有加到这个配置文件中,所以看来virtualbox并不会自动来修改配置文件,不知道以后的版本会不会加强这个功能,这样我只要在virtualbox界面去配置管理网络就好了。

添加Host-Only网卡

默认virtualbox vm已经有了一个网卡1(NAT模式的),只需要新加一个host-only的网卡,相当方便,关机状态右键选设置,然后找到"网络"配置项,在virtualbox UI上支持添加4块网卡,再多就要自己去改了(官网上也有说明,一般没这必要,我也没去仔细看了,以后有需要再说吧,目测不会有这个需要.lol)。网卡1默认是启用的,连接方式是NAT,不用管他,网卡2先勾选“启用网络连接”,连接方式选“仅主机(Host-Only)网络”,由于我只有virtualbox帮忙创建的一个Adpater,所以默认界面名称就会选择"VirtualBox Host-Only Ethernet Adapter",如果有多个,需要连哪个就选哪个,选了哪个就给vm配对应网段下的ip地址即可

配置vm静态ip地址

最后这一步也就是根据所选的host-only adapter所在的网络来修改配置文件,同一个网段下的vm也使用不同的ip地址,不然会有ip地址冲突(想想好多年都没有遇到这种情况了,记得以前大学上电脑课经常会遇到,哈哈,有点怀念)。我的配置文件如下:

/etc/netplan/00-installer-config.yaml

# This is the network config written by 'jtian'
network:
  ethernets:
    enp0s3:
      dhcp4: true
    enp0s8:
      dhcp4: false
      addresses: [192.168.56.12/24]
  version: 2

 几点注意事项:

  • 新的配置文件是yaml格式,这种文件以缩进来表示结构,所以尽量不要用tab键,每级同样空格数即可(一般是2个空格)
  • 网卡设备名可以通过ip addr show (子命令可简写,所以也可以写成ip a s)来查看,也就是enp0s3, enp0s8那些,s3那个的地址是10.0.2.15/24,可以看出是NAT的网卡,另一个s8就是新加的host-only网卡,现在还没有地址(写文章的时候还没有配置好,哈哈,这次是写整理,完了我在自己去配,因为理解后感觉没啥难度了,应该不会出错,真出错我在过来改吧)
  • 配置完成后要重启服务,推荐使用sudo netplan try,这个命令会校验配置文件模式,正确后在应用,当然有自信的话(往往大部分情况下都会被打脸)也可以直接使用sudo netplan apply来不校验直接上。
jtian@k8s-master:~$ ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:c3:8a:92 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 metric 100 brd 10.0.2.255 scope global dynamic enp0s3
       valid_lft 86353sec preferred_lft 86353sec
    inet6 fe80::a00:27ff:fec3:8a92/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:99:c8:14 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.10/24 brd 192.168.56.255 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe99:c814/64 scope link 
       valid_lft forever preferred_lft forever

我给3台vm分别设置的ip如下:

k8s-master:  192.168.56.10

k8s-worker1: 192.168.56.11

k8s-worker2: 192.168.56.12

吼吼,try完就生效,直接ssh可以连啦,哈哈,搞定。

=====================================================================

上面的通是通了,可惜在搭k8s集群的时候不好用(其实还是我没有完全理解清楚,不管怎么样,再更新一下我现在的配置,说明一些之前可能理解错误的地方)

NAT和NAT Service

virtualbox又将他的NAT分成了两种,一种是默认配置好的NAT,也就是上文提到的,在创建vm时自动配置好,但是ip地址固定为10.0.2.x(忘了具体的值了),而且不支持改动(忘了在哪看到说改了也不生效还是怎么。。。),反正这种只用于创建vm来进行上网,如果搭建集群,则需要使用net service(也就是特殊的nat,这个应该就是vmware中的nat).

virtualbox默认没有创建这种网络,需要在“管理-全局设定-网络”中新建,并且可以指定网络(指定自己的网段,集群中的节点需要在同一个网段内,我用的是192.168.147.0/24),并配置端口转发(主要是为了对外暴露vm或者从主机ssh到vm)

创建完NAT service后,就可以在vm的网络设置中将网卡的链接方式从默认的"网络地址转化(NAT)"改成"NAT网络“。此时一张网卡就实现了对外通信和集群内部通信。

ubuntu的网络配置和上文host-only中的配置一样,修改/etc/netplan/xxx下的yaml配置文件。

另外还要配置/etc/hosts文件,这是一个主机名-ip地址映射文件,用来解析主机名的。具体配置如下:

root@k8s-master:~# cat /etc/netplan/00-installer-config.yaml 
network:
  ethernets:
    enp0s3:
      dhcp4: false
      addresses: [192.168.147.10/24]
      routes:
        - to: default
          via: 192.168.147.1
      nameservers:
        addresses: [8.8.8.8]
  version: 2
root@k8s-master:~# cat /etc/hosts
127.0.0.1 localhost
192.168.147.10 k8s-master
192.168.147.11 k8s-worker1
192.168.147.12 k8s-worker2

默认网关

旧版本的ubuntu配置网关更简单,直接有netplan中使用"gateway4: 192.168.147.1”即可,但是更新后会提示这种方式废弃了,建议使用新的routes来配,也就是上文中的配置

主机ssh设置

使用NAT后默认主机是不能访问vm的,所以需要通过端口映射来进行访问,在上面的NAT网络配置里可以设置端口映射,“TCP 127.0.0.1 62210 192.168.147.11 22”,这样就可以在主机中使用ssh 127.0.0.1:62210来实现对vm的ssh连接了。(不知道有没有更方便的方式,因为这种需要为每台机创建个端口映射,以后理解加深了在来更新吧)

====================================================================

参考文章列表:

Configuring Network between Host and Guest VM in VirtualBox | Yury Zhauniarovich

Chapter 6. Virtual Networking (virtualbox.org)

VirtualBox Network Settings: All You Need to Know (nakivo.com)

How to set a default gateway with Netplan, now that gateway4 has been deprecated | TechRepublic

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

virtualbox使用3-配置网络 的相关文章

随机推荐

  • Linux基础知识之systemd详解

    0x00 Systemd 简述 1 Linux 启动流程 2 主角登场 0x01 Systemd Unit 1 配置文件 2 启动流程 3 进程树 Process tree 4 运行级别 0x02 Systemd Manager 1 Sys
  • IntelliJ IDEA中有什么让你相见恨晚的好用插件?

    hello xff0c 大家好 xff0c 我是 Jackpop xff0c 硕士毕业于哈尔滨工业大学 xff0c 曾在华为 阿里等大厂工作 xff0c 如果你对升学 就业 技术提升等有疑惑 xff0c 不妨交个朋友 xff1a 我是Jac
  • Android串口的使用(转载+移植)

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 移植java文件二 移植jni文件总结 前言 最近需要在上层app使用串口 发送指令对底层硬件进行操作 xff0c 因此
  • webstorm 代码格式检测

  • Android NFC基础入门

    说道NFC 是Near Field Communication缩写 xff0c 就是近距离无线通讯技术 NFC采用主动和被动两种通信模式 工作的模式有三种 xff0c 读写标签 xff0c 点对点 xff0c 仿真卡模式 xff0c 今天我
  • 嵌入式系统实践 12 ——基于ARM汇编 Keil5 MSP432 P401R开发板

    物联网实验1 阿里云远程控制小灯 span class token comment span span class token comment span span class token comment MSP432P401 span sp
  • Linux下使用rpm包安装MySQL数据库

    root 64 Hadoop102 df h df 34 34 没有那个文件或目录 df 34 h 34 没有那个文件或目录 root 64 Hadoop102 df h 文件系统 容量 已用 可用 已用 挂载点 dev mapper ce
  • Linux下SSH登录的三种方式

    SSH登录 SSH密钥登录 xff1a SSH默认采用密码登录 xff0c 这种方法有很多缺点 xff0c 简单的密码不安全 xff0c 复杂的密码不容易记忆 xff0c 每次手动输入也很麻烦 密钥登录是更好的解决方案 接下来介绍三种SSH
  • 在失望中重找希望——我的2013年工作总结

    时间过的真的是快 来广州已整整工作了一年啦 从2012年长沙工作离职后 为了我的女朋友 我毅然踏上了南下广州的征途 来到羊城后 很快 xff0c 一个礼拜就找到了现在工作的这家公司 现在回想一下 真觉得当初没有好好斟酌一下 2013年里 x
  • ubuntu root开机自登录 与 ros 节点自启

    1 systemctl命令及开机自启 新建a sh文件 放入 cd etc vim a sh xff01 usr bin env bash bash c 34 source opt ros melodic setup bash amp am
  • (原创)详解Glide图片加载库常用方法

    前言 Glide作为安卓开发常用的图片加载库 xff0c 有许多实用而且强大的功能 xff0c 那么 xff0c 今天就来总结一番 xff0c 这次把比较常见的都写出来 xff0c 但并不是全部哦 在介绍之前 xff0c 先来说说什么是Gl
  • 如何将本地windows文件复制到远程windows服务器

    如何使用windows自带的远程桌面连接程序将文件复制到远程服务器内 运行中输入mstsc xff0c 点击确定 输入服务器的IP和端口 xff0c 点击右下角的选项 然后点击本地资源选项卡 点击详细信息按钮 此时勾选你所要连接到服务器上的
  • 强国的语言与语言强国

    强国的语言与语言强国 作者 xff1a 教育部语言文字信息管理司司长 教育部语言文字应用研究所所长 中国社会科学院研究生 李宇明 理论上语言是一律平等的 xff0c 现实中语言是有强有弱的 语言的强弱与语言所属社团的强弱盛衰呈正相关 古罗马
  • 前端post请求报400错误

    前端post请求报400错误 发布时间 xff1a 2019 06 05 18 28 54 400的错误是由于发送请求参数没有成功 原因 xff1a 参数名称类型没有对上 xff1b 或者参数格式不正确 参数格式不正确 xff0c 解决方法
  • Redis集群及其中间遇到的坑

    Redis集群 集群准备 下载并解压Resis xff1a wget http download redis io releases redis 4 0 0 tar gz进入Redis目录下make amp amp make install
  • springmvc的相关配置文件

    最近自己搭了一个小的spring 43 springmvc 43 mybatis的秒杀相关的小工程 xff0c 下面跟大家分享一下 xff0c 用到的配置文件是怎么配置的 xff0c 供参考 我把相关的说明都放在注释中 xff0c 方便阅读
  • C++实现经典同步问题(生产者消费者、读者写者、哲学家进餐、吸烟者问题)

    一 生产者 消费者问题 环境 xff1a windows 问题描述 xff1a 一组生产者进程和一组消费者进程共享一个初始为空 大小为 的缓冲区 xff0c 只有缓冲区没满时 xff0c 生产者才能把消息放入缓冲区 xff0c 否则必须等待
  • token和cookie的区别

    HTTP协议本身是无状态的 xff0c 所以需要一个标志来对用户身份进行验证 1 cookie 用户登录成功后 xff0c 会在服务器存一个session xff0c 同时发送给客户端一个cookie xff0c 这个cookie里面有唯一
  • 在 Vmware 上使用 VxWorks5.5

    Vmware上使用VxWorks5 5 前言 xff1a 1 创建工程 xff1a 可加载工程 xff1a 可引导工程 xff1a 1 5 虚拟机配置 xff1a 2 运行程序 xff1a 前言 xff1a 因为工作中需要用到vxworks
  • virtualbox使用3-配置网络

    终于到正题了 xff0c 哈哈 xff0c 开始的动机就是把如何配置网络记下来 xff0c 省得下次或者日后又要到处搜 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61