Saltar al contenido principal

Configuración de gateways Linux en redes de producción

Esta guía cubre algunos de los parámetros básicos de configuración de red que pueden impedir que un sistema Linux funcione en un entorno de producción debido al aislamiento de la infraestructura. Tenga en cuenta que las distribuciones de Linux pueden utilizar servicios distintos para los temas siguientes. Por ello, es posible que no pueda ejecutar algunos de los comandos indicados a continuación. Esta sección se ha redactado utilizando como ejemplo una Raspberry Pi con la versión nativa del sistema operativo Debian 12 (bookworm).

información

Antes de su llamada de soporte con el equipo de SDA, asegúrese de disponer de acceso SSH al dispositivo Linux desde su ordenador para compartir pantalla durante la sesión.

A continuación se presenta una lista de las áreas habituales que pueden impedir la conexión.

Servidores DNS​

Un servidor del Sistema de Nombres de Dominio (DNS) resuelve los nombres de dominio en direcciones IP para facilitar la comunicación a través de internet. Una configuración correcta del DNS es fundamental para un sistema Linux que opere en un entorno de red. La resolución de problemas de DNS implica comprobar la accesibilidad del servidor DNS mediante comandos como ping o nslookup. Asegúrese de que el servidor responde y resuelve correctamente los nombres de dominio en direcciones IP. Las configuraciones incorrectas pueden provocar fallos en la resolución de dominios, lo que afecta a las comunicaciones de red y al acceso a internet.

Pruebas​

Compruebe las IP de los servidores DNS configurados en el host con:

cat /etc/resolv.conf

Cada servidor DNS puede probarse individualmente con nslookup o dig. Por ejemplo, si el servidor es 8.8.8.8:

nslookup api.eu1.sdaconsole.io 8.8.8.8
dig @8.8.8.8 api.eu1.sdaconsole.io +short

Si estos comandos no están presentes, pueden instalarse con los paquetes dnsutils o bind9-dnsutils en Debian, o bien puede utilizarse un comando nativo como ping o getent para probar la configuración DNS actual:

ping api.eu1.sdaconsole.io
getent hosts api.eu1.sdaconsole.io

Configuración​

Los servidores DNS pueden estar gestionados por diferentes servicios, según la instalación de Linux. En una Raspberry Pi, normalmente los gestiona el servicio NetworkManager. El servicio que gestiona la resolución DNS probablemente dejará un comentario en /etc/resolv.conf indicando que generó el archivo, como por ejemplo:

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

Para establecer los servidores DNS globales, cree el archivo:

sudo nano /etc/NetworkManager/conf.d/dns.conf

Y añada:

[global-dns-domain-*]
servers=8.8.8.8,4.4.4.4

Reinicie el servicio NetworkManager y compruebe los nuevos valores en /etc/resolv.conf

sudo systemctl restart NetworkManager
# Verify /etc/resolv.conf was updated
cat /etc/resolv.conf

Servidores NTP​

Un servidor de Protocolo de Tiempo de Red (NTP) se utiliza en los sistemas Linux para sincronizar el reloj del sistema con una fuente de tiempo, como un reloj atómico o un servidor central. Una medición precisa del tiempo es crucial para el registro de eventos, los protocolos de seguridad y la coordinación de acciones en una red. Una configuración incorrecta de un servidor NTP provocará el fallo de las llamadas HTTPS debido a la invalidación de los certificados SSL.

Pruebas​

Revise el estado de sincronización NTP y si la fecha y hora actuales son correctas.

# 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

Prueba de la conexión a un 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

Configuración​

El servidor NTP puede configurarse con un nombre de dominio, como 0.debian.pool.ntp.org o ntp.myorg.com, o directamente con una dirección IP.

# Configure systemd-timesyncd
sudo nano /etc/systemd/timesyncd.conf

Añada el servidor NTP personalizado en el bloque [Time] y asegúrese de que la línea no esté comentada. Elimine de FallbackNTP cualquier servidor que no sea accesible.

