Archive for the 'network' Category


Configuração NAT em VMs no VMWare Fusion e Workstation 2

Recentemente tenho trabalhado com muitas aplicações e não dá para ter tudo instalado na mesma máquina por que vários serviços podem conflitar entre si, seja por versões ou duplicidade de instâncias, por exemplo versões de banco de dados de diferentes verões na mesma máquina.

O que fazer? Configurar VMs (Virtual Machines)!

Se você tem um PC relativamente novo já deve ter experimentado utilizar máquinas virtuais para emular algum sistema, por exemplo linux ou versões de sistemas betas e etc. Digamos que você queira ter um servidor *NIX rodando na sua máquina com um servidor web para desenvolvimento, seja Java/PHP/Python o que for, uma vez que em grande parte esses sistemas são colocados em produção nesses tipos de sistemas e não no Windows.

Estou usando o VMWare 2.0 para isso, agora estou de Mac e portanto estou usando a versão Fusion que é a única disponível dos produtos da VMWare. No caso do mundo Windows, temos Player, Workstation e Server. Usei também a versão Workstation 6.5.x.

Um pouco de teoria…

Acontece que a configuração padrão de rede é NAT que é um tradutor de endereços de rede. Veja a imagem abaixo para ilustrar a configuração NAT:

VM NAT

Configuração Virtual Machine em NAT

Como pode ver na figura acima, você tem uma máquina virtual rodando no seu computador e utiliza a interface de rede dele para acessar sua rede local. Veja que o recurso de rede é compartilhado, de modo que sua VM não fica exposta na rede externa, onde o seu computador atua como um “firewall”.

Digamos que eu queira expor meu servidor web para o resto da rede, neste caso na VM estou com a porta 80 aberta, porém o IP virtual que é configurado na VM não é visto pela rede. Entenda isso como o analogo a sua configuração de rede que provavelmente deve ter um roteador que interfaceia sua rede local com o seu provedor de acesso a internet. Ou seja, o pessoal de fora não vê seu PC e sim o roteador. Se desejarmos expor precisamos “traduzir” as requisições para que sejam enviadas ao destino correto, em nosso caso seu PC-Roteador ou VM-Computador.

Para entendermos melhor, precisamos entender como uma comunicação é feita, não vou entrar em muitos detalhes.

Para que você se conecte a uma máquina precisamos do endereço IP e a porta de comunicação. Digamos que vá acessar uma página na Web pelo seu navegador predileto. Você digita www.fabioyamate.com este endereço será traduzido para um endereço IP por servidores DNS e a requisição será enviada para a porta 80 (default), que é padronizada para servidores Web. Neste caso não explicitamos a porta, pois o navegador já estabelece isso por padrão. Se precisássemos de outra porta, digamos 8080, precisaríamos requisitar www.fabioyamate.com:8080.

Ok, agora que sabemos disso, como expomos a porta 80 da minha máquina virtual? Se você não entendeu o problema, veja que a porta 80 da sua máquina não é a mesma da máquina virtual. Precisamos ensinar que as requições que cheguem na porta 80 do meu computador vão para a porta 80 da minha máquina virtual, essa etapa é que chamamos de tradução.

Assim, queremos relacionar vm:80 <-> comp:80, poderíamos associar a portas diferentes, digamos: vm:80 <-> comp:12345. Então faríamos requisições para a porta 12345 para acessarmos o serviço rodando na máquina virtual.

Colocando em Prática

Agora que entendemos o conceito do funcionamento, precisamos saber como configurar isso na VM. No VMWare, novas interfaces de redes são adicionadas, que neste caso são virtuais. No VMWare Fusion, a tabela de tradução de endereços encontra-se no diretório:

/Library/Application Support/VMWare Fusion/vmnet8/nat.conf

Uma boa prática é sempre mantermos uma cópia da verão em funcionamento para caso realizemos uma besteira podemos restaurar.

