Vagrant 网络使用

目录

  1. 配置端口映射
  2. 配置内网 IP 地址
  3. 配置公网 IP 地址

配置端口映射 forwarded_port

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

上面将内部虚拟机的 80 映射到外部实体机器的 8080 .

其他参数:

  • auto_correct 如果主机出现端口冲突是否自动修正, 默认否. 有内部的修正算法, 找到合适端口
  • guest 内部映射端口
  • guest_ip 内部映射 IP 地址
  • host 主机映射端口
  • host_ip 主机映射 IP 地址
  • protocol 端口支持的协议, 默认 tcp, 可以设置 udp.
  • id 协议名, 默认是 ${protocol}${guest} 组合.

设置同时支持 tcp 和 udp 协议

1
2
3
4
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

内网 IP 地址 private_network

1
2
3
4
5
6
7
8
Vagrant.configure("2") do |config|
# dhcp, 单机部署时使用, 主要功能就是提供 vagrant ssh 进行访问
config.vm.network "private_network", type: "dhcp"
# static ip, 可以多机组网
config.vm.network "private_network", ip: "192.168.50.4"
# ipv6, 支持 ipv6 网络
config.vm.network "private_network", ip: "fde4:8dba:82e1::c4"
end

支持 dhcp 和 static 的方式, 上面将设置虚拟机的 ipv4 局域网(以 10.x.x.x, 172.16-31.x.x, 192.168.x.x), 内部多个虚拟机可以提供内网进行相互通信.

其他参数:

  • auto_config 是否在虚拟机内自动配置该网络, 默认 true, 可以指定 false 不进行自动配置(此时必须 ssh 进去手动配置)
  • netmask ipv6 模式下默认前缀长度为 64, 可以使用 netmask 自定义, 例如 “96”.

公网 IP 地址 public_network

1
2
3
4
5
6
7
8
9
Vagrant.configure("2") do |config|
# dhcp, 参数使得路由器不在重启后自动重新分配地址, 沿用原有地址
config.vm.network "public_network", use_dhcp_assigned_default_route: true
# static ip, 多个网络支持首选桥接的列表
config.vm.network "public_network", ip: "192.168.0.17", bridge: [
"en1: Wi-Fi (AirPort)",
"en6: Broadcom NetXtreme Gigabit Ethernet Controller",
]
end

手动配置 ip 地址信息

1
2
3
4
5
6
7
8
9
10
11
12
13
Vagrant.configure("2") do |config|
config.vm.network "public_network", auto_config: false

# manual ip
config.vm.provision "shell",
run: "always",
inline: "ifconfig eth1 192.168.0.17 netmask 255.255.255.0 up"

# manual ipv6
config.vm.provision "shell",
run: "always",
inline: "ifconfig eth1 inet6 add fc00::17/7"
end

在外网对 Vagrant 进行访问, 需要进行设置 Route

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Vagrant.configure("2") do |config|
config.vm.network "public_network", ip: "192.168.0.17"

# 默认路由
config.vm.provision "shell",
run: "always",
inline: "route add default gw 192.168.0.1"

# 默认 ipv6 路由
config.vm.provision "shell",
run: "always",
inline: "route -A inet6 add default gw fc00::1 eth1"

# 删除 eth0 的默认 gw 网关
config.vm.provision "shell",
run: "always",
inline: "eval `route -n | awk '{ if ($8 ==\"eth0\" && $2 != \"0.0.0.0\") print \"route del default gw \" $2; }'`"
end
Donate - Support to make this site better.
捐助 - 支持我让我做得更好.