[Time]
NTP=ntp.myorg.com ntp.myorg.local
FallbackNTP=

Reinicie y asegúrese de habilitar el servicio 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​

Un servidor proxy actúa como intermediario entre un cliente y los servidores de destino, reenviando solicitudes y respuestas. En entornos empresariales, los servidores proxy se utilizan habitualmente para el control de seguridad, el filtrado de contenidos, la gestión del ancho de banda y el registro del tráfico de salida. Los sistemas Linux en dichas redes deben configurarse para enrutar sus solicitudes HTTP/HTTPS a través del proxy corporativo con el fin de acceder a recursos externos, incluidos los repositorios de paquetes y los servicios web.

Pruebas​

Compruebe si actualmente hay un proxy configurado revisando las variables de entorno y los ajustes de proxy de todo el 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 comprobar si es necesario un servidor proxy, intente conectarse directamente a un 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"

Si falla con errores de conexión, puede ser necesario un proxy. Errores habituales son, por ejemplo, Failed to connect o Connection timed out.

Para probar una solicitud con un 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

Configuración​

información

Una dirección de proxy tiene uno de estos formatos:

<protocol>://<proxy-address>:<port-number>
<protocol>://<username>:<password>@<proxy-address>:<port-number>

Configure el proxy para todos los usuarios y aplicaciones:

# Edit system-wide environment
sudo nano /etc/environment

Añada o modifique las siguientes líneas:

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 los cambios:

# Reload environment (or log out and back in)
source /etc/environment
# Verify variables are set
env | grep -i proxy

Para comprobar si el tráfico realmente pasa por el 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...
aviso

Algunos proxies realizan inspección SSL. Puede ser necesario instalar los certificados de la CA corporativa:

# 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

Repositorios de Debian​

Los repositorios de Debian son servidores que alojan paquetes de software y actualizaciones para sistemas basados en Debian. En entornos empresariales aislados, el acceso a los mirrors públicos de Debian (como deb.debian.org o archive.ubuntu.com) puede estar bloqueado por motivos de seguridad. Las empresas suelen mantener sus propios mirrors internos para controlar qué paquetes están disponibles y reducir el consumo de ancho de banda externo.

Pruebas​

Compruebe los repositorios configurados actualmente:

# 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 continuación se muestra un script de bash completo para probar exhaustivamente la conectividad con los repositorios 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

Otro método consiste en intentar actualizar las listas de paquetes para identificar problemas con los repositorios:

# Try to update package lists
sudo apt update

# Check for errors in apt logs
tail -20 /var/log/apt/term.log

Mensajes de error habituales que indican repositorios bloqueados:

  • Failed to fetch http://deb.debian.org/...
  • Could not resolve 'deb.debian.org'
  • Connection timed out
  • Unable to connect to...

Pruebe manualmente un servidor de repositorio 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

Configuración​

Edite el archivo principal de fuentes:

sudo nano /etc/apt/sources.list

Sustituya el contenido por su mirror 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

Si su mirror interno utiliza HTTPS:

deb https://mirror.company.local/debian bookworm main contrib non-free non-free-firmware

Nota: Para repositorios HTTPS, asegúrese de que los paquetes apt-transport-https y ca-certificates estén instalados.

Configurar la prioridad de los repositorios (opcional)

Si necesita utilizar repositorios internos y externos dando preferencia a los internos:

sudo nano /etc/apt/preferences.d/internal-mirror

Añada:

Package: *
Pin: origin mirror.company.local
Pin-Priority: 900

Package: *
Pin: origin deb.debian.org
Pin-Priority: 500

Esto otorga mayor prioridad a los mirrors internos.

Configuración del proxy para los repositorios (opcional)

Si su red requiere un proxy para acceder a los repositorios:

# 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

Actualizar y verificar

Después de configurar los repositorios:

# 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 habituales

Problema: apt update se queda bloqueado 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: No se encuentran los paquetes después de configurar el mirror

# 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: Fuentes de repositorio mezcladas que provocan conflictos

# 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