Konfigurera Linux-gateways i produktionsnätverk
Den här guiden beskriver några av de grundläggande nätverkskonfigurationsparametrarna som kan orsaka att ett Linux-system inte fungerar i en produktionsmiljö på grund av den isolerade infrastrukturen. Observera att Linux-distributioner kan använda olika tjänster för följande områden. Därför kan du eventuellt inte köra vissa av kommandona som listas nedan. Detta avsnitt har skrivits med en Raspberry Pi med nativ Debian 12 (bookworm) som exempel.
Innan ditt supportsamtal med SDA-teamet bör du säkerställa att du har SSH-åtkomst till Linux-enheten från din dator för skärmdelning under sessionen.
Följande är en lista över vanliga områden som kan förhindra anslutning.
DNS-servrar
En DNS-server (Domain Name System) översätter domännamn till IP-adresser för att möjliggöra kommunikation över internet. Korrekt DNS-konfiguration är avgörande för ett Linux-system som körs i en nätverksmiljö. Felsökning av DNS-problem innebär att man kontrollerar att DNS-servern är nåbar med kommandon som ping eller nslookup. Säkerställ att servern svarar och korrekt översätter domännamn till IP-adresser. Felkonfigurationer kan leda till att domännamnsuppslag misslyckas, vilket påverkar nätverkskommunikation och internetåtkomst.
Testning
Kontrollera vilka DNS-server-IP-adresser som är konfigurerade på värden med:
cat /etc/resolv.conf
Varje DNS-server kan testas individuellt med antingen nslookup eller dig. Om servern till exempel är 8.8.8.8:
nslookup api.eu1.sdaconsole.io 8.8.8.8
dig @8.8.8.8 api.eu1.sdaconsole.io +short
Om dessa kommandon inte finns kan de installeras antingen med paketet dnsutils eller bind9-dnsutils i Debian, eller så kan ett nativt kommando som ping eller getent användas för att testa den aktuella DNS-konfigurationen:
ping api.eu1.sdaconsole.io
getent hosts api.eu1.sdaconsole.io
Konfigurering
DNS-servrarna kan hanteras av olika tjänster beroende på Linux-installationen. För en Raspberry Pi hanteras de vanligtvis av tjänsten NetworkManager. Tjänsten som hanterar DNS-uppslagen lämnar sannolikt en kommentar i /etc/resolv.conf som anger att den genererade filen, till exempel:
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
För att ange de globala DNS-servrarna, skapa filen:
sudo nano /etc/NetworkManager/conf.d/dns.conf
Och lägg till:
[global-dns-domain-*]
servers=8.8.8.8,4.4.4.4
Starta om tjänsten NetworkManager och kontrollera de nya värdena i /etc/resolv.conf
sudo systemctl restart NetworkManager
# Verify /etc/resolv.conf was updated
cat /etc/resolv.conf
sudo nano /etc/dhcpcd.conf
Lägg till eller ändra i slutet av filen:
# Static DNS configuration
static domain_name_servers=8.8.8.8 4.4.4.4
Tillämpa ändringarna genom att starta om tjänsten dhcpcd och verifiera om DNS-servrarna uppdaterades:
sudo systemctl restart dhcpcd
# Verify /etc/resolv.conf was updated
cat /etc/resolv.conf
För att kontrollera om resolvconf är tillgängligt:
which resolvconf
dpkg -l | grep resolvconf
Konfigurera DNS-servrarna via resolvconf genom att redigera baskonfigurationerna:
# Edit the base configuration
sudo nano /etc/resolvconf/resolv.conf.d/head
Lägg till:
nameserver 8.8.8.8
nameserver 4.4.4.4
Uppdatera tjänsten resolvconf och kontrollera om DNS-servrarna uppdaterades:
sudo resolvconf -u
# Verify /etc/resolv.conf was updated
cat /etc/resolv.conf
NTP-servrar
En NTP-server (Network Time Protocol) används i Linux-system för att synkronisera systemklockan med en tidskälla, till exempel en atomklocka eller en central server. Exakt tidhållning är avgörande för loggning, säkerhetsprotokoll och samordning av åtgärder över ett nätverk. Felaktig konfiguration av en NTP-server orsakar att HTTPS-anrop misslyckas på grund av att SSL-certifikat blir ogiltiga.
Testning
Granska NTP-synkroniseringens status och om aktuellt datum och tid är korrekta.
# 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
Testa anslutningen till en specifik server:
# 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
Konfigurering
NTP-servern kan konfigureras med ett domännamn, till exempel 0.debian.pool.ntp.org eller ntp.myorg.com, eller direkt med en IP-adress.
# Configure systemd-timesyncd
sudo nano /etc/systemd/timesyncd.conf
Lägg till den anpassade NTP-servern i blocket [Time] och säkerställ att raden inte är kommenterad. Ta bort alla servrar i FallbackNTP som inte kan nås.
[Time]
NTP=ntp.myorg.com ntp.myorg.local
FallbackNTP=
Starta om och säkerställ att tjänsten timesync aktiveras.
# 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
Proxyservrar
En proxyserver fungerar som en mellanhand mellan en klient och målservrar och vidarebefordrar förfrågningar och svar. I företagsmiljöer används proxyservrar ofta för säkerhetskontroll, innehållsfiltrering, bandbreddshantering och loggning av utgående trafik. Linux-system i sådana nätverk måste konfigureras för att dirigera sina HTTP/HTTPS-förfrågningar via företagsproxyn för att komma åt externa resurser, inklusive paketarkiv och webbtjänster.
Testning
Kontrollera om en proxy för närvarande är konfigurerad genom att granska miljövariablerna och de systemomfattande proxyinställningarna:
# 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
För att kontrollera om en proxyserver behövs, försök ansluta direkt till en extern server:
# 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"
Om det misslyckas med anslutningsfel kan en proxy krävas. Vanliga fel är till exempel Failed to connect eller Connection timed out.
För att testa en förfrågan med en specifik proxyserver:
# 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
Konfigurering
En proxyadress har ett av följande format:
<protocol>://<proxy-address>:<port-number>
<protocol>://<username>:<password>@<proxy-address>:<port-number>
Konfigurera proxy för alla användare och applikationer:
# Edit system-wide environment
sudo nano /etc/environment
Lägg till eller ändra följande rader:
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"
Tillämpa ändringarna:
# Reload environment (or log out and back in)
source /etc/environment
# Verify variables are set
env | grep -i proxy
För att kontrollera om trafiken faktiskt går via proxyn:
# 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...
Vissa proxyservrar utför SSL-inspektion. Du kan behöva installera företagets CA-certifikat:
# 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
Debian-arkiv
Debian-arkiv är servrar som tillhandahåller programvarupaket och uppdateringar för Debian-baserade system. I isolerade företagsmiljöer kan åtkomst till publika Debian-speglar (som deb.debian.org eller archive.ubuntu.com) vara blockerad av säkerhetsskäl. Företag underhåller ofta egna interna speglar för att kontrollera vilka paket som är tillgängliga och för att minska användningen av extern bandbredd.
Testning
Kontrollera de för närvarande konfigurerade arkiven:
# 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
Här är ett omfattande bash-skript för att fullständigt testa anslutningen till de konfigurerade arkiven:
# 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
En annan metod är att försöka uppdatera paketlistorna för att identifiera arkivproblem:
# Try to update package lists
sudo apt update
# Check for errors in apt logs
tail -20 /var/log/apt/term.log
Vanliga felmeddelanden som indikerar blockerade arkiv:
Failed to fetch http://deb.debian.org/...Could not resolve 'deb.debian.org'Connection timed outUnable to connect to...
Testa en specifik arkivserver manuellt:
# 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
Konfigurering
Redigera huvudkällfilen:
sudo nano /etc/apt/sources.list
Ersätt innehållet med din interna spegel. För 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
Om din interna spegel använder HTTPS:
deb https://mirror.company.local/debian bookworm main contrib non-free non-free-firmware
Observera: För HTTPS-arkiv, säkerställ att paketen apt-transport-https och ca-certificates är installerade.
Konfigurera arkivprioritet (valfritt)
Om du behöver använda både interna och externa arkiv med förtur för de interna:
sudo nano /etc/apt/preferences.d/internal-mirror
Lägg till:
Package: *
Pin: origin mirror.company.local
Pin-Priority: 900
Package: *
Pin: origin deb.debian.org
Pin-Priority: 500
Detta ger interna speglar högre prioritet.
Konfigurera proxy för arkiv (valfritt)
Om ditt nätverk kräver en proxy för att nå arkiven:
# 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
Uppdatera och verifiera
Efter att arkiven har konfigurerats:
# 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
Vanliga problem
Problem: apt update hänger sig oändligt
# 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
Problem: Paket hittas inte efter konfigurering av spegel
# 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
Problem: Blandade arkivkällor orsakar konflikter
# 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