Sobre o autor

Olá pessoal!
Eu sou Patrick Brandão.

Em minha experiência de quase 20 anos com sistemas Linux, percebi que boa parte do meu tempo era consumido com re-trabalhos: reinstalar SO, reparar danos por desastres naturais (raios, quedas de energia, componentes queimados), sabotagens causadas por invasões, danos causados por usuários inexperientes e MUITA, mas MUITA dificuldade ao lidar com usuário inexperiente por telefone diante de um terminal.

Como sou desenvolvedor de software, meus sistemas eram feitos para rodar no Linux Conectiva, Debian, CentOS, Ubuntu entre outras. Isso se mostrou um problema pois meus clientes (usuários) sempre conseguiam dar algum comando que danificava o sistema ou causavam inconcistencias no software com seus 'apt-get', 'yum', 'rm -rf /', 'chmod 000 *', etc...

Consegui resolver muito desses problemas migrando e homologando meus softwares somente no Slackware. Reduzi a quase zero o indice de suportes por problemas criados pelo usuário e seus técnicos aventureiros. O servidor passou a ter um pouco de paz e meus softwares chegaram perto do SUPORTE-ZERO.

Mas como nem tudo é perfeito, faltava lidar com os problemas de instalação, reparação do sistema em caso de danos e recuperação de dados, o que por telefone ainda eram penosos.

Apos estudar o Slackware por 10 anos, resolvi criar minha propria distribuição Linux.
Meu objetivo com o Slackmini é criar uma distribuição extremamente simples para o usuário inexperiente mas muito abrangente para desenvolvedores e pessoas experientes.

Seu projeto visa atender todas as necessidades para executar sistemas personalizados em plataforma x86 64bits sem muita perda de tempo e dispensando "ajustes finos".

Espero que gostem e me ajudem a torna-lo melhor!

   Sobre o Slackmini

Inspirado no Slackware, o Slackmini é uma distribuição desenvolvida do zero, compilada pacote por pacote com o objetivo de manter apenas arquivos necessários e executar processos com o mínimo de recursos de hardware com estabilidade.

Recursos

  • Gratuita sobre liçenca GNU/GPL e similares (os diferentes pacotes de fontes possuem licenças diferentes).
  • Código de construção da distro e fontes são compartilhados no GIT-HUB e no site principal (http://sourcecode.slackmini.com.br/).
  • Imagem ISO pequena (CD/DVD ~200 megas).
  • Instalação simples e rápida, sem muitas opções para confundir o usuário.
  • Verificador de assinatura de pacotes pre-instalação, para previnir problemas com CD/DVD/Pendrive danificado.
  • Somente para x86_64, impedindo o usuário de instalar em sucatas (32 bits e embarcados).
  • Particionamento automático de 4 partições primarias (swap + boot + root + storage).
  • Detecção automática de coneção com a internet (cliente DHCP).
  • Suporte a pilha dupla: IPv4 e IPv6.
  • Principais bibliotecas e aplicativos prontos (MariaDB, Apache, Lighttpd, Nginx, PHP).
  • Coletania de comandos para diagnostico (leia o manual).
  • Sistema anti-corrupção de arquivos, capaz de recuperar danos por queda de energia e sabotagem de arquivos estáticos.
  • Sistema de recuperação via instalador capaz de restaurar o sistema ou recuperar dados (backup).
  • Pronto para a nuvem, rodando em maquinas virtuais com leveza e sem bloquear recursos.
  • Updates automáticos e silenciosos de correções.


Finalidade

Em sua forma original, o Slackmini não prove nada, apenas um Linux cujo boot rápido e linear (baseado no Slackware) se encarrega de subir o ambiente mínimo para execução de programas (que você deve instalar e pre-configurar).

Voce pode usar o Slackmini em conjunto com seus pacotes personalizados, o manual lhe ensinara como cria-los. Bastará instalar o Slackmini e seu pacote para ter um sistema pronto, pequeno, rápido, estavel e imune a sabotagens.
Lembre-se: KISS - Keep it Short & Simple.

   Licença de uso

Dos conceitos:

  • O Slackmini é uma distribuição Linux comercial.
  • Uma distribuição é um sistema operacional resultante da união de um kernel Linux, pacotes de programas, scripts, arquivos de configuração e programas de computador especialmente desenvolvidos para a distribuição.
  • Kernel (kernel Linux) é o software responsável por executar e gerenciar todos os programas em um computador (computador real ou virtual), é um software gratuito.
  • O kernel Linux é licenciado pelo contrato GNU/GPL e disponivel no site https://www.kernel.org/


Dos softwares presentes na distribuição

Os diferentes pacotes que constituem essa distribuição podem possuir contratos diferentes, para descobrir o contrato dos pacotes de software que compõem essa distribuição acesse o diretório de códigos-fonte (http://sourcecode.slackmini.com.br/).

O desenvolvedor da distribuição mantem o compromisso de publicar todos os códigos baseados em licenças GNU/GPL e semelhantes.

Os arquivos de configuração serão criados pelo usuário do software que deverá lhes atribuir uma licença de uso para proteger sua propriedade intelectual.

A distribuição Slackmini bem como os programas de computador especialmente desenvolvidos para a distribuição Slackmini são de propriedade intelectual do desenvolvedor Patrick Brandão que se reserva ao direito de licenciar (permitir o uso) apenas a quem for especificado por escrito.

O valor da licença, seus limites e atribuições, o suporte técnico, direitos e deveres do usuário devem ser atrituidos por contrato firmado entre as partes (desenvolvedor e usuário final).

Pacotes que venham a ser instalados no Slackmini devem possuir uma licença de uso atribuida pelo seu autor em conformidade com o desenvolvedor do Slackmini.

Ao baixar e/ou ao instalar o Slackmini você automaticamente concorda com as seguintes licenças e contratos de software:

Licenças e contratos de software


Aquisição da licença de uso

Entre em contato com o desenvolvedor (Patrick Brandão) para obter a licença de uso pelo e-mail patrickbrandao@gmail.com

   Baixando o Slackmini

Para baixar o Slackmini, acesse o site http://www.slackmini.com.br e clique na opção DOWNLOAD.

Link para download: http://downloads.slackmini.com.br/isos/slackmini-1.0.iso

   ISO no CD/DVD ou Pendrive

O arquivo ISO (extensão .iso) é um arquivo que deve ser interpretado por um programa de gravação de CD ou DVD.
Também é possível usar a imagem ISO para um boot pelo pendrive ou cartão de memória.

Você não deve gravar esse arquivo simplesmente colocando ele no CD/DVD ou pendrive pois não irá funcionar dessa maneira.


Gravando ISO em CD/DVD

Para gravar a imagem ISO em um CD ou DVD, clique com o botão direito sobre o arquivo a escolha "ABRIR COM" e selecione um programa gravador de CD/DVD.

Caso tenha dificuldades ao gravar a imagem ISO em um CD/DVD, consulte o suporte técnico de seu sistema operacional (Windows, MacOS, etc...).

Softwares para gravação de ISO em CD/DVD ou Pendrive:



   Instalação

Primeiro passo: BOOT no servidor

Coloque a midia (CD/DVD, Pendrive ou Cartão de memória) no servidor.
É necessário que a BIOS (software da placa-mãe) esteja configurada para dar boot pela midia escolhida por você.
Caso não esteja entre na BIOS (normalmente teclando F1, F2, F10 ou F10 apos ligar o servidor).
Caso tenha dificuldades durante o BOOT, solicite o suporte técnico do servidor.
Se estiver instalando em maquina virtual o processo é muito parecido.

Caso tenha dificuldades em dar BOOT ou acessar a BIOS, consulte o suporte do servidor para dar RESET NA BIOS e inicie o processo de BOOT novamente.

Tome cuidado especial com o CD/DVD ou Pendrive, se ele estiver corrompido ou com problemas o BOOT não será possível.
Teste o BOOT com outro sistema (como Ubuntu ou Debian) para se certificar que o BOOT funciona.


Tela de BOOT do Slackmini



Tecle ENTER para continuar. Caso não aperte nada o sistema de instalação será executado em alguns segundos.





A opção padrão no menu inicial é INSTALAR. Tecle enter na opção INSTALAR para iniciar a instalação do Slackmini:




Selecione o disco onde o Slackmini será instalado:




Instalar o Slackmini no disco implica em formatar o disco e apagar todos os dados que se encontram nele. Você precisa ter certeza que o disco não possui dados importantes antes de continuar:




O instalador irá formatar e particionar seu disco. Se o disco for maior que o espaço necessário para rodar o Slackmini, uma quarta partição será criada e montada em /storage:




O instalador irá verificar se os pacotes estão corretos (teste de integridade) certificando-se de que não houver erros durante a gravação do CD/DVD ou se houve problemas no pendrive/cartão de memória por conta de badblocks.:














O sistema foi instalado. Primeiro boot:






No primeiro login, informe o usuário "root" (sem aspas) e a senha padrão "tulipa" (sem aspas):



Seu Slackmini está instalado e você tem acesso ao shell Linux (bash). Isso conclui o estágio de instalação.


   Mudando senha padrão

Usuário e senha padrão


Usuário:   root
Senha:   tulipa


No primeiro login, informe o usuário "root" (sem aspas) e a senha padrão "tulipa" (sem aspas), ambos com letra minúscula:




Altere a senha padrão usando o comando "passwd" (sem aspas), observe a imagem:

Senhas que você não pode usar:

  • Sequencias numéricas: 123, 1234, 123456, 123654, 1234567890, 654321, 000000, 111111, etc...
  • Sequencias do teclado: qwe123, abc123, asdfgh, qazwsx, qwert, zxcvb, yuiop, bnm, etc...
  • As senhas mais usadas: deus, brasil, 123mudar, jesus, iloveyou, matrix, admin, password, Senha, salmos, teste, starwars
  • Datas, pois todo mundo faz aniversario, casamento, noivado ou alguma data especial entre 01/01/1900 e hoje (28/03/2024), assim, senhas como: 010498 pode ser a o nascimento do seu filho, 141145 pode ser o nascimento do seu avo.
  • Nomes próprios: silva, pereira, janaina, tiago, joao, maria, felizberto, lindomar, carolina, etc...
  • Palavras do dicionario portugues: laranja, janela, servidor, biscoito, monitor, geladeira, nervoso, paralelepipedo, etc...
  • Palavras do dicionario ingles, espanhol, italiano, etc...

Hackers usam listas de senhas mais usadas, todas as datas entre 01/01/1990 e 01/01/2016, dicionarios dos principais idiomas para fazer brute-force (tentar todas as senhas automaticamente até acertar) para invadir seu servidor.

Você pode usar senhas compostas por duas palavras e adicionar entre elas números ou simbolos, tornando-as muito dificil de advinhar (evite usar meus exemplos):
  • aniversario$18021982
  • janela@aberta@para@rua
  • %quero-mais-cafe%
  • o.rato.roeu.a.roupa.do.rei.de.roma.123
  • X.impresso-hp-na-minha-mesa.X
  • 99123-Sou_o_administrador!@#$
  • P@l@vr@-secreta






Seu Slackmini está instalado e com uma senha segura. Isso conclui o estágio de instalação.


   Conectar a internet

Para configurar a internet execute o comando "ipconfig" (sem aspas). As alterações feitas no IPCONFIG não ficam salvas e são apenas para facilitar a primeira conexão com a internet.




Escolha a opção "DHCP" no menu principal, em seguida escolha a interface de rede:




Ao atualizar o status na tela principal do IPCONFIG aparecerá seu IP atual, seu MAC e seu gateway padrão:




Use a opção "Testar" do IPCONFIG (ou o comando no shell: ipconfig test) para verificar se há acesso a internet:



Seu Slackmini estará com acess a internet se os passos acima funcionaram.


   Conexão via SSH

Para acessar o Slackmini via SSH


Porta padrão do servidor SSH:   1822

É necessário configurar um endereço IP no servidor, manualmente ou via DHCP para que a conexão SSH seja possível.
Teste se pelo menos o ping para o IP do servidor funciona antes de tentar conectar via SSH.

Programas para se conectar via SSH:


Opções do servidor SSH:

Para alterar as opções do servidor SSH, edite o arquivo /etc/ssh/sshd_config e reinicie o serviço openssh (leia o capítulo sobre serviços).
   Terminal de configuração

O Slackmini conta com 2 softwares de interface com o administrador (shell):

  • Bash: shell padrão do Linux Slackware;
  • ZeroShell: shell padrão do Slackmini;

O usuário root tem por padrão o shell BASH (/bin/bash), no entando o Slackmini baseia todo seu gerenciamento e configuração pelo shell próprio: ZeroShell (/bin/zeroshell).

O shell Bash deve ser usado apenas pelo usuário root pois tem todo o poder de alterar arquivos e executar qualquer processo com privilegio de administrador.

Para evitar problemas com usuários de soluções finais nas quais o Slackmini é baseado, recomendo que novos usuários tenham seu shell definido como /bin/zeroshell.
Se esses usuários foram administradores eles poderão usar o ZeroShell para configurar o sistema mas limitados as opções dos serviços do ZeroShell.

Usuários comuns que forem criados no sistema que usarem o ZeroShell estarão limitados aos comandos de consulta.

   Zeroshell

Para acessar o ZeroShell, execute o comando zeroshell





Principais comandos e navegação entre diretórios:


ls ou [tab] : listar itens no diretório e itens.

[admin@servidor] > ls

 /
 [D] system/           [D] interface/        [D] ip/             [D] ipv6/
 [D] tools/            [>] export            [>] about           [>] copyright 
 [>] date              [>] desligar          [>] exit            [>] logout 
 [>] poweroff          [>] quit              [>] reboot          [>] reiniciar 
 [>] sair              [>] service           [>] free            [>] iperf 
 [>] iptraf            [>] lscpu             [>] mtr             [>] ping 
 [>] ping6             [>] ps                [>] tcpdump         [>] top 
 [>] htop              [>] traceroute        [>] uptime          [>] ssh 
 [>] telnet            

[admin@servidor] > 

Diretórios aparecem de azul, itens aparecem de magenta (rosa).
Todos os item são comandos, basta digitar o nome do item para executá-lo.
Para entrar em um diretório basta digitar o nome tambem.

(nome do diretório) : Entrar no diretório.


[admin@servidor] > system
[admin@servidor] /system> 

Você pode usar ".." (sem aspas) para voltar ao diretório superior.

[admin@servidor] /system> ..
[admin@servidor] > 

Ou usar "-" para voltar ao diretório anterior.

[admin@servidor] > -
[admin@servidor] /system> 

Você pode especificar o caminho completo para um diretório para entrar nele.
Ao abreviar nomes, o ZeroShell irá procurar um item ou diretorio semelhante
para tentar descobrir o que você queria dizer.

[admin@servidor] /system> /ip addr
[admin@servidor] /ip address> 

Voltar para o / (raiz).

[admin@servidor] /ip address> /
[admin@servidor] > 

Execute um comando global em qualquer diretório.

ping : Testar rede IP enviando um pacote ICMP.


[admin@servidor] > -
[admin@servidor] /ip address> 
[admin@servidor] /ip address> ping 127.0.0.1 count=2

 SEQ HOST                                      SIZE TTL TIME  STATUS
   1 127.0.0.1                                   64  64 0.166  echo reply
   2 127.0.0.1                                   64  64 0.031  echo reply
     sent=2 received=2 packet-loss=0 min-rtt=0.031 avg-rtt=0.098 max-rtt=0.166

[admin@servidor] /ip address> ping ::1 count=2

 SEQ HOST                                      SIZE TTL TIME  STATUS
   1 ::1                                         64  64 0.077  echo reply
   2 ::1                                         64  64 0.095  echo reply
     sent=2 received=2 packet-loss=0 min-rtt=0.077 avg-rtt=0.086 max-rtt=0.095

[admin@servidor] /ip address> ping gateway 2

 SEQ HOST                                      SIZE TTL TIME  STATUS
   1 172.20.0.1                                  64  64 0.433  echo reply
   2 172.20.0.1                                  64  64 0.548  echo reply
     sent=2 received=2 packet-loss=0 min-rtt=0.433 avg-rtt=0.490 max-rtt=0.548

[admin@servidor] /ip address> ping uol.com.br 4

 Get address for uol.com.br -> 200.221.2.45
 SEQ HOST                                      SIZE TTL TIME  STATUS
   1 200.221.2.45                                64  57 21.2   echo reply
   2 200.221.2.45                                64  57 17.2   echo reply
   3 200.221.2.45                                64  57 16.9   echo reply
   4 200.221.2.45                                64  57 17.6   echo reply
     sent=4 received=4 packet-loss=0 min-rtt=16.984 avg-rtt=18.289 max-rtt=21.279

[admin@servidor] /ip address> ping ipv6 uol.com.br 4

 Get address for uol.com.br -> 2804:49c:3103:401:ffff:ffff:ffff:1
 SEQ HOST                                      SIZE TTL TIME  STATUS
   1 2804:1b40:2:4000::41                        64  64 9.025  echo reply
   2 2804:1b40:2:4000::41                        64  64 3.049  echo reply
   3 2804:1b40:2:4000::41                        64  64 6.049  echo reply
   4 2804:1b40:2:4000::41                        64  64 8.038  echo reply
     sent=4 received=4 packet-loss=0 min-rtt=3.049 avg-rtt=6.542 max-rtt=9.025

[admin@servidor] /ip address> /
[admin@servidor] > 

Comandos importantes:

about ou copyright : Exibe informações sobre o Slackmini
date : Exibir data/hora e timezone
export : Exportar configuração das sessões do ZeroShell
desligar ou poweroff : Desligar o servidor
quit, exit, sair ou logout : Finalizar a sessão (desconectar)
reboot ou reiniciar : Reiniciar o servidor
service : Gerenciar serviços
free : Exibir uso de memória
iperf : Ferramenta para testar capacidade de rede
iptraf : Monitorar rede visualmente
lscpu : Exibir informações do processador
traceroute : Exibe um ping de roteador por roteador
mtr : Monitora visualmente os roteadores igual o traceroute
ps : Exibe processos sendo executados (listar todos: ps xau)
tcpdump : Exibe pacotes capiturados na rede
top : Monitora visualmente processos em execução
htop : Versão mais completa do comando top
uptime : Informa tempo de execução e carga de trabalho do Linux
ssh : Fazer conexão via SSH
telnet : Fazer conexão via TELNET

   Zeroshell: Diretórios e itens

Diretórios e nós

 /
 
 /system desligar export logout poweroff reboot reiniciar
 /system clock export print set
 /system kernel print set
 /system package info install print remove repair update view
 /system service disable enable print restart start status stop
 
 /interface export print
 /interface ethernet info print reset set sync
 /interface 6to4 add export remove set sync
 /interface gre add export remove set sync
 /interface gre6 add export remove set sync
 /interface ipip add export remove set sync
 /interface ipipv6 add export remove set sync
 /interface pppoe-client add export remove set sync
 /interface vlan add export remove set sync

 /ip export print
 /ip address add export print remove set sync
 /ip arp arping flush info print scan monitor
 /ip dns add dig dns-ping host print nslookup remove set sync test
 /ip route add get print remove set

 /ipv6 export print
 /ipv6 address add export print remove set sync
 /ipv6 neighboor flush info print scan monitor
 /ipv6 dns add dig dns-ping host print nslookup remove set sync test
 /ipv6 route add get print remove set

 /tools ethtool free htop iperf iptraf lscpu mtr ping ping6 ps ssh tcpdump telnet top traceroute uptime


   Interfaces de rede

Gerenciando interfaces de rede pelo ZeroShell

Execute o comando: zeroshell


/interface : Entrar no diretório de interfaces de rede.

[admin@servidor] > /interface
[admin@servidor] /interface> 

Você pode abreviar. Usando /inter, /inte, /int.

[admin@servidor] /interface> /
[admin@servidor] > /int
[admin@servidor] /interface> 

/interface print : Exibir interfaces de rede.

Você pode digitar o comando completo (diretório item) ou
entrar no diretório e digitar o nome do item.

[admin@servidor] /interface> print

  Idx Nome             Status  Cabo      Velocidade    Tipo             L3-MTU
    1 lo               UP                Ilimitada     Loopback          65536
    5 eth0             UP      Ligado    1000/full     Ethernet           1500
    4 eth1             UP      Ligado    1000/full     Ethernet           1500
    3 eth2             UP      Ligado    1000/full     Ethernet           1500
    2 eth3             UP      Ligado    1000/full     Ethernet           1500

/interface print help : Mostra modos de listar interfaces.

[admin@servidor] /interface> print help

 Imprimir lista de interfaces
 Use:
    print                        : Exibir interfaces e detalhes de conexao
    print stats                  : Exibir interfaces e estatisticas
    print rate [opcoes]          : Exibir trafego nas interfaces (TEMPO REAL)
                                   [bits/bytes/packets/errors/rate/max/sum/avg] 
    print ethernet               : Exibir interfaces ethernet
    print mac                    : Exibir MAC-ADDRESS das interfaces L2
    print vlan                   : Exibir Vlans (802.1q e 802.1ad)
    print ifconfig [interface]   : Exibir modo 'ifconfig'
    print link     [interface]   : Exibir modo 'ip link'
    print netstat                : Exibir modo 'netstat -i'

/interface print stats : Mostra dados enviados e recebidos.

[admin@servidor] /interface> print stats

 Nome              RX Bytes        RX Packets        RX Bytes        RX Packets
 lo                   324 B                 3           324 B                 3
 eth0                     0                 0           648 B                 8
 eth1                     0                 0           648 B                 8
 eth2                     0                 0           648 B                 8
 eth3             658.5 MiB         1.170.083        19.0 MiB            98.847

/interface print rate : Mostra dados em tempo real.

  input: /proc/net/dev type: rate
  \         iface                   Rx                   Tx                Total
  ==============================================================================
             eth0:           0.00 kb/s            0.00 kb/s            0.00 kb/s
             eth1:           0.00 kb/s            0.00 kb/s            0.00 kb/s
             eth2:           0.00 kb/s            0.00 kb/s            0.00 kb/s
             eth3:         157.14 kb/s           77.09 kb/s          234.23 kb/s
               lo:           0.00 kb/s            0.00 kb/s            0.00 kb/s
  ------------------------------------------------------------------------------
            total:         157.14 kb/s           77.09 kb/s          234.23 kb/s

Segura a barra de espaço para atualizar mais rápido.
Tecle q para sair.

/interface print mac : Exibir MAC-Address das interfaces L2

[admin@servidor] /interface> print mac

  Idx Nome             Status  Cabo      Tipo         L3-MTU  MAC-ADDRESS
    5 eth0             UP      Ligado    Ethernet       1500  00:0c:29:0d:a2:22  
    4 eth1             UP      Ligado    Ethernet       1500  00:0c:29:0d:a2:33  
    3 eth2             UP      Ligado    Ethernet       1500  00:0c:29:0d:a2:44  
    2 eth3             UP      Ligado    Ethernet       1500  00:0c:29:0d:a2:55  

/interface ethernet : Entrar no diretório de interfaces ethernet.

[admin@servidor] > /int eth
[admin@servidor] /interface ethernet> 

/interface ethernet print : Exibir interfaces de rede ethernet.

[admin@servidor] /interface ethernet> print

Flags: C - Cabo conectado, X - Cabo desconectado
       R - ativa (UP)      D - Desativada (DOWN)
       F - Full-Duplex,    H - Half-Duplex
       4 - 10 gigabit,     3 - 1 gigabit,     2 - 100 mbit,     1 - 10 mbit

  Idx Flags Nome    Status  Cabo       Velocidade   L3-MTU  MAC-ADDRESS
    5 CRF3  eth0    UP      Ligado       1000/full    1500  00:0c:29:0d:a2:22
    4 CRF3  eth1    UP      Ligado       1000/full    1500  00:0c:29:0d:a2:33
    3 CRF3  eth2    UP      Ligado       1000/full    1500  00:0c:29:0d:a2:44
    2 CRF3  eth3    UP      Ligado       1000/full    1500  00:0c:29:0d:a2:55

/interface ethernet info ethx : Informações de midia da interface.

[admin@servidor] /interface ethernet> info eth3

02:07.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
	Subsystem: VMware 82545EM Gigabit Ethernet Controller (Copper) (PRO/1000 MT Single Port Adapter)
	Physical Slot: 39
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
	Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0 (63750ns min), Cache Line Size: 64 bytes
	Interrupt: pin A routed to IRQ 17
	Region 0: Memory at fd540000 (64-bit, non-prefetchable) [size=128K]
	Region 2: Memory at fdfc0000 (64-bit, non-prefetchable) [size=64K]
	Region 4: I/O ports at 2400 [size=64]
	[virtual] Expansion ROM at fd530000 [disabled] [size=64K]
	Capabilities: [dc] Power Management version 2
		Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
		Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [e4] PCI-X non-bridge device
		Command: DPERE- ERO+ RBC=512 OST=1
		Status: Dev=ff:1f.0 64bit+ 133MHz+ SCD- USC- DC=simple DMMRBC=2048 DMOST=1 DMCRS=16 RSCEM- 266MHz- 533MHz-
	Kernel driver in use: e1000
	Kernel modules: e1000

Settings for eth0:
	Supported ports: [ TP ]
	Supported link modes:   10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Supported pause frame use: No
	Supports auto-negotiation: Yes
	Advertised link modes:  10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Advertised pause frame use: No
	Advertised auto-negotiation: Yes
	Speed: 1000Mb/s
	Duplex: Full
	Port: Twisted Pair
	PHYAD: 0
	Transceiver: internal
	Auto-negotiation: on
	MDI-X: off (auto)
	Supports Wake-on: d
	Wake-on: d
	Current message level: 0x00000007 (7)
			       drv probe link
	Link detected: yes


/interface ethernet print pci : Listar interfaces (PCI).

[admin@servidor] /interface ethernet> print pci

02:01.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
	Subsystem: VMware 82545EM Gigabit Ethernet Controller (Copper) (PRO/1000 MT Single Port Adapter)
	Physical Slot: 33
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
	Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0 (63750ns min), Cache Line Size: 64 bytes
	Interrupt: pin A routed to IRQ 19
	Region 0: Memory at fd5a0000 (64-bit, non-prefetchable) [size=128K]
	Region 2: Memory at fdff0000 (64-bit, non-prefetchable) [size=64K]
	Region 4: I/O ports at 2000 [size=64]
	[virtual] Expansion ROM at fd500000 [disabled] [size=64K]
	Capabilities: [dc] Power Management version 2
		Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
		Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [e4] PCI-X non-bridge device
		Command: DPERE- ERO+ RBC=512 OST=1
		Status: Dev=ff:1f.0 64bit+ 133MHz+ SCD- USC- DC=simple DMMRBC=2048 DMOST=1 DMCRS=16 RSCEM- 266MHz- 533MHz-
	Kernel driver in use: e1000
	Kernel modules: e1000

02:05.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
	Subsystem: VMware 82545EM Gigabit Ethernet Controller (Copper) (PRO/1000 MT Single Port Adapter)
	Physical Slot: 37
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
	Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0 (63750ns min), Cache Line Size: 64 bytes
	Interrupt: pin A routed to IRQ 19
	Region 0: Memory at fd580000 (64-bit, non-prefetchable) [size=128K]
	Region 2: Memory at fdfe0000 (64-bit, non-prefetchable) [size=64K]
	Region 4: I/O ports at 2080 [size=64]
	[virtual] Expansion ROM at fd510000 [disabled] [size=64K]
	Capabilities: [dc] Power Management version 2
		Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
		Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [e4] PCI-X non-bridge device
		Command: DPERE- ERO+ RBC=512 OST=1
		Status: Dev=ff:1f.0 64bit+ 133MHz+ SCD- USC- DC=simple DMMRBC=2048 DMOST=1 DMCRS=16 RSCEM- 266MHz- 533MHz-
	Kernel driver in use: e1000
	Kernel modules: e1000

02:06.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
	Subsystem: VMware 82545EM Gigabit Ethernet Controller (Copper) (PRO/1000 MT Single Port Adapter)
	Physical Slot: 38
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
	Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0 (63750ns min), Cache Line Size: 64 bytes
	Interrupt: pin A routed to IRQ 16
	Region 0: Memory at fd560000 (64-bit, non-prefetchable) [size=128K]
	Region 2: Memory at fdfd0000 (64-bit, non-prefetchable) [size=64K]
	Region 4: I/O ports at 20c0 [size=64]
	[virtual] Expansion ROM at fd520000 [disabled] [size=64K]
	Capabilities: [dc] Power Management version 2
		Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
		Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [e4] PCI-X non-bridge device
		Command: DPERE- ERO+ RBC=512 OST=1
		Status: Dev=ff:1f.0 64bit+ 133MHz+ SCD- USC- DC=simple DMMRBC=2048 DMOST=1 DMCRS=16 RSCEM- 266MHz- 533MHz-
	Kernel driver in use: e1000
	Kernel modules: e1000

02:07.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
	Subsystem: VMware 82545EM Gigabit Ethernet Controller (Copper) (PRO/1000 MT Single Port Adapter)
	Physical Slot: 39
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
	Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0 (63750ns min), Cache Line Size: 64 bytes
	Interrupt: pin A routed to IRQ 17
	Region 0: Memory at fd540000 (64-bit, non-prefetchable) [size=128K]
	Region 2: Memory at fdfc0000 (64-bit, non-prefetchable) [size=64K]
	Region 4: I/O ports at 2400 [size=64]
	[virtual] Expansion ROM at fd530000 [disabled] [size=64K]
	Capabilities: [dc] Power Management version 2
		Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
		Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [e4] PCI-X non-bridge device
		Command: DPERE- ERO+ RBC=512 OST=1
		Status: Dev=ff:1f.0 64bit+ 133MHz+ SCD- USC- DC=simple DMMRBC=2048 DMOST=1 DMCRS=16 RSCEM- 266MHz- 533MHz-
	Kernel driver in use: e1000
	Kernel modules: e1000

   Gerenciamento de VLANs

Conceitos básicos de VLAN

VLANs são formas de usar uma interface de rede física para participar de varias redes virtuais diferentes.

Mais informações:
Wikipedia em português, Virtual_LAN: https://pt.wikipedia.org/wiki/Virtual_LAN
Wikipedia em português, IEEE 802.1Q: https://pt.wikipedia.org/wiki/IEEE_802.1Q
Wikipedia em português, IEEE 802.1ad: https://en.wikipedia.org/wiki/IEEE_802.1ad
Original em inglês, IEEE 802.1Q: http://www.ieee802.org/1/pages/802.1Q.html
Original em inglês, IEEE 802.1ad: http://www.ieee802.org/1/pages/802.1ad.html
Login no site www.ieee802.org: Username: p8021 Password: go_wildcats

Existem 4 tipos de dispositivos em uma rede VLAN:

  • (P) Dispositivo de acesso: é um computador, roteador, servidor, access point ou qualquer equipamento que se conecta a rede e que não sofre nenhuma configuração de VLAN. É apenas um usuário dos serviços da rede.
  • (SW) Switch gerenciável: é um switch que faz o gerenciamento das VLANs. Cada porta do switch pode assumir 2 modos básicos:
    • (A) Acesso ou Untagged: é uma porta destinada a um usuário final (dispositivo de acesso). Essa porta deve receber um PVID (port VID, VID = vlan id). Todo quadro (pacote IP, pacote IPv6, ARP) que entrar por uma porta de acesso será marcado com o número de PVID da porta.
      O switch só permite que portas com o mesmo PVID se comuniquem.
    • (T) TRUNK ou tagged: é uma porta que recebe e encaminha quadros marcados com o número de PVID da porta por onde o quadro entrou na rede. A marcação é na verdade um cabeçalho (sequencia de bits no inicio do quadro) do protocolo IEEE 802.1q (ou apenas 1q) ou IEEE 802.1ad (conhecido como Q-in-Q).
      É preciso cadastrar na porta TRUNK do switch quais PVIDs ele pode encaminhar.
      A porta TRUNK de um switch deve ser ligada a uma porta de um servidor/roteador em que tenha sido cadastradas as VIDs (interface VLAN).
  • (BR) Bridges: uma bridge (ponte) é semelhante a um switch porem pode realizar operações mais complexas como:
    • Fazer NAT-MAC: alterar o MAC-Address do quadro quando ele entrar na rede e recuperar para o original quando o quadro sair da rede.
    • Permitir que quadros de uma VLAN sejam traduzidos para outra VLAN (exemplo: entra um quadro com VID 15 na porta 1 e saia na porta 2 com VID 21)
    • Permitir que quadros de VLANs diferentes participem de uma unica VLAN central, essa operação se chama VLAN-MAPPING e requer muita experiencia para manipular.
  • (S) Servidor/Roteador: tem como função rotear o trafego entre VLANs (ou não, caso seja uma questão de segurança) ou fornecer ao membro da VLAN os serviços necessários (servidor VOIP, servidor de arquivos, acesso a internet, acesso a câmeras de segurança, monitoramento e administração de dispositivos). Sempre que ele desejar se comunicar com alguma VLAN, bastará enviar ao switch gerenciável o quadro marcado com o VID da VLAN de destino.
    Alguns switchs podem assumir a função de rotear trafego entre vlans sendo chamados de switchs layer 3


Cuidado com a VLAN 1 (PVID 1). Todos os switchs gerenciáveis vem com a configuração padrão definindo todas as portas na PVID 1.
A PVID 1 não recebe o mesmo tratamento das PVIDS de 2 a 4094 por ser a VLAN ADMINISTRATIVA NATIVA. São características da VLAN administrativa:
  • Tem PVID 1 em todos os switchs gerenciáveis (consulte o fabricante do seu switch, talvez ele tentou inventar alguma modinha)
  • Não recebe encapsulamento 802.1q ao entrar ou sair por quaisquer porta tagged (Trunk).
    Quadros que entram nos switchs em portas com PVID 1 continuam intactos por toda a rede, passando de trunk em trunk normalmente.
  • A maioria dos switchs gerenciáveis te obriga a permitir a PVID 1 nas portas tagged (ou nem te avisam que isso está sendo feito)
  • Um equipamento enviando broadcasts em uma porta PVID 1 atingirá todo o seu dominio de switchs com excessão das portas ACESSO em PVID de 2 a 4094.
  • Um LOOP originado numa porta PVID 1 irá afetar todo o seu dominio de switchs, jamais entregue uma porta PVID 1 a um cliente final.
Portanto ao projetar uma rede VLAN sempre coloque equipamento de clientes ou equipamentos publicos em VLANS entre 2 e 4094.

Você irá encontrar em alguns switchs o termo VOICE VLAN.

Alguns fabricantes de switchs que tambem fabricam telefones IP criaram protocolos de negociação automática de VLAN de voz entre o telefone e o switch. Para que o switch aceite um telefone IP e faça um QoS desse tráfego com alta prioridade (protocolo 802.1p) é necessário atribuir na porta do switch uma VOICE VLAN ID (VVID).

O valor PVID e VVID coexistem na mesma porta, sendo o PVID para dados e o VVID para voz sobre IP.


Alguns exemplos de como usar VLANs:


Exemplo 1: Compartilhando uma porta de 10 gigas para venda de links dedicados

O servidor vai atuar como um roteador para venda de links dedicados. Recebendo a conexão do backbone de 10 gigas e distribuindo em um POP onde atenderemos
clientes com contratos de 10 megabit/s a 1 gigabit/s. O switch será usado para atender 1 cliente por porta, cada cliente possuirá sua VLAN no servidor.




Exemplo 2: Link e clientes na mesma interface de rede do servidor

O servidor possui apenas 1 interface de rede, mas precisa se conectar a internet e distribuir essa internet para uma rede local.

Com o emprego de um switch gerenciável, podemos dividi-lo em 2 switchs virtuais (VLAN = Virtual LAN): o switch amarelo e o switch verde e por meio de uma porta TRUNK permitir que o servidor se comunique com essas VLANs.





Gerenciando VLANs pelo ZeroShell

Execute o comando: zeroshell

Vamos criar a configuração de VLANs de acordo com o desenho acima (exemplo 2).

/interface vlan : Entrar no diretório de interfaces de rede.

[admin@servidor] > /int vlan
[admin@servidor] /interface vlan> 

A principio não existe nenhuma VLAN, observe:

[admin@servidor] /interface vlan> print

Flags: C - Cabo conectado,   X - Cabo desconectado    x - interface desativada
       R - Ativa (UP)        D - Administrativamente desativada (DOWN)
       F - Full-Duplex,      H - Half-Duplex
       4 - 10 gigabit,       3 - 1 gigabit,    2 - 100 mbit,   1 - 10 mbit
       Q - protocolo 802.1q, A - protocolo 802.1ad (QinQ)

   # Flags InterfaceVLAN      VID Interface       Encapsulamento

   Nenhuma VLAN cadastrada.

[admin@servidor] /interface vlan> 

/interface vlan print : Exibir VLANs cadastradas.

/interface vlan add help : Explica como criar VLANs.

[admin@servidor] /interface vlan> add help

 Adicionar interface VLAN
 Use:
    add (INTERFACE) (VLAN-ID) [PROTOCOLO] [opcoes]

 Opcoes:
    name=NOME              : Nome simbolico
    comment=COMENTARIO     : Comentario da VLAN
    mac-address=COMENTARIO : Especificar MAC-ADDRESS

 Exemplos:
    add eth1.800         : Cria a vlan 1q com VID '800' na interface 'eth1'
    add eth1 801         : Cria a vlan 1q com VID '801' na interface 'eth1'
    add eth1 80 disabled : Cria a vlan desabilitada no sistema (em DOWN)
    add eth2 127 qinq    : Cria a vlan QinQ com VID '127' na interface 'eth2'

 Exemplos de compatibilidade com outros sistemas:
    add interface=eth2 vlan-id=127 use-service-tag=yes mtu=1500 name='V-Router'

/interface vlan add ethX.VID : Criar VLAN rápida (interface.VID).
/interface vlan add ethX VID : Criar VLAN rápida. (interface VID)

[admin@servidor] /interface vlan> add eth0.10
[admin@servidor] /interface vlan> print

Flags: C - Cabo conectado,   X - Cabo desconectado    x - interface desativada
       R - Ativa (UP)        D - Administrativamente desativada (DOWN)
       F - Full-Duplex,      H - Half-Duplex
       4 - 10 gigabit,       3 - 1 gigabit,    2 - 100 mbit,   1 - 10 mbit
       Q - protocolo 802.1q, A - protocolo 802.1ad (QinQ)

   # Flags InterfaceVLAN      VID Interface       Encapsulamento           MAC-ADDRESS
   1 CRF3Q eth0.10             10 eth0            eth0:eth(1q:10)          00:0c:29:0d:a2:22

[admin@servidor] /interface vlan> add eth0.20
[admin@servidor] /interface vlan> print

Flags: C - Cabo conectado,   X - Cabo desconectado    x - interface desativada
       R - Ativa (UP)        D - Administrativamente desativada (DOWN)
       F - Full-Duplex,      H - Half-Duplex
       4 - 10 gigabit,       3 - 1 gigabit,    2 - 100 mbit,   1 - 10 mbit
       Q - protocolo 802.1q, A - protocolo 802.1ad (QinQ)

   # Flags InterfaceVLAN      VID Interface       Encapsulamento           MAC-ADDRESS
   1 CRF3Q eth0.10             10 eth0            eth0:eth(1q:10)          00:0c:29:0d:a2:22
   2 CRF3Q eth0.20             20 eth0            eth0:eth(1q:20)          00:0c:29:0d:a2:22

[admin@servidor] /interface vlan> /int print

  Idx Nome             Status  Cabo      Velocidade    Tipo             L3-MTU
    1 lo               UP                Ilimitada     Loopback          65536
    5 eth0             UP      Ligado    1000/full     Ethernet           1500
   32 eth0.10          UP                1000/full     VLAN               1500
   33 eth0.20          UP                1000/full     VLAN               1500



Encapsulamento de VLANS: VLAN dentro de VLAN ou Q-in-Q

Num switch é possivel ter 4094 VIDs. As vezes grandes redes enfrentam problemas técnicos e administrativos onde os seguintes problemas aparecem:
  • Repetição de VIDs (o mesmo VID para clientes diferentes): muito comum quando se agrega uma rede de terceiros à rede atual. Tambem ocorre quando se deseja passar todo o roteamento entre VLANs para um roteador central (Agregador de serviços de roteamento).
  • São necessárias mais de 4094 VLANs
  • Quando iremos oferecer o transporte a um cliente dentro de uma rede metro-ethernet. O cliente será obrigado a solicitar o cadastro das VLANs que ele deseja usar nas portas TRUNK do provedor do transporte, isso poderá resultar em conflitos de VIDs (o cliente participará de uma rede que ele não deveria participar).


Enquanto que o protocolo 802.1q serve para encapsular dados proveniente de portas de usuários ou serviços comuns, o protocolo 802.1ad serve para encapsular os quadros 802.1q ou quadros comuns adicionando
uma nova numeração com cabeçalho 802.1ad INDEPENDENTE de como o quadro esteja (com ou sem VLAN 1q).

O Protocolo 802.1ad pode ser chamado de Q-in-Q ou "Service TAG".

Ao transportar VLANS 802.1q em uma rede 802.1ad o quadro original (acesso) será encapsulado duas vezes. Na primeira vez ele receberá o cabeçalho 802.1q (ao sair por uma porta trunk em direção a porta do provedor de transporte)
e ao entrar em uma interface com tunelamento Q-in-Q ele receberá um cabeçalho 802.1ad.

Como existem 2 cabeçalhos, o primeiro (contendo o tipo 802.1ad) recebe o nome de OUTSIDE VLAN. O segundo cabeçalho (contendo o tipo 802.1q) recebe o nome de INSIDE VLAN.




Exemplo de captura de pacote na eth1 do exemplo acima:
root@servidor:/# tcpdump -nevv -i eth1

18:12:57.967838 00:12:34:ab:cd:ef > 33:33:29:ca:fe:99, ethertype 802.1Q-QinQ (0x88a8), length 94: vlan 9, p 0,
                                                       ethertype 802.1Q, vlan 10,p 0,
                                                       ethertype IPv6, (hlim 255, next-header ICMPv6 (58) payload length: 32)


O Slackmini permite apenas 2 níveis de sub-interfaces, ou seja, você pode criar
uma sub-interface VLAN (nível 1) e em seguida criar uma sub-interface na sub-interface (nível 2), criar interfaces
de 3 níveis ou mais não é possivel (VLAN dentro de VLAN dentro de VLAN).


Criando VLAN Q-in-Q pelo Zeroshell

Execute o comando: zeroshell

Vamos configurar as VLANs Q-in-Q e as VLANs 1q conforme o diagrama acima, observe:
[admin@servidor] > /int vlan
[admin@servidor] /interface vlan> 
[admin@servidor] /interface vlan> add eth1.8 qinq
[admin@servidor] /interface vlan> add eth1.9 qinq
[admin@servidor] /interface vlan> print

Flags: C - Cabo conectado,   X - Cabo desconectado    x - interface desativada
       R - Ativa (UP)        D - Administrativamente desativada (DOWN)
       F - Full-Duplex,      H - Half-Duplex
       4 - 10 gigabit,       3 - 1 gigabit,    2 - 100 mbit,   1 - 10 mbit
       Q - protocolo 802.1q, A - protocolo 802.1ad (QinQ)

   # Flags InterfaceVLAN      VID Interface       Encapsulamento           MAC-ADDRESS
   1 CRF3A eth1.s8                eth1            eth1:eth(1ad:s8)         00:0c:29:0d:a2:33
   2 CRF3A eth1.s9                eth1            eth1:eth(1ad:s9)         00:0c:29:0d:a2:33

[admin@servidor] /interface vlan> 

Observe que as interfaces VLAN QinQ (802.1ad) tem a
letra "s" antes do VID no nome da interface.

Exemplo:
Interface eth0 VLAN 802.1q VID 8 gera o nome eth0.8
Interface eth0 VLAN 802.1ad VID 8 gera o nome eth0.s8

Com as duas VLANs Q-in-Q acima o servidor consegue enxergar qualquer equipamento ligado diretamente a porta que encapsulou os quadros com 802.1ad (cabos azuis do diagrama), mas as VLANs que porventura vierem de switchs mais adiante (vlans dos balões) não serão interpretadas pois possuem ainda marcações adicionais (1q). Para conseguir comunicação com elas é preciso criar interfaces VLANs 802.1q dentro da interface Q-in-Q

[admin@servidor] /interface vlan> add eth1.s8 10
[admin@servidor] /interface vlan> add eth1.s8 20
[admin@servidor] /interface vlan> add eth1.s8 30

[admin@servidor] /interface vlan> add eth1.s9 10
[admin@servidor] /interface vlan> add eth1.s9 20
[admin@servidor] /interface vlan> add eth1.s9 30
[admin@servidor] /interface vlan> add eth1.s9 40

[admin@servidor] /interface vlan> print

Flags: C - Cabo conectado,   X - Cabo desconectado    x - interface desativada
       R - Ativa (UP)        D - Administrativamente desativada (DOWN)
       F - Full-Duplex,      H - Half-Duplex
       4 - 10 gigabit,       3 - 1 gigabit,    2 - 100 mbit,   1 - 10 mbit
       Q - protocolo 802.1q, A - protocolo 802.1ad (QinQ)

   # Flags InterfaceVLAN      VID Interface       Encapsulamento           MAC-ADDRESS
   1 CRF3A eth1.s8                eth1            eth1:eth(1ad:s8)         00:0c:29:0d:a2:33
   2 CRF3A eth1.s9                eth1            eth1:eth(1ad:s9)         00:0c:29:0d:a2:33
   3 CRF3Q eth1.s8.10          10 eth1.s8         eth1:eth(1ad:s8)(1q:10)  00:0c:29:0d:a2:33
   4 CRF3Q eth1.s8.20          20 eth1.s8         eth1:eth(1ad:s8)(1q:20)  00:0c:29:0d:a2:33
   5 CRF3Q eth1.s8.30          30 eth1.s8         eth1:eth(1ad:s8)(1q:30)  00:0c:29:0d:a2:33
   6 CRF3Q eth1.s9.10          10 eth1.s9         eth1:eth(1ad:s9)(1q:10)  00:0c:29:0d:a2:33
   7 CRF3Q eth1.s9.20          20 eth1.s9         eth1:eth(1ad:s9)(1q:20)  00:0c:29:0d:a2:33
   8 CRF3Q eth1.s9.30          30 eth1.s9         eth1:eth(1ad:s9)(1q:30)  00:0c:29:0d:a2:33
   9 CRF3Q eth1.s9.40          40 eth1.s9         eth1:eth(1ad:s9)(1q:40)  00:0c:29:0d:a2:33

[admin@servidor] /interface vlan> 

/interface vlan remove ethX.VID : Remover VLAN pelo nome.

[admin@servidor] /interface vlan> remove eth1.s9.10
[admin@servidor] /interface vlan> remove eth1.s9.20
[admin@servidor] /interface vlan> remove eth1.s9.30
[admin@servidor] /interface vlan> remove eth1.s9.40
[admin@servidor] /interface vlan> print

Flags: C - Cabo conectado,   X - Cabo desconectado    x - interface desativada
       R - Ativa (UP)        D - Administrativamente desativada (DOWN)
       F - Full-Duplex,      H - Half-Duplex
       4 - 10 gigabit,       3 - 1 gigabit,    2 - 100 mbit,   1 - 10 mbit
       Q - protocolo 802.1q, A - protocolo 802.1ad (QinQ)

   # Flags InterfaceVLAN      VID Interface       Encapsulamento           MAC-ADDRESS
   1 CRF3A eth1.s8                eth1            eth1:eth(1ad:s8)         00:0c:29:0d:a2:33
   2 CRF3A eth1.s9                eth1            eth1:eth(1ad:s9)         00:0c:29:0d:a2:33
   3 CRF3Q eth1.s8.10          10 eth1.s8         eth1:eth(1ad:s8)(1q:10)  00:0c:29:0d:a2:33
   4 CRF3Q eth1.s8.20          20 eth1.s8         eth1:eth(1ad:s8)(1q:20)  00:0c:29:0d:a2:33
   5 CRF3Q eth1.s8.30          30 eth1.s8         eth1:eth(1ad:s8)(1q:30)  00:0c:29:0d:a2:33

[admin@servidor] /interface vlan> 

/interface vlan remove ID : Remover pelo ID (primeira coluna).

[admin@servidor] /interface vlan> remove 5
[admin@servidor] /interface vlan> remove 4
[admin@servidor] /interface vlan> remove 3
[admin@servidor] /interface vlan> print

Flags: C - Cabo conectado,   X - Cabo desconectado    x - interface desativada
       R - Ativa (UP)        D - Administrativamente desativada (DOWN)
       F - Full-Duplex,      H - Half-Duplex
       4 - 10 gigabit,       3 - 1 gigabit,    2 - 100 mbit,   1 - 10 mbit
       Q - protocolo 802.1q, A - protocolo 802.1ad (QinQ)

   # Flags InterfaceVLAN      VID Interface       Encapsulamento           MAC-ADDRESS
   1 CRF3A eth1.s8                eth1            eth1:eth(1ad:s8)         00:0c:29:0d:a2:33
   2 CRF3A eth1.s9                eth1            eth1:eth(1ad:s9)         00:0c:29:0d:a2:33

[admin@servidor] /interface vlan> 



VLAN 802.1q dentro de 802.1q - Double 1q

Cuidado para não confundir Q-in-Q com "Double 1q".

Diferenças:
  • Q-in-Q: coloca um cabeçalho 802.1ad no quadro recebido já com o cabeçalho 802.1q (OUTSIDE 1ad INSIDE 1q)
  • Double 1q: coloca um cabeçalho 802.1q no quadro recebido já com o cabeçalho 802.1q (OUTSIDE 1q INSIDE 1q)

No modelo Double 1q, uma bridge recebe um quadro em uma interface por onde entram quandros marcados com 1q e o coloca dentro de outro quadro 1q, gerando um duplo cabeçalho 1q (1q dentro de 1q).




[admin@servidor] /interface vlan> print

Flags: C - Cabo conectado,   X - Cabo desconectado    x - interface desativada
       R - Ativa (UP)        D - Administrativamente desativada (DOWN)
       F - Full-Duplex,      H - Half-Duplex
       4 - 10 gigabit,       3 - 1 gigabit,    2 - 100 mbit,   1 - 10 mbit
       Q - protocolo 802.1q, A - protocolo 802.1ad (QinQ)

   # Flags Nome              VID Interface   Encapsulamento    MAC-ADDRESS

   Nenhuma VLAN cadastrada.

[admin@servidor] /interface vlan> add eth1.40
[admin@servidor] /interface vlan> add eth1.40 10
[admin@servidor] /interface vlan> print

Flags: C - Cabo conectado,   X - Cabo desconectado    x - interface desativada
       R - Ativa (UP)        D - Administrativamente desativada (DOWN)
       F - Full-Duplex,      H - Half-Duplex
       4 - 10 gigabit,       3 - 1 gigabit,    2 - 100 mbit,   1 - 10 mbit
       Q - protocolo 802.1q, A - protocolo 802.1ad (QinQ)

   # Flags Nome              VID Interface   Encapsulamento    MAC-ADDRESS
   1 CRF3Q eth1.40            40 eth1        1q:40             00:0c:29:0d:a2:33
   2 CRF3Q eth1.40.10         10 eth1.40     1q:40/1q:10       00:0c:29:0d:a2:33



VLAN com MAC alterado

Ao criar uma interface VLAN no Slackmini, os quadros enviados por essa interface usarão como MAC de origem o mesmo MAC da interface principal.

Em alguns casos será necessário personalizar esse MAC (como numa interligação a uma rede onde há controle de MAC e você trocou a placa de rede).

Para criar uma VLAN com MAC alterado basta informar o MAC como parametro ao adicioná-la. Exemplo:

/interface vlan add ethX.VID MAC : Criar VLAN com MAC alterado.

[admin@servidor] /interface vlan> print

Flags: C - Cabo conectado,   X - Cabo desconectado    x - interface desativada
       R - Ativa (UP)        D - Administrativamente desativada (DOWN)
       F - Full-Duplex,      H - Half-Duplex
       4 - 10 gigabit,       3 - 1 gigabit,    2 - 100 mbit,   1 - 10 mbit
       Q - protocolo 802.1q, A - protocolo 802.1ad (QinQ)

   # Flags Nome              VID Interface   Encapsulamento    MAC-ADDRESS

   Nenhuma VLAN cadastrada.

[admin@servidor] /interface vlan> add eth0.101 00:FF:BE:BA:CA:FE
[admin@servidor] /interface vlan> add eth0.102 00:FA:DA:5A:FA:DA
[admin@servidor] /interface vlan> print

Flags: C - Cabo conectado,   X - Cabo desconectado    x - interface desativada
       R - Ativa (UP)        D - Administrativamente desativada (DOWN)
       F - Full-Duplex,      H - Half-Duplex
       4 - 10 gigabit,       3 - 1 gigabit,    2 - 100 mbit,   1 - 10 mbit
       Q - protocolo 802.1q, A - protocolo 802.1ad (QinQ)

   # Flags Nome              VID Interface   Encapsulamento    MAC-ADDRESS
   1 CRF3Q eth0.101          101 eth0        1q:101            00:ff:be:ba:ca:fe
   2 CRF3Q eth0.102          102 eth0        1q:102            00:fa:da:5a:fa:da

[admin@servidor] /interface vlan> print ifconfig eth0.101 eth0.102

eth0.101: flags=4163  mtu 1500
        inet6 fe80::2ff:beff:feba:cafe  prefixlen 64  scopeid 0x20
        ether 00:ff:be:ba:ca:fe  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 648 (648.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0.102: flags=4163  mtu 1500
        inet6 fe80::2fa:daff:fe5a:fada  prefixlen 64  scopeid 0x20
        ether 00:fa:da:5a:fa:da  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 648 (648.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[admin@servidor] /interface vlan> print link eth0.101 eth0.102

13: eth0.101@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default 
    link/ether 00:ff:be:ba:ca:fe brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    0          0        0       0       0       0       
    RX errors: length   crc     frame   fifo    missed
               0        0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    648        8        0       0       0       0       
    TX errors: aborted  fifo   window heartbeat transns
               0        0       0       0       0       
14: eth0.102@eth0: <<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default 
    link/ether 00:fa:da:5a:fa:da brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    0          0        0       0       0       0       
    RX errors: length   crc     frame   fifo    missed
               0        0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    648        8        0       0       0       0       
    TX errors: aborted  fifo   window heartbeat transns
               0        0       0       0       0       


   Configurando rede IPv4

Sobre endereços IPv4 (para leigos)

Endereços IP são formas de localizar um computador em uma rede específica. Por exemplo: para encontrar o endereço de uma casa é preciso saber a cidade, o nome da rua e o número da casa.

Quando se trata de computadores, toda rede local (computadores ligados a um switch por exemplo) pode ser considerada uma rua e cada computador precisará ter um número na mesma sequencia.

Seguindo o exemplo, se o nome da "rua" fosse 10.0.0.X, o primeiro computador seria o número 10.0.0.1, o segundo computador seria o número 10.0.0.2, e assim por diante.
Essa analogia é simplória, para mais informações sobre o que são endereços IP consulte os links abaixo.

Wikipedia em português, Endereco IP: https://pt.wikipedia.org/wiki/Endere%C3%A7o_IP
Wikipedia em português, Protocolo de Internet: https://pt.wikipedia.org/wiki/Protocolo_de_Internet


Existem 2 tipos de endereços IPv4:
  • Privados: São endereços IP que você pode colocar livremente em seus computadores pessoais, nos computadores de um escritório ou nos computadores de uma empresa. São eles: 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10.
    Esses endereços se repetem em quase todas as casas e empresas (eu posso usar 192.168.0.1 na minha casa e voce usar o mesmo IP na sua casa) por isso os IPs privados não fazem parte da Internet. Para que
    os computadores com IPs privados naveguem na internet é preciso um NAT - mecanismo que troca o IP privado por um IP público.
  • Públicos: são endereços IP usados para identificar computadores na Internet.
    É impossível participar da Internet sem posssuir pelo menos um IP público.
    Cada empresa que deseja participar da rede Internet deve adquirir seus próprios números IPs.
    Esses números não podem ser usados por outras pessoas ou empresas alem daquela que o adquiriu.
    Uma forma comum de acessar a Internet é contratando um LINK DE INTERNET onde o fornecedor (provedor de Internet) lhe emprestará um de seus IPs públicos temporariamente.


Use apenas os seguintes IPs:
  • 10.x.x.x/8: de 10.0.0.1 a 10.255.255.254
  • 172.16.x.x/12: de 172.16.0.1 a 172.31.255.254
  • 192.168.x.x/16: de 192.168.0.1 a 192.168.255.254
IPs diferentes destes acima só devem ser configurados sob orientação do seu fornecedor de Internet.


Configurando endereços IPv4 manualmente

Execute o comando: zeroshell

/ip address : Entrar no diretório de configuração IPv4.

[admin@servidor] > /ip addr
[admin@servidor] /ip address> 

/ip address print : Listar endereços IPv4.

[admin@servidor] /ip address> print

 #  ADDRESS             NETWORK         BROADCAST       INTERFACE
 0  127.0.0.1/32        -               -               lo (loopback)

[admin@servidor] /ip address> 


O endereço 127.0.0.1/32 é nativo do Linux e não pode ser removido.

Você pode adicionar ips na interface loopback (lo) também.

Caso você precise atribuir um IP público (IP válido) ao Slackmini
sem perder endereços em divisões de sub-redes (como por exemplo, num /30 você perde 3 ips: rede, gateway e broadcast) você pode adicionar um único endereço /32 na interface loopback (nome lo).


/ip address add help : Exibe ajuda para configurar endereço IPv4.

[admin@servidor] /ip address> add help

 Adicionar endereco IPv4 na interface
 Use:
    add [opcoes]

 Opcoes:
    address=x.x.x.x/nn  : Endereco IP e numero de bits da mascara
    interface=DEV       : Interface de rede
    comment=COMENTARIO  : Comentario no registro
    disabled=yes/no     : Adicionar desativado (yes = nao aplicar na interface)

 Exemplo:
    add eth0 192.168.0.1/24

 Exemplos de compatibilidade com outros sistemas:
    add address=192.168.0.1/24 interface=eth0 disabled=no

[admin@servidor] /ip address> 

/ip address add ethX x.x.x.x/n : Adicionar endereço IPv4.

[admin@servidor] /ip address> add 172.20.0.2/24 eth0
[admin@servidor] /ip address> add 10.0.0.1/24 eth1
[admin@servidor] /ip address> print

 #  ADDRESS             NETWORK         BROADCAST       INTERFACE
 0  127.0.0.1/32        -               -               lo (loopback)
 1  172.20.0.2/24       172.20.0.0      172.20.0.255    eth0
 2  10.0.0.1/24         10.0.0.0        10.0.0.255      eth1

[admin@servidor] /ip address> ping 10.0.0.1 2
 SEQ HOST                                      SIZE TTL TIME  STATUS
   1 10.0.0.1                                    64  64 0.027  echo reply
   2 10.0.0.1                                    64  64 0.038  echo reply
     sent=2 received=2 packet-loss=0 min-rtt=0.027 avg-rtt=0.032 max-rtt=0.038

[admin@servidor] /ip address> 

/ip address remove x.x.x.x : Remover endereço IPv4.

[admin@servidor] /ip address> remove 10.0.0.1
 - Removendo registro 2: 10.0.0.1/24 na interface eth1
[admin@servidor] /ip address> print

 #  ADDRESS             NETWORK         BROADCAST       INTERFACE
 0  127.0.0.1/32        -               -               lo (loopback)
 1  172.20.0.2/24       172.20.0.0      172.20.0.255    eth0

[admin@servidor] /ip address> 



Gateway padrão (manualmente)

Ao configurar um endereço IP em uma interface de rede seu servidor conseguirá se comunicar com os computadores que estiverem na mesma rede.
Para que ele consiga se comunicar com computadores de outra rede (ou redes distantes com a Internet) é necessário usar um GATEWAY.




O Gateway tambem recebe o nome de "default", "rota padrão", "gateway padrão" e é representado pelo prefixo 0.0.0.0/0,
que deve apontar para um endereço IP na mesma rede em que o servidor/roteador se encontra.

/ip route : Entrar no diretório de configuração de rotas IPv4.

[admin@servidor] > /ip rou
[admin@servidor] /ip route> 

/ip route print : Listar rotas IPv4.

[admin@servidor] /ip route> print

Flags: X - desativa    A - ativa,      D - dinamica      C - conectada
       S - estatica    B - blackhole   U - unreachable   P - prohibit 

  #   Destino            IP Local        Gateway        Metrica Interface
  AC  127.0.0.0/8                                               lo
  AC  172.20.0.0/24      172.20.0.2                             eth0

[admin@servidor] /ip route> 

/ip route add help : Exibe ajuda para adicionar rotas IPv4.

[admin@servidor] /ip route> add help

 Adicionar rota estatica IPv4
 Use:
    add [opcoes]

 Opcoes:
    dst-address=x.x.x.x/nn : Endereco IP e numero de bits da mascara
    interface=DEV          : Interface de rede
    gateway=DEV            : IP do proximo salto
    distance=N             : Metrica (saltos)
    comment=COMENTARIO     : Comentario no registro
    disabled=yes/no        : Adicionar desativado (yes = nao aplicar)

 Exemplos:
    add 0.0.0.0/0 192.168.0.1
    add dst=0.0.0.0/0 gw=192.168.0.1

 Exemplos de compatibilidade com outros sistemas:
    add dst-address=0.0.0.0/0 gateway=192.168.0.1

[admin@servidor] /ip route> 

/ip route add default x.x.x.x : Adicionar gateway padrão

[admin@servidor] /ip route> add default 172.20.0.1
[admin@servidor] /ip route> print

Flags: X - desativa    A - ativa,      D - dinamica      C - conectada
       S - estatica    B - blackhole   U - unreachable   P - prohibit 

  #   Destino            IP Local        Gateway        Metrica Interface
  A   default                            172.20.0.1      1      eth0
  AC  127.0.0.0/8                                               lo
  AC  172.20.0.0/24      172.20.0.3                             eth0




Listando rotas IPv4

O Slackmini exibe apenas a tabela de rotas operacionais seguida das rotas cadastradas (rotas estáticas).
Você poderá ver as apenas as rotas cadastras manualmente (algunas podem não estar operacionais) pelo 'print static'.

/ip route print help : Exibe modos de impressão de rotas IPv4.

 Exibir tabela de rotas IPv4
 Use:
    print [opcoes]

 Opcoes:
    cache                : Exibir cache de rotas
    kernel               : Exibir rotas do /proc/net/route
    iproute              : Exibir rotas via iproute2
    route                : Exibir rotas via 'route -n'
    netstat              : Exibir rotas via 'netstat -rn'
    static               : Exibir rotas estaticas cadastradas
    zebra                : Exibir rotas pelo Zebra
    ospf                 : Exibir rotas OSPF pelo Zebra
    bgp                  : Exibir rotas BGP pelo Zebra
    local                : Exibir tabela local
    default              : Exibir tabela default
    rule                 : Exibir sequencia de roteamento
    table [N]            : Exibir tabela pelo numero (0-255)

[admin@servidor] /ip route> print

Flags: X - desativa    A - ativa,      D - dinamica      C - conectada
       S - estatica    B - blackhole   U - unreachable   P - prohibit 

  #   Destino            IP Local        Gateway        Metrica Interface
  A   default                            172.20.0.1      1      eth0
  AC  127.0.0.0/8                                               lo
  AC  172.20.0.0/24      172.20.0.3                             eth0

Rotas estaticas cadastradas:
   # Destino            Gateway         Interface        Metric  IP Local
   2 192.168.20.0/24    172.20.11.1                           1  
   3 192.168.30.0/24    172.20.11.1                           1  
   4 0.0.0.0/0          172.20.11.1                           1  


/ip route print static : Exibe rotas cadastradas manualmente.

[admin@servidor] /ip route> print static

   # Destino            Gateway         Interface        Metric  IP Local
   1 0.0.0.0/0          172.20.0.1                            1  


/ip route print static running : Exibe cadastradas e operacionais.

[admin@servidor] /ip route> print static run

Flags: X - desativa    A - ativa,      D - dinamica      C - conectada
       s - estatica    B - blackhole   U - unreachable   P - prohibit 

  #   Destino            IP Local        Gateway        Metrica Interface
  A   0.0.0.0/0                          172.20.0.1     1       eth0



Política de roteamento

O kernel Linux implementa uma sequencia de verificações quando é necessário descobrir o destino de um determinado pacote baseado em seu IP de destino, essa operação se chama ROUTER LOOKUP.





Fazer um ROUTER LOOKUP consiste em 4 sequencias:
  • O IP de destino está registrado na tabela CACHE?
    Se estiver, usar o registro do cache para a desisão, se não verificar nas tabelas de rotas, sequência: LOCAL -> MAIN -> DEFAULT
  • O IP de destino está na tabela LOCAL ?
    A tabela local possui o cadastro dos IPs que pertencem ao próprio servidor.
    Se estiver, o destino do pacote será a fila interna do roteador (loopback) onde o pacote será entregue a um software interno.
  • O IP de destino está na tabela MAIN ?
    A tabela MAIN contem as rotas operacionais cadastradas manualmente (rotas estáticas) e cadastradas dinamicamente (OSPF, BGP, protocolos de roteamento).
    Se houver registro para a rota desejada o pacote será enviado para ela e um registro será inserido na tabela CACHE.
  • O IP de destino está na tabela DEFAULT ?
    A tabela DEFAULT normalmente fica vazia. Ela foi projetada para conter rotas para pacotes cujo destino são desconhecidos com o proposito de analise administrativa.
    Se houver registro para a rota desejada o pacote será enviado para ela e um registro será inserido na tabela CACHE.


/ip route print get x.x.x.x : Faz ROUTER LOOKUP para determinado IP.

[admin@servidor] /ip route> get 200.160.2.3

 - Rota: 200.160.2.3 via 172.20.0.1 dev eth0  src 172.20.0.2 cache 

[admin@servidor] /ip route> 


/ip route print rule : Exibe ordem de consulta de roteamento.
/ip route print cache : Exibe a tabela de cache de rotas.
/ip route print local : Exibe a tabela de IPs locais e broadcasts.
/ip route print main : Exibe a tabela de rotas estáticas/dinãmicas.
/ip route print default : Exibe a tabela de rotas final.

[admin@servidor] /ip route> print rule

0:	from all lookup local
32766:	from all lookup main
32767:	from all lookup default

[admin@servidor] /ip route> print cache
[admin@servidor] /ip route> print local

broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1
broadcast 172.20.0.0 dev eth0  proto kernel  scope link  src 172.20.0.2
local 172.20.0.2 dev eth0  proto kernel  scope host  src 172.20.0.2
broadcast 172.20.0.255 dev eth0  proto kernel  scope link  src 172.20.0.2

[admin@servidor] /ip route> print main

default via 172.20.0.1 dev eth0
127.0.0.0/8 dev lo  scope link 
172.20.0.0/24 dev eth0  proto kernel  scope link  src 172.20.0.2

[admin@servidor] /ip route> print default

   Tabela ARP (IPv4/MAC)

Tabela ARP - mapeamento IP e MAC Address

Rede locais baseada em broadcast (ethernet / 802) são redes baseada em MAC Address.

Todas as informações enviadas e recebidas em uma rede baseada em broadcast é transportada em sequência de bits chamada QUADRO. Um quadro precisa ter um cabeçalho com o destinatário (MAC de destino) e um remetente (MAC de origem).

Redes IPv4 são baseadas em endereços IP, assim, para que computadores em uma rede local enviem pacotes IP uns para os outros é preciso que o remetente DESCUBRA o MAC Address do outro computador na mesma rede local ou do roteador que faz o papel de gateway padrão para então enviar as informações (quadro contendo pacote IP) na rede local.

O protocolo ARP é utilizado para que um computador descubra o MAC Adress do outro na mesma rede local. Se o computador destinatário não estiver na mesma rede local será preciso decobrir o MAC Address do gateway padrão (roteador).

Existem 2 tipos de quadros ARP:

  • ARP-REQUEST: pergunta enviada a um MAC especifico ou via broadcast (MAC FF:FF:FF:FF:FF:FF)
  • ARP-REPLY: resposta enviada pelo computador que possui o endereço IP solicitado ao computador que efetuou a pergunta (arp-request).

Funcionamento do protocolo ARP ao solicitar o MAC-Address do ip '172.20.0.1':
  • 1 - envia um broadcast perguntando 'Meu IP é 172.20.0,2 quem é 172.20.0.1 ?'
  • 2 - o software ARP no computador que possui o IP 172.20.0.1 recebe a pergunta e responde: 'Meu IP é 172.20.0.1 e meu MAC-Address é 00:01:02:aa:bb:cc' para o MAC de quem fez a pergunta.
  • 3 - a resposta chega e um registro é inserido na tabela ARP mapeando o ip 172.20.0.1 no MAC 00:01:02:aa:bb:cc
  • 4 - se novos pacotes IP precisam ser enviados para o IP 172.20.0.1 o MAC registrado na tabela ARP será usado
  • 5 - caso nenhum pacote for enviado para o IP 172.20.0.1 apos alguns minutos o registro da tabela ARP é removido automaticamente
  • 6 - se for necessário se comunicar com 172.20.0.1 novamente o processo é reiniciado no passo 1
  • 7 - se nenhuma resposta for recebida às solicitações ARP uma mensagem ICMP 'host inalcançavel' é retornado.
  • 8 - se a troca de pacotes IP for constante entre dois computadores uma pergunta será enviada especificamente ao MAC que enviou a última resposta com o objetivo de atualizar o tempo do registro na tabela ARP antes que ela expire.

Ilustração da descoberta de MAC via ARP:



Exibindo de tabela ARP

/ip arp : Entrar no diretório de controle ARP.

[admin@servidor] > /ip arp
[admin@servidor] /ip arp> 

/ip arp print help : Ajuda para listar tabela ARP.

[admin@servidor] /ip arp> print help

 Imprimir tabela ARP - mapeamento IPv4 <-> MAC Address
 Use:
    print                 : Exibir tabela ARP
    print [IP]            : Exibir informacoes de um IP
    print info            : Exibir tabela ARP com detalhes
    print error           : Exibir IPs sem resposta ARP
    print all             : Exibir tabela ARP com IPs sem resposta
    print neighbors       : Exibir tabela ARP via iproute2
    print neighbors [IP]  : Exibir informacoes de um IP via iproute2


/ip arp print : Listar tabela ARP.

[admin@servidor] /ip arp> print

 IP address            MAC                      INTERFACE
 172.20.0.1            44:d9:e7:07:2f:ab        eth0
 172.20.0.3            7c:6d:62:89:01:02        eth0

[admin@servidor] /ip arp> 

O endereço MAC (MAC Address) é constituido de 6 bytes.
Os 3 primeiros bytes são atribuidos pelo IEEE ao fabricante do dispositivo eletrônico, dessa forma é possivel saber o fabricante da interface de rede do roteador/switch/servidor por esses 3 bytes.

Os 3 bytes seguintes são atribuidos sequencialmente pelo fabricante a cada dispositivo fabricado.

Cadastro de todos os fabricantes de interface com MAC: http://standards-oui.ieee.org/oui.txt
Site para consultar fabricante do MAC (macvendors.com): http://www.macvendors.com/
Site para consultar fabricante do MAC (macvendorlookup.com): http://www.macvendorlookup.com/

/ip arp print info : Exibir informações detalhadas da tabela ARP

[admin@servidor] /ip arp> print info

[1] IP Address....: 172.20.0.1
[1]          MAC..: 44:d9:e7:07:2f:ab
[1]          DEV..: eth0
[1]        Vendor.: Ubiquiti Networks

[2] IP Address....: 172.20.0.3
[2]          MAC..: 7c:6d:62:89:01:02
[2]          DEV..: eth0
[2]        Vendor.: Apple

[admin@servidor] /ip arp> 

/ip arp print x.x.x.x : Exibir informações de um IP específico

[admin@servidor] /ip arp> print 172.20.0.1

[1] IP Address....: 172.20.0.1
[1]          MAC..: 44:d9:e7:07:2f:ab
[1]          DEV..: eth0
[1]        Vendor.: Ubiquiti Networks

[admin@servidor] /ip arp> 




Monitoramento de tráfego ARP

Você pode monitorar os padros enviados e recebidos em uma interface de rede, o comando 'monitor' filtra os pacotes ARP na interface escolhida.

/ip arp monitor [interface] : Monitora atividade ARP na [interface].

[admin@servidor] /ip arp> monitor eth0

CONTROL+C to Abort
ARP Monitor on eth0

10:22:55.983361 00:50:cc:cc:cc:01 > 44:d9:e7:07:2f:ab, length 60: Ethernet (len 6), IPv4 (len 4),
				Request who-has 172.20.0.1 (44:d9:e7:07:2f:ab) tell 172.20.0.3, length 46

10:22:55.983559 44:d9:e7:07:2f:ab > 00:50:cc:cc:cc:01, length 60: Ethernet (len 6), IPv4 (len 4),
				Reply 172.20.0.1 is-at 44:d9:e7:07:2f:ab, length 46



É possivel contar o tempo desde o envio de um ARP-REQUEST até a chegada de um ARP-REPLY e usar essa medição como um PING: ARP-PING.


/ip arp arping [IP] : Efetua medição de ping via ARP.
ou
ping arp [IP] : Efetua medição de ping via ARP.

[admin@servidor] /ip arp> arping 172.20.0.1 count 4

 SEQ TYPE    TARGET         MAC-ADDRESS          TIME      STATUS
   1 Reply   172.20.0.1     44:D9:E7:07:2F:AB    0.960     OK
   2 Reply   172.20.0.1     44:D9:E7:07:2F:AB    1.066     OK
   3 Reply   172.20.0.1     44:D9:E7:07:2F:AB    0.857     OK
   4 Reply   172.20.0.1     44:D9:E7:07:2F:AB    0.910     OK
     sent=4 received=4 packet-loss=0% min-rtt=0.857 avg-rtt=0.948 max-rtt=1.066

[admin@servidor] /ip arp> 


O ARPING envia um broadcast para realizar o primeiro ping. Ao receber a primeira resposta com o MAC Address do alvo ele passa a enviar os pings seguintes para esse MAC.
Você pode alterar esse comportamente para que todos os pings sejam enviados via BROADCAST o que ajuda a detectar duplicações de IPs na rede ou loops.


/ip arp arping [IP] broadcast : Ping ARP somente com broadcast.

[admin@servidor] /ip arp> arping 172.20.0.1 count 4 broadcast

 SEQ TYPE    TARGET         MAC-ADDRESS          TIME      STATUS
   1 Reply   172.20.0.1     44:D9:E7:07:2F:AB    0.895     OK
   2 Reply   172.20.0.1     44:D9:E7:07:2F:AB    0.950     OK
   3 Reply   172.20.0.1     44:D9:E7:07:2F:AB    0.889     OK
   4 Reply   172.20.0.1     44:D9:E7:07:2F:AB    0.963     OK
     sent=4 received=4 packet-loss=0% min-rtt=0.889 avg-rtt=0.924 max-rtt=0.963

[admin@servidor] /ip arp> 



Procurando IP via ARP

É bastante comum não saber em qual interface está determinado IP após ligar os cabos do servidor/roteador numa rede.
É possível fazer uma busca enviando um ARP-REQUEST em todas as interfaces de rede e ver em qual delas está um determinado vizinho com o comanod 'scan'.


/ip arp scan [IP] : Procura IP vizinha via ARP-Request.

[admin@servidor] /ip arp> scan 172.20.0.1

 ARP-Scan 172.20.0.1
 eth0          :: arp-reply: 172.20.0.1 on 44:D9:E7:07:2F:AB [Ubiquiti Networks]
 eth1          :: not-found
 eth2          :: not-found
 eth3          :: not-found
 eth1.40       :: not-found

 ARP-Scan 172.20.0.1, replies=1 interface=eth0

[admin@servidor] /ip arp> 



Renovando tabela ARP

O comando 'flush' permite remover registros não utilizados e renova registros que estejam em uso.

/ip arp flush : Renovar tabela ARP

[admin@servidor] /ip arp> flush
[admin@servidor] /ip arp> 


   Configurando rede IPv6

Sobre endereços IPv6 (para leigos)

No capítulo IPv4 você aprendeu como funciona os endereços IP, especificamente IP versão 4 (IPv4) que foi a versão que deu vida a Internet.

Quando a internet surgiu o plano de usar 4 bytes para endereçar computadores parecia ser suficiente porem o sucesso da Internet fez com que os números disponíveis acabassem (ainda sobrou um pouco que é racionado).

O protocolo IPv6 foi criado para substituir gradativamente o protocolo IPv4. Essa transição deve demorar algumas décadas.

Enquanto o IPv4 tem 4 bytes (32 bits) escritos na forma decimal (n.n.n.n, onde cada n representa 8 bits em números de 0 a 255) possibilitando 4 bilhões de possibilidades,
o IPv6 é constituido de 16 bytes (128 bits) escritos na forma hexadecimal (hh:hh:hh:hh:hh:hh:hh:hh) possibilitando 11 undecilhões de possibilidades.


Para não ficar complicado dar números IPv6 para computadores, existe uma organização natural que torna tudo mais fácil.

1 - Organização de prefixos



Observando essa organização, um provedor vai receber um /32, exemplo: 2001:0db8:0000:0000:0000:0000:0000:0000/32.

Os zeros a esquerda podem ser omitidos, assim temos a representação: 2001:db8:0:0:0:0:0:0/32.

Vários grupos em zero podem ser representados por um salto ::, assim temos: 2001:db8::/32.

Dessa forma é mais fácil digitar endereços IPv6!


O endereço ::1/128 é nativo do Linux e não pode ser removido.

Você verá com frequencia o prefixo 2001:db8::/32 sendo usado em muitos tutoriais e manuais. Essa faixa é de uso privado para fins de documentação.

RFC 3849 IPv6 Address Prefix Reserved for Documentation: https://tools.ietf.org/html/rfc3849


2 - Atribuindo endereços IPv6

No IPv4 é comum distribuir IPs aos usuários entregando-lhes um único IP público ou privado e deixar que o roteador faça NAT dos endereços internos.

No IPv6 isso mudou. Não existe NAT em IPv6 (existe mas não é publicamente disponivel).

Para que o usuário tenha capacidade de navegar em IPv6 pelo menos 2 prefixos devem ser alocados.
O primeiro prefixo será atribuido a rede entre o provedor e o usuários e o segundo
prefixo o provedor fará o roteamento para o usuário usa-lo dentro de sua rede.



Toda interface de rede com IPv6 ativo recebe automaticamente (atribuido pelo sistema operacional) um endereço fixo chamado LINK LOCAL.
O endereço LINK LOCAL é o resultado de um cálculo chamado EUI 64 usando o prefixo fe80::/64 e o endereço MAC da interace.

Você não pode editar ou remover os endereços LINK LOCAL pois eles são a base do funcionamento do ICMPv6, sem ele o protocolo IPv6 não funciona.

Faremos o exemplo acima configurando o Roteador Cliente.

Configurando endereços IPv6 manualmente

Execute o comando: zeroshell

/ipv6 address : Entrar no diretório de configuração IPv6.

[admin@servidor] > /ipv addr
[admin@servidor] /ipv6 address> 

/ipv6 address print help : Ajuda para listar endereços IPv6.

[admin@servidor] /ipv6 address> print help

 Imprimir lista de IPv6 nas interfaces
 Use:
    print            : Exibir tabela de enderecos IPv6
    print ipv6       : Exibir tabela via iproute2 (ip -6 addr show)
    print static     : Exibir enderecos cadastrados
    print local      : Exibir enderecos link-local

[admin@servidor] /ipv6 address> 

/ipv6 address print : Listar endereços IPv6.

[admin@servidor] /ipv6 address> print

 #  ADDRESS                                       INTERFACE
 -  ::1/128                                       lo (loopback)
 -  2001:db8:beba:cafe::2/126                     eth0
 -  fe80::20c:29ff:fe0d:a222/64                   eth0
 -  fe80::20c:29ff:fe0d:a244/64                   eth1
 -  fe80::20c:29ff:fe0d:a244/64                   eth2
 -  fe80::20c:29ff:fe0d:a255/64                   eth3

[admin@servidor] /ipv6 address> 

/ipv6 address print static : Listar endereços IPv6 cadastrados

[admin@servidor] /ipv6 address> print static

 #  ADDRESS                                       INTERFACE
 0  ::1/128                                       lo (loopback)

[admin@servidor] /ipv6 address> 

/ipv6 address print local : Listar endereços IPv6 LINK-LOCAL

[admin@servidor] /ipv6 address> print local

 #  ADDRESS                                       INTERFACE
 -  fe80::20c:29ff:fe0d:a222/64                   eth0
 -  fe80::20c:29ff:fe0d:a244/64                   eth1
 -  fe80::20c:29ff:fe0d:a244/64                   eth2
 -  fe80::20c:29ff:fe0d:a255/64                   eth3

/ipv6 address add help : Ajuda para adicionar o endereção IPv6

[admin@servidor] /ipv6 address> add help

 Adicionar endereco IPv6 na interface
 Use:
    add (IPv6) (Interface) [opcoes]

 Opcoes:
    address=x:x:x:x:h:h:h:h/nn : Endereco IPv6 e numero de bits da mascara
    interface=DEV              : Interface de rede
    comment=COMENTARIO         : Comentario no registro
    disabled=yes/no            : Adicionar desativado

 Exemplo:
    add eth0 2001:db8:beba:c0ca::1/64

 Exemplos de compatibilidade com outros sistemas:
    add address=2001:db8:beba:c0ca::1/64 interface=eth0 disabled=no

[admin@servidor] /ipv6 address> 

/ipv6 address add (IPv6) (Interface) : Adicionar o endereção IPv6

[admin@servidor] /ipv6 address> add 2001:db8:beba:cafe::2/126 eth0
[admin@servidor] /ipv6 address> print static

 #  ADDRESS                                       INTERFACE
 0  ::1/128                                       lo (loopback)
 1  2001:db8:beba:cafe::2/126                     eth0

[admin@servidor] /ipv6 address> 

/ipv6 address remove (IPv6 | ID) : Remover endereção IPv6

[admin@servidor] /ipv6 address> remove 1
[admin@servidor] /ipv6 address> print static

 #  ADDRESS                                       INTERFACE
 0  ::1/128                                       lo (loopback)

[admin@servidor] /ipv6 address> 


Vamos adicionar os endereços conforme o exemplo do diagrama.


[admin@servidor] /ipv6 address> add 2001:db8:beba:cafe::2/126 eth0
[admin@servidor] /ipv6 address> add 2001:db8:1234:1234::1/64 eth1
[admin@servidor] /ipv6 address> print static

 #  ADDRESS                                       INTERFACE
 0  ::1/128                                       lo (loopback)
 1  2001:db8:beba:cafe::2/126                     eth0
 2  2001:db8:1234:1234::1/64                      eth1

[admin@servidor] /ipv6 address> 


Endereços IPv6 LINK-LOCAL

O protocolo IPv6 possui uma peculiaridade: todos os computadores com IPv6 numa rede local já podem se comunicar por meio de endereços LINK-LOCAL.

Sempre que o sistema operacional ativa o suporte IPv6 em uma interface de rede ela se atribui um IPv6 LINK-LOCAL baseado no MAC-ADDRESS da interface usando o cálculo EUI-64.
O endereço LINK-LOCAL é vital para todo o funcionamento do IPv6 e não deve ser removido. Muitos sistemas impedem que você remova o LINK-LOCAL por segurança.



O simples fato de possuir um endereço IPv6 na mesma rede (FE80::/64) torna a comunicação possível por padrão.

Uma coisa que pode parecer estranho no IPv6 é que a rede FE80::/64 pode existir em vários lugares ao mesmo tempo mudando o paradigma aprendido no IPv4 de que um endereço de rede só pode estar em um lugar.



Observe o Rotaedor B no desenho acima. Ele participa de duas redes FE80::/64. Ele pode se comunicar com o roteador A e o roteador C bastando usar o IPv6 Link-Local da interface conectada a eles.

O Roteador A pode se comunicar com o Roteador B usando IPv6 LINK-LOCAL mas não pode se comunicar com C pois endereços IPv6 LINK-LOCAL não são roteados entre redes físicas (ou VLANS) diferentes

Como a rede FE80::/64 existe em várias interfaces simultaneamente é preciso especificar a interface de rede para dar PING em um endereço IPv6 Link-Local

ping [IPv6-link-local] (interface) : Ping no IPv6 Link-Local.

[admin@roteador-a] > ping fe80::0211:22ff:feaa:bbcc eth0 4

 SEQ HOST                                      SIZE TTL TIME  STATUS
   1 fe80::0211:22ff:feaa:bbcc                   64  64 0.030  echo reply
   2 fe80::0211:22ff:feaa:bbcc                   64  64 0.046  echo reply
   3 fe80::0211:22ff:feaa:bbcc                   64  64 0.044  echo reply
   4 fe80::0211:22ff:feaa:bbcc                   64  64 0.049  echo reply
     sent=4 received=4 packet-loss=0 min-rtt=0.030 avg-rtt=0.042 max-rtt=0.049

[admin@roteador-a] > 


O IPv6 permite que você de PING em todos os vizinhos com endereços IPv6 LINK-LOCAL ao mesmo tempo. Para isso basta informar no ping o endereço do grupo MULTICAST e a interface de rede.

ping ff02::1 (interface) : Ping em todos os IPv6 Link-Local.

[admin@roteador-a] > ping ff02::1 eth0 4

 SEQ HOST                                      SIZE TTL TIME  STATUS
   1 fe80::0211:22ff:feaa:bbcc                   64  64 0.030  echo reply
   2 fe80::0211:22ff:feaa:bbcc                   64  64 0.046  echo reply
   3 fe80::0211:22ff:feaa:bbcc                   64  64 0.044  echo reply
   4 fe80::0211:22ff:feaa:bbcc                   64  64 0.049  echo reply
     sent=4 received=4 packet-loss=0 min-rtt=0.030 avg-rtt=0.042 max-rtt=0.049

[admin@roteador-a] > 


Gateway padrão (manualmente)

É muito importante que você atribua endereços IPv6 nas interfaces de rede para então configurar esses endereços estáticos como gateway padrão.
Basear as rotas estáticas em endereços link-local é uma péssima ideia pois como eles são gerados pelo MAC-ADDRESS uma futura alteração física na rede poderá requerer uma grande mão de obra.
Você irá observar no futuro que protocolos de roteamento dinamico como o RIP-NG e o OSPFv3 adicionam as rotas sempre baseadas no endereço Link-Local do vizinho, isso é normal e não acarreta problemas visto que sempre que você alterar a interface de rede ou o MAC-Address o protocolo atualizará as rotas.




Vamos usar o diagrama acima como exemplo para configurar o servidor A para usar o Roteador como gateway padrão IPv6:

/ipv6 route : Entrar no diretório de configuração de rotas IPv6.

[admin@servidor-a] > /ipv rou
[admin@servidor-a] /ipv6 route> 

/ipv6 route print : Listar rotas IPv6.

[admin@servidor-a] /ipv6 route> print

2001:db8:beba:cafe::/126 dev eth0  proto kernel  metric 256  pref medium
fe80::/64 dev eth0  proto kernel  metric 256  pref medium
fe80::/64 dev eth1  proto kernel  metric 256  pref medium
fe80::/64 dev eth2  proto kernel  metric 256  pref medium
fe80::/64 dev eth3  proto kernel  metric 256  pref medium
ff00::/8 dev eth0  metric 256  pref medium
ff00::/8 dev eth1  metric 256  pref medium
ff00::/8 dev eth2  metric 256  pref medium
ff00::/8 dev eth3  metric 256  pref medium

Rotas estaticas cadastradas:
   # Destino            Gateway         Interface        Metric  IP Local
 Nenhuma rota estatica cadastrada.

[admin@servidor-a] /ipv6 route> 

/ipv6 route add help : Exibe ajuda para adicionar rotas IPv6.

[admin@servidor-a] /ipv6 route> add help

 Adicionar rota estatica IPv6
 Use:
    add [opcoes]

 Opcoes:
    dst-address=x::x/nn    : Endereco IPv6 e numero de bits do prefixo
    interface=DEV          : Interface de rede
    gateway=DEV            : IP do proximo salto
    distance=N             : Metrica (saltos)
    comment=COMENTARIO     : Comentario no registro
    disabled=yes/no        : Adicionar desativado (yes = nao aplicar)

 Exemplos:
    add ::/0 2001:db8::1
    add default 2001:db8::1
    add dst=::/0 gw=2001:db8::1

 Exemplos de compatibilidade com outros sistemas:
    add dst-address=::/0 gateway=2001:db8::1

[admin@servidor-a] /ipv6 route> 

/ipv6 route add default x::x/p : Adicionar gateway padrão

[admin@servidor-a] /ipv6 route> add gateway 2001:db8:beba:cafe::1
[admin@servidor-a] /ipv6 route> print static

Rotas estaticas cadastradas:
   # Destino / Gateway / Source                Interface         Metric
   1 ::/0                                                          1
     Via: 2001:db8:beba:cafe::1

[admin@servidor-a] /ipv6 route> 
   Vizinhança IPv6 (IPv6/MAC)

Vizinhança IPv6 e descoberta de MAC Address

Você aprendeu no protocolo IPv4 que para descobrir o MAC Address de um vizinho (computador na mesma rede local) é utilizado o protocolo ARP que é baseado em BROADCAST.

No protocolo IPv6 isso mudou. Em vez de usar um protocolo separado para a descoberta de MAC baseado em BROADCAST, o IPv6 usa um protocolo da propria pilha (ICMP versão 6) para descoberta de vizinhos via MULTICAST.

O protocolo MULTICAST se comporta, na maioria das redes, igual ao BROADCAST (enviado para todas as portas de switch/bridge na rede local), porem, em redes locais com suporte a gerenciamento de grupos multicast (IGMP) os quadros MULTICAST são enviados apenas para membros do grupo, nesse caso, apenas os computadores que possuem suporte a IPv6.

Por conta da natureza MULTICAST da descoberta de vizinhos é possivel dar ping em todos os computadores na mesma rede com um único comando.
/ipv6 neighbor : Entrar no diretório de vizinhança IPv6.

[admin@servidor] > /ipv nei
[admin@servidor] /ipv6 neighbor> 

/ipv6 neighbor print help : Ajuda para listar vizinhança IPv6.

[admin@servidor] /ipv6 neighbor> print help

 Imprimir vizinhanca IPv6 - mapeamento IPv6 <-> MAC Address
 Use:
    print                  : Exibir tabela ARP
    print [IPv6]           : Exibir informacoes de um IPv6
    print info             : Exibir tabela ARP com detalhes
    print error            : Exibir IPs sem resposta ARP
    print all              : Exibir tabela ARP com IPv6 sem resposta
    print neighbors        : Exibir tabela ARP via iproute2
    print neighbors [IPv6] : Exibir informacoes de um IPv6 via iproute2

[admin@servidor] /ipv6 neighbor> 

/ipv6 neighbor print : Exibir mapa de vizinhança IPv6.

[admin@servidor] /ipv6 neighbor> print

 IPv6 address                            MAC                 INTERFACE
 2001:db8:beba:cafe::1                   44:d9:e7:07:3e:44   eth0
 fe80::7e6d:62ff:fe89:b347               7c:6d:62:89:b3:47   eth0
 fe80::46d9:e7ff:fe07:3e44               44:d9:e7:07:3e:44   eth0
 fe80::250:ccff:fecc:cc01                00:50:cc:cc:cc:01   eth0

[admin@servidor] /ipv6 neighbor> 

/ipv6 neighbor print info : Exibir mapa de vizinhança com detalhes.

[admin@servidor] /ipv6 neighbor> print info

[1] IPv6 Address..: 2001:db8:beba:cafe::1
[1]          MAC..: 44:d9:e7:07:3e:44
[1]          DEV..: eth0
[1]        Vendor.: Ubiquiti Networks

[2] IPv6 Address..: fe80::7e6d:62ff:fe89:b347
[2]          MAC..: 7c:6d:62:89:b3:47
[2]          DEV..: eth0
[2]        Vendor.: Apple

[3] IPv6 Address..: fe80::46d9:e7ff:fe07:3e44
[3]          MAC..: 44:d9:e7:07:3e:44
[3]          DEV..: eth0
[3]        Vendor.: Ubiquiti Networks

[4] IPv6 Address..: fe80::250:ccff:fecc:cc01
[4]          MAC..: 00:50:cc:cc:cc:01
[4]          DEV..: eth0
[4]        Vendor.: Xyratex

[admin@servidor] /ipv6 neighbor> 
[admin@servidor] /ipv6 neighbor> 



Renovando tabela de vizinhança

O comando 'flush' permite remover registros não utilizados e renova registros que estejam em uso.

/ipv6 neighbor flush : Renovar tabela de vizinhança

[admin@servidor] /ipv6 neighbor> flush
[admin@servidor] /ipv6 neighbor> 


Ping para grupo MULTICAS

Como o controle de vizinha do IPv6 é feito por MULTICAST cada tipo de membro na rede pode participar de um ou mais grupos.
Existem os seguintes grupos:

Endereço do grupo Nome Descrição
FF02::1 All Nodes Todos os computadores na rede que possuem IPv6
FF02::2 All Routers Roteadores IPv6
FF02::5 All Routers OSPF Roteadores IPv6 rodando OSPFv3
FF02::6 All Routers OSPF Designated Routers Roteadores IPv6 rodando OSPFv3 operando como roteadores designados

Lista completa de grupos Multicast IPv6:
http://www.iana.org/assignments/ipv6-multicast-addresses/ipv6-multicast-addresses.xhtml#link-local


ping (IPv6-Group) (interface) : Ping para grupo na interface

[admin@servidor] /ipv6 neighbor> ping FF02::1 eth0

 SEQ HOST                                      SIZE TTL TIME  STATUS
   1 fe80::20c:29ff:fe0d:a255                    64  64 0.023  echo reply
   1 fe80::7e6d:62ff:fe89:b347               D   64  64 0.247  echo reply
   1 fe80::250:ccff:fecc:cc01                D   64  64 0.373  echo reply
   1 fe80::46d9:e7ff:fe07:3e44               D   64  64 0.463  echo reply
   2 fe80::20c:29ff:fe0d:a255                    64  64 0.047  echo reply
   2 fe80::7e6d:62ff:fe89:b347               D   64  64 0.345  echo reply
   2 fe80::250:ccff:fecc:cc01                D   64  64 0.430  echo reply
   2 fe80::46d9:e7ff:fe07:3e44               D   64  64 0.536  echo reply
   3 fe80::20c:29ff:fe0d:a255                    64  64 0.054  echo reply
   3 fe80::7e6d:62ff:fe89:b347               D   64  64 0.385  echo reply
   3 fe80::250:ccff:fecc:cc01                D   64  64 0.547  echo reply
   3 fe80::46d9:e7ff:fe07:3e44               D   64  64 0.610  echo reply
     sent=3 received=3 packet-loss=0 min-rtt=0.023 avg-rtt=0.338 max-rtt=0.610

[admin@servidor] /ipv6 neighbor> 
[admin@servidor] /ipv6 neighbor> ping FF02::2 eth0 count 2

 SEQ HOST                                      SIZE TTL TIME  STATUS
   1 fe80::46d9:e7ff:fe07:3e44                   64  64 0.577  echo reply
   2 fe80::46d9:e7ff:fe07:3e44                   64  64 0.729  echo reply
     sent=2 received=2 packet-loss=0 min-rtt=0.577 avg-rtt=0.653 max-rtt=0.729

[admin@servidor] /ipv6 neighbor> 
   Cliente DNS

Como funciona o protocolo DNS

Redes de computadores baseado em IPv4 ou IPv6 precisam apenas de números IP e rotas para funcionar, considerando que 'funcionar' é apenas o envio e o recebimento de pacotes dos quais os endereços (números) você ja conheça.

A internet para humanos é baseada em nomes amigáveis, como 'www.google.com' e 'www.registro.br'

Para que essa 'converção' seja possível existe um sistema de banco de dados distribuidos chamado DNS.

Nesse sistema existem os servidores de DNS raiz chamado de ROOT SERVERS.

Esses servidores possuem apenas referencias para outros servidores DNS espalhados pelo mundo responsáveis pelos TLDN (como .br, .com, .ar, .it), os sites '.com.br' por exemplo ficam submissos ao TLDN '.br'.

Um servidor DNS responsável por um TLDN ou por um domínio pode por sua vez encaminhar seus sub-domínos para outros servidores formando um árvore de DNS.

Um servidor DNS que contêm um banco de dados de registros de nomes (RR) de um domínio é chamado de SERVIDOR DNS AUTORITATIVO.




Existe um tipo de servidor DNS chamado DNS RECURSIVO. Esse tipo de servidor é responsável por consultar toda a estrutura de servidores DNS desde os ROOT SERVERS até os sub-dominios mais específicos em busca de um registro que associa um nome a um IP (IPv4, IPv6 ou ambos).


Todo computador que deseja navegar pela internet basendo-se no nome dos sites e serviços precisa utilizar um servidor DNS RECURSIVO.

Todo sistema operacional tem um software responsável por enviar as perguntas a um servidor DNS RECURSIVO e aguardar apenas a resposta pronta. Esse software se chama CLIENTE DNS.




Proxy DNS e DNS Transparente em roteadores embarcados

Existe hoje no mercado uma quantidade enorme de roteadores domésticos e para pequenos escritórios que implementam recurso de Proxy-DNS. Os principais fabricantes desse tipo de produto são: TP-LINK, D-LINK, Opticom, Ubiquiti, Intelbras, Mikrotik.

O Proxy-DNS é um tipo de servidor DNS que não tem poderes para fazer uma buscas recursivas mas é capaz de repassar solicitações de um cliente para um servidor DNS RECURSIVO.

Alguns roteadores com firewall impedem que o cliente acesse o DNS desejado e desvia as requisições para um proxy-dns interno. Essa técnica é conhecida como DNS Transparente



Roteadores ou Firewalls que implementem técnicas de DNS Transparente no provedor de acesso a Internet impedem que consultas recursiva sejam realizadas.
Se seu provedor de internet fizer isso seu servidor DNS RECURSIVO não irá funcionar.
DNS Transparente é uma técnica muito empregada em roteadores HOTSPOT para impedir que usuários não autenticados usem o DNS para navegar por VPNs UDP.




Configurando cliente DNS

O cliente DNS do Slackmini tem como objetivo permitir que os softwares rodando nele tenham a capacidade de resolver nome de domínos usando um servidor DNS RECURSIVO (ou um DNS Proxy).

/ip dns : Entrar no diretório de configuração do cliente DNS

[admin@servidor] > /ip dns
[admin@servidor] /ip dns> 

/ip dns print : Exibir configuração de cliente DNS

[admin@servidor] /ip dns> print

  Tentativas por servidor.......: 2
  Tempo de espera pela resposta.: 1
  Distribuicao de carga.........: Sequencia de prioridade

  Id Prio  Nome             Endereco                               Status

   Nenhum servidor DNS cadastrado..

[admin@servidor] /ip dns> 

Caso você não tenha ou não vá montar um DNS RECURSIVO próprio, existem os seguintes servidores DNS RECURSIVOS gratuitos:
  • Google DNS IPv4: 8.8.8.8, 8.8.4.4
  • Google DNS IPv6: 2001:4860:4860::8888, 2001:4860:4860::8844
  • Giga DNS IPv4: 189.38.95.95, 189.38.95.96
  • Giga DNS IPv6: 2804:10:10::10, 2804:10:10::20
  • OpenDNS IPv4: 208.67.222.222, 208.67.220.220, 208.67.222.220, 208.67.220.222
  • OpenDNS IPv6: 2620:0:ccc::2, 2620:0:ccd::2
  • Level3 IPv4: 4.2.2.2, 4.2.2.3, 4.2.2.4, 4.2.2.5, 4.2.2.6, 209.244.0.3, 209.244.0.4
  • Yandex.DNS IPv4 (Basic): 77.88.8.8, 77.88.8.1
  • Yandex.DNS IPv6 (Basic): 2a02:6b8::feed:0ff, 2a02:6b8:0:1::feed:0ff
  • Yandex.DNS IPv4 (Safe): 77.88.8.88, 77.88.8.2
  • Yandex.DNS IPv6 (Safe): 2a02:6b8::feed:bad, 2a02:6b8:0:1::feed:bad
  • Yandex.DNS IPv4 (Family): 77.88.8.7, 77.88.8.3
  • Yandex.DNS IPv6 (Family): 2a02:6b8::feed:a11, 2a02:6b8:0:1::feed:a11
  • censurfridns.dk IPv4: 89.233.43.71
  • censurfridns.dk IPv6: 2002:d596:2a92:1:71:53::
  • censurfridns.dk IPv4 (anycast): 91.239.100.100
  • censurfridns.dk IPv6 (anycast): 2001:67c:28a4::
  • puntCAT IPv4: 109.69.8.51
  • puntCAT IPv6: 2a00:1508:0:4::9

Verifique qual oferece melhor latência até você. Alguns deles fazem filtros de site (Safe e Family).


Agora é preciso adicionar no Slackmini os IPs dos servidores DNS RECURSIVOS que você irá consultar para resolver nomes.

/ip dns add help : Exibir ajuda para adicionar servidor DNS

[admin@servidor] /ip dns> add help

 Adicionar servidor DNS
 Use:
    add (IPv4 ou IPv6) (PRIO) [opcoes]

 Opcoes:
    name=NOME            : Nome simbolico
    comment=COMENTARIO   : Comentario do tunnel

 Exemplos:
    add name Localhost  127.0.0.1  1
    add name Teste1  8.8.4.4 1
    add name Google  8.8.8.8 2
    add 4.2.2.2

[admin@servidor] /ip dns> 

/ip dns add (IPv4 ou IPv6) : Adicionar servidor DNS
/ip dns add name (NOME) (IP) (PRIO) : Adicionar DNS com detalhes

[admin@servidor] /ip dns> add name Google_1_v4 8.8.8.8 prio 1
[admin@servidor] /ip dns> add name Google_2_v4 8.8.4.4 prio 1
[admin@servidor] /ip dns> print

  Tentativas por servidor.......: 2
  Tempo de espera pela resposta.: 1
  Distribuicao de carga.........: Sequencia de prioridade

  Id Prio  Nome             Endereco                               Status
   1    1  Google_1_v4      8.8.8.8                                Ativo
   2    1  Google_2_v4      8.8.4.4                                Ativo



Configuração de pesquisa

O cliente DNS interno pesquisa pelo nome solicitado na ordem em que os servidores foram cadastrados.
Caso algum servidor não responda por um tempo (esse tempo é o timeout) a consulta pode ser repetida (o número de tentativas é o tries) passa a ser feita em outro servidor.
Tambem é possível balancear o trafego entre os servidores DNS que você cadastrou (opção balance).

/ip dns set tries=N : Determinar número de tentativas por servidor
/ip dns set timeout=N : Determinar o tempo de espera pela resposta
/ip dns set balance=yes|no : Definir balanceamento de requisições

[admin@servidor] /ip dns> set tries=2
[admin@servidor] /ip dns> set timeout=1
[admin@servidor] /ip dns> set balance=yes
[admin@servidor] /ip dns> print config

  Tentativas por servidor.......: 2
  Tempo de espera pela resposta.: 2
  Distribuicao de carga.........: Balancear entre servidores

[admin@servidor] /ip dns> 


Teste de consulta DNS

O Slackmini é equipado de várias ferramentas para testar e diagnosticar a qualidade de servidores DNS.

Cuidado
Muita gente testa a qualidade do DNS usando um simples 'ping'.
O comando 'ping' gera pacotes ICMP-ECHO-REQUEST, esse tipo de pacote é respondido pelo KERNEL do IP de destino e não pelo software de DNS que roda no IP de destino.

Esse sutil diferença engana muita gente. As vezes um servidor DNS RECURSIVO pode ter bloqueado pacotes ICMP no firewall e mesmo assim permitir que consultas dns (UDP porta 53) passem pelo firewall.

Outro engano é considerar que a latência do PING ICMP tem relação a latência de DNS. Normalmente a latência do serviço de DNS é igual ou levemente maior que a latência medida via ICMP mas em casos onde há QoS que a latência de DNS pode ser menor que a latência ICMP.

/ip dns dns-ping (FQDN) (DNS) : Testar ping (latência de resolução)

[admin@servidor] /ip dns> dns-ping www.registro.br 4.2.2.2

  IP ver.: 4
  Host...: www.registro.br
  Server.: 4.2.2.2
  SEQ  Q. Type  Ans Aut      TIME    STATUS
    1  1  A       2   5     2.415    Reply
    2  1  A       2   5     3.235    Reply
    3  1  A       2   5     5.841    Reply
    4  1  A       2   5     2.373    Reply
sent=4 received=4 packet-loss=0 min-rtt=2.373 avg-rtt=3.466 max-rtt=5.841

[admin@servidor] /ip dns> 



Ferramentas de teste de consultas

O SlackMini possui várias ferramentas de teste de consulta DNS que são padrões em Linux e alguns facilitadores, veja:

/ip dns test (FQDN) [SERVER] : Testar nome nos DNSs cadastrados

[admin@servidor] /ip dns> test uol.com.br 4.2.2.2

> Servidor..: 4.2.2.2
- FQDN......: uol.com.br
	uol.com.br IN A 200.147.67.142
	uol.com.br IN A 200.221.2.45
	uol.com.br IN AAAA 2804:49c:3103:401:ffff:ffff:ffff:1

[admin@servidor] /ip dns> 

Você tambem pode testar a requisição para os servidores cadastrados, basta informar só o nome:

[admin@servidor] /ip dns> test google.com

> Servidor..: 8.8.8.8
- FQDN......: google.com
	google.com IN A 201.17.165.244
	google.com IN A 201.17.165.210
	google.com IN AAAA 2800:3f0:4004:804::200e

> Servidor..: 8.8.4.4
- FQDN......: google.com
	google.com IN A 201.17.165.148
	google.com IN A 201.17.165.162
	google.com IN AAAA 2800:3f0:4004:805::200e

[admin@servidor] /ip dns> 

/ip dns dig [opcoes] : Testar usando DIG
/ip dns hostg [opcoes] : Testar usando HOST
/ip dns nslookup [opcoes] : Testar usando NSLOOKUP

[admin@servidor] /ip dns> dig uol.com.br @4.2.2.2

; <<>> DiG 9.10.4-P1 <<>> uol.com.br @4.2.2.2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63381
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;uol.com.br.			IN	A

;; ANSWER SECTION:
uol.com.br.		271	IN	A	200.221.2.45
uol.com.br.		271	IN	A	200.147.67.142

;; Query time: 144 msec
;; SERVER: 4.2.2.2#53(4.2.2.2)
;; WHEN: Wed Jun 22 16:38:11 BRT 2016
;; MSG SIZE  rcvd: 60

[admin@servidor] /ip dns> host -t ns uol.com.br 4.2.2.2

Using domain server:
Name: 4.2.2.2
Address: 4.2.2.2#53
Aliases: 

uol.com.br name server charles.uol.com.br.
uol.com.br name server eliot.uol.com.br.
uol.com.br name server borges.uol.com.br.


[admin@servidor] /ip dns> nslookup
> set q=any
> uol.com.br

Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
uol.com.br
	origin = eliot.uol.com.br
	mail addr = root.uol.com.br
	serial = 2016032286
	refresh = 7200
	retry = 3600
	expire = 432000
	minimum = 3600
Name:	uol.com.br
Address: 200.147.67.142
Name:	uol.com.br
Address: 200.221.2.45
uol.com.br	has AAAA address 2804:49c:3103:401:ffff:ffff:ffff:1
uol.com.br	mail exchanger = 10 mx.uol.com.br.
uol.com.br	text = "v=spf1 ip4:200.147.96.0/23 ip4:187.17.116.0/24 ip4:200.98.217.0/24 ip4:200.147.1.0/22 
					ip4:200.147.32.0/22 ip4:200.147.40.192/26 ip4:200.147.54.0/23 ip4:200.147.98.72/27
					ip4:200.147.99.24/26 ip4:186.234.128.16/29 ip4:200.147.41.88/26 -all"
uol.com.br	text = "DZC=qvK68EJ"
uol.com.br	nameserver = charles.uol.com.br.
uol.com.br	nameserver = eliot.uol.com.br.
uol.com.br	nameserver = borges.uol.com.br.

Authoritative answers can be found from:

> exit

[admin@servidor] /ip dns> 



Cliente DNS via IPv6

Antes de usar consultas DNS baseadas em pacotes IPv6, teste a consulta de DNS usando IPv6 com o comando 'test'.

/ip dns test (FQDN) [IPv6] : Testar nome usando DNS via IPv6

[admin@servidor] /ip dns> test facebook.com 2001:4860:4860::8888

> Servidor..: 2001:4860:4860::8888
- FQDN......: facebook.com
	facebook.com IN A 66.220.156.68
	facebook.com IN AAAA 2a03:2880:11:1f83:face:b00c:0:25de


[admin@servidor] /ip dns> 


No teste do exemplo acima observe que houve sucesso. Caso o transito de pacotes IPv6 não seja possível o resultado seria como abaixo:
[admin@servidor] /ip dns> test facebook.com 2001:4860:4860::8888

> Servidor..: 2001:4860:4860::8888
- FQDN......: facebook.com
;; connection timed out; no servers could be reached
   Erro na consulta tipo A (IPv4)
;; connection timed out; no servers could be reached
   Erro na consulta tipo AAAA (IPv6)
   Servidor DNS nao respondeu.

[admin@servidor] /ip dns> 


Se você constatou o correto funcionamento da Internet usando IPv6, adicione um servidor DNS IPv6 na sua lista de consulta:
/ip dns add [IPv6] : Adicionar servidor IPv6

[admin@servidor] /ip dns> add name=Google-v6-A 2001:4860:4860::8888
[admin@servidor] /ip dns> add name=Google-v6-B 2001:4860:4860::8844
[admin@servidor] /ip dns> print servers

  Id Prio  Nome             Endereco                               Status
   1    1  Google_1_v4      8.8.8.8                                Ativo
   2    1  Google_2_v4      8.8.4.4                                Ativo
   3    2  Google-v6-A      2001:4860:4860::8888                   Ativo
   4    3  Google-v6-B      2001:4860:4860::8844                   Ativo

[admin@servidor] /ip dns> 


Teste a latência das consultas de DNS via IPv6:
[admin@servidor] /ip dns> dns-ping ipv6.br 2001:4860:4860::8844

  IP ver.: 6
  Host...: ipv6.br
  Server.: 2001:4860:4860::8844
  SEQ  Q. Type  Ans Aut      TIME    STATUS
    1  1  A       1   0   144.770    Reply
    2  1  A       1   0   154.415    Reply
    3  1  A       1   0   199.472    Reply
    4  1  A       1   0   153.871    Reply
sent=4 received=4 packet-loss=0 min-rtt=144.770 avg-rtt=163.132 max-rtt=199.472

[admin@servidor] /ip dns> 


Teste consultando um nome em todos os servidores cadastrados:
[admin@servidor] /ip dns> test yahoo.com

> Servidor..: 8.8.8.8
- FQDN......: yahoo.com
	yahoo.com IN A 98.139.183.24
	yahoo.com IN A 206.190.36.45
	yahoo.com IN A 98.138.253.109
	yahoo.com IN AAAA 2001:4998:44:204::a7
	yahoo.com IN AAAA 2001:4998:58:c02::a9
	yahoo.com IN AAAA 2001:4998:c:a06::2:4008

> Servidor..: 8.8.4.4
- FQDN......: yahoo.com
	yahoo.com IN A 98.139.183.24
	yahoo.com IN A 206.190.36.45
	yahoo.com IN A 98.138.253.109
	yahoo.com IN AAAA 2001:4998:c:a06::2:4008
	yahoo.com IN AAAA 2001:4998:44:204::a7
	yahoo.com IN AAAA 2001:4998:58:c02::a9

> Servidor..: 2001:4860:4860::8888
- FQDN......: yahoo.com
	yahoo.com IN A 98.138.253.109
	yahoo.com IN A 206.190.36.45
	yahoo.com IN A 98.139.183.24
	yahoo.com IN AAAA 2001:4998:c:a06::2:4008
	yahoo.com IN AAAA 2001:4998:58:c02::a9
	yahoo.com IN AAAA 2001:4998:44:204::a7

> Servidor..: 2001:4860:4860::8844
- FQDN......: yahoo.com
	yahoo.com IN A 98.139.183.24
	yahoo.com IN A 206.190.36.45
	yahoo.com IN A 98.138.253.109
	yahoo.com IN AAAA 2001:4998:58:c02::a9
	yahoo.com IN AAAA 2001:4998:44:204::a7
	yahoo.com IN AAAA 2001:4998:c:a06::2:4008

[admin@servidor] /ip dns> 
   Tuneis GRE sobre IPv4
VPNs e túneis são formas de conectar duas ou mais localidades por meio de uma rede intermediária ou pública (como a Internet) porem dando a
impressão de que as redes estão diretamente conectadas.





Observe o diagrama acima.

Temos duas localidades que possuem conexão com a internet porem as redes locais de cada localidade não possuem capacidade
de se comunicarem pois usam ips privados (RFC1918, 10.x.x.x).

Uma solução para que o computador PC A-2 e o PC B-8 se comuniquem é estabelecer um tunel entre o Roteador A e o Roteador B de forma que os pacotes da rede 10.100.0.0/24 sejam encapsulados (pegar um pacote IP e colocar dentro de outro pacote IP) e enviados para o outro lado usando a Internet.
Essa ação é semelhante a você pegar uma carta pronta, colocar dentrou de outra carta e então submete-la aos correios, a diferença é que no nosso caso em vez dos correios temos a Internet.

O protocolo GRE encapsula o pacote orignal em um pacote GRE e em seguida coloca o pacote GRE dentro do pacote IP que irá transportá-lo pela Internet.
Por ter um cabeçalho proprio, o GRE pode transportar protocolos diferentes (IPv4, IPv6, etc...).



Criaremos então um tunel entre os dois roteadores. Esse primeiro exemplo demonstrará o uso de tuneis baseado em pacotes onde as duas pontas possuem sempre o mesmo IP.



O efeito final é a impressão de que os roteadores estão diretamente conectados.



Generic Routing Encapsulation (GRE) sobre IPv4

Tuneis GRE é uma forma de criar tuneis de camada 3 baseados em IPv4, ou seja, o conteudo a ser transportado pelo tunel será encapsulado dentro de uma pacote IPv4.

O protocolo GRE está documentado nas seguintes RFCs:
RFC 1701 Generic Routing Encapsulation (GRE): https://tools.ietf.org/html/rfc1701
RFC 2784 Generic Routing Encapsulation (GRE): https://tools.ietf.org/html/rfc2784
RFC 2890 Key and Sequence Number Extensions to GRE: https://tools.ietf.org/html/rfc2890

Um tunel GRE suporta transportar apenas pacotes de camada 3, ou seja: IPv4 ou IPv6.
Ele é baseado em pacote, o que significa que não haverá uma etapa de construção do tunel para que ele entre em operação.

Para que que um tunel GRE funcione é preciso que ambos os lados tenham coerencia em seus ips LOCAL e REMOTE.





/interface gre : Entrar no diretório de tuneis GRE.

[admin@servidor] > /int gre
[admin@servidor] /interface gre> 

/interface gre print help : Ajuda para listar interfaces GRE.

[admin@servidor] /interface gre> print help

 Imprimir tuneis GRE sobre IPv4
 Use:
    print                        : Exibir interfaces e detalhes de conexao
    print stats                  : Exibir interfaces e estatisticas
    print rate [opcoes]          : Exibir trafego nas interfaces (TEMPO REAL)
                                   [bits/bytes/packets/errors/rate/max/sum/avg] 

[admin@servidor] /interface gre> 

/interface gre print : Listar tuneis GRE.

[admin@servidor] /interface gre> print

 Idx Nome             IP-Local        IP-Remoto        MTU  Status

   Nenhum tunel GRE cadastrado.

[admin@servidor] /interface gre> 

/interface gre add help : Ajuda para adicionar tuneis.

[admin@servidor] /interface gre> add help

 Adicionar interface GRE sobre IPv4
 Use:
    add (LOCAL-IP) (REMOTE-IP) [TTL] [MTU] [opcoes]

 Opcoes:
    name=NOME            : Nome simbolico
    comment=COMENTARIO   : Comentario do tunnel

 NOTA: o LOCAL-IP deve estar atribuido a uma interface local

 Exemplos:
    add name Teste1 local 172.20.0.49 remote 172.20.0.1
    add local=172.20.0.49 remote=172.20.0.21
    add 172.20.0.49 172.20.0.21

 Exemplos de compatibilidade com outros sistemas:
    add local-address=172.20.0.49 name=gre-tunnel1 remote-address=172.20.0.1

[admin@servidor] /interface gre> 

/interface gre add local=IP remote=IP : Adicionar tunel GRE.

[admin@servidor] /interface gre> add local 200.10.10.9 remote 187.20.20.2
[admin@servidor] /interface gre> print

 Idx Nome             IP-Local        IP-Remoto        MTU  Status
   1 gri1             200.10.10.9     187.20.20.2      1476  Ativo 

[admin@servidor] /interface gre> 

Adicione o IP na interface gri1:

[admin@servidor] /interface gre> /ip addr add 172.30.0.1/30 gri1

Após configurar a outra ponta como no diagrama, vamos testar o ping para o outro lado do tunel:

[admin@servidor] /interface gre> ping 172.30.0.2 count=2

 SEQ HOST                                      SIZE TTL TIME  STATUS
   1 172.30.0.2                                  64  53 36.4   echo reply
   2 172.30.0.2                                  64  53 36.4   echo reply
     sent=2 received=2 packet-loss=0 min-rtt=36.422 avg-rtt=36.432 max-rtt=36.442

[admin@servidor] /interface gre> 
   Tuneis GRE sobre IPv6
Tuneis GRE tambem podem ser estabelecidos baseados no protocolo IPv6.

Dada a escacez de endereços IPv4 e a incapacidade de alguns provedores de entregar endereços IPv4 fixos e/ou públicos,
o tunel GRE baseado em endereços IPv6 é uma boa alternativa ao GRE sobre IPv4, bastando ao provedor de Internet fixar o prefixo WAN e/ou LAN do cliente que pretende usar o tunel.





Observe o diagrama acima.

Temos duas localidades que possuem conexão com a internet porem as redes locais de cada localidade não possuem capacidade
de se comunicarem pois usam ips privados (RFC1918, 10.x.x.x).

Uma solução para que o computador PC A-2 e o PC B-8 se comuniquem é estabelecer um tunel entre o Roteador A e o Roteador B de forma que os pacotes da rede 10.100.0.0/24 sejam encapsulados (pegar um pacote IP e colocar dentro de outro pacote IPv6) e enviados para o outro lado usando a Internet.






O efeito final é a impressão de que os roteadores estão diretamente conectados.



Generic Routing Encapsulation sobre IPv6

Tuneis GRE é uma forma de criar tuneis de camada 3 baseados em IPv6, ou seja, o conteudo a ser transportado pelo tunel será encapsulado dentro de uma pacote IPv6.

O protocolo GRE está documentado nas seguintes RFCs:
RFC 2473 Generic Packet Tunneling in IPv6 Specification: https://tools.ietf.org/html/rfc2473
RFC 7676 IPv6 Support for Generic Routing Encapsulation (GRE): https://tools.ietf.org/html/rfc7676

Um tunel GRE suporta transportar apenas pacotes de camada 3, ou seja: IPv4 ou IPv6.
Ele é baseado em pacote, o que significa que não haverá uma etapa de construção do tunel para que ele entre em operação.

Para que que um tunel GRE funcione é preciso que ambos os lados tenham coerencia em seus ips LOCAL e REMOTE.





/interface gre6 : Entrar no diretório de tuneis GRE sobre IPv6.

[admin@servidor] > /int gre6
[admin@servidor] /interface gre6> 

/interface gre6 print help : Ajuda para listar interfaces GRE.

[admin@servidor] /interface gre6> print help

 Imprimir tuneis GRE sobre IPv6
 Use:
    print                        : Exibir interfaces e detalhes de conexao
    print stats                  : Exibir interfaces e estatisticas
    print rate [opcoes]          : Exibir trafego nas interfaces (TEMPO REAL)
                                   [bits/bytes/packets/errors/rate/max/sum/avg] 

[admin@servidor] /interface gre6> 

/interface gre6 print : Listar tuneis GRE.

[admin@servidor] /interface gre6> print

 Idx Nome             IPv6-Local / IPv6-Remoto                     MTU  Status

   Nenhum tunel GRE cadastrado.

[admin@servidor] /interface gre6> 

/interface gre6 add help : Ajuda para adicionar tuneis.

[admin@servidor] /interface gre6> add help

 Adicionar interface GRE sobre IPv6
 Use:
    add (LOCAL-IPv6) (REMOTE-IPv6) [TTL] [MTU] [opcoes]

 Opcoes:
    name=NOME            : Nome simbolico
    comment=COMENTARIO   : Comentario do tunnel

 NOTA: o LOCAL-IPv6 deve estar atribuido a uma interface local

 Exemplos:
    add name Teste1 local 2001:db9:cafe::2 remote 2001:db9:fada::1
    add local=2001:db9:cafe::2 remote=2001:db9:fada::1
    add 2001:db9:cafe::2 2001:db9:fada::1

 Exemplos de compatibilidade com outros sistemas:
    add local-address=2001:db9:cafe::2 name=gre6-tunnel1 remote-address=2001:db9:fada::1

[admin@servidor] /interface gre6> 

/interface gre6 add local=IP remote=IP : Adicionar tunel GRE.

[admin@servidor] /interface gre6> add local=2001:db8:beb1:cafe::2 remote=2001:01f8:c0ca:c01a::e
[admin@servidor] /interface gre6> print

 Idx Nome             IPv6-Local / IPv6-Remoto                     MTU  Status
   1 grx1             L> 2001:db8:beb1:cafe::2                    1456  Ativo 
                      R> 2001:1f8:c0ca:c01a::e                   

[admin@servidor] /interface gre6> 

Adicione o IP na interface gri1:

[admin@servidor] /interface gre6> /ip addr add 172.30.0.1/30 grx1

Após configurar a outra ponta como no diagrama, vamos testar o ping para o outro lado do tunel:

[admin@servidor] /interface gre6> ping 172.30.0.2 count=2

 SEQ HOST                                      SIZE TTL TIME  STATUS
   1 172.30.0.2                                  64  53 36.4   echo reply
   2 172.30.0.2                                  64  53 36.4   echo reply
     sent=2 received=2 packet-loss=0 min-rtt=36.422 avg-rtt=36.432 max-rtt=36.442

[admin@servidor] /interface gre6> 
   Tuneis IP sobre IP (IPv4 e IPv6)
Você aprendeu até agora que pra fazer tuneis entre localidades você pode usar IPv4 ou IPv6 como base do tunel usando tecnologia GRE.


Existem outras formas de fazer tuneis usando IP (IPv4 ou IPv6).

Diretório Protocolo do tunel Protocolo a ser transportado
/interface 6to4
IPv4 público para IPv4 público Apenas IPv6, protocolo oficial para implementar IPv6 na internet IPv4.
/interface ipip
IPv4 público para IPv4 público Apenas IPv4.
/interface ipipv6
IPv6 global para IPv6 global Apenas IPv4.


Os tuneis baseado em IP não possuem um cabeçalho intermediário como o GRE e por esse motivo só podem transportar um tipo de protocolo. A ausencia do cabeçalho adicionar economiza alguns bytes permitindo uma MTU levemente maior.

Para saber como exibir e adicionar tuneis IP sobre IP, entre no diretório de configuração e use 'print help' e 'add help' respectivamente.

   Data/hora e time-zone
É de suma importancia para todos os softwares que rodam no Linux que a data/hora esteja devidamente atualizada e se possível, sincronizada com um servidor NTP.


Tempo Universal Coordenado

A data/hora em servidores deve ser relativa a data/hora UTC.

Para entender como isso funciona, imagine que no Brasil sejam 15:00. Na California (EUA) é mais cedo, são ainda 10:00. Se eu enviar um e-mail para alguem do escritório do Google ele pensará que o e-mail veio do futuro ? (Afinal, para ele ainda faltam 5 horas para a data que consta no e-mail).
Pensando assim, deve existir uma data/hora de referência e baseado na localização do computador saberemos a hora local.

A data/hora UTC é esse valor de referência, assim, para um computador o primeiro valor importante é a data/hora do Arquipélago de Madeira (ilha de Portugal).

O segundo valor de referência é o TIME-ZONE. O time-zone informa a um computador a diferença de horas e minutos que há entre hora local e a hora UTC.

Para calcular a data/hora local, a fórmula é: (UTC) + (TIME-ZONE)

No Brasil, em geral, temos um TIME-ZONE -3h, assim, se na hora UTC são 23:12, no Brasil serão (23:12) + (-3) = 20:12.

Devido o fato que o planeta tem um eixo inclinado e a iluminação do sol muda em cada região, o TIME-ZONE não é fixo o ano todo. Em alguns lugares ele é um valor dinâmico, para o verão pode ser um e no inverno outro e tambem pode
haver na região um horário de verão.

Por causa disso, em vez de informar apenas um número positivou ou negativo de horas é mais pertinente informar o nome da localização (exata ou aproximada) para que por meio de um arquivo de configuração da região seja possível ao servidor obedecer a diferença de acordo com a época do ano.

Tempo Universal Coordenado, via Wikipedia https://pt.wikipedia.org/wiki/Tempo_Universal_Coordenado
Mapa mundial com time-zones: https://upload.wikimedia.org/wikipedia/commons/e/e8/Standard_World_Time_Zones.png


Relógio de hardware

Todo computador possui um relógio interno em hardware sendo mantido por uma bateria para que a data/hora seja mantida até mesmo quando o servidor está totalmente desligado.

Quando o sistema operacional é iniciado ele copia a data/hora do relógio de hardware para um relógio de software mantido pelo Kernel e da qual depende todos os softwares (banco de dados, BGP, logs, etc...).

O relógio de software precisa saber se o relógio de hardware estava definido baseado na data/hora local ou na data/hora UTC.

Para permitir que sejam feitos ajustes na BIOS decorrente de troca de bateria ou RESET, o Slackmini toma como base que a data/hora da BIOS é uma data/hora local.

Nessa sequencia basta a ele saber o TIME-ZONE para obter a data/hora UTC e então iniciar as operações confiando num valor hipoteticamente confiável.

Exemplo:
quando o kernel Linux foi iniciado a data/hora na BIOS era 2016-01-01 12:00, ao carregar o time-zone como America/Sao_paulo (-3h) ele pode concluir que a hora UTC está em +3h, sendo 2016-01-01 15:00, o relógio de software então é ajustado para 2016-01-01 15:00 UTC e a data/hora baseado no time-zone será 2016-01-01 12:00 BRT.
Quando o servidor for desligado a data/hora da BIOS deve ser atualizada baseada no time-zone.

Atualização e sincronização de data/hora

Infelizmente os relógios de hardware (BIOS + bateria) e software (kernel + processador) não possuem precisão suficiente para que a data/hora seja 100% confiável.

Ele se atrasa ou se adianta aleatoriamente de acordo com pertubações locais (bateria fraca, temperatura variando e afetando os circuitos, etc...).

Existem algumas formas de obter uma data/hora com certa precisão, são elas:

Tecnologia Precisão Desvantagens
Relógio atômico Perfeita Caro e restrito a instalações científicas.
GPS Bom, satélites GPS possuem relógio atômico Requer circuito GPS.
Servidor NTP Regular Latência entre cliente e servidor varia a referência.
Servidor HTTP Péssima, copia a data/hora de um servidor Web Extremamente impresisa.

Relógio atômico, via Wikipedia https://pt.wikipedia.org/wiki/Rel%C3%B3gio_at%C3%B4mico
GPS, via Wikipedia: https://pt.wikipedia.org/wiki/Sistema_de_posicionamento_global
NTP, via Wikipedia: https://pt.wikipedia.org/wiki/Network_Time_Protocol
HTP-date para Linux: http://linux.die.net/man/8/htpdate


Configurando data/hora e time-zone no Slackmini

Pelo Zeroshell:


/system clock : Entrar no diretório de data/hora/timezone.

[admin@servidor] > /sys clock
[admin@servidor] /system clock> 

/system clock print help : Ajuda para listar data/hora.

[admin@servidor] /system clock> print help

 Exibir opcoes de relogio do sistema
 Use:
    print            : Exibir todos os relogios e configuracoes
    print timezones  : Exibir timezones suportadas
    print tz         : Exibir configuracao de timezone
    print utc        : Exibir data/hora UTC
    print local      : Exibir data/hora no time-zone local
    print bios       : Exibir data/hora da BIOS
    print help       : Exibir ajuda

[admin@servidor] /system clock> 

/system clock print : Listar configurações de data/hora e time-zone.

[admin@servidor] /system clock> print

Data/hora
 TimeZone.........: America/Sao_Paulo
 Local software...: 26/06/2016 19:04:36
 UTC..............: 26/06/2016 22:04:36
 Local hardware...: Tue Jun 28 11:04:07 2016  .586953 seconds

[admin@servidor] /system clock> 

/system clock print tz : Exibir timezone definida.

[admin@servidor] /system clock> print tz

America/Sao_Paulo

[admin@servidor] /system clock> 

/system clock print local : Exibir data/hora local.

[admin@servidor] /system clock> print local

26/06/2016 19:04:36

[admin@servidor] /system clock> 

/system clock print utc : Exibir data/hora UTC.

[admin@servidor] /system clock> print utc

26/06/2016 22:04:36

[admin@servidor] /system clock> 

/system clock print bios : Exibir data/hora da BIOS.

[admin@servidor] /system clock> print bios

Tue Jun 28 11:04:07 2016  .586953 seconds

[admin@servidor] /system clock> 


Para alterar o time-zone observe os seguintes comandos:

/system clock print timezones : Listar time-zones suportados

[admin@servidor] /system clock> print timezones

America/Araguaina
America/Bahia
America/Belem
America/Boa_Vista
America/Buenos_Aires
America/Campo_Grande
America/Cuiaba
America/Maceio
America/Manaus
America/Noronha
America/Porto_Acre
America/Porto_Velho
America/Recife
America/Rio_Branco
America/Santarem
America/Sao_Paulo

[admin@servidor] /system clock> 

/system clock set help : Ajuda para alterar configuração

[admin@servidor] /system clock> set help

 Definir data/hora e timezone
 Use:
    set (dia/mes/ano) [timezone] : Definir data/hora e o timezone
    set (dia/mes/ano)            : Definir data/hora
    set [timezone]               : Definir data/hora timezone

 Para listar os timezones suportados, execute:
    print timezones

[admin@servidor] /system clock> 

/system clock set time-zone=TZ : Alterar o time-zone.

[admin@servidor] /system clock> set time-zone America/Manaus

Data/hora
 TimeZone.........: America/Manaus
 Local software...: 13/05/2016 07:38:12
 UTC..............: 13/05/2016 10:38:12

[admin@servidor] /system clock> print tz

America/Manaus

[admin@servidor] /system clock> set time-zone America/Sao_Paulo

Data/hora
 TimeZone.........: America/Sao_Paulo
 Local software...: 13/05/2016 07:38:21
 UTC..............: 13/05/2016 10:38:21
 
[admin@servidor] /system clock> print tz

America/Sao_Paulo

[admin@servidor] /system clock> 


Você pode definir a data e a hora manualmente caso um servidor NTP não esteja disponivel (caso sua internet tenha caido).

Não altere a data ou a hora para um tempo FUTURO ou PASSADO. Leve muito a sério a coerência temporal entre o relógio do servidor (hardware e software) e a realidade!

Alguns softwares do Linux são baseados numa estrutura temporal linear, ou seja, sempre avançando para o futuro, nunca voltando no tempo.

Pode parecer óbvio mas violar essa coerência pode causar danos em sistemas de banco de dados, os softwares mais afetados com esse tipo de violação são:
  • Logs: eventos do servidor são armazenados com a data/hora, se ela estiver errada ficará difícil determinar o momento do evento registrado. Logs são importantes e tem relação com a lei (marco civil principalmente);
  • SGDB: MySQL, Postgree, Sqlite: registros inseridos com data/hora da criação do registro;
  • RRDTOOL: software de gerar gráficos baseado em round-robin, ele nunca armazena dados cuja data/hora sejam menores que do último registro;
  • Softwares proprietários licenciados: licenças de software baseada em restrição de tempo (mensal, anual, trial) podem detectar a perturbação no tempo linear e pararem de funcionar.

Os exemplos abaixo devem ser lidos para entendimento, não execute os mesmos comandos que constam no manual pois você irá danificar a coerência temporal do servidor.

Para alterar data/hora observe os seguintes comandos:

/system clock set [dd/mm/aaaa] : Alterar data

[admin@servidor] /system clock> set 01/01/2016
[2016-01-01 09:21:00] Date/time set, localtime [2016-01-01 07:38:21]

Data/hora
 TimeZone.........: America/Sao_Paulo
 Local software...: 01/01/2016 07:38:21
 UTC..............: 01/05/2016 10:38:21

[admin@servidor] /system clock> 

/system clock set [hh:mm] : Alterar hora/minuto

/system clock set [hh:mm:ss] : Alterar hora/minuto/segundo

[admin@servidor] /system clock> set 23:19
[2016-01-01 09:21:00] Date/time set, localtime [2016-01-01 21:19:00]

Data/hora
 TimeZone.........: America/Sao_Paulo
 Local software...: 01/01/2016 23:19:00
 UTC..............: 01/05/2016 01:19:21

[admin@servidor] /system clock> 


Alterar a data e/ou a hora afeta apenas o relógio de software.

Sempre que o Slackmini é corretamente desligado (via comando 'poweroff' ou 'shutdown') ele salva a data/hora do relógio de software para o relógio da BIOS.

É preciso salvar a data/hora na BIOS por segurança sempre que você alterar manualmente pois se houver uma queda de energia ou desligamento incorreto a BIOS pode iniciar com uma data/hora incoerente.

Para salvar a data/hora do relógio de software para o relógio de hardware observe os seguintes comandos:

/system clock save : Salvar data/hora na BIOS

[admin@servidor] /system clock> save
[admin@servidor] /system clock> print

Data/hora
 TimeZone.........: America/Sao_Paulo
 Local software...: 01/01/2016 23:19:00
 UTC..............: 01/05/2016 01:19:21
 Local hardware...: Fri Jan  1 23:19:00 2016  .629641 seconds

[admin@servidor] /system clock> print
   Data/hora automática via NTP
Ter um servidor, roteador, computador, celular, tablet ou qualquer dispositivo conectado a Internet requer que a data e a hora estejam sempre atualizadas e fieis a data/hora UTC.

Aplicativos de mensagens, sistemas de banco de dados, protocolos de roteamento, servidores de video, servidores de voz sobre IP, cliente de e-mail e servidor de e-mail, entre outras tecnologias dependem muito de um relógio exato.

A maioria desses sistemas se recusa a funcionar se for detectado que a hora local do dispositivo onde o software é executado diferete da data/hora do servidor.

Mesmo que você configure a data e a hora corretamente o relógio do computador sofre atrasos ou adiantamentos imprevisíveis.




A única forma de resolver esses atrasos e adiantamentos aleatórios é fazendo com que seu servidor, roteador ou dispositivo qualquer sempre sincronize o relógio local com informações precisas de data e hora fornecidas por um relógio atômico.




Por questões de segurança o administrador de rede pode optar por montar um servidor NTP local que sempre sincronize seu relógio com o servidor NTP oficial e então distribua a roteadores e servidores dentro da rede interna.

Esse tipo de técnica é recomendada caso você tenha roteadores que não possuam acesso a internet (apenas repassam pacotes, comum em redes MPLS) e servidores com aplicações para a intranet.






Você tambem pode optar para que todos os dispositivos consultem diretamente um servidor NTP oficial. Isso dispensa a montagem de um servidor NTP próprio mas requer que o dispositivo cliente sempre tenha acesso a internet para sincronizar seu relógio.






Operadoras de telefonia móvel sempre mantem suas antenas e sub-sistemas fielmente sincronizados com um relógio atômico.
Alem de servir para propósitos técnicos da operador esse sincronismo tambem serve para fornecer aos aparelhos dos clientes um relógio fiel.

Você já deve ter reparado alguma vez que seu celular teve a data/hora automaticamente ajustada ao receber o sinal de celular.






Uma opção semelhante a utilizada por operadoras, celulares e smartphone é o uso de dispositivo GPS via porta USB.

O servidor pasará a ter um relógio extremamente fiel a um relógio atômico e eliminanto problemas de volatilidade da latência da Internet e ainda
poderá prover aos roteadores, servidores e demais computadores da organização uma data/hora estremamente precisa.





Bom, agora que você ja sabe a importancia de ter a data e a hora sempre atualizada e sincronizada com um servidor NTP vamos configurar o Slackmini para sincronizar o relógio automaticamente.

RFC 1305, Network Time Protocol v. 3 https://tools.ietf.org/html/rfc1305
RFC 4330, Simple Network Time Protocol (SNTP) https://tools.ietf.org/html/rfc4330
Liste de servidores NTP pelo mundo http://www.pool.ntp.org/pt/
Sobre NTP, via NTP.br http://www.ntp.br/ntp.php
Network Time Protocol, via Wikipedia https://pt.wikipedia.org/wiki/Network_Time_Protocol


Liste de servidores NTP relevantes

Entidade Servidor (FQDN) IPv4 IPv6
NTP.br a.st1.ntp.br 200.160.7.186 2001:12ff:0:7::186
NTP.br b.st1.ntp.br 201.49.148.135 (sem IPv6)
NTP.br c.st1.ntp.br 200.186.125.195 (sem IPv6)
NTP.br d.st1.ntp.br 200.20.186.76 (sem IPv6)
NTP.br a.ntp.br 200.160.0.8 2001:12ff::8
NTP.br b.ntp.br 200.189.40.8 (sem IPv6)
NTP.br c.ntp.br 200.192.232.8 (sem IPv6)
NTP.br gps.ntp.br 200.160.7.193 2001:12ff:0:7::193
UFRJ ntp.pads.ufrj.br 146.164.48.1 2001:1291:200:8371::1
UFRJ ntps1.pads.ufrj.br 146.164.48.5 2001:1291:200:8371::5
UFRJ ntp2.pads.ufrj.br 146.164.48.10 2001:1291:200:8371::10
UFRJ ntp3.pads.ufrj.br 146.164.48.9 2001:1291:200:8371::9
Microsoft Corporation time-nw.nist.gov 131.107.13.100 (sem IPv6)
NTP.org (DNS global balancing) 0.pool.ntp.org (auto) (auto)
NTP.org (DNS global balancing) 1.pool.ntp.org (auto) (auto)
NTP.org (DNS global balancing) 2.pool.ntp.org (auto) (auto)
NTP.org (DNS global balancing) 3.pool.ntp.org (auto) (auto)


Sincronizando relógio com servidor NTP - cliente NTP

Pelo ZeroShell, execute:


/system ntp-client : Entrar no diretório de cliente NTP.

[admin@servidor] > /sys ntp-c
[admin@servidor] /system ntp-client> 

/system ntp-client print help : Ajuda para listar servidores NTP.

[admin@servidor] /system ntp-client> print help

 Imprimir opcoes de servidores NTP
 Use:
    print          : Exibir servidores NTP

[admin@servidor] /system ntp-client> 

/system ntp-client print : Listar servidores NTP.

[admin@servidor] /system ntp-client> print

  Id Prio  Nome             Endereco                               Status

   Nenhum servidor NTP cadastrado.

[admin@servidor] /system ntp-client> 

/system ntp-client add help : Ajuda para adicionar servidor NTP

[admin@servidor] /system ntp-client> add help

 Adicionar servidor NTP
 Use:
    add (IPv4 ou IPv6) (PRIO) [opcoes]

 Opcoes:
    name=NOME            : Nome simbolico
    comment=COMENTARIO   : Comentario do tunnel

 Exemplos:
    add name a.ntp.br 200.160.0.8  1
    add name a.ntp.br 2001:12ff::8 2

[admin@servidor] /system ntp-client> 

/system ntp-client add help : Ajuda para adicionar servidor NTP

[admin@servidor] /system ntp-client> add a.ntp.br 200.160.0.8
[admin@servidor] /system ntp-client> print

  Id Prio  Nome             Endereco                               Status
   1    1  a.ntp.br         200.160.0.8                            Ativo

[admin@servidor] /system ntp-client> 

/system ntp-client update help : Exibir ajuda sobre sincronização

[admin@servidor] /system ntp-client> update help

 Atualizar data/hora baseado em NTP
 Use:
    update                  : Atualizar via servidores cadastrados
    update (ipv4|ipv6|fqdn) : Atualizar usando endereco especifico

[admin@servidor] /system ntp-client> 

/system ntp-client update : Sincronizar relógio com servidor NTP.

[admin@servidor] /system ntp-client> update

 > Atualizando via '200.160.0.8'                               [  OK  ]

Data/hora
 TimeZone.........: America/Sao_Paulo
 Local software...: 31/07/2016 17:55:15
 UTC..............: 31/07/2016 20:55:15

[admin@servidor] /system ntp-client> 

/system ntp-client save : Salvar relógio de software no hardware.

[admin@servidor] /system ntp-client> save

 >  Salvando data/hora UTC                                     [  OK  ]

Data/hora
 TimeZone.........: America/Sao_Paulo
 Local software...: 31/07/2016 17:57:38
 UTC..............: 31/07/2016 20:57:38
 Local hardware...: Sun Jul 31 17:57:38 2016  .498781 seconds

[admin@servidor] /system ntp-client> 
   Pacotes e atualizações
O Slackmini é uma distribuição em constante desenvolvimento e aperfeiçoamento, alem da necessidade de atualizações próprias, surgem as necessidades de atualizações por motivos de segurança quando se descobre bugs em pacotes que compôem sua base.

Para haver coerência entre binários e bibliotecas o Slackmini é composto de poucos pacotes, assim, quando uma biblioteca ou programa precisa ser atualizado todas as suas dependencias são atualizadas juntas.

Atualizando Slackmini pelo ZeroShell

Execute o comando: zeroshell


/system package : Entrar no diretório de gerenciamento de pacotes.

[admin@servidor] > /sys pac
[admin@servidor] /system package> 

/system package print : Listar pacotes instalados

[admin@servidor] /system package> print

 Pacote          Versao          Bytes   Assinatura    Atualizado
 baseapps           1.0      5.435.648   74cf1~27b11   2016-07-31 14:52:39
 baseconf           1.0        284.392   0a290~6c292   2016-07-31 14:52:43
 basedb             1.0     13.939.632   c8acc~b1392   2016-07-31 14:52:45
 basefront          1.0      8.520.628   95ee6~6ba7b   2016-07-31 14:52:47
 baselibs           1.0     16.348.680   11ec5~b7f76   2016-07-31 14:52:48
 baselinux          1.0      2.199.664   ed7c2~8032f   2016-07-31 14:52:53
 basenet            1.0      8.906.708   fb910~bf238   2016-07-31 14:52:56
 basenetapps        1.0      5.399.748   452e5~9b39d   2016-07-31 14:52:57
 baseshell          1.0         72.684   6c902~c7504   2016-07-31 14:53:00
 basetools          1.0      1.689.772   f72f4~caef0   2016-07-31 14:53:02
 baseutils          1.0      1.969.980   020db~50f6e   2016-07-31 14:53:02
 basevolatile       1.0        832.680   ae5cb~e7365   2016-07-31 14:53:03
 basexlibs          1.0      2.094.996   26a3d~59386   2016-07-31 14:53:04
 kernel             1.0     67.277.140   d57d0~1a9a6   2016-07-31 14:53:05

[admin@servidor] /system package> 

/system package update help : Ajuda para atualizar pacotes.

[admin@servidor] /system package> update help

 Atualizar Slackmini
 Use:
    update all                   : Atualizar todos os pacotes
    update (pkgname)             : Atualizar apenas o pacotes 'pkgname'

[admin@servidor] /system package> 

/system package update : Procurar atualizações, baixar e instalar.

[admin@servidor] /system package> update

[admin@servidor] /system package> 

/system package info help : Ajuda para obter informações de pacote.

[admin@servidor] /system package> info help

 Informacoes sobre um pacotes do Slackmini

 Use:
    info (pkgname)

 Opcoes:
    (pkgname)  : Informacoes do pacote 'pkgname'
    all        : Informacoes sobre todos os pacotes
    help       : Exibir ajuda

[admin@servidor] /system package> 

/system package info : Listar informações dos pacotes.

[admin@servidor] /system package> info

/system package info [PKG] : Listar informações de um pacote.

[admin@servidor] /system package> info kernel

[2016-07-31 21:22:55] Pacote......: kernel
[2016-07-31 21:22:55]   Assinatura: d57d06311fc5389a1f801f027dc1a9a6
[2016-07-31 21:22:55]   Ficheiro..: /var/lib/packages/kernel-1.0.txz
[2016-07-31 21:22:55]   Indice....: /var/log/packages/kernel-1.0
[2016-07-31 21:22:55]   Itens.....: 5.545
[2016-07-31 21:22:55]   Tamanho...: 64.2 MiB (67277140 bytes)

[admin@servidor] /system package> 

/system pac view [PKG] : Listar conteudo de um pacote.
/system pac check [PKG] : Verificar arquivos do pacote.
/system pac repair [PKG] : Reparar arquivos danificados do pacote.

   Gerenciamento de serviços
Este capítulo lhe ensinará como criar, ativar e desativar serviços no Slackmini.

O Slackmini conta com alguns serviços pre-instalados porem eles não iniciam automaticamente, é necessário ativa-los.

Cada serviço requer um script de controle instalado no diretório /etc/init.d.

Se o script estiver com flag de execução ativo (-x) ele será executado durante o boot recebendo o parâmetro start e durante o desligamento recebendo o parâmetro stop.

Exemplo de script de controle de servição (servição hello-world) em /etc/init.d/hello-world:
#!/bin/sh

#@95
#&95

case "$1" in
  'start')
      echo "Iniciar servico HELLO-WORLD"
      ;;

  'stop')
      echo "Parar servico HELLO-WORLD"
      ;;

  'restart')
      echo "Reiniciar servico HELLO-WORLD"
      ;;

  'status')
      echo "Servico HELLO-WORLD vai bem, obrigado"
      ;;
  *)
      echo "Nao entendi, use: start/stop/restart/status"
