Configuração de Gateways Linux em Redes de Produção
Este guia aborda alguns dos parâmetros básicos de configuração de rede que podem impedir o funcionamento de um sistema Linux em um ambiente de produção devido à infraestrutura isolada. Observe que as distribuições Linux podem utilizar serviços diferentes para os tópicos a seguir. Portanto, pode não ser possível executar alguns dos comandos listados abaixo. Esta seção foi escrita utilizando como exemplo um Raspberry Pi com a versão nativa do sistema operacional Debian 12 (bookworm).
Antes da sua chamada de suporte com a Equipe SDA, certifique-se de ter acesso SSH ao dispositivo Linux a partir do seu computador para compartilhamento de tela durante a sessão.
A seguir, uma lista de áreas comuns que podem impedir a conexão.
Servidores DNS
Um servidor de Sistema de Nomes de Domínio (DNS) resolve nomes de domínio em endereços IP para facilitar a comunicação pela internet. Uma configuração de DNS adequada é fundamental para um sistema Linux que opera em um ambiente de rede. A solução de problemas de DNS envolve verificar a acessibilidade do servidor DNS por meio de comandos como ping ou nslookup. Certifique-se de que o servidor está respondendo e resolvendo corretamente os nomes de domínio em endereços IP. Configurações incorretas podem levar à falha na resolução de domínios, afetando as comunicações de rede e o acesso à internet.
Teste
Verifique os IPs dos servidores DNS configurados no host com:
cat /etc/resolv.conf
Cada servidor DNS pode ser testado individualmente com nslookup ou dig. Por exemplo, se o servidor for 8.8.8.8:
nslookup api.eu1.sdaconsole.io 8.8.8.8
dig @8.8.8.8 api.eu1.sdaconsole.io +short
Se esses comandos não estiverem presentes, eles podem ser instalados com os pacotes dnsutils ou bind9-dnsutils no Debian, ou pode-se utilizar um comando nativo como ping ou getent para testar a configuração de DNS atual:
ping api.eu1.sdaconsole.io
getent hosts api.eu1.sdaconsole.io
Configuração
Os servidores DNS podem ser gerenciados por serviços diferentes, dependendo da instalação do Linux. Em um Raspberry Pi, normalmente são gerenciados pelo serviço NetworkManager. O serviço que gerencia a resolução DNS provavelmente deixará um comentário em /etc/resolv.conf indicando que gerou o arquivo, como:
cat /etc/resolv.conf
> # Generated by NetworkManager
> nameserver 192.168.15.1
> nameserver fe80::dec6:37ff:fe36:5ee8%wlan0
cat /etc/resolv.conf
> # Generated by dhcpcd from eth0.dhcp
> # /etc/resolv.conf.head can replace this line
> nameserver 192.168.15.1
- NetworkManager
- dhcpcd
- resolvconf
Para definir os servidores DNS globais, crie o arquivo:
sudo nano /etc/NetworkManager/conf.d/dns.conf
E adicione:
[global-dns-domain-*]
servers=8.8.8.8,4.4.4.4
Reinicie o serviço NetworkManager e verifique os novos valores em /etc/resolv.conf
sudo systemctl restart NetworkManager
# Verify /etc/resolv.conf was updated
cat /etc/resolv.conf
sudo nano /etc/dhcpcd.conf
Adicione ou modifique ao final do arquivo:
# Static DNS configuration
static domain_name_servers=8.8.8.8 4.4.4.4
Aplique as alterações reiniciando o serviço dhcpcd e verifique se os servidores DNS foram atualizados:
sudo systemctl restart dhcpcd
# Verify /etc/resolv.conf was updated
cat /etc/resolv.conf
Para verificar se o resolvconf está disponível:
which resolvconf
dpkg -l | grep resolvconf
Configure os servidores DNS via resolvconf editando as configurações base:
# Edit the base configuration
sudo nano /etc/resolvconf/resolv.conf.d/head
Adicione:
nameserver 8.8.8.8
nameserver 4.4.4.4
Atualize o serviço resolvconf e verifique se os servidores DNS foram atualizados:
sudo resolvconf -u
# Verify /etc/resolv.conf was updated
cat /etc/resolv.conf
Servidores NTP
Um servidor de Protocolo de Tempo de Rede (NTP) é utilizado em sistemas Linux para sincronizar o relógio do sistema com uma fonte de tempo, como um relógio atômico ou um servidor central. A medição precisa do tempo é crucial para registros de log, protocolos de segurança e coordenação de ações em uma rede. A configuração incorreta de um servidor NTP causará falhas em chamadas HTTPS devido à invalidação de certificados SSL.
Teste
Revise o status de sincronização do NTP e se a data e a hora atuais estão corretas.
# Check NTP sync status
timedatectl status
# Check configured NTP servers
timedatectl timesync-status
timedatectl show-timesync --all
# Check logs from the timesync service
journalctl -u systemd-timesyncd -n 20
# Check if service is active
systemctl is-active systemd-timesyncd
Testando a conexão com um servidor específico:
# Using ntpdate, if installed
ntpdate -q 0.debian.pool.ntp.org
# Using Netcat
timeout 2 nc -u -z -v 0.debian.pool.ntp.org 123
Configuração
O servidor NTP pode ser configurado com um nome de domínio, como 0.debian.pool.ntp.org ou ntp.myorg.com, ou diretamente com um endereço IP.
# Configure systemd-timesyncd
sudo nano /etc/systemd/timesyncd.conf
Adicione o servidor NTP personalizado no bloco [Time] e certifique-se de que a linha não esteja comentada. Remova qualquer servidor em FallbackNTP que não possa ser alcançado.
[Time]
NTP=ntp.myorg.com ntp.myorg.local
FallbackNTP=
Reinicie e certifique-se de habilitar o serviço timesync.
# Restart and enable
sudo systemctl restart systemd-timesyncd
sudo systemctl enable systemd-timesyncd
# Force synchronization
sudo timedatectl set-ntp true
# Verify sync
timedatectl timesync-status
Servidores Proxy
Um servidor proxy atua como intermediário entre um cliente e os servidores de destino, encaminhando solicitações e respostas. Em ambientes corporativos, os servidores proxy são comumente utilizados para controle de segurança, filtragem de conteúdo, gerenciamento de largura de banda e registro de tráfego de saída. Os sistemas Linux em tais redes devem ser configurados para rotear suas solicitações HTTP/HTTPS através do proxy corporativo para acessar recursos externos, incluindo repositórios de pacotes e serviços web.
Teste
Verifique se o proxy está atualmente configurado consultando as variáveis de ambiente e as configurações de proxy do sistema:
# Check shell environment proxy variables
env | grep -i proxy
# Check system-wide proxy configuration
cat /etc/environment | grep -i proxy
# Check if proxy is set for current user
echo $http_proxy
echo $https_proxy
echo $no_proxy
Para verificar se um servidor proxy é necessário, tente conectar-se diretamente a um servidor externo:
# Try direct connection to a public server
timeout 5 curl -I https://repository.eu1.sdaconsole.io/glue/v2/linux/arm64/release.json 2>&1
# If it fails with connection errors, proxy might be required
# Common error: "Failed to connect" or "Connection timed out"
Se falhar com erros de conexão, o proxy pode ser necessário. Erros comuns são, por exemplo, Failed to connect ou Connection timed out.
Para testar uma solicitação com um servidor proxy específico:
# Test with curl
curl -I --proxy http://proxy.company.local:8080 https://repository.eu1.sdaconsole.io/glue/v2/linux/arm64/release.json
# Proxy with user authentication
curl -I --proxy http://user@pwd@proxy.company.local:8080 https://repository.eu1.sdaconsole.io/glue/v2/linux/arm64/release.json
# Test without proxy (direct connection)
curl -I --noproxy "*" https://repository.eu1.sdaconsole.io/glue/v2/linux/arm64/release.json
Configuração
Um endereço de proxy possui um dos formatos:
<protocol>://<proxy-address>:<port-number>
<protocol>://<username>:<password>@<proxy-address>:<port-number>
Configure o proxy para todos os usuários e aplicações:
# Edit system-wide environment
sudo nano /etc/environment
Adicione ou modifique as seguintes linhas:
http_proxy="http://proxy.company.local:8080"
https_proxy="http://proxy.company.local:8080"
no_proxy="localhost,127.0.0.1,*.company.local,10.0.0.0/8,192.168.0.0/16"
# Uppercase variants (some applications check these)
HTTP_PROXY="http://proxy.company.local:8080"
HTTPS_PROXY="http://proxy.company.local:8080"
NO_PROXY="localhost,127.0.0.1,*.company.local,10.0.0.0/8,192.168.0.0/16"
Aplique as alterações:
# Reload environment (or log out and back in)
source /etc/environment
# Verify variables are set
env | grep -i proxy
Para verificar se o tráfego está realmente passando pelo proxy:
# Verbose curl request showing proxy connection
curl -v -I https://repository.eu1.sdaconsole.io/glue/v2/linux/arm64/release.json 2>&1 | grep -i proxy
# Should show something like:
# * Uses proxy env variable http_proxy == 'http://proxy.company.local:3128'
# * Trying proxy.company.local:3128...
Alguns proxies realizam inspeção SSL. Pode ser necessário instalar certificados de CA corporativos:
# Copy corporate CA certificate
sudo cp company-ca.crt /usr/local/share/ca-certificates/
# Update CA trust store
sudo update-ca-certificates
# Verify
curl -I https://repository.eu1.sdaconsole.io/glue/v2/linux/arm64/release.json
Repositórios Debian
Os repositórios Debian são servidores que hospedam pacotes de software e atualizações para sistemas baseados em Debian. Em ambientes corporativos isolados, o acesso a espelhos públicos do Debian (como deb.debian.org ou archive.ubuntu.com) pode estar bloqueado por motivos de segurança. As empresas costumam manter seus próprios espelhos internos para controlar quais pacotes estão disponíveis e reduzir o uso de largura de banda externa.
Teste
Verifique os repositórios atualmente configurados:
# View configured repositories
cat /etc/apt/sources.list
# Check additional repository files
ls -la /etc/apt/sources.list.d/
cat /etc/apt/sources.list.d/*.list 2>/dev/null
A seguir, um script bash abrangente para testar completamente a conectividade com os repositórios configurados:
# Test if repository servers are reachable
grep -h "^deb http" /etc/apt/sources.list /etc/apt/sources.list.d/*.list 2>/dev/null | \
awk '{print $2, $3}' | sort -u | while read repo suite; do
echo "Testing: $repo (suite: $suite)"
# Test the Release file that APT actually fetches
# This is what APT checks first when doing 'apt update'
release_url="${repo}/dists/${suite}"
# Test with curl (follows redirects, checks certificates)
if curl -fsSL --connect-timeout 5 --max-time 10 -I "$release_url/InRelease" >/dev/null 2>&1; then
echo " > Repository is reachable"
else
if curl -fsSL --connect-timeout 5 --max-time 10 -I "$release_url/Release" >/dev/null 2>&1; then
echo " > Repository is reachable"
else
# If failed, show the specific error
error=$(curl -fsSL --connect-timeout 5 --max-time 10 -I "$repo" 2>&1 | head -1)
echo " X Unreachable: $error"
fi
fi
echo
done
Outro método é tentar atualizar as listas de pacotes para identificar problemas de repositório:
# Try to update package lists
sudo apt update
# Check for errors in apt logs
tail -20 /var/log/apt/term.log
Mensagens de erro comuns que indicam repositórios bloqueados:
Failed to fetch http://deb.debian.org/...Could not resolve 'deb.debian.org'Connection timed outUnable to connect to...
Teste manualmente um servidor de repositório específico:
# Test HTTP connectivity to a repository
curl -sSL -I --connect-timeout 5 http://deb.debian.org/debian/
# Or using wget
wget --spider --timeout=5 http://deb.debian.org/debian/
# Test DNS resolution
getent hosts deb.debian.org
Configuração
Edite o arquivo principal de fontes:
sudo nano /etc/apt/sources.list
Substitua o conteúdo pelo seu espelho interno. Para Debian 12 (bookworm):
# Internal Debian Repository Mirror
deb http://mirror.company.local/debian bookworm main contrib non-free non-free-firmware
deb http://mirror.company.local/debian bookworm-updates main contrib non-free non-free-firmware
deb http://mirror.company.local/debian-security bookworm-security main contrib non-free non-free-firmware
# Optionally, backports for newer packages
deb http://mirror.company.local/debian bookworm-backports main contrib non-free non-free-firmware
Se o seu espelho interno utilizar HTTPS:
deb https://mirror.company.local/debian bookworm main contrib non-free non-free-firmware
Nota: Para repositórios HTTPS, certifique-se de que os pacotes apt-transport-https e ca-certificates estejam instalados.
Configurar Prioridade de Repositório (Opcional)
Se você precisar utilizar repositórios internos e externos com preferência para os internos:
sudo nano /etc/apt/preferences.d/internal-mirror
Adicione:
Package: *
Pin: origin mirror.company.local
Pin-Priority: 900
Package: *
Pin: origin deb.debian.org
Pin-Priority: 500
Isso concede maior prioridade aos espelhos internos.
Configurando Proxy para Repositórios (Opcional)
Se a sua rede exigir um proxy para alcançar os repositórios:
# Configure APT proxy
echo 'Acquire::http::Proxy "http://proxy.company.local:3128";' | \
sudo tee /etc/apt/apt.conf.d/proxy.conf
# For HTTPS repositories
echo 'Acquire::https::Proxy "http://proxy.company.local:3128";' | \
sudo tee -a /etc/apt/apt.conf.d/proxy.conf
# Test
sudo apt update
Atualizar e Verificar
Após configurar os repositórios:
# Update package lists
sudo apt update
# Check for errors
echo $? # Should return 0 if successful
# Verify packages can be found
apt-cache policy apt
# Test installing a small package
sudo apt install --dry-run nano
Problemas Comuns
Problema: apt update fica travado indefinidamente
# Check if repository server is actually responding
timeout 10 curl -v http://mirror.company.local/debian/
# Check for proxy interference
unset http_proxy https_proxy
sudo apt update
Problema: Pacotes não encontrados após configurar o espelho
# Verify the mirror has the correct Debian version
curl http://mirror.company.local/debian/dists/ | grep bookworm
# Check if the mirror is properly synced
curl -sI http://mirror.company.local/debian/dists/bookworm/Release | grep Date
Problema: Fontes de repositório mistas causando conflitos
# Check all active sources
grep -rh "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/ | sort -u
# Disable conflicting sources
sudo mv /etc/apt/sources.list.d/problematic.list /etc/apt/sources.list.d/problematic.list.disabled
sudo apt update