Páginas

Mostrando entradas con la etiqueta VirtualBox. Mostrar todas las entradas
Mostrando entradas con la etiqueta VirtualBox. Mostrar todas las entradas

domingo, 3 de octubre de 2021

FreeBSD vm-bhyve X11 Forwarding usando SSH

Ejecutar aplicaciones X11 desde invitado vm-bhyve en host.

La(s) aplicacion(es) se ejecutan en la máquina virtual invitada, sin embargo, se muestra en el host. La importancia de esto radica en que puede ejecutar una aplicación en una lugar y mostrar la ventana en el host.

Si una aplicación no es soportada en la máquina host pero bien soportada en la vm podrá ejecutarse en una ventana del host.

Ejecutar Firefox en una vm y mostrarlo en el host FreeBSD 13.0
basado en el reenvío X11 usando ssh.

# vm list
NAME          DATASTORE  LOADER     CPU  MEMORY  VNC  AUTOSTART  STATE
alpine        default    grub       1    512M    -    No         Stopped
arch          default    grub       1    512M    -    No         Stopped
freebsd-12-2  default    bhyveload  1    256M    -    No         Stopped

Iniciar y conectarse a la máquina virtual para permitir el reenvío X11.

# vm start alpine
# vm console alpine

# vm switch info

------------------------
Virtual Switch: public
------------------------
  type: standard
  ident: vm-public
  vlan: -
  physical-ports: re0
  bytes-in: 673338 (657.556K)
  bytes-out: 602940 (588.808K)

  virtual-port
    device: tap2
    vm: alpine

# vm info

------------------------
Virtual Machine: alpine
------------------------
  state: running (25889)
  datastore: default
  loader: grub
  uuid: 3dfa8278-1ca9-11ec-b451-fc3fdbd15275
  uefi: default
  cpu: 1
  memory: 512M
  memory-resident: 123006976 (117.308M)

  console-ports
    com1: /dev/nmdm-alpine.1B

  network-interface
    number: 0
    emulation: virtio-net
    virtual-switch: public
    fixed-mac-address: 58:9c:fc:03:37:ea
    fixed-device: -
    active-device: tap2
    desc: vmnet-alpine-0-public
    mtu: 1500
    bridge: vm-public
    bytes-in: 291480 (284.648K)
    bytes-out: 2158 (2.107K)

  virtual-disk
    number: 0
    device-type: file
    emulation: virtio-blk
    options: -
    system-path: /zroot/vm/alpine/disk0.img
    bytes-size: 10737418240 (10.000G)
    bytes-used: 1160348672 (1.080G)

  snapshots
    zroot/vm/alpine@snap1_300921	452K	jue. sept. 30 17:31 2021

------------------------
Virtual Machine: arch
------------------------
  state: running (43467)
  datastore: default
  loader: grub
  uuid: a923082e-1deb-11ec-9f91-fc3fdbd15275
  uefi: default
  cpu: 1
  memory: 512M
  memory-resident: 164139008 (156.535M)

  console-ports
    com1: /dev/nmdm-arch.1B

  network-interface
    number: 0
    emulation: virtio-net
    virtual-switch: public
    fixed-mac-address: 58:9c:fc:0e:36:e4
    fixed-device: -
    active-device: tap0
    desc: vmnet-arch-0-public
    mtu: 1500
    bridge: vm-public
    bytes-in: 15132 (14.777K)
    bytes-out: 0 (0.000B)

  virtual-disk
    number: 0
    device-type: file
    emulation: virtio-blk
    options: -
    system-path: /zroot/vm/arch/disk0.img
    bytes-size: 9663676416 (9.000G)
    bytes-used: 4176012288 (3.889G)

  snapshots
    zroot/vm/arch@snap1_300921	2.55M	jue. sept. 30 17:31 2021

------------------------
Virtual Machine: freebsd-12-2
------------------------
  state: running (52279)
  datastore: default
  loader: bhyveload
  uuid: e7d636e0-236b-11ec-8cb5-fc3fdbd15275
  uefi: default
  cpu: 1
  memory: 256M
  memory-resident: 138010624 (131.617M)

  console-ports
    com1: /dev/nmdm-freebsd-12-2.1B

  network-interface
    number: 0
    emulation: virtio-net
    virtual-switch: public
    fixed-mac-address: 58:9c:fc:0b:f1:00
    fixed-device: -
    active-device: tap1
    desc: vmnet-freebsd-12-2-0-public
    mtu: 1500
    bridge: vm-public
    bytes-in: 300815 (293.764K)
    bytes-out: 1947 (1.901K)

  virtual-disk
    number: 0
    device-type: file
    emulation: virtio-blk
    options: -
    system-path: /zroot/vm/freebsd-12-2/disk0.img
    bytes-size: 9663676416 (9.000G)
    bytes-used: 2805482496 (2.612G)

# /etc/hosts

# Host Database
#
# This file should contain the addresses and aliases for local hosts that
# share this file.  Replace 'my.domain' below with the domainname of your
# machine.
#
# In the presence of the domain name service or NIS, this file may
# not be consulted at all; see /etc/nsswitch.conf for the resolution order.
#
#
::1                     localhost localhost.my.domain
127.0.0.1               localhost localhost.my.domain
192.168.88.183          fbsd
192.168.88.149          arch
192.168.88.150          alpine
192.168.88.151          freebsd-12-2
#
# Imaginary network.
#10.0.0.2               myname.my.domain myname

carlos@freebsd:~ % ssh carlos@alpine

The authenticity of host 'alpine (192.168.88.150)' can't be established.
ECDSA key fingerprint is SHA256:SwvwUhTBiIMr4IdzZ4yvaIcu21Xf4WSF2B5+tABLHz0.
No matching host key fingerprint found in DNS.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'alpine' (ECDSA) to the list of known hosts.
carlos@alpine's password:
Welcome to Alpine!

The Alpine Wiki contains a large amount of how-to guides and general
information about administrating Alpine systems.
See <http://wiki.alpinelinux.org/>.

You can setup the system with the command: setup-alpine

You may change this message by editing /etc/motd.

alpine:~$ su
Password:
alpine:/home/carlos# 

alpine:/home/carlos#  apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
v3.14.2-68-gbf3cc5c973 [http://dl-cdn.alpinelinux.org/alpine/v3.14/main]
OK: 4791 distinct packages available

alpine:/home/carlos#  apk add vim
OK: 1008 MiB in 146 packages

Cambiar en el archivo /etc/ssh/sshd_config

alpine:/home/carlos# vim /etc/ssh/sshd_config

X11Forwarding no
por
X11Forwarding yes

Guardar y salir

alpine:/home/carlos# vim /etc/apk/repositories 

#/media/cdrom/apks
#http://dl-cdn.alpinelinux.org/alpine/v3.14/main
#http://dl-cdn.alpinelinux.org/alpine/v3.14/community
http://dl-cdn.alpinelinux.org/alpine/edge/main
http://dl-cdn.alpinelinux.org/alpine/edge/community
http://dl-cdn.alpinelinux.org/alpine/edge/testing

alpine:/home/carlos# apk update
fetch http://dl-cdn.alpinelinux.org/alpine/edge/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/edge/testing/x86_64/APKINDEX.tar.gz
v3.15.0_alpha20210804-3464-gdb0fea5e0a [http://dl-cdn.alpinelinux.org/alpine/edge/main]
v3.15.0_alpha20210804-3463-g250f668bc0 [http://dl-cdn.alpinelinux.org/alpine/edge/community]
v3.15.0_alpha20210804-3457-g949ce4d971 [http://dl-cdn.alpinelinux.org/alpine/edge/testing]
OK: 20227 distinct packages available

alpine:/home/carlos# reboot

alpine:/home/carlos# Connection to alpine closed by remote host.
Connection to alpine closed.
carlos@freebsd:~ %

carlos@freebsd:~ % ssh carlos@alpine
carlos@alpine's password:
Welcome to Alpine!

The Alpine Wiki contains a large amount of how-to guides and general
information about administrating Alpine systems.
See <http://wiki.alpinelinux.org/>.

You can setup the system with the command: setup-alpine

You may change this message by editing /etc/motd.

alpine:~$ 

En la máquina host, (freebsd), utilizando xhost se habilita sólo al usuario autorizado.

carlos@freebsd:~ % xhost
access control enabled, only authorized clients can connect

Se añade la dirección IP de Alpine:

carlos@freebsd:~ % xhost +inet:192.168.88.150
192.168.88.150 being added to access control list
carlos@freebsd:~ %

Ejecutar la aplicación Firefox
dentro de la máquina virtual, pero sólo se muestra en el host:

Se ejecuta usando ssh:

carlos@freebsd:~ % ssh carlos@alpine -X "firefox no-remote"
carlos@alpine's password:
Welcome to Alpine!

The Alpine Wiki contains a large amount of how-to guides and general
information about administrating Alpine systems.
See <http://wiki.alpinelinux.org/>.

You can setup the system with the command: setup-alpine

You may change this message by editing /etc/motd.

/usr/bin/xauth:  file /home/carlos/.Xauthority does not exist
alpine:~$

Para no introducir más contraseñas se generan las claves pública y privada nuevamente:

carlos@freebsd:~ % ssh-keygen -t rsa -b 4096 -C "carlos@freebsd"
Generating public/private rsa key pair.
Enter file in which to save the key (/usr/home/carlos/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /usr/home/carlos/.ssh/id_rsa.
Your public key has been saved in /usr/home/carlos/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:RkURbfj//UwqDmVOhVOQQ1qMae69/DZueCzFliRdHZc carlos@freebsd
The key's randomart image is:
+---[RSA 4096]----+
|         .=X+=.o+|
|         .=oO oEo|
|        .o.= =   |
|       .  o B    |
|        S. O o   |
|       .  o B .  |
|           Oo. .o|
|          o.Oo +o|
|           +.oo +|
+----[SHA256]-----+

Arch Linux instalar openssh
# vim /etc/pacman.conf

[multilib]
Include = /etc/pacman.d/mirrorlist

Guardar y salir

# pacman -Syu

# pacman -S openssh

[root@arch ~]# systemctl status sshd
* sshd.service - OpenSSH Daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; vendor pre>
     Active: inactive (dead)
     
[root@arch ~]# systemctl start sshd
[root@arch ~]# ls -a
.   .bash_history  .config  .lesshst  Desktop	 Downloads  Pictures  Templates
..  .cache	   .gnupg   .viminfo  Documents  Music	    Public    Videos

[root@arch ~]# systemctl status sshd
* sshd.service - OpenSSH Daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; vendor pre>
     Active: active (running) since Mon 2021-10-04 19:03:03 CEST; 37s ago

Iniciar el servicio sshd con el arranque del sistema:

[root@arch ~]# systemctl enable sshd

Copiar a las vm

carlos@freebsd:~ % ssh-add
Identity added: /usr/home/carlos/.ssh/id_rsa (carlos@freebsd)
carlos@freebsd:~ % ssh-copy-id carlos@alpine
carlos@alpine's password: 
carlos@freebsd:~ % 

El procedimiento es el mismo para las demás máquinas virtuales

carlos@freebsd:~ % ssh-copy-id carlos@arch
carlos@alpine's password: 
carlos@freebsd:~ %      
           
carlos@freebsd:~ % ssh-copy-id carlos@freebsd-12-2
carlos@alpine's password: 
carlos@freebsd:~ %                           
                  
Llegados a este punto la conexión ssh se realiza mediante clave.

carlos@freebsd:~ % ssh carlos@alpine -X "firefox no-remote" &
[1] 96751
carlos@freebsd:~ %

carlos@freebsd:~ % su
Password:

root@freebsd:/usr/home/carlos # vm list
NAME          DATASTORE  LOADER     CPU  MEMORY  VNC  AUTOSTART  STATE
alpine        default    grub       1    512M    -    No         Running (40797)
arch          default    grub       1    512M    -    No         Stopped
freebsd-12-2  default    bhyveload  1    256M    -    No         Stopped
root@freebsd:/usr/home/carlos # vm stop alpine
Sending ACPI shutdown to alpine
root@freebsd:/usr/home/carlos # vm list
NAME          DATASTORE  LOADER     CPU  MEMORY  VNC  AUTOSTART  STATE
alpine        default    grub       1    512M    -    No         Stopped
arch          default    grub       1    512M    -    No         Stopped
freebsd-12-2  default    bhyveload  1    256M    -    No         Stopped
root@freebsd:/usr/home/carlos # 

FreeBSD es genial!.

sábado, 25 de septiembre de 2021

Virtualizacion bhyve zfs FreeBSD 13.0

Virtualización BSD bhyve zfs FreeBSD 13.0

https://wiki.freebsd.org/bhyve
https://github.com/churchers/vm-bhyve

FreeBSD como anfitrión con bhyve

De forma predeterminada, bhyve proporciona acceso a la consola serie y no emula una consola gráfica. 

Comprobar si el procesador Intel soporta virtualización:

# dmesg | grep vt
[drm]   - kern.vt.fb.modes.DP-1
[drm]   - kern.vt.fb.default_mode
...

El primer paso para crear una máquina virtual en bhyve es configurar el sistema host cargando  el módulo del kernel de bhyve.

# kldload vmm

# kldstat|grep vmm
26    1 0xffffffff83200000   53a420 vmm.ko

El módulo se cargará automáticamente al iniciar el sistema agregando vmm a la linea kld_list del archivo /etc/rc.conf.

# sysrc kld_list+="vmm"

kld_list="fusefs /boot/modules/i915kms.ko vmm"

El siguiente paso es instalar bhyve virtual machine vm-bhyve, bhyve-firmware y grub2-bhyve. Este último para entornos linux o máquinas virtuales que requieran grub.

# pkg install vm-bhyve bhyve-firmware grub2-bhyve

Crear un conjunto de datos zfs llamado vm donde estarán almacenadas las máquinas virtuales. El grupo de almacenamiento se llama zroot.

# zfs create zroot/vm

# zfs list

NAME                               USED  AVAIL     REFER  MOUNTPOINT
zroot                             16.9G  88.6G       96K  /zroot
zroot/ROOT                        8.60G  88.6G       96K  none
zroot/ROOT/default                8.60G  88.6G     8.56G  /
zroot/ROOT/system_freebsd_180921     8K  88.6G     8.53G  /
zroot/export                       416K  88.6G       96K  /zroot/export
zroot/tmp                          312K  88.6G      192K  /tmp
zroot/usr                         7.65G  88.6G       96K  /usr
zroot/usr/home                    6.84G  88.6G     1.76G  /usr/home
zroot/usr/home/carlos             3.40G  88.6G     3.40G  /usr/home/carlos
zroot/usr/ports                    832M  88.6G      832M  /usr/ports
zroot/usr/src                      104K  88.6G       96K  /usr/src
zroot/var                         1.78M  88.6G       96K  /var
zroot/var/audit                    104K  88.6G       96K  /var/audit
zroot/var/crash                    104K  88.6G       96K  /var/crash
zroot/var/log                     1.10M  88.6G      752K  /var/log
zroot/var/mail                     216K  88.6G      128K  /var/mail
zroot/var/tmp                      164K  88.6G      100K  /var/tmp
zroot/vm                           686M  88.6G      133M  /zroot/vm
Habilitar vm-bhyve en /etc/rc.conf y configurar el conjunto de datos que se utilizará

# sysrc vm_enable="YES"
# sysrc vm_dir="zfs:zroot/vm"

En este punto guardar y reiniciar el sistema.

Debe tener los módulos vmm ejecutándose en segundo plano:

# kldstat | grep vmm
26    1 0xffffffff83200000   53a420 vmm.ko

Ejecutar el comando vm init crea los directorios necesarios en $vm_dir.

# vm init

Crear un directorio llamado .templates

# mkdir -p /vm/.templates
# ls /vm/.templates/

Listando los archivos de configuración para todos los posibles sistemas operativos compatibles que pueden ejecutarse como invitado:
# ls /usr/local/share/examples/vm-bhyve/
alpine.conf       coreos.conf       freepbx.conf      ubuntu.conf
arch.conf         debian.conf       linux-zvol.conf   windows.conf
centos6.conf      default.conf      netbsd.conf
centos7.conf      dragonfly.conf    openbsd.conf
config.sample     freebsd-zvol.conf resflash.conf

Crear un conmutador virtual (switch) llamado public y adjuntar la interfaz de 
red Ethernet a él.
# vm switch create public # vm switch add public re0 # vm switch list NAME TYPE IFACE ADDRESS PRIVATE MTU VLAN PORTS public standard vm-public - no - - re0

Firewall IPFW:

Permitir el paso de paquetes bhyve

net.link.bridge.ipfw=1
# sysctl net.link.bridge.ipfw=1

Hacer el cambio permanente
net.link.bridge.ipfw=1

Instalar y ejecutar sistemas operativos invitados virtualizados

FreeBSD virtualizacion vm-bhyve - Arch Linux

Descargar Arch Linux

# vm iso https://mirror.cyberbits.eu/archlinux/iso/2022.06.01/archlinux-2022.06.01-x86_64.iso

Copiar la plantilla para Arch Linux - arch.conf
# cp /usr/local/share/examples/vm-bhyve/arch.conf /zroot/vm/.templates/

# vm iso
DATASTORE           FILENAME
default             archlinux-2022.06.01-x86_64.iso
default             fetch.out

Importante: Cambiar los parámetros vmlinuz, archiso y archisobasedir a sus valores correctos:

# cat /zroot/vm/.templates/arch.conf
loader="grub"
cpu=1
memory=512M
network0_type="virtio-net"
network0_switch="public"
disk0_type="virtio-blk"
disk0_name="disk0.img"
grub_install0="linux /arch/boot/x86_64/vmlinuz-linux archisobasedir=arch archisolabel=ARCH_202206 ro"
grub_install1="initrd /arch/boot/x86_64/initramfs-linux.img"

Crear vm -t template -s size nombre
# vm create -t arch -s 9G arch

Instalar en primer plano vm -f dentro de arch una vm con arhivo iso
# vm install -f arch archlinux-2021.09.01-x86_64.iso

Particionar el disco:

# cfdisk
Elegir dos para BIOS

 
root@archiso ~ # fdisk -l
Disk /dev/vda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 131072 bytes
I/O size (minimum/optimal): 131072 bytes / 131072 bytes
Disklabel type: dos
Disk identifier: 0xae1d35ff

Device     Boot    Start      End  Sectors  Size Id Type
/dev/vda1  *        2048  1050623  1048576  512M 83 Linux
/dev/vda2        1050624 16779263 15728640  7.5G 83 Linux
/dev/vda3       16779264 17827839  1048576  512M 82 Linux swap / Solaris

Disk /dev/loop0: 662.69 MiB, 694882304 bytes, 1357192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Crear los sistemas de ficheros:

root@archiso ~ # mkfs.ext2 /dev/vda1
mke2fs 1.46.4 (18-Aug-2021)
Creating filesystem with 262144 1k blocks and 65536 inodes
Filesystem UUID: 0b6850ec-379f-4be5-ac4f-fcafae08fbbc
Superblock backups stored on blocks: 
	8193, 24577, 40961, 57345, 73729, 204801, 221185

Allocating group tables: done                            
Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done 

root@archiso ~ # mkfs.ext4 /dev/vda2
mke2fs 1.46.4 (18-Aug-2021)
Creating filesystem with 2555648 4k blocks and 638976 inodes
Filesystem UUID: 34353334-88c2-40b9-930a-8c788705545e
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 

root@archiso ~ # mkswap /dev/vda3
root@archiso ~ # swapon /dev/vda3

Montando las particiones:

root@archiso ~ # mount /dev/vda2 /mnt
root@archiso ~ # mkdir -p /mnt/boot
root@archiso ~ # mount /dev/vda1 /mnt/boot

El comando pacstrap para indicar donde queremos instalar los paquetes desde los repositorios arch, y lo que queremos instalar

root@archiso ~ # pacstrap /mnt base base-devel grub ntfs-3g networkmanager xdg-user-dirs linux linux-firmware vim dhcpcd openssh

Generar fstab
root@archiso ~ # genfstab -pU /mnt >> /mnt/etc/fstab

Entrar en arch chroot

root@archiso ~ # arch-chroot /mnt
[root@archiso /]#

Establecer la zona horaria:
[root@archiso /]# ln -sf /usr/share/zoneinfo/Europe/Madrid /etc/localtime

[root@archiso /]# echo rioarch > /etc/hostname

[root@archiso /]# nano /etc/locale.gen
es_ES.UTF-8 UTF-8

[root@archiso /]# echo LANG=es_ES.UTF-8 > /etc/locale.conf

Generar el archivo locale.gen con el siguiente comando:
[root@archiso /]# locale-gen

Cuando GNU/Linux arranca, el sistema está configurado para leer el reloj interno del equipo, después el reloj del sistema, que es independiente. Usaremos el comando hwclock -w para ajustar el reloj interno.
[root@archiso /]# hwclock -w

Configurar distribución de teclado
[root@archiso /]# echo KEYMAP=la-latin1 > /etc/vconsole.conf

Instalar grub

Ahora procedamos a instalar el grub y usar el comando correcto, sin UEFI
[root@archiso /]# grub-install /dev/vda
Installing for i386-pc platform.
Installation finished. No error reported.

Actualizar grub

Creamos el archivo grub.cfg
[root@archiso /]# grub-mkconfig -o /boot/grub/grub.cfg

[root@archiso /]# passwd
New password:
Retype new password:
passwd: password updated successfully

Agregar usuario no privilegiado
useradd -m -g users -G storage,wheel,power -s /bin/bash carlos

Establecer contraseña del usuario
[root@archiso /]# passwd carlos

Antes de salir de root:

[root@arch ~]# cat /boot/grub/grub.cfg |grep vmlinuz-linux
	linux	/vmlinuz-linux root=UUID=781ccb0f-c524-402e-a2a8-e32a50371223 rw  loglevel=3 quiet
		linux	/vmlinuz-linux root=UUID=781ccb0f-c524-402e-a2a8-e32a50371223 rw  loglevel=3 quiet
		linux	/vmlinuz-linux root=UUID=781ccb0f-c524-402e-a2a8-e32a50371223 rw  loglevel=3 quiet


Este UUID lo necesitará:
781ccb0f-c524-402e-a2a8-e32a50371223 rw
para sustituirlo por el creado por la vm en esta ruta /zroot/vm/arch/arch.conf en el host FreeBSD.

root@freebsd:/zroot/vm/arch # cat arch.conf

loader="grub"
cpu=1
memory=512M
network0_type="virtio-net"
network0_switch="public"
disk0_type="virtio-blk"
disk0_name="disk0.img"
grub_install0="linux /arch/boot/x86_64/vmlinuz-linux archisobasedir=arch archisolabel=ARCH_202109 ro"
grub_install1="initrd /arch/boot/x86_64/initramfs-linux.img"
uuid="a923082e-1deb-11ec-9f91-fc3fdbd15275"
network0_mac="58:9c:fc:0e:36:e4"
grub_run0="linux /vmlinuz-linux root=UUID=781ccb0f-c524-402e-a2a8-e32a50371223 rw"
grub_run1="initrd /initramfs-linux.img"
uuid="9eb191c3-1e01-11ec-a508-fc3fdbd15275" 
Saliendo de chroot
Ya terminado esto, salimos de chroot
[root@archiso /]# exit

Desmontar particion /boot
# umount /mnt/boot/

Desmontar particion Raíz
# umount /mnt

# dhcpcd enp0s5

dhcpcd-9.4.0 starting
DUID 00:04:a9:23:08:2e:1d:eb:11:ec:9f:91:fc:3f:db:d1:52:75
enp0s5: waiting for carrier
enp0s5: carrier acquired
enp0s5: IAID fc:0e:36:e4
enp0s5: adding address fe80::f2ad:f194:fe94:3e97
enp0s5: soliciting a DHCP lease
enp0s5: soliciting an IPv6 router
enp0s5: offered 192.168.88.165 from 192.168.88.1
enp0s5: probing address 192.168.88.165/24
enp0s5: leased 192.168.88.165 for 600 seconds
enp0s5: adding route to 192.168.88.0/24
enp0s5: adding default route via 192.168.88.1
forked to background, child pid 242
Reiniciar
# reboot

[root@arch ~]# ip addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s5:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 58:9c:fc:0e:36:e4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.88.165/24 brd 192.168.88.255 scope global dynamic noprefixroute enp0s5
       valid_lft 329sec preferred_lft 254sec
    inet6 fe80::f2ad:f194:fe94:3e97/64 scope link 
       valid_lft forever preferred_lft forever










FreeBSD es genial!

miércoles, 25 de marzo de 2020

GNS3 Mikrotik Internet MacOS

La versiónes de GNS3 y GNS3 VM debe ser la misma. Las diferentes versiones de GNS3 VM se pueden descargar desde este enlace:

https://github.com/GNS3/gns3-gui/releases/

Versión 2.1.9 GNS3 VM

https://github.com/GNS3/gns3-gui/releases/tag/v2.1.9

Iniciar gns3 como root desde la terminal

MacBook-Pro-de-Carlos:~ carlosc$ MacBook-Pro-de-Carlos:~ carlosc$ sudo /Applications/GNS3.app/Contents/MacOS/gns3

Averiguar cual es la interfaz Ethernet a la que estoy conectado a través de la terminal con el comando ifconfig -a o utilizando el panel de preferencias de red, en mi caso es la en0.


MacBook-Pro-de-Carlos:~ carlosc$ ifconfig en0
en0: flags=8963 mtu 1500
options=10b
ether 40:6c:8f:4a:62:94 
inet6 fe80::de:4be9:b5bd:8d8f%en0 prefixlen 64 secured scopeid 0x7 
inet 192.168.88.211 netmask 0xffffff00 broadcast 192.168.88.255
nd6 options=201
media: autoselect (1000baseT )
status: active

La interfaz en0 es la que utilizaremos para conectar la topología de red del GNS3 a la misma red de mi portátil.

Clic derecho en Cloud1 y clic en Configure en0 es la que nos interesa, eliminamos las demás interfaces:

Conectar en0 a Cloud1 al Switch que está conectado al R1 de Mikrotik en el simulador GNS3.


Entramos en el R1 y obtenemos una IP por DHCP utilizando DHCP Client

[admin@R1] > /ip dhcp-client add interface=ether2 disabled=no

Realizamos la comprobación utilizando el comando ip dhcp-client print retail
              
[admin@R1] > ip dhcp-client print detail 
   
Flags: X - disabled, I - invalid, D - dynamic 
[admin@R1] > /ip dhcp-client add interface=ether2 disabled=no 
[admin@R1] > ip dhcp-client print detail                     
Flags: X - disabled, I - invalid, D - dynamic 
 0   interface=ether2 add-default-route=yes default-route-distance=
     use-peer-dns=yes use-peer-ntp=yes dhcp-options=hostname,clientid 
     status=bound address=192.168.88.210/24 gateway=192.168.88.1 
     dhcp-server=192.168.88.1 primary-dns=192.168.88.1 secondary-dns=1.1.1.1 
     primary-ntp=31.207.89.49 expires-after=10m 

Hacemos ping al router por defecto de la red:

[admin@R1] > ping 192.168.88.1
  SEQ HOST                                     SIZE TTL TIME  STATUS           
    0 192.168.88.1                               56   0 25ms 
    1 192.168.88.1                               56   0 10ms 
    sent=2 received=2 packet-loss=0% min-rtt=10ms avg-rtt=17ms max-rtt=25ms 

El comando ip route print nos permite ver la ruta por defecto desde R1 (Mikrotik gns3).

[admin@R1] > ip route print     
Flags: X - disabled, A - active, D - dynamic, 
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, 
B - blackhole, U - unreachable, P - prohibit 
 #      DST-ADDRESS        PREF-SRC        GATEWAY            DISTANCE
 0 ADS  0.0.0.0/0                          192.168.88.1              1

 1 ADC  192.168.88.0/24    192.168.88.210  ether2                    0

Crear en una interfaz personalizada vmnet2 10.10.10.0/24 NAT




En este punto solo nos falta configurar los routers e interfaces con sus respectivas direcciones IPs, dependiendo del laboratorio que vamos a montar. Por ejemplo agregando un segundo Cloud para simular una IP pública a través de una de las interfaces de red de VMware. Los Mikrotik están conectados por NAT a nuestra red física.


Mikrotik es genial!.

lunes, 23 de marzo de 2015

Qemu configurar red FreeBSD

Nivel : avanzado

Diseño de la red : 4 Máquinas virtuales corriento sobre QEMU y FreeBSD 10.1 como host. Instalar los cuatro sistemas operativos basados en BSD (NetBSD, FreeBSD, OpenBSD, DragonFly), permitirles la salida a Internet para adquirir los conocimientos necesarios y acceder al examen de Certificación BSDA.

Referencia:
http://virtuallyhyper.com/2013/02/running-vms-on-freebsd-using-qemu-with-vde/
http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html
http://www.area536.com/projects/freebsd-as-a-kvm-guest-using-virtio/
http://en.wikibooks.org/wiki/QEMU/Networking
http://www.bsdcertification.org/

BSDCG Videos Jim Brown. Como instalar so host + qemu + VM

La instalación del host + fvwm-crystal + qemu + aqemu + los so invitados tiene este aspecto.:





Interfaz de red TUN/TAP:

En este modo, la máquina virtual QEMU abre un dispositivo TUN o TAP preasignados en el host y utiliza esa interfaz para transferir los datos al sistema operativo invitado.

El puente (bridge) se crea en el sistema host (FreeBSD 10.1)

Cargar módulos:

# kldload aio
# kldload if_bridge
# kldload if_tap

Realizar comprobación:

# kldstat > modulos; awk '{ print $5 }' modulos
 Size     Name
 kernel
 if_tap.ko
 if_bridge.ko
 bridgestp.ko
 aio.ko
...

Crear las interfaces

# ifconfig bridge0 create up
# ifconfig tap0 create
# ifconfig tap1 create
# ifconfig tap2 create
# ifconfig tap3 create
# ifconfig tap4 create

Agregar los grifos al puente. Parámetros para agregar dispositivos de derivación al puente.

# ifconfig bridge0 addm tap0 addm tap1 addm tap2 addm tap3 addm tap4 up

Antes de utilizar los dispositivos de derivación en QEMU dos sysctl requieren ajustes. El primero permite a cualquier programa de usuario y Qemu los es, utilizar el dispositivo de grifo (tap). El segundo marca la interfaz como up:

# sysctl net.link.tap.user_open=1
# sysctl net.link.tap.up_on_open=1

Para que permanezcan los cambios después de un reinicio

# echo 'if_bridge_load="YES"' >>/boot/loader.conf
# echo 'if_tap_load="YES"' >>/boot/loader.conf
# echo 'aio_load="YES"' >>/boot/loader.conf

# echo 'cloned_interfaces="tap0 tap1 tap2 tap3 tap4 bridge0"' >>/etc/rc.conf
# echo 'ifconfig_bridge0="addm tap0 addm tap1 addm tap2 addm tap3 addm tap4 up"' >>/etc/rc.conf

# echo 'net.link.tap.user_open=1' >>/etc/sysctl.conf
# echo 'net.link.tap.up_on_open=1' >>/etc/sysctl.conf

# ifconfig -a

Tenemos que cambiar el modo de conexión de interfaz de red de la máquina virtual para que pueda utilizar la interfaz TUN/TAP.

Parámetros de conexión para DragonFly VM:


Parámetros de conexión para FreeBSD VM:


Parámetros de conexión para NetBSD VM:


Parámetros de conexión para OpenBSD VM:


Iniciar nbsd (NetBSD) desde el terminal:
# qemu -monitor stdio -m 512 -localtime -hda /usr/.aqemu/nbsd_HDA.img -boot once=c,menu=off -net nic,vlan=0,macaddr=00:ee:ae:c6:9b:50,model=e1000 -net user,vlan=0 -name "nbsd"


Método "VDE" (Ethernet Virtual Distribuido):

Modo de usuario en red - En este modo, la máquina virtual QEMU inicia automáticamente un servidor DHCP interno en una dirección de red interna 10.0.2.2/24. Una red  interna para huéspedes que no es visible desde el entorno de acogida (host). Si el sistema operativo invitado está configurado para DHCP, el cliente obtendrá una dirección IP de este servidor DHCP interno.

FreeBSD 9.2 - 10.0.2.15/24
NetBSD 6.0 - 10.0.2.20
OpenBSD 5.6 - 10.0.2.25
DragonFly - 10.0.2.30

Utilizando el método "VDE" (Ethernet Virtual Distribuido):

El backend de red VDE utiliza la infraestructura Ethernet Distributed Virtual para clientes de la red. Desde la página VDE:

VDE interruptor Al igual que un conmutador Ethernet física, un interruptor VDE tiene varios puertos virtuales en máquinas virtuales, aplicaciones, interfaces virtuales, herramientas de conectividad y - por qué no? - Otro interruptor VDE puede virtualmente enchufado.

# cd /usr/ports/net/vde2
# sudo make install

Ver las opciones de configuración:

# make showconfig
===> The following configuration options are available for vde2-2.3.2_1:
     PYTHON=on: Python bindings or support
===> Use 'make config' to modify these settings
# make install clean

# Cargar módulos necesarios:
# kldload if_bridge
# kldload if_tap

Activar módulos al inicio del sistema:
# echo if_bridge_load="YES">>/boot/loader.conf
# echo if_tap_load="YES">>/boot/loader.conf

Después de instalar debemos crear una interfaz tap para actuar como un enlace ascendente para nuestro VDE-switch. En primer lugar vamos a crear el puente:

# ifconfig bridge0 create

Crear las interfaces tap:

# ifconfig tap0 create
# ifconfig tap1 create

Ahora vamos a tender un puente sobre nuestra interfaz física con la interfaz tap:

# ifconfig bridge0 addm tap0 up

Para que los cambios permanezcan después de un reinicio:
# echo 'cloned_interfaces="tap0 bridge0"'>>/etc/rc.conf
# echo 'ifconfig_bridge0="addm tap0 up"'>>/etc/rc.conf

# ifconfig bridge0

Si vamos a conectar con el dispositivo tap con usuarios habituales, vamos a permitir que esos usuarios se conecten al dispositivo tap:
# sysctl net.link.tap.user_open=1
net.link.tap.user_open: 0 -> 1
# sysctl net.link.tap.up_on_open=1
net.link.tap.up_on_open: 0 -> 1

Establecer los permisos del dispositivo tap:
# chown carles /dev/tap0
# chmod 660 /dev/tap0

Agregar lo siguiente al fichero /etc/devfs.conf
own tap0 root:carles
perm tap0 660

Vamos a crear una VDE-Switch y añadir los tap como uplink (enlace ascendente)
# vde_switch -d -s /tmp/vdel -M /tmp/mgmtl -tap tap0 -m 660 -g carles --mgmtmode 660 --mgmtgroup carles

root@fbsd:~ # vde_switch -d -s /tmp/vdel -M /tmp/mgmtl -tap tap0 -m 660 -g carles --mgmtmode 660 --mgmtgroup carles
root@fbsd:~ # unixterm /tmp/mgmtl
VDE switch V.2.3.2
(C) Virtual Square Team (coord. R. Davoli) 2005,2006,2007 - GPLv2

vde$ ds/showinfo
0000 DATA END WITH '.'
ctl dir /tmp/vdel
std mode 0660
.
1000 Success

vde$ port/allprint
0000 DATA END WITH '.'
.
1000 Success

vde$ vlan/allprint
0000 DATA END WITH '.'
VLAN 0000
.
1000 Success

vde$ logout
9999 END OF SESSION root@fbsd:~ #


Tarjeta de red Qemu para todos los so invitados:


Iniciar los diferentes sistemas operativos instalados en la VM (Qemu) para configurar la red y comprobar que tienen conexión a Internet:

nbsd:
obsd:


dfly:

fbsd:
Cerrar Qemu

Unix es genial!.

martes, 14 de agosto de 2012

Redes con virtualbox


Enrutamiento estático a través de subredes con virtualbox.

Escenario: Dos subredes privadas que recorrer, y no todas están conectadas al mismo router. Proporcionarles acceso de unas a otras creando rutas estáticas.



Primero instalar virtualbox utilizando ubuntu como sistema anfitrión. Crear una máquina virtual a partir de una iso basada en debian 5.0 i386 sin entorno gráfico.


Configuración de la red.
Adaptador1 NAT (ip asignada automáticamente por vbox)
Adaptador2 Red interna (red1 ip fija)
Adaptador3 Red interna (red2 ip fija)




A partir de la vmdebian clonar las 3 máquinas virtuales para la realización de la práctica.

Listar el nombre de las máquinas virtuales
$ vboxmanage list vms
"vmdebian" {3a26e53a-c24b-48a4-80b9-f83b38b23cb2}
"vmdebian1" {e8282c78-50f1-4ab9-be73-98f99042b41c}
"vmdebian2" {7f15dc6e-6481-4b5f-8d7c-f1ddeb3e0992}
"vmdebian3" {3661155b-83f2-4ee9-a5a4-ce06887c05e8}

Cambiar la red por defecto asignada por virtualbox.
$ vboxmanage modifyvm "vmdebian1" --natnet1 "192.168.11/24"
$ vboxmanage modifyvm "vmdebian2" --natnet1 "192.168.12/24"
$ vboxmanage modifyvm "vmdebian3" --natnet1 "192.168.13/24"

Los nombres de las vm serán router{1,2,3}. Las ip's de las interfaces eth1 y eth2 serán fijas y los ficheros de configuración de las interfaces como se ve más abajo.

router1

cat /etc/network/interfaces
auto lo
iface lo inet loopback
allow-hotplug eth0 iface eth0 inet dhcp
allow-hotplug eth1 iface eth1 inet static
address 172.16.1.1 netmask 255.255.255.0 network 172.16.1.0 broadcast 172.16.1.255 gateway 172.16.1.1

router2

cat /etc/network/interfaces
auto lo
iface lo inet loopback
allow-hotplug eth0 iface eth0 inet dhcp
allow-hotplug eth1 iface eth1 inet static
address 172.16.1.222 netmask 255.255.255.0 network 172.16.1.0 broadcast 172.16.1.255 gateway 172.16.1.222
allow-hotplug eth2 iface eth2 inet static
address 172.16.2.222 netmask 255.255.255.0 network 172.16.2.0 broadcast 172.16.2.255 gateway 172.16.2.222

router3

cat /etc/network/interfaces
auto lo
iface lo inet loopback
allow-hotplug eth0 iface eth0 inet dhcp
allow-hotplug eth2 iface eth2 inet static
address 172.16.2.1 netmask 255.255.255.0 network 172.16.2.0 broadcast 172.16.2.255 gateway 172.16.2.1

Status de todas las interfaces:
router1
# ifconfig -a
router2
# ifconfig -a


router3
# ifconfig -a


Crear las rutas estáticas. Comandos para establecer las rutas:

router1
# route add -net 172.16.2.0/24 gw 172.16.1.222 eth1

router3
# route add -net 172.16.1.0/24 gw 172.16.2.222 eth2

En el router2
Activar el reenvío IP desde la línea de comando. Configurarlo de forma permanente en /etc/sysctl.conf e iniciarlo inmediatamente:

# echo 1 &gt; /proc/net/ipv4/ip_forward
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
:wq
# sysctl -p

Para conservar permanentemente las rutas estáticas y no tener que escribir de nuevo todos los comandos route agregarlas al fichero de configuración /etc/network/interfaces en la stanza para su interfaz correspondiente.

router1
# vim /etc/network/interfaces
up route add -net 172.16.2.0/24 gw 172.16.1.222 eth1
:wq

router3
# vim /etc/network/interfaces
up route add -net 172.16.1.0/24 gw 172.16.2.222 eth2
:wq

Verificar las rutas con route:
router1
# route -n


router2
# route -n


router3
# route -n


Haciendo ping desde los diferentes hosts:

router1
# ping -c3 172.16.2.222
# ping -c3 172.16.2.1


router2
# ping -c3 172.16.2.1
# ping -c3 172.16.1.1


router3
# ping -c3 172.16.1.222
# ping -c3 172.16.1.1


Habilitar la comunicación entre todas las redes:

router1
route add -net 192.168.12.0/24 gw 172.16.1.222 eth1
route add -net 192.168.13.0/24 gw 172.16.1.222 eth1


router2
route add -net 192.168.11.0/24 gw 172.16.1.1 eth1
route add -net 192.168.13.0/24 gw 172.16.2.1 eth2


router3
route add -net 192.168.12.0/24 gw 172.16.2.222 eth2
route add -net 192.168.11.0/24 gw 172.16.2.222 eth2


Para eliminar
# route del -net direccion_red/mascara

Ejemplo router3
# route del -net 192.168.11.0/24

Linux es genial!.