Introdução à Engenharia de
Computadores e Telemática
Guião das Aulas Práticas
Departamento de Eletrónica, Telecomunicações e Informática
Universidade de Aveiro
Conteúdo
1 Introdução ao UNIX 3
1.1 A relevância do sistema operativo Linux . . . 4
1.2 O Arranque, Login e Logout . . . 4
1.3 A Linha de Comandos UNIX . . . 5
1.3.1 Interfaces de texto e grácas . . . 5
1.3.2 Execução de comandos . . . 6
1.3.3 Edição de um comando . . . 8
1.3.4 Navegação no Sistema de Ficheiros . . . 8
1.3.5 Manipulação de cheiros . . . 11
1.3.6 Ajuda On-line . . . 12
1.4 Edição de cheiros de texto . . . 12
1.4.1 Procura de texto . . . 14
2 Conceitos elementares de HTML 15 2.1 Protocolo HTTP . . . 16
2.1.1 Objeto retornado . . . 17
2.1.2 Parâmetros num URL . . . 17
2.2 Documentos HTML . . . 17 2.2.1 Marcas (tags) . . . 18 2.2.2 Comentários . . . 19 2.2.3 Parametrização de marcas . . . 19 2.2.4 Estruturação de documentos . . . 19 2.2.5 Hiper-referências . . . 22 2.2.6 Imagens . . . 22 2.3 Conteúdos dinâmicos . . . 23 2.4 Exploração de um servidor HTTP . . . 23 3 Ferramentas colaborativas 25 3.1 Acesso remoto via SSH . . . 26
3.1.1 Estabelecimento da sessão . . . 26
3.1.2 Transferência de cheiros . . . 27
3.1.3 Autenticação por chaves . . . 28
3.2 Git . . . 30
3.2.1 Introdução . . . 30
3.2.2 Repositório: Monitorização dos conteúdos de um diretório . . . 33
3.2.3 Introdução ao blob . . . 34
3.2.4 Os blobs são armazenados em trees . . . 35
3.2.5 De que são feitas as trees . . . 36
3.2.6 Commits . . . 38
3.2.7 Outros nomes para commit . . . 40
3.2.8 Índice: o intermediário . . . 42
3.2.9 Agora muito rápido . . . 43
4 Redes de Computadores 47 4.1 Introdução . . . 48
4.2 Conguração de rede de um PC . . . 49
4.3 Endereços Físicos . . . 50
4.4 Tradução de nomes em endereços IP . . . 50
4.5 Conectividade e rotas . . . 51
4.6 Identicação da entidade responsável por uma máquina . . . 52
4.7 Transmissão de informação em redes: traceroute . . . 52
4.8 Transmissão de informação em redes: conteúdo HTTP . . . 53
5 Instalação e exploração de máquinas virtuais 55 5.1 Introdução . . . 57
5.2 Instalação de sistemas operativos . . . 57
5.2.1 Sistema live . . . 57
5.2.2 Distribuição SliTaz . . . 58
5.3 Instalação do uma máquina virtual . . . 58
5.3.1 Criação de uma máquina virtual . . . 58
5.3.2 Arranque de uma máquina virtual . . . 62
5.3.3 Instalação do SliTaz no disco rígido virtual . . . 64
5.3.4 Instalação de software adicional . . . 70
5.3.5 Módulos especiais para o sistema operativo . . . 70
5.4 Duplicação de máquinas virtuais . . . 72
5.5 Conguração de redes de máquinas virtuais . . . 72
5.6 Interligação de redes . . . 75
5.7 Criação de uma VPN . . . 78
6 Produção de documentos com LATEX 83 6.1 Introdução . . . 85
6.2 Ações de preparação . . . 85
6.3 Compilação de documentos LATEX . . . 86
6.4 Caracteres especiais do LATEX . . . 86
6.4.2 O caráter '$' . . . 87
6.4.3 Os carateres '{' e '}' . . . 87
6.4.4 Os carateres '[' e ']' . . . 89
6.4.5 O caráter '%' . . . 89
6.4.6 O caráter '~' . . . 89
6.5 Estrutura obrigatória de um documento . . . 89
6.6 Funcionalidades adicionais . . . 90
6.7 Dimensão das letras . . . 92
6.8 Estruturação de documentos . . . 92
6.8.1 Título . . . 92
6.8.2 Partes, capítulos, secções e parágrafos . . . 93
6.8.3 Listas de itens . . . 94
6.8.4 Objetos utuantes: guras e tabelas . . . 96
6.8.5 Referências a partes do texto . . . 97
6.8.6 Disposição de elementos em matriz . . . 98
6.8.7 Expressões e ambientes matemáticos . . . 99
6.9 Inclusão de guras . . . 101
6.10 Índices de conteúdos, de guras e de tabelas . . . 103
6.11 Referências bibliográcas . . . 103
6.11.1 Ficheiro de bibliograa, BibTeX . . . 103
6.11.2 Uso de citações bibliográcas . . . 105
6.11.3 Estilos de bibliograa . . . 106
6.12 Visão global da geração de documentos LATEX . . . 106
7 Programação do robô DETI PIC 111 7.1 Introdução . . . 112
7.2 O robô DETI PIC . . . 112
7.2.1 Movimentação . . . 112
7.2.2 Sensores . . . 112
7.2.3 Comunicação com o exterior . . . 113
7.3 O ambiente DETInchanting . . . 114 7.3.1 Interface . . . 114 7.3.2 Tipos de blocos . . . 114 7.3.3 Categorias de blocos . . . 115 7.3.4 Macro-estrutura de um programa . . . 116 7.3.5 Edição de um programa . . . 116
7.4 Programação do robô DET PIC com o ambiente DETInchanting . . . 117
7.4.1 Programas com comunicação para o exterior . . . 117
7.4.2 Programas com sensores . . . 117
7.4.3 programas com locomoção . . . 119
8 Programação do robô DETI PIC (cont.) 121 8.1 Introdução . . . 122 8.2 Exercícios . . . 122 9 Programação do robô DETI PIC (cont.) 123 9.1 Introdução . . . 124 9.2 Exercícios . . . 124
Resumo
Este guião possui um plano para cada aula prática de IECT. O objetivo destes guiões é o de fomentar a aprendizagem de várias matérias através de experiências práticas. Durante as mesmas os alunos devem aplicar o seu raciocínio crítico e, desejavelmente, ir mais além na exploração de tópicos relacionados com os do guião.
Aula Prática 5
Instalação e exploração de máquinas
virtuais
Resumo:
- Instalação de uma máquina virtual.
- Noção de distribuição live de um sistema operativo. - Conguração do hardware de uma máquina virtual. - Replicação de máquinas virtuais.
- Conguração de rede de uma máquina virtual. - Interligação de redes usando máquinas virtuais. - Criação de uma VPN PPTP.
Conteúdo
5.1 Introdução . . . 57
5.2 Instalação de sistemas operativos . . . 57
5.2.1 Sistema live . . . 57
5.2.2 Distribuição SliTaz . . . 58
5.3 Instalação do uma máquina virtual . . . 58
5.3.1 Criação de uma máquina virtual . . . 58
5.3.2 Arranque de uma máquina virtual . . . 62
5.3.3 Instalação do SliTaz no disco rígido virtual . . . 64
5.3.4 Instalação de software adicional . . . 70
5.3.5 Módulos especiais para o sistema operativo . . . 70
5.4 Duplicação de máquinas virtuais . . . 72
5.5 Conguração de redes de máquinas virtuais . . . 72
5.1 Introdução
As máquinas virtuais são hoje em dia um instrumento que permite explorar a mesma máquina para executar vários sistemas operativos, como se de várias máquinas se tratasse. O objetivo deste guião é o de mostrar como se pode instalar uma máquina virtual, como se pode congurar o seu hardware e como se pode criar uma rede virtual de máquinas virtuais.
A execução das máquinas virtuais é realizada por um software designado por virtua-lizador. Neste trabalho usaremos o virtualizador gratuito VirtualBox1, distribuído pela
Oracle.
5.2 Instalação de sistemas operativos
O processo normal de instalação de um sistema operativo é feito do seguinte modo: 1. O sistema instalador é disponibilizado num suporte móvel (CD, DVD, memória ash,
etc.), total ou parcialmente. Quando é disponibilizado parcialmente, a parte em falta é obtida de repositórios da Internet.
2. O sistema instalador é executado logo após o arranque da máquina, sendo ativado pelo sistema de controlo do arranque da máquina (boot loader).
3. O sistema instalador escolhe um disco rígido da máquina, ou um conjunto de partições de discos da máquina, para aí criar os sistemas de cheiros que irão ser usados pelo sistema operativo que irá ser instalado. Normalmente usam-se duas partições diferentes, uma com os cheiros que normalmente vemos no sistema de cheiros, outra designada como swap que serve para apoio à gestão da memória virtual. Esta última partição pode ser substituída por um cheiro.
4. Após a instalação do sistema operativo no disco rígido, a partição de arranque dessa instalação é marcada como sendo de arranque (boot) e o sistema está pronto para ser reiniciado. Por vezes no arranque de um sistema instalado é iniciado primeiro um sistema de controlo dos sistema operativos a iniciar, de que é exemplo o Grub: arranque da BIOS → seleção do dispositivo de arranque → carregamento do módulo de arranque do dispositivo → seleção do sistema operativo a arrancar (opcional) → arranque do sistema operativo escolhido.
5.2.1 Sistema live
Há, contudo, variantes a este processo base. Um deles consiste no arranque dos sistemas ditos live (ou distribuições live). Os sistema live são sistemas que arrancam como os demais mas não alteram nada na máquina de forma denitiva. Em particular, não usam qualquer
repositório perene da máquina (v.g. discos rígidos) para guardar qualquer informação. Portanto, estes sistemas podem-se executar em máquinas sem disco rígido.
Uma distribuição live, de que há inúmeros exemplos para Linux2, é uma imagem de CD
(cheiro ISO) que pode ser usada para arrancar um sistema live numa máquina, a partir do seu leitor de CD.
Atualmente muitas das distribuições live possuem uma funcionalidade 2-em-1: permi-tem o arranque de uma versão live normal, mas essa permite depois criar uma instalação no disco rígido da máquina. Será esta a faceta que iremos explorar neste trabalho.
5.2.2 Distribuição SliTaz
Neste guião usaremos uma distribuição de Linux pouco habitual, por não pertencer a nenhuma das grandes linhas base das distribuições Linux (debian, Red Hat, slackware, gentoo, etc.): a SliTaz. A SliTaz é interessante para este trabalho porque:
1. O seu live CD tem uma dimensão reduzida (cerca de 35 MB).
2. O sistema base instalado num disco rígido não tem mais de 350 MB.
Estas dimensões são interessantes para diminuir os custos de descarga da imagem do CD, de arranque do sistema live e de instalação do sistema numa máquina virtual. No entanto, muito embora esta seja uma distribuição perfeitamente funcional do Linux, ela não é uma distribuição usual e, por isso, não deverá ser considerada como regra para usar no futuro. O cheiro ISO com a imagem de um CD de arranque da distribuição live do SliTaz está disponível na página da Unidade Curricular3. Deverá descarregá-lo e guardá-lo no seu PC
antes de prosseguir para a instalação de uma máquina virtual.
5.3 Instalação do uma máquina virtual
O primeiro passo para instalar uma máquina virtual consiste na instalação do virtualizador. Os PC dos laboratórios dispõe da versão 4.2 do VirtualBox. Os alunos que usarem a sua própria máquina poderão usar este ou outro virtualizador, mas este guião apenas contemplará explicações para VirtualBox.
5.3.1 Criação de uma máquina virtual
Os passos para criar uma máquina virtual vão ser seguidamente indicados, acompanhados de capturas de ecrãs exemplicativas:
2http://en.wikipedia.org/wiki/List_of_live_CDs
Inicie a execução do VirtualBox. Deverá surgir no ecrã uma janela como a indicada à direita. Antes de instalar qualquer má-quina virtual altere a denição que o Vir-tualBox possui quanto ao local onde guarda dados relativos s máquinas virtuais. Para tal, selecione Ficheiro e no menu selecione Preferências....
Considere apenas as denições associadas à classe Geral. Se estiver a trabalhar num PC do laboratório altere a denição de Pasta pré-definida das Máquinas para /tmp; se estiver a trabalhar no seu PC, altere para o local que considerar mais conveniente. Feita a alteração, feche a janela das denições.
Selecione o botão Novo para indicar que de-seja criar uma nova máquina virtual. Na ja-nela seguinte selecione o botão Avançar (ou Next).
Escolha um nome para identicar a máquina virtual na lista de máquinas virtuais conhe-cidas localmente pelo VirtualBox. quanto ao tipo de sistema operativo, escolha Linux e versão 2.6 (versão do núcleo, ou kernel).
Indique a quantidade de memória RAM de que disporá a máquina virtual. Não escolha mais do que 256 MB, porque não será ne-cessário e porque quanto mais escolher, me-nos memória terá o sistema hospedeiro. Esta conguração poderá ser alterada mais tarde, não é irreversível.
Indique que pretende arrancar de um disco rígido e que pretende criar um disco rígido (virtual) para instalar o sistema.
Escolha um disco virtual do tipo VDI (Vir-tualBox Disk Image).
Indique que pretende o disco virtual com ta-manho dinâmico, para evitar que o disco vir-tual (um cheiro) ocupe o seu tamanho má-ximo à partida. Desta forma, ele terá apenas o tamanho suciente para guardar o sistema de cheiros da máquina virtual, sem nunca ultrapassar o máximo indicado.
Indique a localização do disco virtual (como foi dito atrás, será um cheiro do sistema de cheiros do sistema hospedeiro) e a sua di-mensão. Nesta instalação indique apenas 1 GB. É normal os virtualizadores permitirem mais tarde aumentar o tamanho dos discos virtuais, mas tal não será necessário neste trabalho.
Neste momento já foi recolhida toda a infor-mação necessária para criar um disco virtual para a máquina virtual e o mesmo pode ser criado em conformidade.
Neste momento já foi recolhida toda a infor-mação necessária para criar a máquina vir-tual com um disco virvir-tual de suporte, muito embora no mesmo ainda não exista qualquer sistema operativo (ainda não foi instalado; isso será feito mais adiante). Para já avança-mos com a criação da máquina virtual (simi-lar a uma montagem de uma máquina física).
O aspeto do gestor de máquinas virtuais do VirtualBox após a criação de uma máquina virtual é o indicado à direita. Na caixa à es-querda é indicado nome (SliTaz 1) e tipo (Linux 2.6), bem como o estado da má-quina (desligada). O passo seguinte consiste em congurar o sistema que vai arrancar na máquina, o que é feito selecionando o botão Definições.
Na caixa da esquerda da janela das denições da máquina virtual selecione Armazenamento (para gerir os dispositivos de armazenamento de dados) e constate que tem dois: um CD/DVD não denido (Vazio) associado a um controlador IDE, e um disco rígido de-nido (cheiro SliTaz 1.vdi) associado a um controlador SATA. O passo seguinte consis-tirá em denir um CD para a máquina vir-tual.
Selecione o CD indicado como Vazio, à di-reita surgirão informações (atributos) sobre o dispositivo ainda não denido (nomeada-mente, que estará associado a um controla-dor de IDE secundário). Selecione o ícone com um disco que surge à direita e escolha a opção Escolher um ficheiro de CD/DVD virtual.... Aqui deverá selecionar o -cheiro SliTaz-4.0.iso que descarregou no secção 5.2.2.
Neste momento a conguração de instala-ção da máquina virtual está completa, o seu hardware está denido e no leitor de CD está acessível um CD virtual (a sua imagem ISO) que permitirá o arranque da distribuição live do SliTaz. Podemos terminar a alteração das denições e iniciar a máquina virtual.
5.3.2 Arranque de uma máquina virtual
O arranque de uma máquina virtual é em tudo semelhante a uma máquina real, há uma passagem por um ponto onde é executada uma BIOS (virtual), onde se seleciona um dispositivo virtual de arranque (neste caso vai ser o CD) e se carrega o mesmo para executar. Os dispositivos de interface humana (teclado, rato) do sistema hospedeiro (host) vão ser partilhados com a máquina virtual, também designado por sistema convidado (guest). Para dar a ilusão de que se está a mudar de máquina é normal criar uma associação da entrada de dados de interface com a máquina virtual (focagem) quando se pretende trabalhar na mesma e terminar essa associação, voltando ao sistema hospedeiro, quando não mais for necessária. A focagem faz-se selecionando a janela da máquina virtual com o rato ou simplesmente deslocando o rato para cima dessa janela (quando a interface da
máquina virtual possui um rato). Quando a focagem está ativa, na barra inferior da janela o ícone mais à direita, que possui uma seta para baixo, apresenta a cor verde. Quando a focagem está inativa, o que se consegue fazer retirando o rato da janela ou carregando na tecla Ctrl da direita do teclado, a seta ca preta.
O arranque da distribuição live do SliTaz 4.0 possui os seguintes passos:
Após o arranque é mostrado um menu com várias opções quanto ao sistema que efeti-vamente se quer executar a partir do CD. Vamos escolher a primeira opção (SliTaz Live). Caso nada seja feito, ao m de al-guns segundos esta opção é selecionada por omissão.
O passo seguinte consiste na escolha da lín-gua por omissão do sistema. Escolha a que mais lhe convier.
O passo seguinte consiste na indicação do te-clado que está a usar. O normal, em Por-tugal, é usar teclados Portugueses, pelo que deve escolher a opção pt-latin1.
Feitas as duas congurações anteriores, o sis-tema progride sem qualquer intervenção hu-mana até atingir a plena funcionalidade, al-tura em que apresenta o aspeto à direita. Neste ponto pode explorar os menus da in-terface gráca usando o rato.
5.3.3 Instalação do SliTaz no disco rígido virtual
Feita o arranque da distribuição live, vamos usar a mesma para criar uma instalação similar no disco rígido virtual, o que permitirá posteriormente arrancar o sistema desse dispositivo, dispensando o CD. A vantagem dessa opção é que posteriores alterações do sistema irão car gravadas para utilização futura, enquanto que alterações ao sistema realizadas em execuções live perdem-se após desligar a máquina virtual.
Para fazer a instalação usa-se a aplicação SliTaz Panel do modo que seguidamente se descreve:
Selecione a aplicação SliTaz Panel nos íco-nes que se encontram no canto superior es-querdo da interface (ícone do meio).
Esta operação está reservada para o adminis-trador, que é designado em Linux por root. Use esse nome na caixa de texto username. Use igualmente esse nome como senha (como indicado na janela de interface).
A janela do TazPanel mostra agora a sua in-terface normal. Na barra de menu superior vamos escolher a opção Install e, no menu indicado, Install SliTaz.
Neste passo o TazPanel mostra uma inter-face bastante explicativa, destinada a eluci-dar o utente sobre o que signica o particio-namento de discos e que partições são usadas pelo SliTaz. Deslocando a janela para baixo aparece o botão Execute Gparted, que irá criar as partições no disco virtual.
A aplicação GParted mostra um disco não alocado (i.e., sem estar a uso). Para o usar é preciso primeiro criar uma tabela de parti-ções no mesmo; só após isso se podem denir partições dentro desse disco. Escolha a opção Device da barra superior e a opção Create Partition Table.... A mensagem de aviso indica que irá apagar toda a informação pre-sente no disco, mas tal não é um problema, porque o disco virtual está vazio.
O passo seguinte consiste na criação de uma partição no disco virtual para aí instalar o sistema operativo. Para isso, selecione a área sombreada com o rato e selecione o ícone New.
Na janela que surge, que indica a ocupação total do disco virtual por uma partição do tipo ext2, mantenha os valores indicados e selecione o botão Add.
Após a denição da partição é preciso registá-la na taberegistá-la de partições. Para isto seleciona-se com o botão direito do rato a linha com a ordem de criação da partição que aparece na caixa inferior do GParted e escolhe-se a op-ção Aplly All Operations. A mensagem de aviso avisa uma vez mais do facto de se perderem informações presentes no disco vir-tual, mas, como já se viu antes, o disco está vazio.
Uma vez criada a partição, o aspeto da apli-cação GParted é o apresentado à direita. Podemos terminar a aplicação selecionando o opção GParted da barra superior e esco-lhendo a opção Quit.
Vamos agora selecionar o botão Continue installation para instalar o sistema ope-rativo na partição recém criada.
Neste passo a primeira ação fundamental a realizar consiste na indicação da parti-ção onde o sistema operativo irá ser ins-talado, que irá ser a partição antes criada (/dev/sda1).
O segundo passo fundamental a realizar con-siste na especicação da senha do utiliza-dor tux, o utilizautiliza-dor inicial da máquina (este nome pode ser alterado). Não se esqueça de colocar exatamente a mesma senha na caixa de conrmação. Nas caixas acima também pode ser mudada a senha do utilizador root, o administrador do Linux.
O último passo fundamental a realizar con-siste na indicação da instalação do carregador de arranque Grub.
Uma vez feitas estas congurações pode-se prosseguir para a instalação do sistema ope-rativo e do sistema de arranque Grub no disco rígido virtual.
Os passos realizados durante a instalação vão sendo mostrados à medida que ela ocorre, até ser indicada a terminação da instalação. O sistema agora está pronto para arrancar do disco rígido virtual.
Terminada a instalação, vamos selecionar o botão Instalation complete. You can now restart (reboot) para reiniciar o sis-tema. Entretanto o CD virtual foi desligado da máquina virtual.
Após o reinício surge a interface do Grub ape-nas com uma opção: a do sistema que acabou de ser instalado. Se nada for feito ele arran-cará por omissão ao m de alguns segundos.
Depois do arranque apresentará as interfaces já antes vistas de conguração da língua local e do teclado, após o que se iniciará até ser apresentada a interface gráca de login.
5.3.4 Instalação de software adicional
O sistema operativo anteriormente instalado é minimalista, pelo que precisaremos de insta-lar algumas componentes adicionais. Para isso usaremos a ferramenta de gestão de pacotes tazpkg a partir do interpretador de comandos. Para esse m, depois de fazer login, inicie uma consola com o interpretador de comandos (ícone no canto superior esquerdo) e execute a seguinte sequência de comandos.
Mude o utilizador para o administrador (root) porque iremos administrar a máquina. A senha que o comando pedirá é a de root (será igualmente root se não a mudou no processo de instalação).
$ su
-Carregue a lista de pacotes disponíveis para o seu sistema operativo: $ tazpkg recharge
Procure na lista de pacotes algum que possua uma versão mais avançada do editor vi (nomeadamente, o editor vim):
$ tazpkg search vim
Instale um dos pacotes listados (o vim, por exemplo): $ tazpkg get-install vim
É normal que o sistema instalado a partir da versão live tenha algumas componentes desatualizadas. Para as atualizar execute o seguinte comando:
$ tazpkg upgrade
De seguida, necessitamos de obter e instalar um cliente de VPN que nos permitirá exe-cutar as restantes questões do guião.
$ tazpkg get-install pptpclient
5.3.5 Módulos especiais para o sistema operativo
É normal os virtualizadores disponibilizarem módulos especiais para os sistemas convidados usufruírem de funcionalidades especiais dos hospedeiros. Uma dessas funcionalidades é a capacidade de usar diretorias do hospedeiro a partir da máquina virtual.
A instalação dos módulos especiais faz-se através de um CD virtual disponibilizado pelo próprio virtualizador. No caso do VirtualBox, isso consegue-se da seguinte forma: numa máquina virtual ativa, selecionar a opção Dispositivos da barra superior da janela e escolher a opção Instalar Adições de Convidado....
Após o passo anterior, o CD virtual cará acessível numa subdiretoria de /media após a sua montagem, manual pelo utilizador, ou automática por ferramentas de navegação pelo sistema de cheiros.
A instalação dos módulos adicionais segue então os seguintes passos, sempre atuando como root, como antes. Em primeiro lugar é preciso instalar algumas ferramentas e cheiros de desenvolvimento que serão necessários para produzir os módulos especiais: $ tazpkg get-install bzip2
$ tazpkg get-install gcc $ tazpkg get-install make
$ tazpkg get-install linux-module-headers Feito isto, monta-se o CD no sistema de cheiros: $ mount /media/cdrom
Mudando para a diretoria raiz do CD, executa-se a aplicação de instalação dos módulos especiais:
$ cd /media/cdrom
$ ./VBoxLinuxAdditions.run
No nal deste comando, que durante a sua execução pode apresentar alguns erros não graves, os módulos especiais foram criados e alguns estão já instalados (os seus nomes começam por vbox):
$ lsmod
Uma deles, o módulo vboxsf, é o que permite aceder a diretorias do sistema de cheiros do hospedeiro.
Vamos agora denir uma partilha de uma diretoria do hospedeiro para uma máquina virtual e aceder a essa diretoria através da máquina virtual. Na janela da máquina virtual selecione a opção Dispositivos da barra superior da janela e escolha a opção Pastas Partilhadas.... Selecione o botão à direita que possui o sinal '+', indique a localização da diretoria (pasta) e o nome que lhe quer dar para efeitos de partilha (vamos assumir que escolhe o nome XPTO). Finalmente, antes de terminar indique se quer apenas permitir ler da diretoria partilhada (para a proteger de escritas involuntárias ou maliciosas), e se quer tornar permanente a partilha (i.e., se a partilha continuará ativa em execuções futuras da máquina virtual).
Feita esta conguração, feche as janelas da mesma e volte ao interpretador de comandos da máquina virtual, onde deverá executar o seguinte comando:
$ mount -t vboxsf XPTO /mnt
Este comando indica que a diretoria exportada pelo hospedeiro através do módulo vboxsf e com o nome XPTO deverá ser montada (i.e., estar acessível a partir de) da diretoria /mnt. Após a execução deste comando poderá constatar que tem acesso à diretoria do hospedeiro mudando para a mesma e listando ou listando o seu conteúdo:
$ cd /mnt $ ls -la
Esta funcionalidade de partilha é muito útil para desenvolvimento de componentes que precisam de ser vistas por diversas máquinas. Por exemplo, podemos ter uma aplicação em rede, com um cliente a correr numa máquina e um servidor noutra, e ambos podem ser máquinas virtuais na mesma máquina hospedeira, e as aplicações cliente e servidor podem ser desenvolvidas no hospedeiro e exportadas através destes sistemas de cheiros tanto para o cliente como para o servidor.
5.4 Duplicação de máquinas virtuais
A duplicação de máquinas virtuais é uma tarefa trivial, uma vez que não requer hardware adicional. Como as máquinas virtuais se executam sobre hardware virtual, e a criação deste último não tem limites, é possível duplicar as máquinas e, dessa forma, criar rapi-damente um conjunto de máquinas homogéneas e com um sistema à partida igual (depois cada um pode evoluir separadamente).
Uma máquina virtual como a que criámos anteriormente é completamente descrita por dois cheiros:
• Ficheiro .vbox. Este cheiro possui fundamentalmente uma descrição textual do hardware virtual da máquina virtual.
• Ficheiro .vdi. Este cheiro é o disco virtual usado pela máquina virtual.
Para duplicar uma máquina virtual basta duplicar estes dois cheiros e registar a nova máquina na lista de máquinas conhecida pelo gestor de máquinas virtuais do VirtualBox. Este processo manual pode ser transparentemente realizado através de própria interface deste gestor, que permite clonar máquinas virtuais.
Exercício 5.1
Usando a interface do gestor de máquinas virtuais do VirtualBox clone a máquina virtual antes criada. A clonagem inclui várias perguntas, tente perceber o que é perguntado e responder da forma que considerar mais acertada. Depois de clonar a máquina virtual observe o que de novo apareceu na diretoria onde se guardaram os dados da máquina virtual anterior.
5.5 Conguração de redes de máquinas virtuais
Os virtualizadores permitem que as máquinas virtuais possuam uma ou mais interfaces (ou adaptadores) de rede. Essas interfaces podem estar ligadas a redes diferentes, podem estar relacionadas ou não com interfaces reais e podem realizar ou não transformações no tráfego que por elas passa.
Para o sistema operativo de uma máquina virtual as interfaces de rede virtuais (i.e. aquelas que são fornecidas pelo virtualizador e não são usadas através de outras interfaces, como USB) são sempre interfaces de redes cabladas. Mesmo quando a interface real é uma rede sem os, a interface virtual que a usar irá sempre aparecer à máquina virtual como uma interface de rede cablada. Num sistema Linux tal signica que a interface terá sempre o nome ethX, onde X é um número (0, 1, 2, etc.).
Vamos agora descrever sumariamente os diferentes tipos de interfaces (adaptadores, na terminologia do VirtualBox) que se podem escolher para uma máquina virtual (ver Figura 5.1). Estes tipos são os facultados pelo VirtualBox, mas outros virtualizadores fornecem algo muito similar.
NAT. Este é o tipo escolhido por omissão na instalação de uma máquina virtual. Este modo permite que a máquina virtual interaja com a rede a que o hospedeiro está ligado como se do hospedeiro se tratasse. No entanto, este tipo tem implícitas al-gumas limitações, como a incapacidade de se iniciarem interações de uma qualquer máquina (real ou virtual) para a máquina virtual e o facto de alguns protocolos não conseguirem passar através da interface. Esta interface modica o tráfego que ui através de si.
Bridged. Este tipo permite que a máquina virtual se ligue à rede através de uma interface que funciona um pouco como uma réplica de uma dada interface real. Uma interface bridged X relativa a uma interface Y usa a interface Y para comunicar mas, para um observador externo ao hospedeiro, existem aparentemente duas interfaces, X e Y . Casos há, porém, em que o observador externo não consegue perceber que existem duas interfaces, mas sim que existem dois endereços IP associados à mesma interface (um endereço usado pelo hospedeiro, outro usado pela máquina virtual). Tal acontece, por exemplo, quando a interface real é uma interface sem os 802.11. Rede interna. Este tipo permite ligar a uma rede virtual, interna ao hospedeiro. Esta
rede só está acessível às máquinas virtuais executadas no hospedeiro pelo mesmo virtualizador. Estas redes são identicadas por um nome que é atribuído na sua criação. Por omissão, o VirtualBox disponibiliza uma rede com o nome intnet. Adaptador apenas do hospedeiro (host-only). Este tipo é similar ao anterior mas
a rede interna, virtual, é ligada também a uma interface virtual do hospedeiro. Duas máquinas virtuais a executar no mesmo hospedeiro e usando interfaces congura-das como NAT não conseguem interagir entre si. Aliás, é fácil de vericar que estas inter-faces, que podem ser conguradas automaticamente pelo VirtualBox (através de DHCP) possuem o mesmo endereço IP.
Exercício 5.2
Inicie a execução das duas máquinas virtuais e execute o comando ifconfig numa consola. Obtenha o endereço IP da interface ethX e verique se são ou não iguais nas duas máquinas.
NAT Bridged
Interna Host-only
Figura 5.1: Modelos de rede permitidos pelo VirtualBox e relação com interfaces reais e virtuais da máquina hospedeira ou das máquinas virtuais.
Para conseguirmos que duas máquinas virtuais geridas pelo mesmo virtualizador consi-gam comunicar entre si é preciso usar outros tipos de interfaces; vamos experimentar com uma rede interna.
Exercício 5.3
Vamos designar as duas máquinas como M1 e M2. Em cada uma delas altere o tipo de interface de NAT para interna, usando o botão Dispositivos da barra situada na parte superior da janela de cada das máquinas virtuais. Esta alteração não provoca nenhuma alteração ao nível do sistema operativo das máquinas virtuais, no entanto a partir desse momento ambas as máquinas possuem uma conguração das suas interfaces de rede que não faz sentido (nomeadamente, estão exatamente com a mesma conguração, o que impede que consigam comunicar entre si).
Como o VirtualBox por omissão não disponibiliza o serviço de DHCP para redes in-ternas, as interfaces irão ser reconguradas manualmente. Para esse efeito execute (em cada uma das máquinas) a aplicação SliTaz Netbox Manager (Applications→System Tools→Configure networking). Após introduzir a senha de administração (root) esco-lha a foesco-lha Static IP, altere o valor do endereço IP (10.0.0.1 para M1, 10.0.0.2 para M2), apague o endereço IP da Gateway (porque a não tem) e o endereço IP do DNS server (idem). Para terminar a conguração selecione o botão Start. Mudando para uma consola pode vericar que a alteração foi efetuada usando o comando ifconfig.
Após esta conguração as máquinas virtuais podem comunicar entre si, muito embora estejam isoladas da Internet (estão numa rede IP isolada). A conectividade entre as má-quinas pode ser vericada através do comando ping. Na máquina M1 execute o seguinte comando:
$ ping 10.0.0.2
este comando envia uma mensagem à máquina com o IP indicado, a qual responderá, mostrando desta forma que conseguem comunicar. O valor apresentado à frente de time"= é o intervalo de tempo entre o envio de uma mensagem e a chegada da sua resposta. Em M2 poderá executar o comando recíproco:
$ ping 10.0.0.1
5.6 Interligação de redes
A Internet é construída ligando redes e estabelecendo rotas entre redes para os pacotes IP, as quais indicam para onde se deve enviar um pacote para que o mesmo chegue a um dado destino. Nesta parte do guião será ensinada uma forma elementar de encaminhamento, que consiste no envio de um pacote que chega por uma interface de rede de uma máquina para a rede ligada a outra interface de rede de outra máquina. O objetivo nal será o de conseguir que as duas máquinas M1 e M2 consigam comunicar com uma rede exterior, ligada à maquina hospedeira.
Figura 5.2: Interfaces de rede usadas para ligar as máquinas da rede interna intnet a uma rede cablada exterior através de M1.
Nesse sentido, M1 irá dispor de duas interfaces de rede (Ia e Ib); Ia será uma interface
ligada a uma rede privada, à qual está ligada também a máquina M2; Ib será uma interface
ligada a uma rede exterior, acessível à máquina hospedeira (ver Figura 5.2). Para esta última interface vamos usar o tipo NAT.
Como o VirtualBox não permite adicionar interfaces de rede com as máquinas virtuais em funcionamento (ao contrário de outros virtualizadores), é preciso encerrar M1 primeiro, o que pode ser feito selecionando o botão no canto superior direito da sua interface e escolhendo em seguida Shutdown system: halt.
Feito isto, adicione uma nova interface de rede NAT à máquina virtual a partir do gestor de máquinas virtuais do VirtualBox. Após esta conguração inicie a máquina vir-tual, faça login, inicie uma consola e verique quantas interfaces de rede possui com o comando ifconfig. Neste momento ainda não verá nada de novo, porque o SliTaz não ativa automaticamente novas interfaces de rede.
Inicie a aplicação de gestão de rede que usou antes (SliTaz Netbox Manager) e observe a presença de uma interface ethX não ligada (não iniciada); esta interface é a que foi antes adicionada. Memorize o seu nome (vamos assumir que é eth1) e saia desta aplicação. Numa consola execute os seguintes comandos:
$ su
-$ ifconfig eth1 up $ udhcpc -i eth1
O primeiro comando muda para modo de administração, o segundo ativa a interface de rede e o terceiro indica que a mesma deverá ser congurada com DHCP. Feito isto, po-derá executar o comando ifconfig para vericar que já possui as duas interfaces de rede (mais a loopback) ativas e corretamente conguradas. Para o vericar execute os seguintes comandos:
$ ping 10.0.0.2 $ ping www.ua.pt
O sucesso do primeiro comando mostra que consegue comunicar com M2 através da rede interna; o sucesso do segundo comando mostra que consegue comunicar com a rede exterior. Para além disso, a máquina M1 neste momento é capaz de usar serviços DNS exteriores para resolver (traduzir) nomes DNS (como www.ua.pt) para endereços IP.
Encaminhamento de pacotes
Porém, a máquina M2 ainda não consegue fazer estas duas coisas: comunicar com redes exteriores e usar serviços DNS exteriores. Porquê? Porque não foi congurada de forma a saber que esse m tem de usar M1. Mas isso não chega, porque a máquina M1 também tem de ser instruída que deverá funcionar como encaminhador de pacotes de M2 que lhe chegam por Ib. e que não lhe são destinados, para o exterior através de Ia. Por outras
palavras, é preciso indicar a M1 que os pacotes que lhe chegarem através de Ib (vindos
da rede privada) e que não lhe sejam destinados devem ser reencaminhados (ou roteados) para a rede exterior via Ia.
A conguração de M2 faz-se adicionando o que se designa por rota por omissão. Tal não é mais do que uma regra que diz o que fazer com um pacote quando o mesmo se destina a uma máquina que não pertence às redes conhecidas (neste caso, apenas a rede interna intnet). Essa rota é adicionada com o comando route.
Numa consola da máquina M2 execute os seguintes comandos: $ ip route add default via 10.0.0.1
Esta regra indica que todos os pacotes para os quais não se souber como se enviam para o seu destino devem ser encaminhados para o gateway com o endereço IP 10.0.0.1. Este gateway não é mais do que a máquina M1, que está ligada à rede interna que une M1 a M2. É, portanto, uma máquina diretamente acessível a M2. Designa-se por gateway uma máquina que faz a interligação entre duas redes, tal como M1 está a fazer.
O passo seguinte consiste em indicar a M1 que deve operar como um gateway. Por omissão as máquinas Linux não operam como tal, mesmo quando possuem várias interfaces de rede. Para o fazer é necessário congurar a parte do núcleo do sistema operativo que gere a comunicação IP, o que é feito através do sistema de cheiros especial designado por /proc. Para indicar que M1 deve encaminhar pacotes entre interfaces (i.e. fazer forward de pacotes) execute o seguinte comando:
$ echo 1 > /proc/sys/net/ipv4/ip_forward
Este comando irá mudar uma variável lógica do núcleo do sistema operativo que indica se o mesmo deve ou não encaminhar pacotes IPv4 entre interfaces diferentes. Se o seu valor for 0 (falso), não encaminha, se for 1 (verdadeiro), encaminha.
Feito isto já deveria ser possível comunicar entre M2 e a rede exterior. E, de facto, é, mas os pacotes conseguem apenas sair, não havendo porém resposta do exterior. A
explicação desse facto sai um pouco do âmbito deste trabalho, está relacionada com uma faceta particular da interfaces NAT do VirtualBox, mas o problema pode ser resolvido através de uma alteração dos pacotes de M2 antes serem enviados por M1 para a interface NAT. Execute, então, os seguintes comandos em M1:
$ tazpkg get-install iptables
$ iptables -A POSTROUTING -t nat -s 10.0.0.0/24 -o eth1 -j SNAT --to-source 10.0.3.15
Este último comando assume, como acima se referiu, que a interface NAT é a eth1. Se não for deverá adaptar o comando em conformidade. Uma vez mais, a explicação destes comandos será omitida por sair do âmbito deste trabalho.
Neste momento é possível comunicar sem qualquer problema entre M2 e o exterior. Sabendo que o endereço IP da máquina www.ua.pt é 193.136.173.25, execute o seguinte comando em M2:
$ ping 193.136.173.25
Se conseguir realizar o comando com sucesso, então M2 tem conectividade para www.ua.pt, logo à rede exterior.
Para terminar este exemplo de encaminhamento falta apenas tratar do aspeto do acesso ao DNS exterior por parte de M2. Neste momento a máquina M2 não é capaz de traduzir nomes DNS para endereços IP, porque não sabe onde se deve dirigir para o fazer (falta-lhe a indicação de onde está um servidor DNS). Quando a conguração é feita por DHCP tal é realizado automaticamente, mas a conguração da interface de M2 foi feita de modo manual e essa questão foi ignorada.
Para fazer esta conguração manual vamos usar os mesmos dados que M1 usa, criados pela sua conguração automática (por DHCP) da sua interface NAT. Execute o seguinte comando em M1:
$ cat /etc/resolv.conf
Em M2, edite este mesmo cheiro e coloque exatamente o mesmo conteúdo. Feito isto, já pode usar nomes DNS em M2, execute por isso o seguinte comando em M2:
$ ping www.ua.pt
Se conseguir realizar o comando com sucesso, então M2 está a usar corretamente um servidor DNS para resolver o nome www.ua.pt.
5.7 Criação de uma VPN
Uma VPN (do inglês Virtual Private Network) permite criar uma rede entre um ou mais dispositivos de forma virtual, isto é, sem envolver sicamente os dispositivos e recorrendo a conetividade que estes já têm entre si. As VPN são pois redes criadas no topo de outras
redes (overlays) e que conferem aos seus utilizadores diversos benefícios tais como segurança do canal de comunicação, privacidade, conetividade a recursos protegidos ou como meio de ultrapassar barreiras (rewalls). Neste guião iremos estabelecer uma VPN entre uma máquina virtual anteriormente criada e o servidor iect.av.it.pt.
Existem diversas tecnologias para estabelecer uma VPN, entre as quais se destacam o IPSec, L2TP, OpenVPN e o PPTP. Neste guião iremos nos focar no último uma vez que se trata da tecnologia usada pela VPN da Universidade de Aveiro. O PPTP (Point-to-Point Tunnelling Protocol) é uma tecnologia inicialmente desenvolvida pela Microsoft e como tal muito popular em ambientes de pequena e média dimensão (e.x. PMEs). O protocolo encontra-se descrito no RFC 2637 e assenta no uso de um canal de controlo TCP no porto 1723 e da transmissão de dados num túnel GRE (Generic Routing Encapsulation). Os pacotes transportados no túnel GRE são por sua vez pacotes PPP (Point-to-Point Protocol) que garantem a correta transmissão de dados entre os extremos do túnel.
Neste guião é assumida a preexistência de um servidor PPTP devidamente congurado. Na eventualidade de desejar replicar a conguração desde servidor, deverá consultar http: //poptop.sourceforge.net/dox/debian-howto.phtml.
No resto deste guião iremos usar a máquina que até aqui designámos como M2. Porém, antes de a usar vamos alterar-lhe a interface de rede para o tipo bridged e vamos congurar a interface de rede (assumindo que é eth0) do seguinte modo:
$ ifconfig eth0 192.168.10.XY/24 $ route add default gw 192.168.10.254
onde X deverá ser o número de turma (1 a 5) e Y o número de bancada (1 a 9). Caso os dois alunos de cada grupo estejam a realizar este guião usando pelo menos uma máquina própria, deverá acrescentar um 1 antes de XY. Este procedimento serve apenas para evitar que duas máquinas usem o mesmo endereço IP.
Após esta conguração verique se consegue contactar corretamente a rede exterior usando o seguinte comando:
$ ping www.ua.pt
O passo seguinte consiste na instalação dos pacotes de software necessários à exploração do PPTP, o que é feito com os seguintes comandos:
$ tazpkg get-install pptpclient
$ tazpkg get-install pptpclient-extra $ tazpkg get-install ppp
Pode, então, iniciar a criação da VPN executando o seguinte comando: $ pppd pty "pptp iect.av.it.pt --nolaunchpppd" lock
nodetach noauth nobsdcomp nodeflate usepeerdns refuse-eap refuse-mschap defaultroute require-mppe-128 name "aluno" remotename PPTP password "lixo" e deverá obter algo semelhante a:
Using interface ppp0
Connect: ppp0 <--> /dev/pts/0 CHAP authentication succeeded
MPPE 128-bit stateless compression enabled
not replacing existing default route via 192.168.8.254 Cannot determine ethernet address for proxy ARP
local IP address 192.168.0.100 remote IP address 192.168.0.1
Vamos analisar esta informação. A VPN pressupõe a criação de uma nova interface de rede (virtual) que no nosso caso tem o nome de ppp0. De seguida temos informação que a nossa autenticação junto do servidor usando as credenciais aluno/lixo tiveram sucesso usando o protocolo de autenticação CHAP (Challenge-Handshake Authentication Protocol). É-nos dada informação que a nossa VPN irá utilizar compressão stateless e cifra de pacotes MPPE (Microsoft Point-to-Point Encryption) de 128-bit, esta compressão irá permitir aumentar a quantidade de informação útil transmitida entre o cliente e o servidor com a mesma quantidade de largura de banda disponível. Por m, é-nos dada informação respeitante as congurações de rede, o script não fez qualquer alteração em relação à default gateway (ou router de saída), o IP na interface virtual do cliente (ppp0) é o 192.168.0.100, e o IP na interface remota (no servidor VPN) é o 192.168.0.1. É de realçar que a VPN faz a atribuição do endereço IP, não sendo necessário recorrer a conguração manual ou via DHCP.
Vamos agora analisar que alterações ocorreram ao nível do sistema operativo. Antes de tal, é necessário libertar a linha de comandos usando o CTRL-Z que irá fazer o Stop do processo da VPN. De seguinda o comando bg irá colocar em background o mesmo processo. Isto faz com que o cliente de VPN continue a executar.
Comecemos por analisar a lista de interfaces usando o comando: $ ip address show
Deverá reparar que existe uma nova interface com o nome ppp0 e cujas propriedades são algo diferentes das demais interfaces, pois é desprovida de endereço de nível 2 (Ethernet Address) e não tem endereço de broadcast (anal é uma ligação ponto a ponto).
Analisemos de seguida a tabela de encaminhamento: $ ip route show
Aqui chama-se a atenção para 2 entradas: ...
193.136.92.155 via 192.168.8.254 dev eth3 src 192.168.8.200 192.168.0.1 dev ppp0 proto kernel scope link src 192.168.0.100 ...
A primeira entrada serve de garantia que qualquer que seja a rota por omissão (default gateway) o servidor VPN será sempre alcançado através do router da rede local. A segunda entrada estabelece que a comunicação com o outro extremo do túnel criado pelo VPN deverá ser feita com o endereço de origem atribuído pela VPN. Descortinando estas duas entradas, podemos dizer que podemos chegar ao servidor iect.av.it.pt através do seu endereço real via o router local ou diretamente para o endereços 192.168.0.1 através do túnel.
Neste momento podemos aceder de forma segura a recursos no servidor iect.av.it.pt, mas poderemos estar bloqueados de aceder a outros serviços. Vamos experimentar com um simples serviço que nos responderá com um echo. Este serviço só irá funcionar para clientes de VPN pois não está disponível ao público.
Podemos tentar ligar ao endereço público: $ telnet iect.av.it.pt 50000
Trying 193.136.92.155...
Eventualmente haverá um timeout denotando incapacidade de comunicar com o servidor. Por sua vez, acedendo ao endereço privado e restrito aos clientes da VPN (e escrevendo ola mundo): $ telnet 192.168.0.1 50000 Trying 192.168.0.1... Connected to vpn001.ras.ua.pt (192.168.0.1). Escape character is '^]'. ola mundo ola mundo
Connection closed by foreign host.
Ambos endereços se referem ao mesmo servidor, no entanto um é o endereço na rede pública que tem uma rewall à sua frente, e outro é o endereço privado apenas disponível a quem se encontrar devidamente autenticado e conectado através da VPN que estabelecemos previamente.
A nossa VPN é já útil para aceder a recursos no servidor da VPN, mas caso pretendamos aceder a outros recursos na rede do servidor é necessário congurar uma nova regra na nossa tabela de encaminhamento. Antes, vamos conrmar que não nos é possível aceder ao servidor barbrady.av.it.pt no serviço de HTTP usando o comando curl.
$ tazpkg get-install curl $ curl barbrady.av.it.pt:8080 curl: (7) couldn't connect to host
De seguida, vamos congurar uma regra que envie todo o trafego com destino ao servidor barbrady.av.it.pt via VPN.
$ ip route add 193.136.92.239 via 192.168.0.1 Tentando de novo aceder ao serviço:
$ curl barbrady.av.it.pt:8080 <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head>
<body><h1>Serviço Privado</h1>
<p>Este conteúdo só é acessível através da VPN</p> </body></html>
Se tiver um navegador disponível (e.g. Midori) poderá também tentar aceder a http: //barbrady.av.it.pt:8080. Por último, pode-se dar o caso de pretender que todos os seus pacotes sejam enviados através da VPN, para tal necessita de acrescentar uma regra que conrme a interface da VPN como a default. Uma vez que já existe tal regra (que encaminha todos os pacotes para a gateway da rede local) é necessário primeiro remover tal regra.
$ ip route del default via 192.168.10.254 $ ip route add default via 192.168.0.1
Desta feita todos os seus pacotes, exceção feita aos que se destinam ao IP publico da VPN por ressalva da regra inserida pelo script que lançou a VPN, serão enviados para o exterior através do túnel da VPN e encaminhados via a rede do servidor VPN.