sudo cp nat.conf nat.conf.backup
sudo vi nat.conf

Agora basta adicionarmos a tradução da seguinte forma:

porta_local_maquina = endereco_vm:porta_vm

Exemplo:

# Servidor Web
8080 = 172.16.250.130:80

Basta salvar o arquivo usando :wq! (pois o arquivo é readonly) no vi, se sentir dificuldade de uma navegada na internet, ou use outro editor a sua escolha.

Agora precisamos reconfigurar a interface virtual para que as alterações tenham efeito.

No diretório /Library/Application Support/VMWare Fusion temos um script boot.sh, assim digite:

sudo ./boot.sh –restart

Isso irá reconfigurar. Pode ser que necessite desligar a máquina virtual, mas normalmente não é necessário.

Com isso você já pode acessar de fora a máquina virtual configurada.

No Windows o processo é igual, mas é feito por interface gráfica, se não me engando Network Editor ou algo do gênero.

Note que se você usa algum firewall você deve liberar as portas da máquina virtual para que o serviço seja realmente exposto.

Um utilitário muito bom é o nmap que tem tanto para todas as plataformas. Basta usar o comando:

nmap -p <PORTA> <ENDERECO_IP>

ou

nmap -p <PORTA_INICIAL>-<PORTA_FINAL> <ENDERECO_IP>

Caso ping esteja restrito no firewall, use -PN.

Espero que este texto seja de ajuda.

Configurando Wireshark para Mac: MIBS e Interfaces 2

Olá, estive sumido ultimamente, alías isto ocorre frequentemente.

Bom, já tem um tempo que adquiri um mac para mim e estou aos poucos aprendendo. Nem tudo é tão simples como no Windows que nas instalações basta clicar em “next”. Veja bem, eu não disse que Windows é melhor.

Hoje, precisei instalar o Wireshark (antigo Ethereal) para Mac. Já havia instalado anteriormente (versao 1.0.5) porém tive alguns erros e na epoca não fui atrás em como resolver.

Hoje, dediquei um pouco mais de tempo para resolver esses problemas de uso que tive. Para o pessoal não habituado ao mundo UNIX/Linux, as documentações que acompanham são extremamente úteis e não podem ser descartados como ocorre no Windows.

Sugiro sempre ler os README que mostram passo a passo de como proceder para instalar nestes ambientes. Apesar de na maioria dos casos, no Mac a instalação chega a ser mais simples que no Windows onde basta arrastar o aplicativo para o diretório Applications.

Bom, voltando, há dois problemas extremamente comum ao usar o Wireshark no Mac:

  1. nenhuma interface foi encontrada
  2. MIBS error

A segunda é a mais simples. O diretório padrao do MIBS mudou (acredito que ocorreu no Leopard, não tenho contexto histórico para afirmar isso) e agora encontra-se no caminho

/usr/share/snmp/mibs

em Preferences > Name Resolution do Wireshark (basta adicionar este caminho novo). A fonte da solução pode ser encontrada aqui.

O primeiro é um problema de permissão que tem de ser concedida aos dispositivos /dev/bpf*

A solução imediata seria ir no Terminal e digitar:

sudo chown “seu usuario” /dev/bpf*

Porém ao reiniciar o Mac o problema volta por que esta configuração não é persistida. O jeito é configurar isso no startup do Mac. O Wireshark conta com um diretório Utilities que tem um diretório Startup com um script ChmodBPF.

Basta copiar o script para o diretório /Library/StartupItem

Para aqueles que apenas arrastaram o Wireshark para o diretório Applications, pode ter faltado copiar os scripts para algum diretório /bin configurado no path. Eu coloquei os script do diretório Utilities/CommandLines para o caminho /usr/local/bin.

Para os familiarizados em janelas, basta abrir o Finder e pressionar cmd + shift + G, e digitar o caminho.

Com isso, basta reiniciar o Wireshark e tudo estará configurado.

Até um próximo post.