esac


Observe os números nos primeiros dois comentários. O #@ determina a prioridade do serviço durante o boot e #& determina a prioridade durante o desligamento.

Controle de serviços pelo ZeroShell

Execute o comando: zeroshell


/system service : Entrar no diretório de gerenciamento de serviços.

[admin@servidor] > /sys serv
[admin@servidor] /system service> 

/system service print : Listar serviços instalados

[admin@servidor] /system service> print

  #   Servico          Start-Prio     Stop-Prio        Status
      apache2            92               10           Desativado
      bind9              15               15           Desativado
      mariadb            99               99           Desativado
      ntpd               16               16           Desativado
      php-fpm            99               99           Desativado
      quagga             90               90           Desativado
      shellinabox        95               10           Desativado
      snmpd              99               99           Desativado
      sshd               22               80           Ativado
      unbound            15               15           Desativado

[admin@servidor] /system service> 

/system service stop [SERVICE] : Parar um serviço.

/system service start [SERVICE] : Iniciar um serviço ativo.

/system service restart [SERVICE] : Reiniciar um serviço ativo.

/system service disable [SERVICE] : Parar e desativar um serviço.

/system service enable [SERVICE] : Ativar e iniciar um serviço.

/system service status [SERVICE] : Verificar status de um serviço.

   Reparando danos
Todos sabemos que no dia-a-dia problemas acontecem e seu Slackmini pode parar de funcionar.

Se tem uma pergunta que me irrita é essa: O servidor parou. O QUE PODE SER?
Afinal, pode ser qualquer coisa e o que importa é voltar o serviço ao ar o quanto antes e deixar a investigação para depois.

Para evitar houvir essa pergunta eu projetei o Slackmini para impedir configurações destrutivas e ser capaz de identificar se algum arquivo foi danificado.

Muitas vezes tentar reparar um servidor pode dar mais trabalho e tomar muito mais tempo do que simplesmente reinstalar tudo novamente, portanto, siga esses conselhos:

Dicas para rápida recuperação de serviços usando Slackmini.
  • 1 - Se rodar em maquina virtual, faça SNAPSHOT diários ou semanais ou clone tudo e exporte para local seguro.
  • 2 - Se rodar em maquina real, faça backup dos arquivos que foram alterados e do "export" do zeroshell.
  • 3 - Sempre tenha um HD reserva. Discos rígidos são os vilões. Faça RAID 1 se quiser ter paz.


Recuperando, se o sistema não inicia

Se o sistema não inicia, temos algumas possibilidades:

1 - Problemas de hardware
Se o hardware (processador, placa-mãe, memória, disco, fonte e energia, placa de vídeo, monitor, teclado) estiver com problemas nenhuma ação de software será capaz de arrumar isso. É impossivel resolver por software um problema que está no hardware.
Verifique item por item do hardware, se possível entre em contato com o fabricante para fazer diagnóstico das peças.

2 - Problemas de disco
O software é um arquivo no disco. Para que ele seja executado o computador precisa ter acesso ao disco rígido (ou memória flash, SSD, etc...) para copiar o arquivo do programa para a memória RAM e então executá-lo. Se o disco estiver danificado você precisará testar com outro disco para tirar a dúvida.
Uma maneira simples de testar é rodar o software pelo CD/DVD ou PENDRIVE. Existem distribuições como Ubuntu Live, Slax, entre outras, que rodam pelo PENDRIVE e permitem diagnóstico do dísco.

3 - Problemas no sistema de arquivos
O disco pode estar normal mas a forma como os dados são organizados nele podem estar com problemas (sistema de arquivos). Para resolver esse problema é necessário efetuar a manutenção do sistema de arquivos com o comando 'fsck'


Recuperando, se seu sistema consegue iniciar

Execute o comando: zeroshell

[admin@servidor] > /sys pac
[admin@servidor] /system package> repair all

Se algum arquivo vital para o sistema for perdido, danificado ou alterado indevidamente o comando de reparar irá resolve isso reinstalando o arquivo original.

Após reparar os pacotes nativos realize o update para garantir que possíveis bugs já tenham sido reparados.

[admin@servidor] > /sys pac
[admin@servidor] /system package> update
   Servidor: DNS
O Slackmini disponibiliza os dois principais softwares de servidor DNS: BIND-9 e Unbound.

Para montar um servidor DNS você precisa escolher um deles. Se ativar os dois um deles irá falhar por não conseguir abrir a porta udp/53.

Serviço Arquivo de configuração
Bind9 /etc/named.conf
Unbound /etc/unbound/unbound.conf

Manual do Bind9 em inglês, PDF, via ISC.org https://www.isc.org/wp-content/uploads/2014/01/B99ARM.pdf
Manual do Unbound em inglês, via unbound.net https://www.unbound.net/documentation/unbound.conf.html


Primeiro ative o serviço, vou usar o Bind9 como modelo:
[admin@servidor] > /sys serv
[admin@servidor] /system service> enable bind9
[2016-07-31 23:20:25] Iniciando Bind9                          [  OK  ]
[admin@servidor] /system service> 

Para alterar para o Unbound, desative o Bind9 antes de ativar o Unbound.

Sempre que alterar o arquivo de configuração é necessário reiniciar o serviço.
   Servidor: WEB
O Slackmini disponibiliza os três principais softwares de servidor HTTP: Apache2, Lighttp e Nginx.

Para montar um servidor HTTP você precisa escolher um deles. Se ativar os dois ou mais um deles irá falhar por não conseguir abrir a porta tcp/80 ou você terá que rodar os demais em portas diferentes.

