如何在Vagrant 中配置网络

时间:2020-03-21 11:48:06  来源:igfitidea点击:

VAGRANT在开发人员和DEVOPS工程师中都很受欢迎,因为它们可以继续使用现有的开发工具(例如

他们当地系统的编辑,浏览器,调试器等)。
例如,开发人员可以将文件从Guest Machine同步到本地系统,使用他们喜欢的编辑器编辑这些文件,最后将它们同步回Gublet机器。
同样,如果它们在VM上创建了Web应用程序,则可以从其本地系统的Web浏览器访问和测试该应用程序。
在本教程中,我们将看到如何在VAGRANT中配置网络,以便从本地主机系统提供对Guest计算机的访问。

在Vagrant中配置网络

VAGRANT提供以下三个网络选项:

  • 转发端口
  • 私有网络(仅限主机网络)
  • 公共网络(桥接网络)

1.配置端口转发

默认情况下,我们可以使用"VAGRANT SSH"命令通过SSH访问VAGRANT VM。
当我们通过SSH访问VM时,VAGRANT将端口22从Guest Machine转发到主机中的打开端口。
这称为端口转发。
VAGRANT自动处理此端口转发过程,无需任何用户干预。
我们还可以转发我们选择的特定端口。
例如,如果我们在客户机中转发端口80到主机上的端口8080,则可以通过导航到http://lockhost:8080在主机上访问WebServer。

端口转发可以在"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

现在用更新的vagrantfile重新启动Vagrant Machine:

$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进入Guest Machine:

$vagrant ssh

安装Apache WebServer中。
如果VM是基于DEB的,则运行:

$sudo apt install apache2

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

$sudo yum install httpd

启动Apache服务:

$sudo systemctl enable --now httpd

现在在主机系统中打开Web浏览器,并从浏览器中导航到http://localhost:8080地址。
我们将看到浏览器上的Apache测试页面。

即使我们在主机系统中使用URL http://localhost:8080访问Web服务器,它也不会从本地Web服务器提供。
实际的(即Apache测试页面)正在从访客虚拟机提供服务,并将所有实际的网络数据发送到访客。

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

在我们之前的示例中,我们将端口80从访客转发到主机的端口8080。
换句话说,发送到端口8080的流量实际上将转发到来宾机上的端口80。
如果其他应用程序目前正在使用端口8080,该怎么办?
运行多个VM时会发生端口碰撞。
我们可能会在不知不觉中转发已使用的端口。
不用担心! VAGRANT为检测端口碰撞而构建支持。
如果另一个应用程序已使用端口,则Vagrant 将在输出中将其报告,因此我们可以释放端口或者使用其他端口。

VAGRANT也智能 - 足以自动查找和正确的端口碰撞。
如果找到一个端口与另一个端口相撞,它将通过使用任何其他未使用的端口自动更正它。

要启用自动校正,请在VAGRANTFILE中的端口转发定义中添加另外的选项'auto_correct:true'。

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

默认情况下,流浪者将在端口2200和端口2250范围之间选择自动校正端口。
我们还可以通过在下面的VAGRANTFILE中定义以下行来选择我们自己的自定义范围。

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

重新启动Vagrant Machine以生效更改:

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。

要使用静态IP地址配置私有或者仅限于Vagrant的网络,请打开VAGRANTFILE,查找以下行并取消注释它。

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

其中192.168.121.60是VM的IP地址。
用自己的IP替换它。

重新启动VM以生效更改。

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

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

随机IP地址将被分配给VM。
为了找到VM的IP,我们需要使用'VAGRANT SSH'命令进行SSH,然后使用"IP"命令查找其IP地址。

3.配置公共网络

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

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

config.vm.network "public_network"

保存并关闭文件。
重新启动VM使更改生效。
VM将自动获取IP地址。

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

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

4.设置主机名

我们可以使用vagrantfile中的"config.vm.hostname"设置定义主机名。

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

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

保存并关闭文件。
上面的定义将在'/etc/hosts'文件中添加'myhost.theitroad.example'行。

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

验证主机名是否已更改:

[Hyman@theitroad ~]$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。
如果是这样,流浪者有能力启用多个网络选项。
我们所要做的就是逐个在vagrantfile中定义网络选项,如下所示:

config.vm.hostname = "myhost.theitroad.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:

  • 将hostname设置为myhost.theitroad.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"