Linux
Roteador Linux - Parte 1 - Configuração Inicial
Esta é a primeira parte de uma série de artigos descrevendo como construir seu próprio roteador Linux.
- Parte 2: Rede e Internet
- Parte 3: Usuários, segurança e Firewall
- Parte 4: Podman e Unbound
- Parte 5: Wifi
- Parte 6: Nextcloud e Jellyfin
Tendo este velho Mac Mini sem uso e transformá-lo em um servidor Linux daria uma nova vida a ele. É uma máquina capaz, estável e longe de ser feia. Então, vamos fazer isso.
Índice
A Ideia
Vamos definir algumas premissas para o nosso projeto. Esse servidor será:
- Gateway de Internet: O Mac Mini atuará como o roteador principal, gerenciando o tráfego entre a rede interna e a internet.
- Servidor de Arquivos: Configuraremos um servidor de arquivos para armazenar e compartilhar arquivos pela rede.
- Armazenamento em Nuvem Privado com Nextcloud: O Nextcloud fornecerá uma solução de armazenamento em nuvem auto-hospedada, permitindo que você acesse seus arquivos de qualquer lugar.
- Acesso Sem Fio: O Unifi C6 Lite fornecerá acesso sem fio à rede.
- DNS Unbound com Bloqueio de Anúncios: O DNS Unbound será configurado para bloquear anúncios em toda a rede, melhorando a privacidade e reduzindo o uso de largura de banda.
- Servidor de Mídia: Um servidor de mídia permitirá você montar seu "Netflix" caseiro.
- VPN Privada: Uma VPN será configurada para permitir acesso remoto seguro à rede.
O Hardware
Para este projeto, vamos usar:
MacMini Core 2 Duo de 2010
Imagem da Wikimedia: Fonte
Este Mac Mini é antigo e como computador de mesa não tem muita utilidade, mas como servidor, é uma excelente máquina com as seguintes especificações:
- Intel Core 2 Duo 8600 com 2.6GHz.
- 6GB de RAM.
- SSD de 2TB.
Switch Gerenciável TP-Link TL-SG108E
redeszone.net
O TP-Link TL-SG108E é uma ótima escolha para este projeto porque suporta VLANs, que são essenciais para dividir a rede em diferentes segmentos. Entraremos mais a fundo sobre o assunto na parte 2 dessa série.
Ubiquiti Unifi C6 Lite
Antigo post de blog de Stephen Herber sobre Linux DIY como roteador: Link arquivado na Web
O Unifi C6 Lite é um ponto de acesso sem fio confiável com bom alcance e desempenho, tornando-o perfeito para fornecer acesso sem fio à rede.
Configuração do Linux
Para este projeto, minha ideia é usar o NixOS.
O NixOS é uma ótima escolha por causa de seu modelo de configuração declarativa. Definindo toda a configuração do sistema em um único arquivo .nix
, é fácil reproduzir a configuração em outra máquina ou reverter alterações se algo der errado. Isso torna o NixOS ideal para um ambiente de servidor onde estabilidade e reprodutibilidade são importantes. Todo este projeto está disponível no meu GitHub (links abaixo).
1. Baixar o NixOS
- Baixe o ISO do NixOS no site oficial.
- Crie um pendrive bootável usando uma ferramenta como
dd
ouEtcher
. - Inicialize o Mac Mini a partir do pendrive segurando a tecla
Option
durante a inicialização e selecionando o pendrive.
2. Habilitar o Serviço SSH
Habilitar o SSH permitirá que você gerencie o Mac Mini remotamente a partir do seu computador desktop, o que é especialmente útil, já que o Mac Mini estará rodando sem monitor ou teclado.
passwd
# Digite sua senha duas vezes.
sudo systemctl start sshd
# Verifique seu IP
ip --brief addr
3. Acessar o Mac Mini via SSH
Acesse o Mac Mini usando ssh
com Putty
ou algo semelhante, usando o usuário nixos
e a senha que você definiu anteriormente.
4. Particionar o Disco
Neste setup, vou usar o sistema de arquivos ZFS. É um sistema de arquivos que consome muitos recursos, mas é resiliente, rápido e oferece ótimas opções de backup.
Embora o ZFS consuma muitos recursos, ele oferece várias vantagens que o tornam uma boa escolha. O ZFS fornece excelente integridade de dados por meio de checksumming, suporta snapshots para backups fáceis e é altamente escalável, tornando-o uma ótima escolha para um servidor de arquivos. No entanto, se você achar que o ZFS é mais do que você precisa, BTRFS é uma alternativa mais leve que ainda suporta muitos dos recursos do ZFS, como snapshots e backups fáceis. O BTRFS também consome menos recursos, tornando-o uma boa opção para hardware mais antigo. Esse esquema de particionamento permitirá tanto inicializar o sistema via BIOS quanto via UEFI.
sudo -i
Escolha seu dispositivo de armazenamento. Você pode verificar com: ls /dev/disk/by-id/
DISK=/dev/disk/by-id/scsi-SATA_disk1
Remova todas as partições do armazenamento. Lembre-se que isso apagará toda a informação existente no disco.
wipefs -a ${DISK}
Para SSDs, se o disco foi utilizado anteriormente, você pode querer aplicar o descarte completo de cach de blocos (TRIM/UNMAP).
blkdiscard -f ${DISK}
Crie o esquema de particionamento.
parted ${DISK} mklabel gpt
parted ${DISK} mkpart primary 1MiB 2MiB
parted ${DISK} set 1 bios_grub on
parted ${DISK} mkpart EFI 2MiB 514MiB
parted ${DISK} set 2 esp on
parted ${DISK} mkpart ZFS 514MiB 100%
mkfs.msdos -F 32 -n EFI ${DISK}-part2
Obtenha o UUID
das partições
BOOT="/dev/disk/by-uuid/"$(blkid -s UUID -o value ${DISK}-part2)
ROOT="/dev/disk/by-partuuid/"$(blkid -s PARTUUID -o value ${DISK}-part3)
5. Datasets ZFS
No ZFS, não se usa muito o termo "partição" porque realmente não é. O equivalente é "Datasets", que tem uma abordagem semelhante aos Volumes BTRFS no sistema de arquivos BTRFS.
Há uma série de comandos que usaremos para criar nosso zpool e datasets.
ashift=12
: melhora o desempenho ao trabalhar com SSDsatime=off
: Como mencionado neste artigo, sistemas operacionais Unix modernos têm opções de montagem especiais para otimizar o uso de atime.- compression=lz4: Otimiza o espaço de armazenamento comprimindo dados com o algoritmo
lz4
sem sacrificar o desempenho. - zattr=sa: Configurações avançadas de atributos. Necessário para instalar sistemas operacionais baseados em Linux.
- acltype=posixacl: Requisito para instalar Linux em um sistema formatado com ZFS.
zpool create -f -o ashift=12 -O atime=off -O compression=lz4 -O xattr=sa -O acltype=posixacl rpool ${ROOT} -R /mnt
zfs create -o mountpoint=none -o canmount=off rpool/root
zfs create -o mountpoint=/ -o canmount=noauto rpool/root/nixos
zfs create -o mountpoint=/home rpool/home
6. Montar os Sistemas de Arquivos
UEFI
zfs create -o mountpoint=/boot rpool/boot
mkdir /mnt/boot/efi
mount ${BOOT} /mnt/boot/efi
BIOS
mkdir /mnt/boot
mount ${BOOT} /mnt/boot
7. Gerar a Configuração do NixOS
nixos-generate-config --root /mnt
8. Editar a Configuração
Crie o arquivo /mnt/etc/nixos/configuration.nix
e garanta que habilitou o suporte a ZFS. Há duas versões do arquivo de configuração, uma para BIOS
e outra para UEFI
.
UEFI configuration.nix.
cat << EOF > /mnt/etc/nixos/configuration.nix
{ config, pkgs, ... }:
{
system.stateVersion = "24.05";
boot= {
loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
efi.efiSysMountPoint = "/boot/efi";
};
supportedFilesystems = [ "zfs" ];
};
fileSystems."/boot/efi" = {
device = "${BOOT}";
fsType = "vfat";
options = [ "umask=0077" "shortname=winnt" ];
};
fileSystems."/" = {
device = "rpool/root/nixos";
fsType = "zfs";
};
time.timeZone = "America/Sao_Paulo";
services.openssh = {
enable = true;
settings = {
PermitRootLogin = "yes";
PasswordAuthentication = true;
};
};
environment.systemPackages = with pkgs; [ vim ];
# Set the hostId for ZFS
networking.hostId = "$(head -c 8 /etc/machine-id)";
}
EOF
BIOS configuration.nix.
cat << EOF > /mnt/etc/nixos/configuration.nix
{ config, pkgs, ... }:
{
system.stateVersion = "24.05";
boot = {
loader = {
grub.enable = true;
grub.device = "${DISK}";
};
supportedFilesystems = [ "zfs" ];
};
fileSystems."/boot" = {
device = "${BOOT}";
fsType = "vfat";
options = [ "umask=0077" "shortname=winnt" ];
};
fileSystems."/" = {
device = "rpool/root/nixos";
fsType = "zfs";
};
time.timeZone = "America/Sao_Paulo";
services.openssh = {
enable = true;
settings = {
PermitRootLogin = "yes";
PasswordAuthentication = true;
};
};
environment.systemPackages = with pkgs; [ vim ];
# Set the hostId for ZFS
networking.hostId = "$(head -c 8 /etc/machine-id)";
}
EOF
9. Instalar o NixOS
Execute o comando de instalação:
nixos-install
10. Desmontar todo o sistema de arquivos
cd /
umount -Rl /mnt
zpool export -a
11. Configuração Pós-Instalação
Uma vez que o NixOS esteja instalado, você pode começar a configurar os serviços que rodarão no seu roteador. Aqui estão alguns dos principais serviços que você vai querer configurar:
- Nextcloud: Para armazenamento em nuvem privado.
- DNS Unbound com Bloqueio de Anúncios: Para bloquear anúncios em toda a rede.
- VPN: Para permitir acesso remoto seguro à sua rede.
Cada um desses serviços pode ser configurado no arquivo de configuração do NixOS (/etc/nixos/configuration.nix
), facilitando o gerenciamento e a reprodução da sua configuração.
Conclusão
Ao reutilizar um antigo Mac Mini e usar o NixOS, é possível ter um excelente roteador Linux, flexível que pode gerenciar sua rede, fornecer armazenamento em nuvem, bloquear anúncios e muito mais. Esta configuração é altamente personalizável e pode ser expandida com serviços adicionais conforme necessário. Quer você esteja procurando melhorar sua rede doméstica ou apenas queira experimentar o NixOS, este projeto é uma ótima maneira de dar uma nova vida a um hardware antigo.
Isso encerra a primeira parte deste artigo. Na segunda parte, configuraremos nossa rede, incluindo a configuração de VLAN para dividir nossa rede em privada
, convidado
e wan
, além de configurar uma conexão PPPoE e regras básicas de firewall usando nftables
.
- Parte 2: Rede e Internet
keywords: macmini • roteador • linux • nixos • pppoe • unifi • ubiquiti • apple • vlan • tl-sg108e