vagrant 网络

为了连接vagrant创建的环境,他提供了一些高级的网络选项例如:端口转发、连接到公用网络,或者创建一个私有的网络。高级的网络选项用来创建一个在不同的虚拟机间工作的抽象层。这也就是说你可以用你的vagrantfile来运行在Virtualbox虚拟机同时你也可以合理的期望这个vagrantfile在vmware虚拟机下也能运行。首先应当赌一下基本应用内容,然后读下面的针对特定网络功能的指导。

网络的基本应用

vagrant提供了很多用来把你的客户机连接到网络的选项。但是很重要的一点,就像很多网络配置一样,他有一个标准的模式。

配置

所有的网络配置都是在vagrantfile的config.vm.network方法里面。例如下面的这些配置,顶一下一些转发端口

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

每一个网络类型都有一个标识符,例如上面例子中:forwarded_port。下面是一组可以针对每个网络类型不同的配置参数。转发端口的情况下,需要两个数字参数。客户机端口,以及客户机可以连接的主机端口。

多网络

多网络配置可以通过定义多个config.vm.network在一个vagrantfile中来实现。更确切的说,对于不同的提供者,网络的配置可以不同。一般来说,命令指定启用网络的顺序。

网络开启

网络会自动配置和开启,当在vagrantfile中定义了,运行vagrant up或者运行vagrant reload的过程中

转发端口

网络标识符:forwarded_port

vagrant转发端口允许连接主机的一个端口,让所有的数据都转发到客户机端口上,不管是TCP还是UDP协议。例如:如果客户机运行一个网络服务监听程序在80端口上,你可以把他映射到你主机的8080端口上。这样你就可以在浏览器中输入localhost:8080来浏览网页,所有的网络数据都会被转发到客户机。

定义转发端口

转发端口的配置需要两个参数,客户机端口和主机端口

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

这个配置将会通过主机的8080端口访问客户机的80端口。

对于大多数的提供者来说,转发端口默认绑定到所有接口。这也就是说网络上的其他设备也可以连接转发端口。如果你想限制连接可以看guest_ip和host_ip部分。

参考选项

这是转发端口的所有选项列表。

  • guest(int)--你希望暴露给主机的端口,可以是任何端口
  • guest_ip(string)--绑定到转发端口的客户IP,如果这个没有设置,这个端口可以转到任何一个IP接口。默认为空
  • host(int)--用来连接客户机端口的主机端口。这个数值必须大于1024,除非vagrant作为root用户运行。
  • host_ip(string)--你打算绑定转发端口的主机IP。如果没有指定,这个可以绑定到任何一个IP地址,默认为空。
  • protocol(string)--或者是TCP或者是UDP.这个选项指定了准许通过转发端口的协议。默认是TCP

转发端口协议

默认情况下,任何定义的端口只会转发TCP协议。作为可选的第三个选项,为了传输UDP包,你可以指定 protocal:'udp'。如果一个端口需要监听这2种协议,你必须定义这个端口协议2次,每次指定一个协议。就像下面这样

Vagrant.configure("2") do |config|config.vm.network "forwarded_port", guest: 2003, host: 12003, protocol: "tcp"config.vm.network "forwarded_port", guest: 2003, host: 12003, protocol: "udp"
end

端口冲突和纠正

当运行多个vagrant机器的时候,经常会遇到定义一个转发端口,互相冲突。vagrant包括内建的机制会自动检测和纠正这种情况。端口冲突检测总是这样做的。vagrant通常不会允许你定义一个主机已经接收和连接的转发端口。

对于每个转发端口都必须手动启用端口冲突自动校正,因为当它发生的时候,往往是出人意料的。并且还会导致vagrant用户认为这个端口没有被转发。启动端口校正很简单:

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

最后的:auto_correct参数设置为true,告诉vagrant自动纠正任何冲突。当运行vagrant up和vagrant reload的时候,vagrant会打印冲突检测和自动纠正的信息,这样你就可以注意和纠正信息。

私有网络

网络标志符:private_network

vagrant私有网络允许你连接你的客户机,通过不是公共Internet网络访问的IP地址。也就是说,你的机器获得一个私有地址空间。在同一个私有网络中的多台机器可以互相通信。

DHCP

应用私有网络的最简单的方式是,通过DHCP来分发IP地址。

Vagrant.configure("2") do |config|config.vm.network "private_network", type: "dhcp"
end

这将会从保留的地址空间中,自动的分配IP地址。这个可以IP可以通过用vagrant ssh命令来SSH连接到这台机器,或者用合适的命令来获取这个IP地址,例如ifconfig。

静态IP

