如何在Vagrant 中配置网络
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"