Tutorial como criar um servidor de arquivos NAS com Raspberry Pi – SMB e AFP
Objetivos
- Saber o que é um NAS
- Entender o que é um servidor de arquivos
- O que é o protocolo SMB
- O que é o protocolo AFP
- Passo a passo para configurar um Raspberry Pi como um servidor de arquivos / NAS com suporte a smb (samba) e afp (netatalk e avahi-daemon)
O que significa NAS?
O termo NAS vem do inglês “Network Attached Storage“, que pode ser traduzido como uma unidade de armazenamento ligado à rede. De forma geral, funciona como um servidor de arquivos.
Para que serve um servidor de arquivos?
Um servidor de arquivos ligado em rede tem como objetivo facilitar o fluxo de informação. Pensando em uma rede doméstica ou empresarial, um servidor de arquivos permite que usuários tenham acesso rápido a arquivos de interesse comuns. Seja uma área de transferência temporária para troca de arquivos entre usuários; ou de forma estruturada, visando organizar informações importantes para acesso de longo prazo.
O que é o software Samba e o protocolo SMB?
Samba é um software que provê recursos para transferência de arquivos através do protocolo smb. Desta forma, é um software que provê os recursos de servidor de arquivos. Tem origem em 1992 e suporte aos sistemas operacionais DOS, Windows, OS/2, Linux etc.
O samba também oferece recursos de servidor de impressão, para integrar diversos clientes a uma impressora.
O que é o protocolo AFP?
O termo AFP vem do inglês “Apple Filing Protocol” que antigamente era conhecido apenas como protocolo Appletalk. É um protocolo de rede proprietário desenvolvido pela Apple Inc.
O protocolo AFP foi o protocolo padrão utilizado pelo Mac OS até antes do Mac OS Mavericks (Mac OS 10.9). Em seguida o protocolo smb foi definido como protocolo primário/padrão. A capacidade de autenticação por AFP ainda é mantida no sistema operacional da Apple na versão Ventura.
Necessidades para realização desta tutorial
Para que seja possível realizar este projeto, basta ter um Raspberry Pi disponível e computadores para testar a conexão. Todas as versões do Raspberry Pi são compatíveis, desde a primeira versão do Raspberry.
Tutorial passo a passo para configurar um Raspberry Pi como um NAS
Passo 1 – Conexão ao Raspberry Pi
O primeiro passo é se conectar ao seu Raspberry por conexão SSH. Caso não tenha um nome de usuário e senha configurados, conecte pelo usuário padrão. Neste exemplo nosso raspberry está configurado no ip 192.168.1.52. Então o comando para conexão será:
ssh pi@192.168.1.52
A senha padrão do Raspbian recém instalado é:
raspberry
Um alerta, por padrão o raspberry não vem com o servidor SSH habilitado. Na hora de salvar a imagem do sistema operacional no cartão SD pelo Raspberry Pi Imager é possível solicitar que o servidor SSH fique habilitado já no primeiro boot.
Passo 2 – Configuração da estrutura de arquivos
Vamos criar agora um usuário com o nome fileserver. Um grupo com o nome fileserver será criado automaticamente junto com a criação deste usuário. Vamos também utilizar o comando -m, para que ao criar o usuário e o grupo a pasta /home/fileserver também seja criada:
sudo useradd -m fileserver
Devemos agora definir uma pasta para ser compartilhada em nosso NAS. Esta pasta poderá receber acesso de vários usuários registrados. Então vamos chamar ela de “shared”. Vamos criar a pasta com o comando:
sudo mkdir /home/fileserver/shared
Interessante configurar a pasta /home/fileserver/shared de forma que todos os arquivos criados dentro dela, mantenham o grupo fileserver. Execute então o comando abaixo para esta configuração:
sudo chmod g+s /home/fileserver -R
Pensando já nos próximos passos, é interessante que todos os usuários que pertençam ao grupo fileserver, possam ter permissão de leitura/escrita na pasta shared. Execute então o comando:
sudo chmod 770 /home/fileserver -R
Passo 3 – Adicionando usuários ao grupo fileserver
Caso tenha outros usuários configurados no raspberry pi e também deseja que eles tenham acesso a esta pasta compartilhada, precisamos adicioná-los ao grupo do fileserver.
Neste exemplo, vou adicionar o usuário viniciuspaes ao grupo fileserver. O comando será:
sudo usermod -a -G fileserver viniciuspaes
Caso tenha mais usuários, utilize o exemplo do comando acima e adicione todos que deseja fornecer acesso a pasta.
Passo 4 – Instalando o protocolo SMB e Configurando o Samba
O protocolo smb é amplamente utilizado pelo windows para transferência de arquivos entre cliente e servidor. Instalando o conjunto de aplicativos do Samba temos suporte ao protocolo smb. Para instalar o samba, utilize o comando:
sudo apt install samba samba-common-bin
Agora vamos editar o arquivo de configuração com o comando:
sudo nano /etc/samba/smb.conf
Caminhe até o fim do arquivo e adicione as linhas:
[shared] path = /home/fileserver/shared writable = Yes create mask = 0770 directory mask = 0770 public = no
Com o comando acima, vamos criar o compartilhamento com o nome “shared”. A pasta onde os arquivos deste compartilhamento serão armazenados é a “/home/fileserver/shared”. A máscara de permissão dos diretórios e arquivos vai ser “770” para escrita de grupo. Este compartilhamento não é público, é necessário que o usuário informe login e senha para acesso.
O samba nesta configuração padrão, não utiliza os usuários do linux para autenticação, sendo necessário definir os usuários que podem se autenticar.
Desta forma, vamos adicionar o usuário “viniciuspaes” como um usuário que pode se autenticar no samba e acessar o compartilhamento “shared”:
sudo smbpasswd -a viniciuspaes
Agora vamos reiniciar o daemon do samba com o comando:
sudo systemctl restart smbd
Passo 5 – Testando conexão Samba no Windows
No windows, acesse o windows explorer, e no canto esquerdo localize o item:
Rede (Network)
Clique com botão direito em cima de “Rede” e escolha a opção:
Mapear unidade de rede… (Map network drive…)
Neste exemplo o raspberry pi está configurado no IP 192.168.1.52 e o nome do compartilhamento que criamos se chama “shared” ([shared]). Então no campo de Pasta (Folder) preencha com:
\\192.168.1.52\shared
Caso queira que a pasta de rede se conecte automaticamente a cada vez que iniciar o windows, deixe marcado o campo:
Reconectar ao realizar login (Reconnect at sign-in)
Como minhas credenciais de login do windows são diferentes do servidor (login samba), vou marcar a caixa:
Conectar utilizando credenciais diferentes (Connect using different credentials)
Clique agora no botão:
Terminar (Finish)
Para testar se a conexão está funcional e temos permissão de escrita na pasta do servidor, vamos criar um arquivo chamado “teste.txt”. Caso tudo ocorra como planejado, o arquivo estará criado dentro da pasta do servidor e estará disponível.
No terminal do servidor, podemos verificar quais arquivos estão presentes na pasta “shared”, com o comando:
ls -lah /home/fileserver/shared/
Podemos verificar o arquivo teste.txt que criamos para testar a funcionalidade.
Passo 5 – Instalando o protocolo AFP e Bonjour com pacote Netatalk e Avahi
O sistema operacional Mac OS tem suporte tanto para samba, quanto para AFP nativos.
Porém, desde o OS Mavericks a Apple adotou o protocolo smb como padrão. Mas como os usuários possam estar utilizando o protocolo AFP ou precisem utilizar este protocolo em versões mais antigas no Mac OS, é interessante também conceder este acesso ao nosso servidor de arquivos/NAS.
A configuração do Bonjour é realizada através do pacote avahi-daemon, garante descobrimento automático do servidor na rede, e também há suporte/anúncio para configuração de time machine.
Para ter suporte ao AFP e Bonjour, vamos instalar o pacote:
sudo apt install netatalk
Após a instalação podemos verificar um panorama geral do suporte do AFP, assim como características do local de instalação, versão do protocolo, etc. Execute o comando para verificar diversas informações sobre o suporte ao AFP:
afpd -V
Agora é necessário editar o arquivo de configuração do AFP e definir as formas de login, suporte ao time machine, caminho da pasta compartilhada, etc:
sudo nano /etc/netatalk/afp.conf
Agora caminhe até o final do arquivo e cole a configuração:
[shared] path = /home/fileserver/shared time machine = yes vol size limit = 20000 valid users = viniciuspaes
Na configuração acima, lembre-se de adicionar os usuários que vão ter permissão de acessar a pasta compartilhada por AFP. No exemplo acima temos o usuário viniciuspaes com permissão de acesso, basta substituir por seu usuário e adicionar mais usuários na mesma linha separados por espaço.
Lembrete
A conexão do AFP será feita pelas credenciais de login e senha dos usuários já configurados no sistema operacional linux (raspberry pi). E lembrando que no Samba (SMB) é necessário adicionar cada usuário que tem permissão de login no serviço (smbpasswd -a ).
Passo 6 – Testando conexão AFP no Mac OS (netatalk + avahi-daemon)
No Mac OS, abra o aplicativo finder. No menu superior, clique na opção:
Ir (Go)
No submenu que vai abrir, escolha a opção:
Conectar no servidor… (Connect to server…)
A janela de conexões ao servidor vai abrir. Nesta janela podemos escolher qual protocolo queremos nos conectar. Lembrando que podemos nos conectar por samba também (smb://), mas neste exemplo vamos optar por conectar com AFP. No campo para digitar o endereço, preencha o protocolo de conexão (afp://) seguido do IP do servidor (192.168.1.52) juntamente com o nome da conexão que definimos no arquivo afp.conf ([shared]):
afp://192.168.1.52/shared
Caso queira salvar este endereço na lista de favoritos para conexão, lembre de clicar no campo “+”. Clique agora no botão:
Conectar (Connect)
Uma janela solicitando as credenciais de conexão vai abrir. Digite o usuário e senha do seu usuário criado no raspberry. Caso queira armazenar as credenciais de login e senha, marque a opção para que elas fiquem salvas em seu keychain. Agora clique novamente no botão:
Conectar (Connect)
Ao se conectar no servidor, será possível que o hostname do servidor (raspberry) irá aparecer no menu lateral na parte de “Locations”. Você estará dentro da aba da conexão da pasta de rede “shared” e poderá ver o arquivo de teste.txt que criamos quando nos conectamos no samba no windows.
Conlusões
Caso tenha seguido o tutorial acima, foi possível verificar o passo a passo para criar um NAS com o Raspberry Pi, tanto com suporte ao protocolo smb, quanto o afp. A configuração é bem simples e lembrando que este recurso também é uma comodidade caso utilize o raspberry em outros projetos que necessitam a troca de arquivos entre seu computador e o dispositivo.
Lembrando que até o modelo do Raspberry Pi 3 a porta ethernet é limitada a 100Mbps (100mbps/8 = ~12,5MB/s transferência). Porém nessas versões mais antigas, é possível utilizar um dongle USB/Ethernet de 1Gbps e aproveitar a banda de 480mbps da porta USB 2.0. Porém a conexão deve ficar algo próximo/máximo de 320mbps (~40MB/s transferência), por limitação da banda do controlador do USB 2.0 e o compartilhamento da velocidade com outros dispositivos.
Caso utilize um SSD como unidade de armazenamento, consegui velocidades próximas a 25Mb/s em escrita e leitura sequencial com testes realizados com o software DD do linux na porta USB 2.0.
Caso utilize muita troca de informações, lembre-se que estas transferências consomem processamento da CPU. O raspberry pi na versão 4 ou superior pode ser uma opção mais eficiente. Com a porta USB 3.0 e um SSD Sata, consegui velocidades próximas a 220MB/s com testes utilizando o DD.
No geral, percebo que o Raspberry ainda possui muitas limitações de IO perante seus concorrentes que já tem suporte a armazenamento em M.2 NVME e eMMC. Mas ainda é um gadget super recomendado, pois há extenso suporte ao dispositivo, desde sua primeira versão.
Tenho por exemplo um ODROID-X2 com recursos próximos a um Raspberry Pi 3 e não há mais suporte oficial do fabricante, nem para o uboot, nem para o kernel e nem imagens atualizadas do linux. Desta forma, continuo recomendando o raspberry pelo suporte a longo prazo.
Espero que tenham gostado deste passo a passo e qualquer dúvida ou sugestão, basta informar nos comentários!