你也可以指定一个静态的IP地址。这样就可以通过这个静态的IP地址,连接到你的vagrant机器中。配置静态IP地址的vagrantfile如下:

Vagrant.configure("2") do |config|config.vm.network "private_network", ip: "192.168.50.4"
end

在配置的时候需要注意,这个静态的IP地址没有和同一个网络的其他IP地址冲突。

如果你能够选择你想要的IP地址,应该从保留的私有地址空间中选择。这些地址将会被保证不会公共转发,对于大多数的路由也会阻断外部网络发送给他们的信息。

对于大多数的操作系统来说,增加静态IP地址的配置选项,通过设置默认的网关和MTU是可行的。

IPV6

你也可以指定一个静态的IPV6的地址。对于DHCP是不支持IPV6的。用IPV6只需要指定一个地址就可以了。

Vagrant.configure("2") do |config|config.vm.network "private_network", ip: "fde4:8dba:82e1::c4"
end

这个将会指定一个IP到这个机器。整个/64子网是保留的。确认使用保留本地空间的IPV6地址。你也可以修改前缀长度通过改变netmask选项

Vagrant.configure("2") do |config|config.vm.network "private_network",ip: "fde4:8dba:82e1::c4",netmask: "96"
end

只有vagrant 1.7.5之后的版本,才支持IPV6私有网络,并且不是每个提供者都支持。

禁止自动配置

如果你想手工配置网络接口,你可以通过指定auto_config参数来禁用vagrant自动配置的特性。

Vagrant.configure("2") do |config|config.vm.network "private_network", ip: "192.168.50.4",auto_config: false
end

如果在设置auto_config之前,你已经启动了vagrant环境。它最初放置的文件将在那里停留。你必须手动删除掉它,然后重新创建机器。

不同的操作系统创建的文件路径不同。例如,对于Linux版本,他的路径是/etc/network/interfaces.通常你应该查看网络接口配置的通用位置。

公共网络

网络标识符:public_network

vagrant的公共网络,比起私有网络的私有性差一点。对于不同的提供者具体的含义也是不同的。公共网络的意思是,当私有网络不允许别的机器连接到你的机器,而公共网络可以。

DHCP

最简单的用公共网络的是通过DHCP分配公共IP地址。这种情况下配置很简单。

Vagrant.configure("2") do |config|config.vm.network "public_network"
end

当用DHCP的时候,这个可以IP可以通过用vagrant ssh命令来SSH连接到这台机器,或者用合适的命令来获取这个IP地址,例如ifconfig。

用DHCP指定默认路由

一些情况下需要DHCP指定原封不动的路由,这种情况下就需要通过use_dhcp_assigned_default_route选项

Vagrant.configure("2") do |config|config.vm.network "public_network",use_dhcp_assigned_default_route: true
end

静态IP

根据你的设置,你可能希望手工设定网桥接口的IP地址。只需要在网络定制中增加:IP分项。

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

默认网络接口

如果超过一个网络接口在主机中可用。vagrant会让你选择那个接口虚拟机需要桥接。默认的可以通过:bridge分句来设定。

config.vm.network "public_network", bridge: "en1: Wi-Fi (AirPort)"

期望的标识符字符串必须准确的匹配可以获取的接口名字。如果能够找到。vagrant会从一个列表中让你选择一个。

config.vm.network "public_network", bridge: ["en1: Wi-Fi (AirPort)","en6: Broadcom NetXtreme Gigabit Ethernet Controller",
]

禁用自动配置

如果你想手工配置,可以禁用自动配置通过指定auto_config

Vagrant.configure("2") do |config|config.vm.network "public_network", auto_config: false
end

这样的话shell提供者就会被用来配置接口IP

Vagrant.configure("2") do |config|config.vm.network "public_network", auto_config: false# manual ipconfig.vm.provision "shell",run: "always",inline: "ifconfig eth1 192.168.0.17 netmask 255.255.255.0 up"# manual ipv6config.vm.provision "shell",run: "always",inline: "ifconfig eth1 inet6 add fc00::17/7"
end

默认路由

根据你的设置,你可能希望手工覆盖默认路由配置。如果你想从别的网络通过公共网络访问vagrant盒子,这是需要配置的。为了完成这个,你可以用一个提供者脚本。

  config.vm.network "public_network", ip: "192.168.0.17"# default routerconfig.vm.provision "shell",run: "always",inline: "route add default gw 192.168.0.1"# default router ipv6config.vm.provision "shell",run: "always",inline: "route -A inet6 add default gw fc00::1 eth1"# delete default gw on eth0config.vm.provision "shell",run: "always",inline: "eval `route -n | awk '{ if ($8 ==\"eth0\" && $2 != \"0.0.0.0\") print \"route del default gw \" $2; }'`"

