Ga naar hoofdinhoud

Linux-gateways configureren in productienetwerken

Deze handleiding behandelt enkele van de basisparameters voor netwerkconfiguratie die ertoe kunnen leiden dat een Linux-systeem niet werkt in een productieomgeving vanwege de geïsoleerde infrastructuur. Houd er rekening mee dat Linux-distributies verschillende services kunnen gebruiken voor de volgende onderwerpen. Daarom is het mogelijk dat u sommige van de onderstaande commando's niet kunt uitvoeren. Dit hoofdstuk is geschreven met een Raspberry Pi met de native Debian 12 (bookworm) OS-versie als voorbeeld.

info

Zorg er vóór uw supportgesprek met het SDA-team voor dat u SSH-toegang hebt tot het Linux-apparaat vanaf uw computer, zodat u tijdens de sessie uw scherm kunt delen.

Hieronder volgt een lijst met veelvoorkomende gebieden die een verbinding kunnen verhinderen.

DNS-servers​

Een Domain Name System (DNS)-server vertaalt domeinnamen naar IP-adressen om communicatie via het internet mogelijk te maken. Een juiste DNS-configuratie is cruciaal voor een Linux-systeem dat in een netwerkomgeving werkt. Het oplossen van DNS-problemen omvat het controleren van de bereikbaarheid van de DNS-server met commando's zoals ping of nslookup. Zorg ervoor dat de server reageert en domeinnamen correct naar IP-adressen vertaalt. Verkeerde configuraties kunnen leiden tot het mislukken van domeinresolutie, wat de netwerkcommunicatie en internettoegang beïnvloedt.

Testen​

Controleer de op de host geconfigureerde DNS-server-IP's met:

cat /etc/resolv.conf

Elke DNS-server kan afzonderlijk worden getest met nslookup of dig. Bijvoorbeeld, als de server 8.8.8.8 is:

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

Als deze commando's niet aanwezig zijn, kunnen ze worden geïnstalleerd met de pakketten dnsutils of bind9-dnsutils in Debian, of kan een native commando zoals ping of getent worden gebruikt om de huidige DNS-configuratie te testen:

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

Configureren​

De DNS-servers kunnen door verschillende services worden beheerd, afhankelijk van de Linux-installatie. Bij een Raspberry Pi wordt dit doorgaans beheerd door de service NetworkManager. De service die de DNS-resolutie beheert, laat waarschijnlijk een opmerking achter in /etc/resolv.conf waarin staat dat deze het bestand heeft gegenereerd, bijvoorbeeld:

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

Maak het volgende bestand aan om de globale DNS-servers in te stellen:

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

En voeg toe:

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

Start de service NetworkManager opnieuw en controleer de nieuwe waarden in /etc/resolv.conf

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

NTP-servers​

Een Network Time Protocol (NTP)-server wordt in Linux-systemen gebruikt om de systeemklok te synchroniseren met een tijdbron, zoals een atoomklok of een centrale server. Nauwkeurige tijdregistratie is cruciaal voor logging, beveiligingsprotocollen en het coördineren van acties binnen een netwerk. Een verkeerde configuratie van een NTP-server zorgt ervoor dat HTTPS-aanroepen mislukken doordat SSL-certificaten ongeldig worden verklaard.

Testen​

Controleer de NTP-synchronisatiestatus en of de huidige datum en tijd correct zijn.

# 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

De verbinding met een specifieke server testen:

# 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

Configureren​

De NTP-server kan worden geconfigureerd met een domeinnaam, zoals 0.debian.pool.ntp.org of ntp.myorg.com, of rechtstreeks met een IP-adres.

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

Voeg de aangepaste NTP-server toe in het blok [Time] en zorg ervoor dat de regel niet uitgecommentarieerd is. Verwijder elke server in FallbackNTP die niet bereikbaar is.

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

Start de service timesync opnieuw en zorg ervoor dat deze is ingeschakeld.

# 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

Proxyservers​

Een proxyserver fungeert als tussenpersoon tussen een client en bestemmingsservers en stuurt verzoeken en antwoorden door. In bedrijfsomgevingen worden proxyservers vaak gebruikt voor beveiligingscontrole, contentfiltering, bandbreedtebeheer en logging van uitgaand verkeer. Linux-systemen in dergelijke netwerken moeten zo worden geconfigureerd dat hun HTTP/HTTPS-verzoeken via de bedrijfsproxy worden gerouteerd om toegang te krijgen tot externe bronnen, waaronder pakketrepository's en webservices.

Testen​

Controleer of er momenteel een proxy is geconfigureerd door de omgevingsvariabelen en de systeembrede proxy-instellingen te bekijken:

# 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

Om te controleren of een proxyserver nodig is, probeert u rechtstreeks verbinding te maken met een externe 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"

Als dit mislukt met verbindingsfouten, is mogelijk een proxy vereist. Veelvoorkomende fouten zijn bijvoorbeeld Failed to connect of Connection timed out.

Een verzoek testen met een specifieke 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

Configureren​

info

Een proxyadres heeft een van de volgende formaten:

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

Configureer de proxy voor alle gebruikers en applicaties:

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

Voeg de volgende regels toe of pas ze aan:

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"

Pas de wijzigingen toe:

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

Om te controleren of het verkeer daadwerkelijk via de proxy verloopt:

# 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...
waarschuwing

Sommige proxy's voeren SSL-inspectie uit. Mogelijk moet u bedrijfs-CA-certificaten installeren:

# 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-repository's​

Debian-repository's zijn servers die softwarepakketten en updates voor Debian-gebaseerde systemen hosten. In geïsoleerde bedrijfsomgevingen kan de toegang tot openbare Debian-mirrors (zoals deb.debian.org of archive.ubuntu.com) om veiligheidsredenen geblokkeerd zijn. Bedrijven onderhouden vaak hun eigen interne mirrors om te bepalen welke pakketten beschikbaar zijn en om het externe bandbreedtegebruik te verminderen.

Testen​

Controleer de momenteel geconfigureerde repository's:

# 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

Hier is een uitgebreid bash-script om de connectiviteit met de geconfigureerde repository's volledig te testen:

# 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

Een andere methode is te proberen de pakketlijsten bij te werken om repositoryproblemen te identificeren:

# Try to update package lists
sudo apt update

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

Veelvoorkomende foutmeldingen die wijzen op geblokkeerde repository's:

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

Test een specifieke repositoryserver handmatig:

# 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

Configureren​

Bewerk het hoofdbestand met bronnen:

sudo nano /etc/apt/sources.list

Vervang de inhoud door uw interne mirror. Voor 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

Als uw interne mirror HTTPS gebruikt:

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

Opmerking: Zorg er voor HTTPS-repository's voor dat de pakketten apt-transport-https en ca-certificates zijn geïnstalleerd.

Repositoryprioriteit configureren (optioneel)

Als u zowel interne als externe repository's moet gebruiken waarbij de voorkeur uitgaat naar de interne:

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

Voeg toe:

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

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

Hiermee krijgen interne mirrors een hogere prioriteit.

Proxy configureren voor repository's (optioneel)

Als uw netwerk een proxy vereist om repository's te bereiken:

# 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

Bijwerken en verifiëren

Na het configureren van de repository's:

# 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

Veelvoorkomende problemen

Probleem: apt update blijft oneindig hangen

# 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

Probleem: Pakketten worden niet gevonden na het configureren van de 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

Probleem: Gemengde repositorybronnen veroorzaken conflicten

# 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