Contexte :
Nous allons créer 2 boxs avec un réseau publique pour que les boxs soient joignables sur le réseau.
Création des boxs :
Création de l'environnement :
1 mkdir ~/.my_vagrant/demo2box
2 cd ~/.my_vagrant/demo2box
Création du Vagrantfile :
1 $ vi Vagrantfile
2 # Script systeme pour avoir des infos des boxs
3 # il est variabilisé pour être réutilisé
4 $systemcmd = <<-SCRIPT
5 echo "Infos machine :"
6 hostname
7 ip -4 addr sh eth1
8 date
9 SCRIPT
10
11 Vagrant.configure("2") do |config|
12 #Déclaration de la box 1
13 config.vm.define "vm1" do |vm1|
14 vm1.vm.box = "centos/7"
15 vm1.vm.hostname = 'vm1'
16 vm1.vm.box_url = "centos/7"
17 vm1.vm.network "public_network", bridge: "en0: Wi-Fi (AirPort)", auto_config: false
18 vm1.vm.provision "shell", inline: $systemcmd
19 end
20
21
22 #Déclaration de la box 2
23 config.vm.define "vm2" do |vm2|
24 vm2.vm.box = "centos/7"
25 vm2.vm.hostname = 'vm2'
26 vm2.vm.box_url = "centos/7"
27 vm2.vm.network "public_network", bridge: "en0: Wi-Fi (AirPort)", auto_config: false
28 vm2.vm.provision "shell", inline: $systemcmd
29 end
30 end
On a définit :
le type box : centos 7
le hostname de la VM
le pont entre le réseau publique Vagrant et l'interface réseau de l'hôte
un script post déploiement pour personnaliser la machine (ici donner des infos)
Déploiement des boxs :
1 $ vagrant up
2 Bringing machine 'vm1' up with 'virtualbox' provider...
3 Bringing machine 'vm2' up with 'virtualbox' provider...
4 ==> vm1: Importing base box 'centos/7'...
5 ==> vm1: Matching MAC address for NAT networking...
6 ==> vm1: Checking if box 'centos/7' version '2004.01' is up to date...
7 ==> vm1: Setting the name of the VM: demo2boxs_vm1_1627908909528_61845
8 ==> vm1: Clearing any previously set network interfaces...
9 ==> vm1: Preparing network interfaces based on configuration...
10 vm1: Adapter 1: nat
11 vm1: Adapter 2: bridged
12 ==> vm1: Forwarding ports...
13 vm1: 22 (guest) => 2222 (host) (adapter 1)
14 ==> vm1: Booting VM...
15 ==> vm1: Waiting for machine to boot. This may take a few minutes...
16 vm1: SSH address: 127.0.0.1:2222
17 vm1: SSH username: vagrant
18 vm1: SSH auth method: private key
19 vm1:
20 vm1: Vagrant insecure key detected. Vagrant will automatically replace
21 vm1: this with a newly generated keypair for better security.
22 vm1:
23 vm1: Inserting generated public key within guest...
24 vm1: Removing insecure key from the guest if it's present...
25 vm1: Key inserted! Disconnecting and reconnecting using new SSH key...
26 ==> vm1: Machine booted and ready!
27 ==> vm1: Checking for guest additions in VM...
28 vm1: No guest additions were detected on the base box for this VM! Guest
29 vm1: additions are required for forwarded ports, shared folders, host only
30 vm1: networking, and more. If SSH fails on this machine, please install
31 vm1: the guest additions and repackage the box to continue.
32 vm1:
33 vm1: This is not an error message; everything may continue to work properly,
34 vm1: in which case you may ignore this message.
35 ==> vm1: Setting hostname...
36 ==> vm1: Rsyncing folder: /home/alasta/.my_vagrant/demo2boxs/ => /vagrant
37 ==> vm1: Running provisioner: shell...
38 vm1: Running: inline script
39 vm1: Infos machine :
40 vm1: vm1
41 vm1: 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
42 vm1: inet 192.168.139.166/24 brd 192.168.139.255 scope global noprefixroute dynamic eth1
43 vm1: valid_lft 3597sec preferred_lft 3597sec
44 vm1: Mon Aug 2 12:52:17 UTC 2021
45 ==> vm2: Importing base box 'centos/7'...
46 ==> vm2: Matching MAC address for NAT networking...
47 ==> vm2: Checking if box 'centos/7' version '2004.01' is up to date...
48 ==> vm2: Setting the name of the VM: demo2boxs_vm2_1627908942769_30142
49 ==> vm2: Fixed port collision for 22 => 2222. Now on port 2200.
50 ==> vm2: Clearing any previously set network interfaces...
51 ==> vm2: Preparing network interfaces based on configuration...
52 vm2: Adapter 1: nat
53 vm2: Adapter 2: bridged
54 ==> vm2: Forwarding ports...
55 vm2: 22 (guest) => 2200 (host) (adapter 1)
56 ==> vm2: Booting VM...
57 ==> vm2: Waiting for machine to boot. This may take a few minutes...
58 vm2: SSH address: 127.0.0.1:2200
59 vm2: SSH username: vagrant
60 vm2: SSH auth method: private key
61 vm2:
62 vm2: Vagrant insecure key detected. Vagrant will automatically replace
63 vm2: this with a newly generated keypair for better security.
64 vm2:
65 vm2: Inserting generated public key within guest...
66 vm2: Removing insecure key from the guest if it's present...
67 vm2: Key inserted! Disconnecting and reconnecting using new SSH key...
68 ==> vm2: Machine booted and ready!
69 ==> vm2: Checking for guest additions in VM...
70 vm2: No guest additions were detected on the base box for this VM! Guest
71 vm2: additions are required for forwarded ports, shared folders, host only
72 vm2: networking, and more. If SSH fails on this machine, please install
73 vm2: the guest additions and repackage the box to continue.
74 vm2:
75 vm2: This is not an error message; everything may continue to work properly,
76 vm2: in which case you may ignore this message.
77 ==> vm2: Setting hostname...
78 ==> vm2: Rsyncing folder: /home/alasta/.my_vagrant/demo2boxs/ => /vagrant
79 ==> vm2: Running provisioner: shell...
80 vm2: Running: inline script
81 vm2: Infos machine :
82 vm2: vm2
83 vm2: 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
84 vm2: inet 192.168.139.241/24 brd 192.168.139.255 scope global noprefixroute dynamic eth1
85 vm2: valid_lft 3597sec preferred_lft 3597sec
86 vm2: Mon Aug 2 12:52:51 UTC 2021
Note :
si une des boxs est déjà deployée, il ne déploiera que l'autre.
on aurait pu lancer un vagrant up vm2 pour ne lancer que le débploiement de vm2.
Afficher les boxs de notre environnement :
1 $ vagrant status
2 Current machine states:
3
4 vm1 running (virtualbox)
5 vm2 running (virtualbox)
6
7 This environment represents multiple VMs. The VMs are all listed
8 above with their current state. For more information about a specific
9 VM, run 'vagrant status NAME'.
Dans le cas d'une box arrêtée :
1 $ vagrant halt vm1
2 ==> vm1: Attempting graceful shutdown of VM...
3
4
5 $ vagrant status
6 Current machine states:
7
8 vm1 poweroff (virtualbox)
9 vm2 running (virtualbox)
10
11 This environment represents multiple VMs. The VMs are all listed
12 above with their current state. For more information about a specific
13 VM, run 'vagrant status NAME'.
Connexion shell à une box
1 $ vagrant ssh vm1
Note : quand il y a plusieurs boxs il faut précéiser la box sur laquelle on souhaite se connecter.
ou
1 $ vagrant ssh-config > lab_ssh_config
2
3 $ ssh -F lab_ssh_config vm1
4 Last login: Mon Aug 2 14:05:12 2021 from 192.168.139.105
5 [vagrant@vm1 ~]$
Note : il est possible de modifier les IP et port dans le fichier de sortie du vagrant ssh-config pour utiliser l'IP de sont réseau publique (par défaut l'IP est localhost et le port > 2200).
Tests de connexions :
Récupération de l'IP de la box :
1 $ vagrant ssh vm1
2 Last login: Mon Aug 2 14:07:42 2021 from 10.0.2.2
3 [vagrant@vm1 ~]$ ip addr sh
4 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
5 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
6 inet 127.0.0.1/8 scope host lo
7 valid_lft forever preferred_lft forever
8 inet6 ::1/128 scope host
9 valid_lft forever preferred_lft forever
10 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
11 link/ether 52:54:00:4d:77:d3 brd ff:ff:ff:ff:ff:ff
12 inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
13 valid_lft 85152sec preferred_lft 85152sec
14 inet6 fe80::5054:ff:fe4d:77d3/64 scope link
15 valid_lft forever preferred_lft forever
16 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
17 link/ether 08:00:27:60:f2:25 brd ff:ff:ff:ff:ff:ff
18 inet 192.168.139.166/24 brd 192.168.139.255 scope global noprefixroute dynamic eth1
19 valid_lft 2353sec preferred_lft 2353sec
20 inet6 fe80::47c3:3077:2ed0:74aa/64 scope link noprefixroute
21 valid_lft forever preferred_lft forever
Ici :
10.0.2.15 est l'IP privée, joignable qu'entre les 2 boxs
192.168.139.166 est l'IP publique joignable par "tout le monde"
Test de ping depuis vm2 :
1 [vagrant@vm2 ~]$ ping -c 2 10.0.2.15
2 PING 10.0.2.15 (10.0.2.15) 56(84) bytes of data.
3 64 bytes from 10.0.2.15: icmp_seq=1 ttl=64 time=0.022 ms
4 64 bytes from 10.0.2.15: icmp_seq=2 ttl=64 time=0.048 ms
5
6 --- 10.0.2.15 ping statistics ---
7 2 packets transmitted, 2 received, 0% packet loss, time 1002ms
8 rtt min/avg/max/mdev = 0.022/0.035/0.048/0.013 ms
9 [vagrant@vm2 ~]$ ping -c 2 192.168.139.166
10 PING 192.168.139.166 (192.168.139.166) 56(84) bytes of data.
11 64 bytes from 192.168.139.166: icmp_seq=1 ttl=64 time=0.881 ms
12 64 bytes from 192.168.139.166: icmp_seq=2 ttl=64 time=0.787 ms
13
14 --- 192.168.139.166 ping statistics ---
15 2 packets transmitted, 2 received, 0% packet loss, time 1002ms
16 rtt min/avg/max/mdev = 0.787/0.834/0.881/0.047 ms
Test de ping depuis la machine hôte
1 $ ping -c2 10.0.2.15
2 PING 10.0.2.15 (10.0.2.15): 56 data bytes
3 Request timeout for icmp_seq 0
4
5 --- 10.0.2.15 ping statistics ---
6 2 packets transmitted, 0 packets received, 100.0% packet loss
7
8 $ ping -c 2 192.168.139.166
9 PING 192.168.139.166 (192.168.139.166): 56 data bytes
10 64 bytes from 192.168.139.166: icmp_seq=0 ttl=64 time=0.497 ms
11 64 bytes from 192.168.139.166: icmp_seq=1 ttl=64 time=0.519 ms
12
13 --- 192.168.139.166 ping statistics ---
14 2 packets transmitted, 2 packets received, 0.0% packet loss
15 round-trip min/avg/max/stddev = 0.497/0.508/0.519/0.011 ms