流浪汉 在开发人员和 DevOps 工程师中如此受欢迎,因为他们可以继续在本地系统上使用现有的开发工具(例如编辑器、浏览器、调试器等)。 为了 example,开发人员可以将文件从客户机同步到本地系统,使用他们喜欢的编辑器编辑这些文件,最后将它们同步回客户机。 同样,如果他们在 VM 上创建了 Web 应用程序,他们可以从本地系统的 Web 浏览器访问和测试该应用程序。 在本指南中,我们将了解如何在 Vagrant 中配置网络以提供从本地主机系统访问来宾机器的权限。
在 Vagrant 中配置网络
Vagrant 提供以下三种网络选项:
- 转发端口
- 专用网络(仅主机网络)
- 公共网络(桥接网络)
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
现在用更新的 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 浏览器上的测试页面。
即使我们使用 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 文档以获取更详细的配置。
资源: