Virtualização com ESXi 5.5.0 - pfSense virtualizado + backup de VMs no FreeNAS via iSCSI

Este artigo tem por objetivo mostrar os passos de como montar um projeto de virtualização com um servidor físico instalado com VMWare ESXi 5.5.0 (hypervisor), implementando um firewall pfSense virtualizado, utilizando script ghettoVCB.sh para efetuar cópias de todas as VMs (quentes) do host com agendamento via máquina virtual do pfSense.

[ Hits: 16.094 ]

Por: Endrigo D. Rodriguez em 15/01/2016 | Blog: http://www.corbanet.com.br


Preliminares



Um pouco da história sobre este estudo.

Na maioria das empresas de pequeno e médio porte sempre observamos servidores físicos de aplicação com GNU/Linux ou Windows, e diversos serviços instalados como compartilhamento de arquivos, controladores de domínio, serviços de rede e impressão, ERPs etc com um, dois ou mais links de internet visando uma maior disponibilidade de conexão, mas sem controle e segurança.

Analisando a questão da segurança da internet, existem equipamentos próprios para efetuar este controle (firewall de hardware) ou os appliance UTM "central unificada de gerenciamento de ameaças", que são equipamentos que executam várias funções de segurança em um único dispositivo (firewall, VPN, prevenção de intrusões de rede, antivírus, filtragem de conteúdo, balanceamento de carga, geração de relatórios informativos e gerenciais sobre a rede). Mas não é toda pequena ou média empresa que se dispõe a investir em um equipamento para este controle.

Pensando nesta questão, surgiu a ideia de virtualizar uma aplicação de controle de internet, integrado a um host hospedeiro ESXi com os demais serviços e aplicações da organização (virtualizados). Com isso, agregamos a segurança desejada e minimizamos os custos com hardware, energia e licenças de software.

Obs.: a virtualização de aplicações de controle de internet (serviços de UTM) não é considerada uma boa prática.

Uma das desvantagens da virtualização é se o sistema operacional hospedeiro (hypervisor) apresentar alguma vulnerabilidade, todas as máquinas virtuais que estão hospedadas nessa máquina física estão vulneráveis. Isto é considerado uma falha de segurança, principalmente se tratando de aplicações de proteção como um firewall.

Mas partindo do princípio que as máquinas virtuais podem ficar isoladas e independentes umas das outras, inclusive independente da máquina hospedeira e admitindo que não há vulnerabilidade conhecida sem correção por parte do fabricante do sistema operacional do hypervisor, a ideia de virtualizar o pfSense nos parece aceitável, uma vez que aumentamos o nível de segurança inicial e minimizamos drasticamente os custos, principalmente no que envolve a aquisição de equipamentos.

Portanto, demonstramos aqui os passos para instalação e configuração de um servidor com pfSense em um host ESXi. Neste projeto, utilizamos 2 servidores físicos, um com o Hypervisor (VMs instaladas) e outro com o FreeNAS (fileserver para o armazenamento das cópias das VMs via rede), conectado diretamente ao host ESXi via iSCSI.

Para a cópia das VMs quentes (ligadas), utilizamos o script de backup ghettoVCB.sh no host ESXi, onde nos baseamos no artigo Backup de máquinas virtuais no ESXi 50 com script ghettoVCB, ao qual publicamos em março de 2013, uma solução simples e funcional para snapshot automatizada das VMs.

Porém, mudamos a forma de automatização da rotina de backup, implementando o agendamento da rotina diretamente no pfSense, economizando recursos de hardware do Hypervisor.

Por fim, a ideia deste texto é documentar esta solução, ao qual já utilizamos em algumas empresas, e apresentar a comunidade uma alternativa funcional, free e completa tanto para controle e monitoramento de links de internet quanto para backup de máquinas virtuais via rede em um NAS como o FreeNAS. Acreditamos que, por ser uma solução que utiliza tecnologias atuais, podemos adaptar para diversos hardwares encontrados hoje no mercado (como NAS proprietários).

Sendo assim, postamos aqui a experiência que adquirimos com este estudo/projeto.

Autor: Endrigo D. Rodriguez - endrigo.rodriguez@corbanet.com.br
Co-autor: Diego Petinelli de Jesus - info@corbanet.com.br

Equipamentos Utilizados

  1. Um servidor Dell PowerEdge R420 - 6 NICs 1Gbps
  2. Um servidor HP ML110 G7 - 2 NICs 1Gbps
  3. Um switch Dell PowerConnect PCT5524
  4. Cabeamento CAT6 (1Gbps entre os servidores)

Requisitos:
  • Estar ambientado com o vSphere Client.
  • Estar ambientado com a estrutura de pastas do ESXi 5.5.0 e GNU/Linux.
  • Estar ambientado com a estrutura física de rede (servidores, switch, cabeamento etc).
  • Ter conhecimento de operação básica em ambiente GNU/Linux (vi, ssh, chave pública/privada etc).
  • Ter noções básicas de firewall.
  • Ter noções básicas de virtualização.

Downloads:

1. vSphere Client: Pode ser obtido através do link abaixo, ou digitando o endereço IP do seu servidor ESXi, em seu navegador de Internet:
2. Script ghettoVCB: clique no ícone ZIP para efetuar o download do arquivo "master.zip":
Descompactar o arquivo "master.zip", gerando seis arquivos. Utilizaremos o "ghettoVCB.sh" neste tutorial. Para maiores informações sobre este pacote com scripts, favor visitar o site do desenvolvedor em:
3. FreeNAS: download em:
4. pfSense: download em:
Para um melhor estudo do assunto, usaremos as informações abaixo como base para todo o desenvolvimento do artigo:

Servidor ESXi:
Host: vmsrv
IP LAN: 192.168.1.100

Servidor FreeNAS:
Host: storage
IP: 192.168.1.200

Servidor pfSense (servidor com serviços de UTM)
Host: firewall
IP WAN: 10.1.1.2
IP LAN: 192.168.1.110 (gateway da LAN)

Modem (Internet)
IP: 10.1.1.1
Obs. 1: qualquer faixa de IP, exceto 192.168.1.0/24
Obs. 2: caso haja mais de 1 modem, deve-se atribuir os IPs em faixas diferentes e será necessário NICs adicionais no host ESXi para cada modem.

Usuário em todos os procedimentos: root

    Próxima página

Páginas do artigo
   1. Preliminares
   2. Visão geral
   3. Configurando os adaptadores de redes no ESXi
   4. Instalando e configurando o pfSense no ESXi
   5. Configurando o iSCSI no FreeNAS e conectando no ESXi
   6. Instalando e configurando o ghettoVCB.sh para cópias das VMs no FreeNAS
   7. Automatizando rotinas de backup de VMs via pfSense
   8. Considerações finais
Outros artigos deste autor

Backup de máquinas virtuais no ESXi 5.0 com script ghettoVCB

Minix 3.2.0 no ESXi 5.0 - Instalação usando o vSphere Client 5.0

Leitura recomendada

Backup do Linux utilizando cliente do IBM Tivoli

Bacula Server 7.0.3 com PostgreSQL no Debian

Como criar stage4 do seu Gentoo

storage FreeNas 9.2.1.6 - Instalação e configuração

TimeShift - Restaure seu Linux com eficiência

  
Comentários
[1] Comentário enviado por azk4n em 15/01/2016 - 21:07h

excelente artigo, bastante detalhado...
good work bro!

[2] Comentário enviado por erisrjr em 16/01/2016 - 13:37h

Bem interessante o artigo, favoritado.

------------------------------------------------------
KISS principle, RTFM and STFW = 42

[3] Comentário enviado por smkbarbosa em 17/01/2016 - 16:20h

Vai servir de base para um estudo aqui. Obrigado :)
-------------------------------------------------------------------------------------------
Samuel Barbosa

[4] Comentário enviado por MrcS em 17/01/2016 - 18:45h

Só lembrando que se for precisar de monitoramento, o Zabbix ja tem suporte nativo total desde a versão 2.4 pra monitorar ESXi/VMWare.. incluindo as vms. O template já vem pronto.