上面的配置有点复杂。可能需要客户系统指定。但是我们在这里粗略的介绍,因为这是个公共的问题。

vagrant 网络相关推荐

  1. vagrant网络配置

    私有网络和公有网络的区别 私有网络相当于宿主机作为一层路由器,与宿主机同一网段的电脑不能直接访问到虚拟机,虚拟机和宿主机相当于在另外一个网络中 公有网络相当于让虚拟机直接在宿主机的同一个网段下 私有网 ...

  2. Vagrant (三) - 网络配置

    这个章节脱胎于我早期的blog文章,订正了一下句法和准确性. 原始的文字在 VAGRANT 网络配置 (HIDE) 网络配置 Vagrant可以指定三种网络:端口转发(Forwarded Ports) ...

  3. vagrant 使用 Beta

    Vagrant使用 Beta Destroy 销毁将会使客户机器从宿主机的磁盘上全部抹掉,一旦客户机被销毁将会回到最原始的状态,就像你从没有启动过一样,要注意的是使用这个命令会丢失你所有的文件和数据, ...

  4. Vagrant设置私有网络

    前言 Varangt可以配置私有网络,有多种方式,其中静态IP是我常用的一种.本文介绍如何为虚拟机指定静态IP. 设置静态IP 当你为虚拟机指定静态 IP后,主机就可以通过指定的静态 IP 访问虚拟机 ...

  5. 让 VAGRANT 启动并运行起来

    Vagrant是什么,不是什么. Vagrant是构建在虚拟化技术之上的虚拟机运行环境管理工具.通过Vagrant可以方便实现的对虚拟机的管理,包括建立和删除虚拟机.配置虚拟机运行参数.管理虚拟机运行 ...

  6. 谈谈 Docker 网络

    基于近期学习的 Docker 内容,整理与 Docker 网络相关的知识. 实验环境:Centos 7.4 Docker 版本如下: Client:Version: 18.03.1-ceAPI ver ...

  7. linux网络命名空间详解,『中级篇』 Linux网络命名空间(25)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』 Linux网络命名空间(25) docker底层技术,非常重要的关于namespace,network的names ...

  8. Linux 网络管理(1) - 网络配置文件

    Linux 网络管理 - 网络配置文件 测试机为 Centos7 一.网卡信息文件 1. 文件位置 /etc/sysconfig/network-scripts/ifcfg-* 实例 [vagrant ...

  9. vagrant系列教程(二):vagrant的配置文件vagrantfile详解(转)

    原文:http://blog.csdn.net/hel12he/article/details/51089774 上一篇文章完整的讲叙了如何安装一个vagrant的环境.这里主要说一说vagrant的 ...

最新文章

  1. webpack打包第三方类库的正确姿势
  2. 系统间通信1:阻塞与非阻塞式通信A
  3. c语言掌上通,计算机二级C语言掌上通在哪下载安装?计算机掌上通好用吗?
  4. 基于随机梯度下降法的手写数字识别、epoch是什么、python实现
  5. aws s3 獲取所有文件_通过Java上传下载AWS S3文件,并解决文件数量超过1000的问题...
  6. 2019年第一批重点作品版权保护预警名单公布 都是贺岁档
  7. 在线部署web项目(适用于较大型项目)
  8. Web开发过程中需要学习的知识有哪些?
  9. 图片洗牌切换动画特效
  10. Android 四大组件学习之ContentProvider一
  11. Ubuntu下的Hadoop安装
  12. SQL最全基础教程(保证你看了绝对点赞收藏)
  13. 金蝶连服务器显示演示版,金蝶正版和金蝶演示版的区别
  14. C报错ld returned 1 exit status可能的原因
  15. 程序员跳槽时,如何优雅地谈薪水?
  16. 深入浅出理解Java并发AQS的共享锁模式
  17. 作业 20181204-5 Final阶段贡献分配规则及实施
  18. yocto FILES_${PN}
  19. make错误 redis6_redis安装make失败,make[1]: *** [adlist.o] Error 127....
  20. Linux学习日记4——ftp、lftp、nfs

热门文章

  1. 事件循环(Event Loop)
  2. Monthly Expense(二分)
  3. 关于查询功能中的重置
  4. 2020产品经理薪资大起底
  5. js bind函数详解
  6. excel单元格斜线_学习记录-第二十四天(表姐excel从0到1-第1天)
  7. GIS VBA 创建界址点要素
  8. 用Verilog实现60秒倒计时时钟
  9. 加菲猫语录,只准笑不准学
  10. 安装linux虚拟机桌面,Linux系统中虚拟机安装教程(图形界面)