Vagrant網絡設置


Vagrant 網絡設置

基本用法

如何配置

Vagrant 的網絡配置是通過在 Vagrantfile 中調用 config.vm.network 方法來實現的,例如:

# 2 是版本號的意思
Vagrant.configure("2") do |config|
  # 配置網絡端口轉發,配置生效后,可從宿主機8080端口訪問  
  config.vm.network "forwarded_port", guest: 80, host: 8080
end

上面可理解為:調用 config.vm 對象的 network 方法,方法的參數有三個:

  • 字符串 "forwarded_port"
  • 命名參數 guest,值為80
  • 命名參數 host,值為8080

若干知識點

  • 可以通過多次調用 config.vm.network來聲明多種網絡定義
  • 檔調用命令vagrant upvagrant reload的時候網絡會自動啟用
  • 可通過config.vm.hostname 屬性設置主機名

三種網絡配置方式

端口轉發 forwarded_port

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

關於端口沖突的問題

如果出現端口沖突,可以過設置 auto_correct: true來自動修正,修正的信息會打印在 vagrant upvagrant reload的輸出中。

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

除此之外,還可設置一個可用的端口范圍,讓Vagrant在遇到端口沖突時從你指定的范圍去應用一個端口:

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

私人網絡 private_network

私人網絡就是NAT的方式,只有宿主機能通過虛擬機的ip訪問到虛擬機,但是(除了宿主機之外的)其他主機是無法訪問到虛擬機的。

下面是配置虛擬機網絡連接方式為 private_network,虛擬機通過DHCP方式自動獲取ip,從vagrant up的信息可以看出其實就是NAThostonly也可以理解到是只有宿主機能訪問虛擬機:

# 查看 Vagrantfile 配置
$ cat Vagrantfile 
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu:18.04"
  # :private_network 可以寫成 "private_network"
  config.vm.network :private_network, type: "dhcp"
end

# 啟動虛擬機
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat(這里)
    default: Adapter 2: hostonly(還有這里)
    
# ssh 連接到虛擬機
$ vagrant ssh

# 查看虛擬機 ip
$ ifconfig
# ......
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.28.128.3  netmask 255.255.255.0  broadcast 172.28.128.255
        inet6 fe80::a00:27ff:fedc:2366  prefixlen 64  scopeid 0x20<link>
# ......

# 可以從宿主機上ping過去試試,能ping通表示配置沒問題

也可以設置靜態的ip:

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu:18.04"
  # type: "static" 可以不寫
  config.vm.network :private_network, type: "static", ip: "192.168.55.2"
end

但是必須注意:

設置靜態ip時候注意不要設置成 .1,如:192.168.1.1192.168.55.1192.168.77.1,因為 .1 通常預留來做路由的,vagrant upvagrant reload時候也會有相應的提示信息:

$ vagrant reload
==> default: You assigned a static IP ending in ".1" to this machine.
==> default: This is very often used by the router and can cause the
==> default: network to not work properly. If the network doesn't work
==> default: properly, try changing this IP.

如何從虛擬機ping宿主機?

參考:Vagrant ping or curl from guest to host machine

  1. 如果虛擬機設置的是靜態 ip,如192.168.55.2,那么可以通過預留的 192.168.55.1 來 ping 通宿主機

  2. 可以在虛擬機中執行 ip route show 查看路由信息得知:

    vagrant@ubuntu-bionic:~$ ip route show 
    default via 10.0.2.2 dev enp0s3 proto dhcp src 10.0.2.15 metric 100 
    10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 
    10.0.2.2 dev enp0s3 proto dhcp scope link src 10.0.2.15 metric 100 
    192.168.55.0/24 dev enp0s8 proto kernel scope link src 192.168.55.2 
    
    vagrant@ubuntu-bionic:~$ ping 10.0.2.2
    PING 10.0.2.2 (10.0.2.2) 56(84) bytes of data.
    64 bytes from 10.0.2.2: icmp_seq=1 ttl=64 time=0.176 ms
    64 bytes from 10.0.2.2: icmp_seq=2 ttl=64 time=0.274 ms
    
  3. 可以直接 ping 宿主機的 ip(我自己機器能行,但其它機器上沒測試過)

公共網絡 public_network

# 配置公共網絡
$ cat Vagrantfile 
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu:18.04"
  config.vm.network "public_network", ip: "192.168.55.2"
end

# 啟動虛擬機
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu:18.04'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: network_default_1614743427484_66744
==> default: Clearing any previously set network interfaces...
==> default: Available bridged network interfaces:
1) eno1
2) wlp4s0
3) docker0
4) br-ed585c0c0346
5) vethbf396bd
6) veth7ce7b74
7) vpn_a
==> default: When choosing an interface, it is usually the one that is
==> default: being used to connect to the internet.
==> default: 
    default: Which interface should the network bridge to? 1
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: bridged
    
# ssh 進入虛擬機
$ vagrant ssh

# 在虛擬機中查ip
vagrant@ubuntu-bionic:~$ ifconfig
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.55.2  netmask 255.255.255.0  broadcast 192.168.55.255
        inet6 fe80::a00:27ff:fe6e:193b  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:6e:19:3b  txqueuelen 1000  (Ethernet)
        RX packets 38686  bytes 2384911 (2.3 MB)
        RX errors 0  dropped 35952  overruns 0  frame 0
        TX packets 15  bytes 1146 (1.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM