domingo, 26 de julho de 2015

Suporte a VLAN Trunk em Servidores Linux

Olá Pessoal.

Tradicionalmente utilizamos switches multi-layer ou roteadores quando precisamos fazer o roteamento inter-VLAN em ambientes que possuem múltiplas VLANs associadas com suas respectivas sub-redes, uma vez que essas caixas especializadas oferecem suporte nativo ao encapsulamento 802.1q (trunk). Em um dos artigos mais lidos do blog, intitulado "Configuração de Switch Multi-Layer", explico ao leitor como configurar um switch Cisco para essa finalidade, através da criação de interfaces virtuais vinculadas às suas VLANs, de maneira que essas interfaces podem ser configuradas com um IP que será o gateway de todas as máquinas membros da respectiva VLAN.

Essa mesma tarefa pode ser configurada em um servidor Linux, por isso a topologia apresentada abaixo será utilizada para exemplificar o processo de configuração de roteamento inter-VLAN no Linux. Assim como nos artigos anteriores, estou considerando que o roteador Linux está instalado com a distribuição Debian GNU/Linux (ou seus derivados, como o Ubuntu). 


A primeira etapa consiste na instalação do pacote denominado vlan para que, posteriormente, as configurações de rede do Linux ofereçam suporte à criação de interfaces lógicas roteadas (layer-3) do tipo VLAN. Essa tarefa é simples e rápida através do APT:

apt-get install vlan

Agora basta editar o arquivo de configuração das interfaces de rede que fica localizado em "/etc/network/interfaces". A partir da interface física eth0 (trunk 802.1q), criaremos duas novas interfaces lógicas denominadas eth0.100 (vlan100) e eth0.200 (vlan200).

###--- em /etc/network/interfaces

auto eth0
iface eth0 inet manual

   auto eth0.100
   iface eth0.100 inet static
      address 192.168.100.254
      netmask 255.255.255.0

   auto eth0.200
   iface eth0.200 inet static
      address 192.168.200.254
      netmask 255.255.255.0

Na sintaxe eth0.100 fazemos referência à interface física antes do ponto e, depois do ponto, fazemos referência ao número da VLAN vinculada à interface. É somente depois da instalação do pacote vlan que o Linux passa a reconhecer essa sintaxe. Uma alternativa válida seria utilizar uma convenção diferente de nomes em que fazemos referência direta à VLAN na denominação da interface em conjunto com o parâmetro vlan-raw-device para associá-la a sua respectiva VLAN. O exemplo abaixo traz a mesma configuração anterior com essa sintaxe alternativa:

###--- em /etc/network/interfaces

auto eth0
iface eth0 inet manual

auto vlan100
iface vlan100 inet static
   vlan-raw-device eth0
   address 192.168.100.254
   netmask 255.255.255.0

auto vlan200
iface vlan200 inet static
   vlan-raw-device eth0
   address 192.168.200.254
   netmask 255.255.255.0

Como o Linux não permite o roteamento entre sub-redes por padrão, é necessário instruir seu kernel a fazê-lo por meio de um dos comandos abaixos, lembrando que a primeira opção é volátil, ou seja, será perdida em caso de boot, enquanto que a segunda opção é persistente:

opção 1) echo "1" > /proc/sys/net/ipv4/ip_forward
opção 2) sysctl -w net.ipv4.ip_forward=1

Obs.: Vale ressaltar que as interfaces lógicas do tipo VLAN são diferentes das tradicionais sub-interfaces lógicas vinculadas às interfaces físicas. A criação de sub-interfaces lógicas é uma técnica simples de virtualização de interfaces físicas nativamente reconhecida pelo Linux, procedimento realizado através da sintaxe ethX:X. Por outro lado, o Linux torna-se capaz de interpretar cabeçalhos 802.1q (trunk) quando utilizamos o pacote vlan para criar interfaces lógicas roteadas do tipo VLAN (sintaxe ethX.X).

Façam seus testes...

Samuel.

quarta-feira, 15 de julho de 2015

Configuração de Agregação de Links no Linux

Olá Pessoal.

Um recurso bastante comum na interconexão de dispositivos da infraestrutura e também de servidores em redes de computadores é a agregação de links (ethernet bonding), técnica que permite a criação de uma interface lógica através do acoplamento de dois ou mais canais físicos. O resultado é que o novo canal lógico pode ter maior velocidade através da soma das vazões das interfaces físicas (load balancing), além de aumentar a disponibilidade da conexão por causa dos canais físicos redundantes (failover).

Assim como nos artigos anteriores, estou considerando que o servidor está instalado com a distribuição Debian GNU/Linux (ou seus derivados, como o Ubuntu). A primeira etapa consiste na instalação do pacote denominado ifenslave para que, posteriormente, as configurações de rede do Linux ofereçam suporte à agregação de links. Essa terafa é simples e rápida através do APT:

apt-get install ifenslave

Agora basta editar o arquivo de configuração das interfaces de rede que fica localizado em "/etc/network/interfaces". Criaremos uma nova interface lógica denominada bond0 que estará vinculada às interfaces físicas eth0 e eth1, conforme destacado em amarelo nas configurações abaixo

###--- em /etc/network/interfaces

auto eth0
iface eth0 inet manual

auto eth1
iface eth1 inet manual

auto bond0
iface bond0 inet static
    address 192.168.0.1
    netmask 255.255.255.0
    slaves eth0 eth1
    bond_mode balance-rr
    bond_miimon 100
    bond_downdelay 200
    bond_updelay 200

Em termos de configuração, é simples assim! É interessante destacar que existem vários modos de operação na agregação de links para prover serviços como disponibilidade (failover) ou balanceamento de carga (load balancing). Na configuração do campo bond_mode (destaque em azul) é possível informar os números ou nomes (entre parênteses) dos modos de operação explicados na sequência.

  • modo 00 (balance-rr) - trata-se da opção padrão em que os pacotes são transmitidos sequencialmente de maneira alternada (round-robin) entre todas as interfaces físicas, provendo ambas as funcionalidades de load balance e failover;
  • modo 01 (active-backup) - nesse modo de operação apenas uma interface física é utilizada para transmissão de pacotes, sendo que as demais ficam em espera (stand-by) até que a interface ativa venha a cair, provendo apenas a funcionalidade de failover;
  • modo 02 (balance-xor) - os pacotes são transmitidos em todas as interfaces físicas com base nos resultados de uma operação xor (ou exclusivo) entre os endereços físicos (MAC) de origem e destino, provendo ambas as funcionalidades de load balancing e failover;
  • modo 03 (broadcast) - transmite repetidamente  uma cópia dos pacotes em todas as interfaces físicas, provendo apenas a funcionalidade de failover;
  • modo 04 (802.3ad) - utiliza o protocolo dinâmico LACP (IEEE 802.3ad) para negociar automaticamente com o dispositivo vizinho (diretamente conectado) se é possível criar uma agregação lógica das interfaces físicas;
  • modo 05 (balance-tlb) - trata-se de uma forma especial de balanceamento de carga que não depende de nenhuma configuração no switch diretamente conectado, onde o tráfego de saída é distribuído entre as interfaces físicas (com base na carga de cada uma) e o tráfego de entrada chega em uma única interface ativa;
  • modo 06 (balance-alb) - trata-se de uma forma especial de balanceamento de carga que não depende de nenhuma configuração no switch diretamente conectado, onde ambos os tráfegos de saída e entrada são distribuídos entre as interfaces físicas;

A configuração da agregação de link no switch também deve ser devidamente realizada, dependendo do modo utilizado. A agregação lógica  de links físicos em switches Cisco Catalyst é denominada Port-Channel (ou Ether-Channel) e bastante simples de ser realizada manualmente, por exemplo através dos comandos abaixo para criar uma nova interface lógica po1 (f0/1 + f0/2).

Switch(config)# interface range f0/1 - 2
Switch(config-if)# channel-group 1 mode on

Obs.: Caso o Linux tenha sido configurado com bond_mode 802.3ad (modo 4), recomendo a leitura abaixo para configuração do protocolo dinâmico LACP (IEEE 802.3ad) no switch.

http://www.cisco.com/c/en/us/td/docs/ios/12_2sb/feature/guide/sbcelacp.html#wp1053817

Façam seus testes...

Samuel.

sexta-feira, 10 de julho de 2015

Configuração Básica do SAMBA em Servidores Linux

Olá Pessoal.

O SAMBA é uma suíte de ferramentas instaladas em um servidor Linux que permite a integração de ambientes heterogêneos através da comunicação entre sistemas Linux e Windows, viabilizando serviços de diretórios no Linux (controlador de domínio), o controle de acesso dos usuários, compartilhamento de arquivos e de impressoras, etc. A integração é possível porque em ambos os sistemas a comunicação é baseada no protocolo SMB/CIFS (Server Message Block / Common Internet File System).


# Configuração do Servidor SAMBA

Assim como nos artigos anteriores, estou considerando que o servidor está instalado com a distribuição Debian GNU/Linux (ou seus derivados, como o Ubuntu). A primeira etapa consiste na instalação do pacote denominado samba para que o Linux possa ser posteriormente configurado como servidor de arquivos para clientes Windows e Linux. Essa tarefa é simples e rápida através do APT:

root@smb-server:/# apt-get install samba

Para exemplificar o processo de compartilhamento de diretórios no servidor com os demais clientes da rede, vamos criar os diretórios "/smb/publico" (acesso total público) e também "/smb/privado" (acesso restrito ao usuário shbbrito):

root@smb-server:/# mkdir -p /smb/publico
root@smb-server:/# chown nobody.nogroup /smb/publico
root@smb-server:/# chmod 777 /smb/publico

root@smb-server:/# mkdir -p /smb/privado
root@smb-server:/# chown shbbrito.shbbrito /smb/privado
root@smb-server:/# chmod 750 /smb/privado

O arquivo de configuração do SAMBA fica lozalicado em "/etc/samba/smb.conf", sendo bem documentado e organizado em diferentes seções para facilitar sua configuração. O simples compartilhamento de diretórios (objeto deste artigo) é realizado através da inserção de novos diretórios entre colchetes na seção denominada "Share Definitions", como pode ser observado no exemplo abaixo.

###--- em /etc/samba/smb.conf

(...) Conteúdo Omitido

workgroup = SAMBA
interfaces 192.168.221.11/24 ethX
bind interfaces only = yes
server role = standalone server
passdb backend = smbpasswd

######### Share Definitions

[smb-publico]
   comment = "Diretorio Publico"
   path = /smb/publico
   public = yes
   only guest = yes
   writable = yes
   printable = no

[smb-privado]
   comment = "Diretorio Privado (shbbrito)"
   path = /smb/privado
   public = no
   only guest = no
   valid users = shbbrito
   valid users = @shbbrito
   writable = yes
   printable= no

Obs.: Caso não haja integração do SAMBA com nenhum serviço de diretórios para fins de autenticação dos usuários, como é o caso deste exemplo em que o servidor é standalone, é necessário: (1) criar o arquivo de usuários reconhecidos pelo serviço, (2) limitar seu acesso para somente leitura e (3) adicionar os usuários que também devem existir previamente no servidor Linux.

root@smb-server:/# touch /etc/samba/smbpasswd
root@smb-server:/# chmod 644 /etc/samba/smbpasswd
root@smb-server:/# smbpasswd -a nome_do_usuario
Password: *****
Re-Type Password: *****

Depois de realizadas as configurações, basta (re)iniciar o serviço SAMBA:

root@smb-server:/# service smbd restart

# Configuração do Cliente Windows

Na realidade não há nenhum segredo a ser detalhado nessa seção. O acesso aos compartilhamentos do servidor SAMBA através de estações clientes que estejam executando alguma versão do Windows pode ser feito através da execução (atalho Windows+R) do endereço ou nome do servidor (\\192.168.221.11). Também é possível fazer o acesso direto a um diretório específico (\\192.168.221.11\smb-publico\) e mapear unidades de rede para facilitar o acesso do usuário.

# Configuração do Cliente Linux

De forma muito similar aos clientes Windows, em clientes Linux que tenham um ambiente gráfico é possível localizar os compartilhamentos através da simples navegação na rede ou mesmo através da navegação manual ao servidor, por ex.: smb://192.168.221.11. Na ocasião do acesso através de clientes que não tenham uma interface gráfica, o acesso pode ser realizado através da ferramenta smbclient.

01. apt-get install smbclient
02. smbclient -L 192.168.221.11
03. smbclient //192.168.221.11/smb-publico -U nome_usuario

Na linha 01 estamos instalando o cliente SAMBA (smbclient), caso não haja nenhum instalado na máquina. O comando da linha 02 (parâmetro -L) pode ser utilizado para visualizar os compartilhamentos disponibilizados pelo servidor que responde por um determinado nome ou IP. O acesso ao diretório propriamente dito é realizado na linha 03, sendo que na sequência o usuário será direcionado para um prompt SMB similar ao prompt do FTP. No prompt SMB o comando get é utilizado para baixar um arquivo remoto na máquina local, enquanto que o comando put é utilizado para subir um arquivo local no servidor remoto. Para obter mais detalhes dos outros comandos e da ferramenta smbclient, recomendo a leitura do seu manual através do comando "man smbclient".

Uma alternativa à manipualação dos arquivos compartilhados através do smbclient é montar localmente na máquina cliente o diretório remoto compartilhado pelo servidor. Esse procedimento pode ser realizado através do seguinte comando:

mount -t cifs //192.168.221.11/smb-publico /home/shbbrito/smb-publico -o username=shbbrito

Façam seus testes...

Samuel.

quinta-feira, 2 de julho de 2015

Configuração de Servidor de Arquivos NFS no Linux

Olá Pessoal.

O Network File System (NFS) é um sistema de arquivos desenvolvido pela Sun Microsystems na década de 80 para viabilizar o compartilhamento de arquivos entre sistemas Unix de diferentes naturezas, inclusive o Linux. O interessante do NFS é sua simplicidade de operação no servidor e principalmente no cliente. Para os clientes NFS basta montar os diretórios compartilhados, da mesma maneira que é realizado o processo de montagem de qualquer outra unidade de disco, ou seja, os diretórios compartilhados passam a ser montados e visualizados localmente no cliente.
# Configuração do Servidor NFS

Assim como nos artigos anteriores, estou considerando que o servidor está instalado com a distribuição Debian GNU/Linux (ou seus derivados, como o Ubuntu). A primeira etapa consiste na instalação dos pacotes denominados nfs-kernel-server e nfs-common para que o Linux possa ser posteriormente configurado como servidor de arquivos. Essa tarefa é simples e rápida através do APT:

root@nfs-server:/# apt-get install nfs-kernel-server nfs-common

Para exemplificar o processo de compartilhamento de diretórios no servidor com os demais clientes da rede, vamos criar os diretórios "/nfs/publico" (modo padrão com usuário nobody e grupo nogroup) e também "/nfs/privado" (modo restrito):

root@nfs-server:/# mkdir -p /nfs/publico
root@nfs-server:/# chown nobody:nogroup /nfs/publico
root@nfs-server:/# chmod 007 /nfs/publico

root@nfs-server:/# mkdir -p /nfs/privado
root@nfs-server:/# chown user:group /nfs/privado
root@nfs-server:/# chmod 750 /nfs/privado

As configurações do servidor NFS são realizadas no arquivo de configuração que fica localizado em "/etc/exports". Na sequência trago as linhas de configuração necessárias para compartilhar os dois diretórios criados na etapa anterior:

###--- em /etc/exports
/nfs/publico   192.168.221.21(rw,sync,no_root_squash)   192.168.221.0/24(ro,sync)
/nfs/privado   192.168.221.21(rw,sync,no_root_squash)

Obs.:  Nas configurações acima estamos considerando que o servidor NFS possui o endereço IP 192.168.221.11. A sintaxe das linhas de configuração do arquivo exports é bem simples: a primeira coluna contém o diretório local que será compartilhado, enquanto que a segunda coluna contém o endereço ou nome de uma máquina cliente (ou toda a rede) acompanhado das suas opções entre parênteses. É possível criar várias colunas fazendo referência a diferentes máquinas clientes, como fizemos em relação ao diretório /nfs/publico que tem acesso de leitura e escrita (rw) para o host 192.168.221.21 e acesso somente leitura (ro) para as demais máquinas da rede 192.168.221.0/24. A opção no_root_squash diz que o compartilhamento poderá ser editado pelo root remoto (cliente) com os mesmos privilégios do root local (servidor).

Por fim, basta reiniciar o serviço NFS para validar as novas configurações.

root@nfs-server:/# service nfs-kernel-server restart

# Configuração do Cliente NFS

Nas estações o cliente NFS pode ser facilmente instalado através do APT:

root@nfs-client:/# apt-get install nfs-common

É necessário criar no cliente o(s) diretório(s) locais em que os compartilhamentos do servidor serão montados. Pode ser utilizado qualquer diretório, inclusive o /home dos usuários...

root@nfs-client:/# mkdir -p /mnt/publico
root@nfs-client:/# mkdir -p /mnt/privado

Em seguida, basta montar os compartilhamentos do servidor nos respectivos diretórios que criamos localmente na estação cliente, de maneira bastante similiar o processo de montagem de discos que era comumente utilizado para acessarmos mídias extenas há alguns anos atrás (e ainda hoje), quando não havia a montagem automática! ;-)

root@nfs-client:/# mount 192.168.221.11:/nfs/publico /mnt/publico
root@nfs-client:/# mount 192.168.221.11:/nfs/privado /mnt/privado

Pronto! Agora a estação cliente já tem acesso a todos os arquivos compartilhados no servidor a partir dos diretórios montados localmente. É possível verificar os pontos de montagem compartilhados por meio das saídas dos comandos "df -h" e "mount". Abaixo trago um exemplo da saída de outro comando útil que pode ser utilizado no cliente para descobrir quais diretórios estão sendo compartilhados pelo servidor:

root@nfs-client:/# showmount -e 192.168.221.11
Export list for 192.168.221.11:
/nfs/privado 192.168.221.21
/nfs/publico 192.168.221.0/24,192.168.221.21

# Montando os Compartilhamentos Automaticamente no Boot

Uma alternativa ao processo manual de configuração dos pontos de montagem compartilhados nos clientes é alterar o arquivo de configuração "/etc/fstab" para que as montagens sejam realizadas durante o boot. Para exemplificar esse processo em relação ao diretório público que criamos anteriormente, podemos incluir a linha abaixo ao final desse arquivo:

[...] Saída Omitida
192.168.221.11:/nfs/publico  /mnt/publico   nfs   defaults   0   0

Acho que não é necessário dizer que as montagens também poderiam ser realizadas através de scripts inicializados automaticamente. Façam seus testes...

Samuel.