Konfigurera Linux-gateways i produktionsnätverk
Den här guiden behandlar några av de grundläggande nätverkskonfigurationsparametrar som kan göra 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 nedanstående områden. Därför kan det hända att du inte kan köra vissa av kommandona som listas nedan. Det här avsnittet har skrivits med en Raspberry Pi med den inbyggda operativsystemsversionen Debian 12 (bookworm) som exempel.
Innan ditt supportsamtal med SEW-teamet, säkerställ att du har SSH-åtkomst till Linux-enheten från din dator för skärmdelning under sessionen.
Nedan följer 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 kontrollera att DNS-servern är nåbar med kommandon som ping eller nslookup. Säkerställ att servern svarar och att den korrekt översätter domännamn till IP-adresser. Felkonfigurationer kan leda till att domänuppslagning misslyckas, vilket påverkar nätverkskommunikation och internetåtkomst.
Testning
Kontrollera de DNS-server-IP-adresser som är konfigurerade på värden med:
cat /etc/resolv.conf
Varje DNS-server kan testas separat 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, alternativt kan ett inbyggt 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
Konfiguration
DNS-servrarna kan hanteras av olika tjänster beroende på Linux-installationen. För en Raspberry Pi hanteras de vanligtvis av tjänsten NetworkManager. Den tjänst som hanterar DNS-uppslagningen lämnar sannolikt en kommentar i /etc/resolv.conf som anger att den genererat 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
Skapa filen för att ange de globala DNS-servrarna:
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
Verkställ ändringarna genom att starta om tjänsten dhcpcd och kontrollera om DNS-servrarna uppdaterades:
sudo systemctl restart dhcpcd
# Verify /etc/resolv.conf was updated
cat /etc/resolv.conf
Så här kontrollerar du om resolvconf är tillgängligt:
which resolvconf
dpkg -l | grep resolvconf
Konfigurera DNS-servrarna via resolvconf genom att redigera basinställningarna:
# 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 i ett nätverk. Felaktig konfiguration av en NTP-server gör att HTTPS-anrop misslyckas på grund av ogiltiga SSL-certifikat.
Testning
Granska NTP-synkroniseringsstatusen och kontrollera 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
Konfiguration
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 utkommenterad. Ta bort alla servrar i FallbackNTP som inte kan nås.
[Time]
NTP=ntp.myorg.com ntp.myorg.local
FallbackNTP=
Starta om och se till att aktivera tjänsten 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
Proxyservrar
En proxyserver fungerar som mellanhand mellan en klient och destinationsservrar och vidarebefordrar förfrågningar och svar. I företagsmiljöer används proxyservrar vanligen 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öretagets proxy för att komma åt externa resurser, inklusive paketarkiv och webbtjänster.
Testning
Kontrollera om en proxy är konfigurerad för närvarande 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.
Så här testar du 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
Konfiguration
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"
Verkställ ändringarna:
# Reload environment (or log out and back in)
source /etc/environment
# Verify variables are set
env | grep -i proxy
Så här kontrollerar du 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-paketarkiv
Debian-paketarkiv ä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 extern bandbreddsanvändning.
Testning
Kontrollera de för närvarande konfigurerade paketarkiven:
# 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 paketarkiven:
# 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 problem med paketarkiven:
# 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 paketarkiv:
Failed to fetch http://deb.debian.org/...Could not resolve 'deb.debian.org'Connection timed outUnable to connect to...
Testa en specifik paketarkivsserver 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
Konfiguration
Redigera huvudfilen för källor:
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-paketarkiv, säkerställ att paketen apt-transport-https och ca-certificates är installerade.
Konfigurera prioritet för paketarkiv (valfritt)
Om du behöver använda både interna och externa paketarkiv med företräde 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 paketarkiv (valfritt)
Om ditt nätverk kräver en proxy för att nå paketarkiven:
# 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 paketarkiven 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 på obestämd tid
# 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 konfiguration av spegeln
# 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 paketarkivskä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