Serviço Arquivo de configuração Pasta raiz (htdocs)
Apache 2 /etc/httpd/httpd.conf /srv/httpd/htdocs
Lighttpd /etc/lighttpd/lighttpd.conf /srv/lighttpd/htdocs

Manual do Apache 2.4 http://httpd.apache.org/docs/2.4/pt-br/
Manual do Lighttpd em inglês https://redmine.lighttpd.net/projects/lighttpd/wiki


Primeiro ative o serviço, vou usar o Lighttpd como modelo:
[admin@servidor] > /sys serv
[admin@servidor] /system service> enable lighttpd
[2016-07-31 23:20:25] Iniciando Lighttpd                       [  OK  ]
[admin@servidor] /system service> 


Sempre que alterar o arquivo de configuração é necessário reiniciar o serviço.

Usando PHP

Para usar programas em PHP nas suas páginas web usando o Apache 2 basta subir o serviço do Apache.

Para usar PHP com o Lighttpd é preciso subir o serviço PHP-FPM.

Exemplos:

1 - Servidor Web Apache2 e PHP
[admin@servidor] > /sys serv
[admin@servidor] /system service> enable apache2
[2016-08-14 20:59:13] Iniciando Apache2                        [  OK  ]
[admin@servidor] /system service> 

Obs.: o PHP é ativado no Apache2 pois no arquivo de configuração /etc/httpd/httpd.conf já consta por padrão a 'include' do modulo PHP.


