端口转发

网络标识: forwarded_port

端口转发允许你访问你主机上面的一个端口, 所有的数据转发到虚拟机的一个端口, 通过 TCP 或者 UDP.

例如: 如果虚拟机运行了一个web服务器, 监听80端口, 你可以制作一个端口转发, 映射端口8080(或者任何其他) 在你的主机上面. 你可以打开你的浏览器器 输入地址 localhost:8080 浏览网站, 当所有的真实网络数据正在被发送到虚拟机.

定义一个端口转发

端口转发配置期待两个参数, 虚拟机上面的端口和主机的端口. 例如:

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

这将允许你访问虚拟机的80端口通过主机上的8080端口.

选项参考

这是一个端口转发可用的完整选项列表. 只有 guesthost 选项是必填项. 以下的区间, 有更多详细的例子用这些选项.

  • guest (整数) - 你想暴露在主机上的虚拟机端口. 这个可以是任意端口.
  • guest_ip (字符串) - 虚拟机ip来绑定端口转发. 如果没有设置这个, 端口将在每个接口. 默认, 这个是空的.
  • host (整数) - 你想在虚拟机访问的主机端口. 这个端口必须大于1024, 除非Vagrant运行为root(不推荐).
  • host_ip (字符串) - 想绑定端口转发的主机ip. 如果不指定, 它将绑定每个ip. 默认, 这个是空的.
  • protocol (字符串) - “udp” 或者 “tcp” 都可以. 这个指定被允许通过端口转发的协议. 默认这个是 “tcp”.

端口转发协议

默认, 定义的任何接口只使用 TCP 协议转发. 一个可选的第三个参数, 你可以指定 protocol: 'udp' 为了通过 UDP. 如果一个端口需要能够同时监听 TCP 和 UDP的协议, 你必须为每个指定的协议定义一个端口转发, 像这样:

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

端口冲突和改正

这个通常运行在多个Vagrant虚拟机无心的创建了端口转发, 相互冲突(例如, 两个分开的Vagrant项目转发到8080端口). Vagrant 包含内建的装置发现这个并且自动改成正确的.

发现端口冲突总是被完成. Vagrant 将不允许你定义一个端口转发在主机出现接口网络和连接的端口.

端口冲突自动更正必须为每个端口转发手动开启, 由于它经常是意想不到的当它发生, 然后让用户想端口可能不正确. 开启端口更正是容易的:

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

最后: auto_correct 参数设置为true, 是告诉Vagrant自动更正任何冲突, 当vagrant 启动 或者 vagrant 重启的时候. Vagrant 将会输出关于任何冲突相关信息, 并且自动更正正确的模式, 所以你可以注意一下提示.