如何在 Vagrant 中配置网络

流浪汉 在开发人员和 DevOps 工程师中如此受欢迎,因为他们可以在本地系统上继续使用现有的开发工具(例如编辑器、浏览器、调试器等)。 例如,开发人员可以将文件从客户机同步到本地系统,使用他们喜欢的编辑器编辑这些文件,最后将它们同步回客户机。 同样,如果他们在 VM 上创建了一个 Web 应用程序,他们可以从本地系统的 Web 浏览器访问和测试该应用程序。 在本指南中,我们将看到如何在 Vagrant 中配置网络以提供从本地主机系统访问来宾机器的权限。

内容

  1. 在 Vagrant 中配置网络
    1. 1.配置端口转发
      1. 1.1. 如果端口 8080 被另一个应用程序使用怎么办?
      2. 1.2. 更改网络协议
    2. 2.配置私网
    3. 3.配置公网
    4. 4.设置主机名
    5. 5.启用多个网络选项

在 Vagrant 中配置网络

Vagrant 提供以下三种网络选项:

  1. 转发端口
  2. 专用网络(仅主机网络)
  3. 公网(桥接网络)

1.配置端口转发

默认情况下,我们可以使用以下命令通过 ssh 访问 Vagrant VM vagrant ssh 命令。 当我们通过 SSH 访问 VM 时,Vagrant 将端口 22 从来宾机器转发到主机中的开放端口。 这称为端口转发。 Vagrant 自动处理这个端口转发过程,无需任何用户干预。 您还可以转发您选择的特定端口。 例如,如果您转发端口 80 在来宾机器上移植 8080 在主机上,您可以通过导航到网络服务器 https://本地主机:8080 在您的主机上。

端口转发可以在“Vagrantfile”中配置。 转到您的 Vagrant 项目目录并在您喜欢的编辑器中打开 Vagrantfile。

找到以下行:

Vagrant.configure("2") do |config| [...]    # config.vm.network "forwarded_port", guest: 80, host: 8080 end

取消注释并定义要转发到何处的端口。 在此示例中,我将来宾中的端口 80 转发到主机中的端口 8080。

Vagrant.configure("2") do |config| [...]    config.vm.network "forwarded_port", guest: 80, host: 8080 end
在 Vagrant 中配置端口转发

现在使用更新的 Vagrantfile 重新启动 Vagrant 机器:

$ vagrant reload --provision

您将看到在输出中配置了端口转发:

==> default: Halting domain… ==> default: Starting domain. ==> default: Waiting for domain to get an IP address… ==> default: Waiting for SSH to become available… ==> default: Creating shared folders metadata… ==> default: Forwarding ports… ==> default: 80 (guest) => 8080 (host) (adapter eth0) ==> default: Rsyncing folder: /home/sk/myvagrants/ => /vagrant

您还可以销毁 VM 并使用更新的 Vagrantfile 重新运行它:

$ vagrant destroy <VM-name>
$ vagrant up

现在使用命令通过 SSH 连接到来宾机器:

$ vagrant ssh

安装 Apache 里面的网络服务器。 如果 VM 是基于 Deb 的,请运行:

$ sudo apt install apache2

如果是基于 RHEL 的系统,请运行:

$ sudo yum install httpd

开始 Apache 服务:

$ sudo systemctl enable --now httpd

现在在您的主机系统中打开 Web 浏览器并导航到 https://本地主机:8080 浏览器中的地址。 你会看到 Apache 在浏览器上测试页面。

Apache 网络服务器测试页面

即使我们使用 URL 访问 Web 服务器 https://本地主机:8080 在主机系统中,它不是由本地网络服务器提供的。 实际网站(即 Apache 测试页)由来宾虚拟机提供,并且所有实际网络数据都被发送到来宾。

1.1. 如果端口 8080 被另一个应用程序使用怎么办?

在我们之前的示例中,我们将端口 80 从来宾转发到主机中的端口 8080。 换句话说,发送到端口 8080 的流量实际上是转发到来宾机器上的端口 80。 如果其他应用程序当前正在使用端口 8080 怎么办? 运行多个 VM 时会发生端口冲突。 您可能会在不知不觉中转发已使用的端口。 不用担心! Vagrant 内置了检测端口冲突的支持。 如果该端口已被另一个应用程序使用,Vagrant 将在输出中报告它,因此您可以释放该端口或使用另一个端口。

Vagrant 也足够聪明,可以自动查找和纠正端口冲突。 如果它发现一个端口与另一个端口发生冲突,它将使用任何其他未使用的端口为您自动更正它。

