Konfigurácia linuxových gateway v produkčných sieťach
Tento návod popisuje niektoré základné parametre sieťovej konfigurácie, ktoré môžu spôsobiť, že systém Linux nebude v produkčnom prostredí fungovať kvôli izolovanej infrastruktúre. Majte na pamäti, že distribúcie Linuxu môžu pre nasledujúce témy používať odlišné služby. Preto sa môže stať, že niektoré z nižšie uvedených príkazov nebudete môcť spustiť. Táto časť bola napísaná s použitím zariadenia Raspberry Pi s natívnym operačným systémom Debian 12 (bookworm) ako príkladu.
Pred hovorom s podporou tímu SEW sa uistite, že máte zo svojho počítača prístup k linuxovému zariadeniu cez SSH, aby ste mohli počas stretnutia zdieľať obrazovku.
Nasleduje zoznam bežných oblastí, ktoré môžu zabrániť pripojeniu.
DNS servery
Server Domain Name System (DNS) prekladá doménové názvy na IP adresy, čím umožňuje komunikáciu cez internet. Správna konfigurácia DNS je kritická pre systém Linux pracujúci v sieťovom prostredí. Riešenie problémov s DNS zahŕňa kontrolu dostupnosti DNS servera pomocou príkazov ako ping alebo nslookup. Uistite sa, že server odpovedá a správne prekladá doménové názvy na IP adresy. Nesprávna konfigurácia môže viesť k zlyhaniu prekladu domén, čo ovplyvní sieťovú komunikáciu a prístup na internet.
Testovanie
IP adresy DNS serverov nakonfigurované na hostiteľovi skontrolujete pomocou:
cat /etc/resolv.conf
Každý DNS server je možné testovať jednotlivo pomocou nslookup alebo dig. Napríklad, ak je server 8.8.8.8:
nslookup api.eu1.sdaconsole.io 8.8.8.8
dig @8.8.8.8 api.eu1.sdaconsole.io +short
Ak tieto príkazy nie sú dostupné, možno ich nainštalovať pomocou balíkov dnsutils alebo bind9-dnsutils v Debiane, prípadne je možné na testovanie aktuálnej konfigurácie DNS použiť natívny príkaz ako ping alebo getent:
ping api.eu1.sdaconsole.io
getent hosts api.eu1.sdaconsole.io
Konfigurácia
DNS servery môžu byť spravované rôznymi službami v závislosti od inštalácie Linuxu. Pri zariadení Raspberry Pi ich typicky spravuje služba NetworkManager. Služba, ktorá spravuje preklad DNS, pravdepodobne zanechá v súbore /etc/resolv.conf komentár informujúci o tom, že súbor vygenerovala, napríklad:
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
Na nastavenie globálnych DNS serverov vytvorte súbor:
sudo nano /etc/NetworkManager/conf.d/dns.conf
A pridajte:
[global-dns-domain-*]
servers=8.8.8.8,4.4.4.4
Restartujte službu NetworkManager a skontrolujte nové hodnoty v /etc/resolv.conf
sudo systemctl restart NetworkManager
# Verify /etc/resolv.conf was updated
cat /etc/resolv.conf
sudo nano /etc/dhcpcd.conf
Na konci súboru pridajte alebo upravte:
# Static DNS configuration
static domain_name_servers=8.8.8.8 4.4.4.4
Zmeny aplikujte restartovaním služby dhcpcd a overte, či boli DNS servery aktualizované:
sudo systemctl restart dhcpcd
# Verify /etc/resolv.conf was updated
cat /etc/resolv.conf
Kontrola, či je resolvconf dostupný:
which resolvconf
dpkg -l | grep resolvconf
DNS servery nakonfigurujte prostredníctvom resolvconf úpravou základných konfigurácií:
# Edit the base configuration
sudo nano /etc/resolvconf/resolv.conf.d/head
Pridajte:
nameserver 8.8.8.8
nameserver 4.4.4.4
Aktualizujte službu resolvconf a skontrolujte, či boli DNS servery aktualizované:
sudo resolvconf -u
# Verify /etc/resolv.conf was updated
cat /etc/resolv.conf
NTP servery
Server Network Time Protocol (NTP) sa v systémoch Linux používa na synchronizáciu systémových hodín so zdrojom času, ako sú atómové hodiny alebo centrálny server. Presné meranie času je kľúčové pre logovanie, bezpečnostné protokoly a koordináciu akcií v sieti. Nesprávne nastavenie NTP servera spôsobí zlyhanie HTTPS volaní z dôvodu neplatnosti SSL certifikátu.
Testovanie
Skontrolujte stav synchronizácie NTP a to, či sú aktuálny dátum a čas správne.
# 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
Testovanie pripojenia ku konkrétnemu serveru:
# 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ácia
NTP server je možné nakonfigurovať pomocou doménového názvu, napríklad 0.debian.pool.ntp.org alebo ntp.myorg.com, prípadne priamo pomocou IP adresy.
# Configure systemd-timesyncd
sudo nano /etc/systemd/timesyncd.conf
Pridajte vlastný NTP server do bloku [Time] a uistite sa, že riadok nie je zakomentovaný. Odstráňte všetky servery v FallbackNTP, ktoré nie sú dostupné.
[Time]
NTP=ntp.myorg.com ntp.myorg.local
FallbackNTP=
Restartujte a nezabudnite povoliť službu 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
Proxy servery
Proxy server funguje ako sprostredkovateľ medzi klientom a cieľovými servermi, pričom preposiela požiadavky a odpovede. V podnikových prostrediach sa proxy servery bežne používajú na kontrolu bezpečnosti, filtrovanie obsahu, správu šírky pásma a logovanie odchádzajúcej prevádzky. Systémy Linux v takýchto sieťach musia byť nakonfigurované tak, aby smerovali svoje HTTP/HTTPS požiadavky cez firemný proxy server na prístup k externým zdrojom vrátane repozitárov balíkov a webových služieb.
Testovanie
Skontrolujte, či je proxy aktuálne nakonfigurovaný, prostredníctvom premenných prostredia a systémových nastavení proxy:
# 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
Ak chcete zistiť, či je proxy server potrebný, pokúste sa pripojiť priamo k externému serveru:
# 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"
Ak sa pripojenie nepodarí s chybami pripojenia, môže byť potrebný proxy server. Bežnými chybami sú napríklad Failed to connect alebo Connection timed out.
Testovanie požiadavky s konkrétnym proxy serverom:
# 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ácia
Adresa proxy má jeden z týchto formátov:
<protocol>://<proxy-address>:<port-number>
<protocol>://<username>:<password>@<proxy-address>:<port-number>
Konfigurácia proxy pre všetkých používateľov a aplikácie:
# Edit system-wide environment
sudo nano /etc/environment
Pridajte alebo upravte nasledujúce riadky:
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"
Aplikujte zmeny:
# Reload environment (or log out and back in)
source /etc/environment
# Verify variables are set
env | grep -i proxy
Kontrola, či prevádzka skutočne prechádza cez proxy:
# 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...
Niektoré proxy servery vykonávajú inšpekciu SSL. Môže byť potrebné nainštalovať firemné CA certifikáty:
# 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
Repozitáre Debian
Repozitáre Debian sú servery, ktoré hosťujú softvérové balíky a aktualizácie pre systémy založené na Debiane. V izolovaných podnikových prostrediach môže byť prístup k verejným zrkadlám Debianu (ako deb.debian.org alebo archive.ubuntu.com) z bezpečnostných dôvodov zablokovaný. Firmy často udržiavajú vlastné interné zrkadlá, aby mali kontrolu nad tým, ktoré balíky sú dostupné, a aby znížili spotrebu externej šírky pásma.
Testovanie
Skontrolujte aktuálne nakonfigurované repozitáre:
# 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
Nižšie je uvedený komplexný bash skript na úplné otestovanie konektivity k nakonfigurovaným repozitárom:
# 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
Ďalšou metódou je pokus o aktualizáciu zoznamov balíkov na identifikáciu problémov s repozitármi:
# Try to update package lists
sudo apt update
# Check for errors in apt logs
tail -20 /var/log/apt/term.log
Bežné chybové hlásenia indikujúce zablokované repozitáre:
Failed to fetch http://deb.debian.org/...Could not resolve 'deb.debian.org'Connection timed outUnable to connect to...
Manuálne testovanie konkrétneho servera repozitára:
# 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ácia
Upravte hlavný súbor so zdrojmi:
sudo nano /etc/apt/sources.list
Nahraďte obsah svojím interným zrkadlom. Pre 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
Ak vaše interné zrkadlo používa HTTPS:
deb https://mirror.company.local/debian bookworm main contrib non-free non-free-firmware
Poznámka: Pri repozitároch HTTPS sa uistite, že sú nainštalované balíky apt-transport-https a ca-certificates.
Konfigurácia priority repozitárov (voliteľné)
Ak potrebujete používať interné aj externé repozitáre s preferenciou interných:
sudo nano /etc/apt/preferences.d/internal-mirror
Pridajte:
Package: *
Pin: origin mirror.company.local
Pin-Priority: 900
Package: *
Pin: origin deb.debian.org
Pin-Priority: 500
Tým získajú interné zrkadlá vyššiu prioritu.
Konfigurácia proxy pre repozitáre (voliteľné)
Ak vaša sieť vyžaduje na dosiahnutie repozitárov proxy:
# 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
Aktualizácia a overenie
Po konfigurácii repozitárov:
# 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
Bežné problémy
Problém: apt update sa nekonečne zasekne
# 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ém: Balíky sa po konfigurácii zrkadla nenašli
# 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ém: Zmiešané zdroje repozitárov spôsobujúce konflikty
# 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