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. SQL Server 2005/2008 用户数据库文件默认路径和默认备份路径修改方法
  2. Android更新平台架构方案
  3. mysql连接报错:The server time zone value ‘Öйú±ê׼ʱ¼ä‘ is unrecognized or represents more than one time
  4. python process 函数_Python Process创建进程的2种方法详解
  5. Java JDBC工具类
  6. Each interface on the back of the fuselage
  7. 两种查找bapi的方法
  8. linux下监控磁盘空间脚本
  9. Linux文件系统结构
  10. idea生成get/set方法
  11. oracle序列不连续,Oracle不连续的值,如何实现查找上一条、下一条
  12. 防止撤回插件 Android,微信防撤回插件
  13. 用线段树写Dijkstar
  14. 【华为OD机试真题 C语言】机器人走迷宫
  15. 使用猿如意体验【ChatGPT】
  16. 直方图匹配(直方图规定化)
  17. OkHttp 官方中文文档
  18. python-打气球
  19. 在外行人眼中的程序员
  20. Android 状态栏沉浸式效果

热门文章

  1. Java中常用的加密方式
  2. ​【微软比特熊故事汇】10月英雄故事:热爱即分享,上云加技能
  3. python爬虫系列(2)—— requests和BeautifulSoup库的基本用法
  4. 2018最新网易云课堂Python Flask框架全栈开发
  5. JavaScript——关于JavaScript、在HTML中嵌入JS代码的三种方式、变量
  6. matlab中如何创建网络,使用深度网络设计器创建简单的序列分类网络
  7. 为什么要有线索二叉树?
  8. waf 防火墙限制_WAF常见问题
  9. 机器狗搭建记录2-树莓派连接舵机
  10. UVM: callback机制 uvm_callback和uvm_callbacks