要启用自动更正,请添加一个额外的选项 auto_correct: true 在 Vagrantfile 的端口转发定义中。

config.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct: true

默认情况下,Vagrant 会在端口之间选择自动更正端口 2200 和端口 2250 范围。 您还可以通过在 Vagrantfile 中定义以下行来选择自己的自定义范围,如下所示。

config.vm.usable_port_range = (2200..2250)

重新启动 Vagrant 机器以使更改生效:

1.2. 更改网络协议

默认情况下,Vagrant 使用 TCP 协议进行端口转发。 但是,如果要转发 UDP 数据包,则可以使用 UDP 协议。

要使用 UDP 端口,请在 Vagrantfile 中添加以下定义:

config.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct: true protocol: "udp"

重新启动 Vagrant VM 以应用更改。

2.配置私网

在专用或仅主机网络中,在主机系统和主机系统上的 VM 之间创建网络连接。 专用网络是使用对主机操作系统可见的虚拟网络适配器创建的。 网络上的其他系统无法与 VM 通信。 主机系统内允许所有网络操作。

专用网络也可以作为 DHCP 服务器并拥有自己的子网。 私有网络中的每个 VM 都会从这个 IP 空间获得一个 IP 地址。 因此,我们可以使用来自主机系统的 IP 直接访问 VM。

要在 Vagrant 中使用静态 IP 地址配置私有或仅主机网络,请打开 Vagrantfile,找到以下行并取消注释。

config.vm.network "private_network", ip: "192.168.121.60"

这里, 192.168.121.60 是 VM 的 IP 地址。 将其替换为您自己的 IP。

重启虚拟机使修改生效。

如果要从 DHCP 自动设置 IP 地址,请修改私有网络定义,如下所示:

config.vm.network "private_network", type: "dhcp"

将随机分配一个 IP 地址给 VM。 为了找到 VM 的 IP,您需要使用 SSH 连接到它 vagrant ssh 命令然后找到它的IP地址 ip 命令。

3.配置公网

在公共或桥接网络中,所有 VM 都将与您的主机位于同一网络中。 每个 VM 将从 DHCP 服务器(如果在本地网络中可用)接收自己的 IP 地址。 因此,所有 VM 都将充当网络上的另一个物理系统,它们可以与网络中的任何系统进行通信。

要配置公共或桥接网络,请编辑 Vagrantfile,找到以下行并取消注释:

config.vm.network "public_network"

Save 和 close 文件。 重新启动 VM 以应用更改。 VM 将自动获取 IP 地址。

如果要设置静态IP,只需修改网络定义,如下所示:

config.vm.network "public_network", ip: "192.168.121.61"

4.设置主机名

您可以使用以下命令定义主机名 config.vm.hostname 在 Vagrantfile 中设置。

在首选编辑器中编辑 Vagrantfile 并添加/修改以下行:

config.vm.hostname = "myhost.ostechnix.example"

Save 和 close 文件。 上面的定义将添加 myhost.ostechnix.example 排队 /etc/hosts 文件。

重启 Vagrant VM 使更改生效。

验证主机名是否已更改:

[[email protected] ~]$ hostname -f myhost.osechnix.example

也可以直接查看内容 /etc/hosts 文件。

$ cat /etc/hosts

示例输出:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 127.0.1.1 myhost.osechnix.example myhost

5.启用多个网络选项

每个网络选项都有其优点和缺点。 出于某种原因,您可能希望将所有网络选项配置到单个 VM。 如果是这样,Vagrant 可以启用多个网络选项。 您所要做的就是在 Vagrantfile 中一一定义网络选项,如下所示:

config.vm.hostname = "myhost.ostechnix.example" config.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct: true config.vm.network "private_network", ip: "192.168.121.60"

当你用这个 Vagrantfile 创建一个新的 VM 时,vagrant 将创建一个具有以下网络详细信息的 VM:

  • 将主机名设置为 myhost.ostechnix.example
  • 配置端口转发
  • 使用静态 IP 192.168.121.60 配置私有

除了配置多种类型的网络,我们还可以定义多个网络。 例如,您可以定义多个具有不同 IP 地址的仅主机网络,如下所示。

config.vm.network "private_network", ip: "192.168.121.60" config.vm.network "private_network", ip: "192.168.121.61"

希望这可以帮助。 在这个阶段,您可能已经了解了 Vagrant 网络类型以及如何从命令行配置 Vagrant 网络的基本概念。 还有更多东西要学。 我建议您查看官方 Vagrant 文档以获得更详细的配置。

资源:

  • 流浪网络

DevOpsLinuxNetworkingVagrantVagrant 命令虚拟化