[5] Comentário enviado por Ends em 18/01/2016 - 12:36h

Opa, tudo bem MrcS?

Tu sabe de algum material, algum link para me indicar sobre o Zabbix nesta parte de monitoramento do VMWare ESXi?
Interessante este template de monitoramento que você comentou.

Valeu.
Abraço.

[6] Comentário enviado por clzera em 25/01/2016 - 11:29h

Favoritado, esse Ends é o bicho! Sempre me ajuda com diversas questões. Abraços amigo!

[7] Comentário enviado por xclaudin em 01/02/2016 - 11:43h

Muito bom!
Este cenário é muito top!
Estou prestes a concluir um porém usando Citrix.

Citrix > PfSense > FreeNas

Tive (ainda estou tendo) muitos problemas com pfsense virtualizado no ambiente Xen.


[8] Comentário enviado por Ends em 02/02/2016 - 13:57h

Opa. Tudo bem xclaudin?

Cara, escreve aqui no VOL essa tua experiência com o Citrix virtualizando pfSense e usando FreeNAS.
Não estudei afundo o Xen Server ainda. Mas pretendo, assim que estiver com equipamentos "disponíveis" no laboratório.

O pfSense no ESXi, da forma que coloquei aqui no artigo, funciona super bem. Já estou usando a mais de ano em clientes e sem problemas.
Se pudermos ajudar, posta ai nos comentários.
Boa sorte.

[9] Comentário enviado por Ends em 02/02/2016 - 13:59h

E ai Marcelo (clzera)
Blz cara?
E os BOs nos clientes? Tudo resolvido?
Valeu brother.
Abração...

[10] Comentário enviado por clzera em 24/02/2016 - 15:14h


[9] Comentário enviado por Ends em 02/02/2016 - 13:59h

E ai Marcelo (clzera)
Blz cara?
E os BOs nos clientes? Tudo resolvido?
Valeu brother.
Abração...



Fala Ends, blz cara? Ei os b.os estão sempre por ai né, por enquanto esta tudo ok! rsss
Estou implementando aqui no serviço esse esquema de bkp das vms, consegui fazer tudo haha, só que peguei 2 b.os que são os seguintes:

ssh root@192.168.1.172 './vmfs/volumes/datastore1/SCRIPTS/ghettoVCB.sh -f /vmfs/volumes/datastore1/SCRIPTS/machines' >dev/null

No comando acima, acontece o seguinte:

ssh root@192.168.1.172 './vmfs/volumes/datastore1/SCRIPTS/ghettoVCB.sh -f /vmfs/volumes/datastore1/SCRIPTS/machines' > dev/null
dev/null: No such file or directory.


E se eu executar o comando sem o "> dev/null" o script inicia normal, mas da essa zika:

ssh root@192.168.1.172 './vmfs/volumes/datastore1/SCRIPTS/ghettoVCB.sh -f /vmfs/volumes/datastore1/SCRIPTS/machines'
Logging output to "/tmp/ghettoVCB-2016-02-24_05-37-24-6462832.log" ...
2016-02-24 05:37:24 -- info: ============================== ghettoVCB LOG START ==============================

2016-02-24 05:37:24 -- info: CONFIG - VERSION = 2015_05_06_1
2016-02-24 05:37:24 -- info: CONFIG - GHETTOVCB_PID = 6462832
2016-02-24 05:37:24 -- info: CONFIG - VM_BACKUP_VOLUME = /vmfs/volumes/VMBackupsNAS/backups
2016-02-24 05:37:24 -- info: CONFIG - VM_BACKUP_ROTATION_COUNT = 1
2016-02-24 05:37:24 -- info: CONFIG - VM_BACKUP_DIR_NAMING_CONVENTION = 2016-02-24_05-37-24
2016-02-24 05:37:24 -- info: CONFIG - DISK_BACKUP_FORMAT = thin
2016-02-24 05:37:24 -- info: CONFIG - POWER_VM_DOWN_BEFORE_BACKUP = 0
2016-02-24 05:37:24 -- info: CONFIG - ENABLE_HARD_POWER_OFF = 0
2016-02-24 05:37:24 -- info: CONFIG - ITER_TO_WAIT_SHUTDOWN = 3
2016-02-24 05:37:24 -- info: CONFIG - POWER_DOWN_TIMEOUT = 5
2016-02-24 05:37:24 -- info: CONFIG - SNAPSHOT_TIMEOUT = 15
2016-02-24 05:37:24 -- info: CONFIG - LOG_LEVEL = info
2016-02-24 05:37:24 -- info: CONFIG - BACKUP_LOG_OUTPUT = /tmp/ghettoVCB-2016-02-24_05-37-24-6462832.log
2016-02-24 05:37:24 -- info: CONFIG - ENABLE_COMPRESSION = 0
2016-02-24 05:37:24 -- info: CONFIG - VM_SNAPSHOT_MEMORY = 0
2016-02-24 05:37:24 -- info: CONFIG - VM_SNAPSHOT_QUIESCE = 0
2016-02-24 05:37:24 -- info: CONFIG - ALLOW_VMS_WITH_SNAPSHOTS_TO_BE_BACKEDUP = 0
2016-02-24 05:37:24 -- info: CONFIG - VMDK_FILES_TO_BACKUP = all
2016-02-24 05:37:24 -- info: CONFIG - VM_SHUTDOWN_ORDER =
2016-02-24 05:37:24 -- info: CONFIG - VM_STARTUP_ORDER =
2016-02-24 05:37:24 -- info: CONFIG - RSYNC_LINK = 0
2016-02-24 05:37:24 -- info: CONFIG - EMAIL_LOG = 0
2016-02-24 05:37:24 -- info:
Datastore not found.

Datastore not found.

Datastore not found.

mkdir: cannot create directory '/vmfs/volumes/VMBackupsNAS/': Operation not permitted
2016-02-24 05:37:26 -- info: Unable to create "/vmfs/volumes/VMBackupsNAS/backups/FIREWALL2"! - Ensure VM_BACKUP_VOLUME was defined correctly



Help novamente meu brother! kkkkkkkkkkkkkkk



[11] Comentário enviado por clzera em 24/02/2016 - 16:52h


[10] Comentário enviado por clzera em 24/02/2016 - 15:14h


[9] Comentário enviado por Ends em 02/02/2016 - 13:59h

E ai Marcelo (clzera)
Blz cara?
E os BOs nos clientes? Tudo resolvido?
Valeu brother.
Abração...


Fala Ends, blz cara? Ei os b.os estão sempre por ai né, por enquanto esta tudo ok! rsss
Estou implementando aqui no serviço esse esquema de bkp das vms, consegui fazer tudo haha, só que peguei 2 b.os que são os seguintes:

ssh root@192.168.1.172 './vmfs/volumes/datastore1/SCRIPTS/ghettoVCB.sh -f /vmfs/volumes/datastore1/SCRIPTS/machines' >dev/null

No comando acima, acontece o seguinte:

ssh root@192.168.1.172 './vmfs/volumes/datastore1/SCRIPTS/ghettoVCB.sh -f /vmfs/volumes/datastore1/SCRIPTS/machines' > dev/null
dev/null: No such file or directory.


E se eu executar o comando sem o "> dev/null" o script inicia normal, mas da essa zika:

ssh root@192.168.1.172 './vmfs/volumes/datastore1/SCRIPTS/ghettoVCB.sh -f /vmfs/volumes/datastore1/SCRIPTS/machines'
Logging output to "/tmp/ghettoVCB-2016-02-24_05-37-24-6462832.log" ...
2016-02-24 05:37:24 -- info: ============================== ghettoVCB LOG START ==============================

