Linux gateway-ek konfigurálása éles hálózatokban
Ez az útmutató néhány olyan alapvető hálózati konfigurációs paramétert mutat be, amelyek miatt egy Linux rendszer az elszigetelt infrastruktúra következtében nem működik éles környezetben. Vegye figyelembe, hogy a Linux disztribúciók eltérő szolgáltatásokat használhatnak az alábbi témakörökhöz. Ezért előfordulhat, hogy az alább felsorolt parancsok egy részét nem tudja futtatni. Ez a szakasz példaként egy Raspberry Pi eszközt használ natív Debian 12 (bookworm) operációsrendszer-verzióval.
Az SDA csapattal folytatott támogatási hívás előtt győződjön meg arról, hogy számítógépéről SSH-hozzáféréssel rendelkezik a Linux eszközhöz, hogy a munkamenet során képernyőmegosztást tudjon végezni.
Az alábbiakban felsoroljuk azokat a gyakori területeket, amelyek megakadályozhatják a kapcsolódást.
DNS-kiszolgálók
A Domain Name System (DNS) kiszolgáló a domainneveket IP-címekké oldja fel, hogy lehetővé tegye az interneten keresztüli kommunikációt. A megfelelő DNS-konfiguráció kritikus fontosságú a hálózati környezetben működő Linux rendszer számára. A DNS-problémák elhárítása során ellenőrizni kell a DNS-kiszolgáló elérhetőségét olyan parancsokkal, mint a ping vagy az nslookup. Győződjön meg arról, hogy a kiszolgáló válaszol, és helyesen oldja fel a domainneveket IP-címekké. A hibás konfiguráció a domainfeloldás meghiúsulásához vezethet, ami befolyásolja a hálózati kommunikációt és az internet-hozzáférést.
Tesztelés
Ellenőrizze a gazdagépen beállított DNS-kiszolgálók IP-címeit a következővel:
cat /etc/resolv.conf
Minden DNS-kiszolgáló egyenként tesztelhető az nslookup vagy a dig paranccsal. Például ha a kiszolgáló a 8.8.8.8:
nslookup api.eu1.sdaconsole.io 8.8.8.8
dig @8.8.8.8 api.eu1.sdaconsole.io +short
Ha ezek a parancsok nem állnak rendelkezésre, a Debian rendszerben a dnsutils vagy a bind9-dnsutils csomagokkal telepíthetők, illetve az aktuális DNS-konfiguráció tesztelésére natív parancs, például a ping vagy a getent is használható:
ping api.eu1.sdaconsole.io
getent hosts api.eu1.sdaconsole.io
Konfigurálás
A DNS-kiszolgálókat a Linux telepítéstől függően különböző szolgáltatások kezelhetik. Raspberry Pi esetén ezt jellemzően a NetworkManager szolgáltatás kezeli. A DNS-feloldást kezelő szolgáltatás valószínűleg megjegyzést hagy a /etc/resolv.conf fájlban, amely jelzi, hogy a fájlt ő generálta, például:
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
A globális DNS-kiszolgálók beállításához hozza létre a fájlt:
sudo nano /etc/NetworkManager/conf.d/dns.conf
És adja hozzá:
[global-dns-domain-*]
servers=8.8.8.8,4.4.4.4
Indítsa újra a NetworkManager szolgáltatást, és ellenőrizze az új értékeket a /etc/resolv.conf fájlban
sudo systemctl restart NetworkManager
# Verify /etc/resolv.conf was updated
cat /etc/resolv.conf
sudo nano /etc/dhcpcd.conf
Adja hozzá vagy módosítsa a fájl végén:
# Static DNS configuration
static domain_name_servers=8.8.8.8 4.4.4.4
Alkalmazza a módosításokat a dhcpcd szolgáltatás újraindításával, és ellenőrizze, hogy a DNS-kiszolgálók frissültek-e:
sudo systemctl restart dhcpcd
# Verify /etc/resolv.conf was updated
cat /etc/resolv.conf
Annak ellenőrzéséhez, hogy a resolvconf elérhető-e:
which resolvconf
dpkg -l | grep resolvconf
Állítsa be a DNS-kiszolgálókat a resolvconf segítségével az alapkonfiguráció szerkesztésével:
# Edit the base configuration
sudo nano /etc/resolvconf/resolv.conf.d/head
Adja hozzá:
nameserver 8.8.8.8
nameserver 4.4.4.4
Frissítse a resolvconf szolgáltatást, és ellenőrizze, hogy a DNS-kiszolgálók frissültek-e:
sudo resolvconf -u
# Verify /etc/resolv.conf was updated
cat /etc/resolv.conf
NTP-kiszolgálók
A Network Time Protocol (NTP) kiszolgálót Linux rendszerekben arra használják, hogy a rendszerórát egy időforrással, például atomórával vagy központi kiszolgálóval szinkronizálják. A pontos időmérés elengedhetetlen a naplózáshoz, a biztonsági protokollokhoz és a hálózaton átívelő műveletek összehangolásához. Az NTP-kiszolgáló hibás beállítása azt eredményezi, hogy a HTTPS-hívások az SSL-tanúsítvány érvénytelenné válása miatt meghiúsulnak.
Tesztelés
Tekintse át az NTP-szinkronizáció állapotát, valamint azt, hogy az aktuális dátum és idő helyes-e.
# 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
Kapcsolat tesztelése egy adott kiszolgálóhoz:
# 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
Konfigurálás
Az NTP-kiszolgáló konfigurálható domainnévvel, például 0.debian.pool.ntp.org vagy ntp.myorg.com, illetve közvetlenül IP-címmel.
# Configure systemd-timesyncd
sudo nano /etc/systemd/timesyncd.conf
Adja hozzá az egyéni NTP-kiszolgálót a [Time] blokkban, és győződjön meg arról, hogy a sor nincs megjegyzésbe téve. Távolítson el minden olyan kiszolgálót a FallbackNTP értékéből, amely nem érhető el.
[Time]
NTP=ntp.myorg.com ntp.myorg.local
FallbackNTP=
Indítsa újra, és mindenképpen engedélyezze a timesync szolgáltatást.
# 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
Proxykiszolgálók
A proxykiszolgáló közvetítőként működik az ügyfél és a célkiszolgálók között, továbbítva a kéréseket és a válaszokat. Vállalati környezetben a proxykiszolgálókat gyakran használják biztonsági ellenőrzésre, tartalomszűrésre, sávszélesség-kezelésre és a kimenő forgalom naplózására. Az ilyen hálózatokban működő Linux rendszereket úgy kell beállítani, hogy HTTP/HTTPS kéréseiket a vállalati proxyn keresztül irányítsák a külső erőforrások, köztük a csomagtárolók és webszolgáltatások eléréséhez.
Tesztelés
Ellenőrizze, hogy jelenleg be van-e állítva proxy a környezeti változók és a rendszerszintű proxybeállítások megtekintésével:
# 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
Annak ellenőrzéséhez, hogy szükség van-e proxykiszolgálóra, próbáljon meg közvetlenül csatlakozni egy külső kiszolgálóhoz:
# 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"
Ha kapcsolódási hibával meghiúsul, valószínűleg proxyra van szükség. Gyakori hibák például a Failed to connect vagy a Connection timed out.
Kérés tesztelése egy adott proxykiszolgálóval:
# 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
Konfigurálás
A proxycím formátuma az alábbiak egyike:
<protocol>://<proxy-address>:<port-number>
<protocol>://<username>:<password>@<proxy-address>:<port-number>
Proxy beállítása minden felhasználó és alkalmazás számára:
# Edit system-wide environment
sudo nano /etc/environment
Adja hozzá vagy módosítsa a következő sorokat:
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"
Alkalmazza a módosításokat:
# Reload environment (or log out and back in)
source /etc/environment
# Verify variables are set
env | grep -i proxy
Annak ellenőrzéséhez, hogy a forgalom ténylegesen a proxyn keresztül halad-e:
# 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...
Egyes proxyk SSL-ellenőrzést végeznek. Előfordulhat, hogy telepítenie kell a vállalati CA-tanúsítványokat:
# 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-tárolók
A Debian-tárolók olyan kiszolgálók, amelyek szoftvercsomagokat és frissítéseket tárolnak Debian-alapú rendszerek számára. Elszigetelt vállalati környezetben a nyilvános Debian-tükrök (például a deb.debian.org vagy az archive.ubuntu.com) elérése biztonsági okokból blokkolva lehet. A vállalatok gyakran saját belső tükröket üzemeltetnek annak érdekében, hogy szabályozzák, mely csomagok érhetők el, és csökkentsék a külső sávszélesség-használatot.
Tesztelés
Ellenőrizze a jelenleg beállított tárolókat:
# 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
Az alábbi átfogó bash szkripttel teljeskörűen tesztelhető a beállított tárolók elérhetősége:
# 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
Egy másik módszer, ha megpróbálja frissíteni a csomaglistákat a tárolókkal kapcsolatos problémák azonosításához:
# Try to update package lists
sudo apt update
# Check for errors in apt logs
tail -20 /var/log/apt/term.log
Gyakori hibaüzenetek, amelyek blokkolt tárolókra utalnak:
Failed to fetch http://deb.debian.org/...Could not resolve 'deb.debian.org'Connection timed outUnable to connect to...
Egy adott tárolókiszolgáló manuális tesztelése:
# 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
Konfigurálás
Szerkessze a fő forrásfájlt:
sudo nano /etc/apt/sources.list
Cserélje le a tartalmat a belső tükörre. Debian 12 (bookworm) esetén:
# 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
Ha a belső tükör HTTPS-t használ:
deb https://mirror.company.local/debian bookworm main contrib non-free non-free-firmware
Megjegyzés: HTTPS-tárolók esetén győződjön meg arról, hogy az apt-transport-https és a ca-certificates csomagok telepítve vannak.
Tárolóprioritás beállítása (opcionális)
Ha belső és külső tárolókat is használnia kell, de a belsőket kell előnyben részesíteni:
sudo nano /etc/apt/preferences.d/internal-mirror
Adja hozzá:
Package: *
Pin: origin mirror.company.local
Pin-Priority: 900
Package: *
Pin: origin deb.debian.org
Pin-Priority: 500
Ez magasabb prioritást ad a belső tükröknek.
Proxy beállítása a tárolókhoz (opcionális)
Ha a hálózat proxyt igényel a tárolók eléréséhez:
# 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
Frissítés és ellenőrzés
A tárolók beállítása után:
# 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
Gyakori problémák
Probléma: az apt update végtelen ideig lefagy
# 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
Probléma: a csomagok nem találhatók a tükör beállítása után
# 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
Probléma: a vegyes tárolóforrások ütközéseket okoznak
# 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