2 - Servidor Web Lighttpd e PHP (via PHP-FPM)
[admin@servidor] > /sys serv
[admin@servidor] /system service> enable php-fpm
[2016-08-14 21:01:38] Iniciando PHP-FPM                        [  OK  ]
[admin@servidor] /system service> enable lighttpd
[2016-07-31 23:20:25] Iniciando Lighttpd                       [  OK  ]
[admin@servidor] /system service> 


Configuração de execução do PHP:

Serviço Finalidade Arquivo de configuração Pasta de includes
PHP Comportamento geral /etc/php.ini /etc/php.d
PHP-FPM Serviço PHP sobre Fast-CGI /etc/php-fpm.conf /etc/php-fpm.d

Testando

Apos escolher seu serviço de HTTP abra o navegador e digite o IP atual do servidor (ou o nome caso tenha atribuido no DNS autoritativo).
Para testar o PHP e as informações de suporte a modulos, acesse o caminho /info.php (http:// + ip + /info.php).
   Banco de dados MariaDB
O banco de dados SQL padrão do Slackmini é o MariaDb, sucessor do MySQL (apos aquisição pela Sun / Oracle)

Para iniciar o uso do MariaDB é preciso ativar o serviço 'mariadb'

[admin@servidor] > /sys serv
[admin@servidor] /system service> enable mariadb

[2016-08-15 22:58:18] MariaDB: Banco de dados inicial - Instalando...
Installing MariaDB/MySQL system tables in '/var/lib/mysql' ...
160815 19:58:18 [Warning] 'THREAD_CONCURRENCY' is deprecated and will be removed in a future release.
160815 19:58:18 [Warning] option 'thread_cache_size': unsigned value 262144 adjusted to 16384
160815 19:58:18 [Warning] options --log-slow-admin-statements, --log-queries-not-using-indexes and
                          --log-slow-slave-statements have no effect if --log_slow_queries is not set
160815 19:58:18 [Note] /usr/libexec/mysqld (mysqld 10.0.24-MariaDB) starting as process 7524 ...
160815 19:58:18 [Note] InnoDB: Using mutexes to ref count buffer pool pages
160815 19:58:18 [Note] InnoDB: The InnoDB memory heap is disabled
160815 19:58:18 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
160815 19:58:18 [Note] InnoDB: Memory barrier is not used
160815 19:58:18 [Note] InnoDB: Compressed tables use zlib 1.2.8
160815 19:58:18 [Note] InnoDB: Using Linux native AIO
160815 19:58:18 [Note] InnoDB: Using CPU crc32 instructions
160815 19:58:18 [Note] InnoDB: Initializing buffer pool, size = 128.0M
160815 19:58:18 [Note] InnoDB: Completed initialization of buffer pool
160815 19:58:18 [Note] InnoDB: The first specified data file ./ibdata1 did not exist: a new database to be created!
160815 19:58:18 [Note] InnoDB: Setting file ./ibdata1 size to 12 MB
160815 19:58:18 [Note] InnoDB: Database physically writes the file full: wait...
160815 19:58:18 [Note] InnoDB: Setting log file ./ib_logfile101 size to 48 MB
160815 19:58:18 [Note] InnoDB: Setting log file ./ib_logfile1 size to 48 MB
160815 19:58:19 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
160815 19:58:19 [Warning] InnoDB: New log files created, LSN=45781
160815 19:58:19 [Note] InnoDB: Doublewrite buffer not found: creating new
160815 19:58:19 [Note] InnoDB: Doublewrite buffer created
160815 19:58:19 [Note] InnoDB: 128 rollback segment(s) are active.
160815 19:58:19 [Warning] InnoDB: Creating foreign key constraint system tables.
160815 19:58:19 [Note] InnoDB: Foreign key constraint system tables created
160815 19:58:19 [Note] InnoDB: Creating tablespace and datafile system tables.
160815 19:58:19 [Note] InnoDB: Tablespace and datafile system tables created.
160815 19:58:19 [Note] InnoDB: Waiting for purge to start
160815 19:58:19 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.28-76.1 started; log sequence number 0
160815 19:58:19 [Note] InnoDB: FTS optimize thread exiting.
160815 19:58:19 [Note] InnoDB: Starting shutdown...
160815 19:58:21 [Note] InnoDB: Shutdown completed; log sequence number 1616697
OK
Filling help tables...
160815 19:58:21 [Warning] 'THREAD_CONCURRENCY' is deprecated and will be removed in a future release.
160815 19:58:21 [Warning] option 'thread_cache_size': unsigned value 262144 adjusted to 16384
160815 19:58:21 [Warning] options --log-slow-admin-statements, --log-queries-not-using-indexes and
                          --log-slow-slave-statements have no effect if --log_slow_queries is not set
160815 19:58:21 [Note] /usr/libexec/mysqld (mysqld 10.0.24-MariaDB) starting as process 7576 ...
160815 19:58:21 [Note] InnoDB: Using mutexes to ref count buffer pool pages
160815 19:58:21 [Note] InnoDB: The InnoDB memory heap is disabled
160815 19:58:21 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
160815 19:58:21 [Note] InnoDB: Memory barrier is not used
160815 19:58:21 [Note] InnoDB: Compressed tables use zlib 1.2.8
160815 19:58:21 [Note] InnoDB: Using Linux native AIO
160815 19:58:21 [Note] InnoDB: Using CPU crc32 instructions
160815 19:58:21 [Note] InnoDB: Initializing buffer pool, size = 128.0M
160815 19:58:21 [Note] InnoDB: Completed initialization of buffer pool
160815 19:58:21 [Note] InnoDB: Highest supported file format is Barracuda.
160815 19:58:21 [Note] InnoDB: 128 rollback segment(s) are active.
160815 19:58:21 [Note] InnoDB: Waiting for purge to start
160815 19:58:21 [Note] InnoDB:  Percona XtraDB (http://www.percona.com) 5.6.28-76.1 started; log sequence number 1616697
160815 19:58:21 [Note] InnoDB: FTS optimize thread exiting.
160815 19:58:21 [Note] InnoDB: Starting shutdown...
160815 19:58:23 [Note] InnoDB: Shutdown completed; log sequence number 1616707
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
To do so, start the server, then issue the following commands:

'/usr/bin/mysqladmin' -u root password 'new-password'
'/usr/bin/mysqladmin' -u root -h servidor password 'new-password'

Alternatively you can run:
'/usr/bin/mysql_secure_installation'

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the MariaDB Knowledgebase at http://mariadb.com/kb or the
MySQL manual for more instructions.

You can start the MariaDB daemon with:
cd '/usr' ; /usr/bin/mysqld_safe --datadir='/var/lib/mysql'

You can test the MariaDB daemon with mysql-test-run.pl
cd '/usr/mysql-test' ; perl mysql-test-run.pl

Please report any problems at http://mariadb.org/jira

The latest information about MariaDB is available at http://mariadb.org/.
You can find additional information about the MySQL part at:
http://dev.mysql.com
Support MariaDB development by buying support/new features from MariaDB
Corporation Ab. You can contact us about this at sales@mariadb.com.
Alternatively consider joining our community based development effort:
http://mariadb.com/kb/en/contributing-to-the-mariadb-project/

[2016-08-15 22:58:23] MariaDB: Banco de dados inicial - Instalado com sucesso.

[2016-08-15 22:58:23] MariaDB: Iniciando banco de dados...     [  OK  ]

[admin@servidor] /system service> 


A primeira vez que você ativar o MariaDB o script do serviço irá instalar automaticamente o banco de dados padrão dispensando assim a execução do comando 'mysql_install_db --user=mysql' como demonstrado acima.

Observe:

[admin@servidor] /system service> disable mariadb
[2016-08-15 23:01:07] MariaDB: Parando banco de dados......    [ DONE ]
[admin@servidor] /system service> enable mariadb
[2016-08-15 23:01:22] MariaDB: Iniciando banco de dados...     [  OK  ]
[admin@servidor] /system service> 












   Servidor: Quagga OSPF/BGP
   Via VMWare Fusion
(Arquivo /storage0/wwwroot/manual.slackmini.com.br/_extra-vmware.php nao encontrado).
   Via VirtualBox
(Arquivo /storage0/wwwroot/manual.slackmini.com.br/_extra-virtualbox.php nao encontrado).