2016-02-24 05:37:24 -- info: CONFIG - VERSION = 2015_05_06_1
2016-02-24 05:37:24 -- info: CONFIG - GHETTOVCB_PID = 6462832
2016-02-24 05:37:24 -- info: CONFIG - VM_BACKUP_VOLUME = /vmfs/volumes/VMBackupsNAS/backups
2016-02-24 05:37:24 -- info: CONFIG - VM_BACKUP_ROTATION_COUNT = 1
2016-02-24 05:37:24 -- info: CONFIG - VM_BACKUP_DIR_NAMING_CONVENTION = 2016-02-24_05-37-24
2016-02-24 05:37:24 -- info: CONFIG - DISK_BACKUP_FORMAT = thin
2016-02-24 05:37:24 -- info: CONFIG - POWER_VM_DOWN_BEFORE_BACKUP = 0
2016-02-24 05:37:24 -- info: CONFIG - ENABLE_HARD_POWER_OFF = 0
2016-02-24 05:37:24 -- info: CONFIG - ITER_TO_WAIT_SHUTDOWN = 3
2016-02-24 05:37:24 -- info: CONFIG - POWER_DOWN_TIMEOUT = 5
2016-02-24 05:37:24 -- info: CONFIG - SNAPSHOT_TIMEOUT = 15
2016-02-24 05:37:24 -- info: CONFIG - LOG_LEVEL = info
2016-02-24 05:37:24 -- info: CONFIG - BACKUP_LOG_OUTPUT = /tmp/ghettoVCB-2016-02-24_05-37-24-6462832.log
2016-02-24 05:37:24 -- info: CONFIG - ENABLE_COMPRESSION = 0
2016-02-24 05:37:24 -- info: CONFIG - VM_SNAPSHOT_MEMORY = 0
2016-02-24 05:37:24 -- info: CONFIG - VM_SNAPSHOT_QUIESCE = 0
2016-02-24 05:37:24 -- info: CONFIG - ALLOW_VMS_WITH_SNAPSHOTS_TO_BE_BACKEDUP = 0
2016-02-24 05:37:24 -- info: CONFIG - VMDK_FILES_TO_BACKUP = all
2016-02-24 05:37:24 -- info: CONFIG - VM_SHUTDOWN_ORDER =
2016-02-24 05:37:24 -- info: CONFIG - VM_STARTUP_ORDER =
2016-02-24 05:37:24 -- info: CONFIG - RSYNC_LINK = 0
2016-02-24 05:37:24 -- info: CONFIG - EMAIL_LOG = 0
2016-02-24 05:37:24 -- info:
Datastore not found.

Datastore not found.

Datastore not found.

mkdir: cannot create directory '/vmfs/volumes/VMBackupsNAS/': Operation not permitted
2016-02-24 05:37:26 -- info: Unable to create "/vmfs/volumes/VMBackupsNAS/backups/FIREWALL2"! - Ensure VM_BACKUP_VOLUME was defined correctly



Help novamente meu brother! kkkkkkkkkkkkkkk




Ends, já resolvi. Foi uma bobeira minha aqui, no script eu coloquei uma letra que não existe. rsss

Testando..... Qualquer novidade te aviso.


[12] Comentário enviado por Ends em 24/02/2016 - 23:44h


[11] Comentário enviado por clzera em 24/02/2016 - 16:52h


[10] Comentário enviado por clzera em 24/02/2016 - 15:14h


[9] Comentário enviado por Ends em 02/02/2016 - 13:59h

E ai Marcelo (clzera)
Blz cara?
E os BOs nos clientes? Tudo resolvido?
Valeu brother.
Abração...


Fala Ends, blz cara? Ei os b.os estão sempre por ai né, por enquanto esta tudo ok! rsss
Estou implementando aqui no serviço esse esquema de bkp das vms, consegui fazer tudo haha, só que peguei 2 b.os que são os seguintes:

ssh root@192.168.1.172 './vmfs/volumes/datastore1/SCRIPTS/ghettoVCB.sh -f /vmfs/volumes/datastore1/SCRIPTS/machines' >dev/null

No comando acima, acontece o seguinte:

ssh root@192.168.1.172 './vmfs/volumes/datastore1/SCRIPTS/ghettoVCB.sh -f /vmfs/volumes/datastore1/SCRIPTS/machines' > dev/null
dev/null: No such file or directory.


E se eu executar o comando sem o "> dev/null" o script inicia normal, mas da essa zika:

ssh root@192.168.1.172 './vmfs/volumes/datastore1/SCRIPTS/ghettoVCB.sh -f /vmfs/volumes/datastore1/SCRIPTS/machines'
Logging output to "/tmp/ghettoVCB-2016-02-24_05-37-24-6462832.log" ...
2016-02-24 05:37:24 -- info: ============================== ghettoVCB LOG START ==============================

2016-02-24 05:37:24 -- info: CONFIG - VERSION = 2015_05_06_1
2016-02-24 05:37:24 -- info: CONFIG - GHETTOVCB_PID = 6462832
2016-02-24 05:37:24 -- info: CONFIG - VM_BACKUP_VOLUME = /vmfs/volumes/VMBackupsNAS/backups
2016-02-24 05:37:24 -- info: CONFIG - VM_BACKUP_ROTATION_COUNT = 1
2016-02-24 05:37:24 -- info: CONFIG - VM_BACKUP_DIR_NAMING_CONVENTION = 2016-02-24_05-37-24
2016-02-24 05:37:24 -- info: CONFIG - DISK_BACKUP_FORMAT = thin
2016-02-24 05:37:24 -- info: CONFIG - POWER_VM_DOWN_BEFORE_BACKUP = 0
2016-02-24 05:37:24 -- info: CONFIG - ENABLE_HARD_POWER_OFF = 0
2016-02-24 05:37:24 -- info: CONFIG - ITER_TO_WAIT_SHUTDOWN = 3
2016-02-24 05:37:24 -- info: CONFIG - POWER_DOWN_TIMEOUT = 5
2016-02-24 05:37:24 -- info: CONFIG - SNAPSHOT_TIMEOUT = 15
2016-02-24 05:37:24 -- info: CONFIG - LOG_LEVEL = info
2016-02-24 05:37:24 -- info: CONFIG - BACKUP_LOG_OUTPUT = /tmp/ghettoVCB-2016-02-24_05-37-24-6462832.log
2016-02-24 05:37:24 -- info: CONFIG - ENABLE_COMPRESSION = 0
2016-02-24 05:37:24 -- info: CONFIG - VM_SNAPSHOT_MEMORY = 0
2016-02-24 05:37:24 -- info: CONFIG - VM_SNAPSHOT_QUIESCE = 0
2016-02-24 05:37:24 -- info: CONFIG - ALLOW_VMS_WITH_SNAPSHOTS_TO_BE_BACKEDUP = 0
2016-02-24 05:37:24 -- info: CONFIG - VMDK_FILES_TO_BACKUP = all
2016-02-24 05:37:24 -- info: CONFIG - VM_SHUTDOWN_ORDER =
2016-02-24 05:37:24 -- info: CONFIG - VM_STARTUP_ORDER =
2016-02-24 05:37:24 -- info: CONFIG - RSYNC_LINK = 0
2016-02-24 05:37:24 -- info: CONFIG - EMAIL_LOG = 0
2016-02-24 05:37:24 -- info:
Datastore not found.

Datastore not found.

Datastore not found.

mkdir: cannot create directory '/vmfs/volumes/VMBackupsNAS/': Operation not permitted
2016-02-24 05:37:26 -- info: Unable to create "/vmfs/volumes/VMBackupsNAS/backups/FIREWALL2"! - Ensure VM_BACKUP_VOLUME was defined correctly



Help novamente meu brother! kkkkkkkkkkkkkkk




Ends, já resolvi. Foi uma bobeira minha aqui, no script eu coloquei uma letra que não existe. rsss

Testando..... Qualquer novidade te aviso.



Pois é Marcelo. Tava olhando a mensagem... Datastore not found. Não estava encontrando o volume/caminho que você especificou no ghettoVCB.sh. O ideal é sempre fazer um teste manual do comando antes de agendar ele no CRON com os parâmetros ">/dev/null" para não ter saída de tela (que o CRON não permite).
Tudo certo então! Qualquer coisa, dá um toque ai.
Abraço...


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts