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 in een productieomgeving niet werkt 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 op basis van een Raspberry Pi met de native Debian 12 (bookworm) OS-versie als voorbeeld.

info

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

Hieronder vindt u een lijst met veelvoorkomende gebieden die de 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. Onjuiste 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 in Debian worden geïnstalleerd met de pakketten dnsutils of bind9-dnsutils, 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 worden ze 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. Een nauwkeurige tijdregistratie is cruciaal voor logging, beveiligingsprotocollen en het coördineren van acties binnen een netwerk. Een verkeerde instelling 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 is uitgecommentarieerd. 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 de 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 met een specifieke proxyserver testen:

# 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 loopt:

# 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 op 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 zijn geblokkeerd. Bedrijven onderhouden vaak hun eigen interne mirrors om te bepalen welke pakketten beschikbaar zijn en om extern 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 volgt 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 om te proberen de pakketlijsten bij te werken om repositoryproblemen op te sporen:

# Try to update package lists
sudo apt update

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

Veelvoorkomende foutmeldingen die duiden 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 handmatig een specifieke repositoryserver:

# 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 bij 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 voor repository's configureren (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