如何在 Vagrant 中配置网络

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

在 Vagrant 中配置网络

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

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

1.配置端口转发

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

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

找到以下行:

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

取消注释并定义要转发到哪里的端口。 在这个 example,我正在将访客中的端口 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://localhost:8080 浏览器中的地址。 你会看到 Apache 浏览器上的测试页面。

Apache 网络服务器测试页面

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

1.1。 如果另一个应用程序正在使用端口 8080 怎么办?

在我们之前的 example,我们将guest的80端口转发到host的8080端口。 换句话说,发送到端口 8080 的流量实际上是转发到客户机上的端口 80。 如果其他应用程序当前正在使用端口 8080 怎么办? 运行多个虚拟机时会发生端口冲突。 您可能会在不知不觉中转发已使用的端口。 不用担心! 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 之间创建网络连接。 专用网络是使用主机操作系统可见的虚拟网络适配器创建的。 网络上的其他系统无法与虚拟机通信。 主机系统内允许所有网络操作。

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

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

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

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

重新启动 VM 以使更改生效。

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

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

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

3.配置公网

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

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

config.vm.network "public_network"

Save 和 close 文件。 重新启动 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 配置私有

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

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

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

资源: