Linux-yhdyskäytävien konfigurointi tuotantoverkoissa
Tässä oppaassa käsitellään joitakin perusverkkoasetuksia, jotka voivat estää Linux-järjestelmän toiminnan tuotantoympäristössä eristetyn infrastruktuurin vuoksi. Huomaa, että Linux-jakelut voivat käyttää eri palveluita seuraaviin aihealueisiin. Siksi kaikkia alla lueteltuja komentoja ei välttämättä voi suorittaa. Tämä osio on kirjoitettu käyttäen esimerkkinä Raspberry Pi -laitetta, jossa on natiivi Debian 12 (bookworm) -käyttöjärjestelmäversio.
Varmista ennen tukipuhelua SDA-tiimin kanssa, että sinulla on SSH-yhteys Linux-laitteeseen tietokoneeltasi näytön jakamista varten istunnon aikana.
Seuraavassa on luettelo yleisistä osa-alueista, jotka voivat estää yhteyden muodostamisen.
DNS-palvelimet
Domain Name System (DNS) -palvelin muuntaa verkkotunnukset IP-osoitteiksi mahdollistaakseen tietoliikenteen internetin yli. Oikea DNS-konfiguraatio on kriittistä verkkoympäristössä toimivalle Linux-järjestelmälle. DNS-ongelmien vianmääritys sisältää DNS-palvelimen tavoitettavuuden tarkistamisen komennoilla kuten ping tai nslookup. Varmista, että palvelin vastaa ja muuntaa verkkotunnukset oikein IP-osoitteiksi. Virheelliset asetukset voivat johtaa verkkotunnusten selvityksen epäonnistumiseen, mikä vaikuttaa verkkoliikenteeseen ja internetyhteyteen.
Testaus
Tarkista isäntälaitteelle määritetyt DNS-palvelimien IP-osoitteet komennolla:
cat /etc/resolv.conf
Jokainen DNS-palvelin voidaan testata erikseen komennolla nslookup tai dig. Esimerkiksi jos palvelin on 8.8.8.8:
nslookup api.eu1.sdaconsole.io 8.8.8.8
dig @8.8.8.8 api.eu1.sdaconsole.io +short
Jos näitä komentoja ei ole saatavilla, ne voidaan asentaa Debianissa dnsutils- tai bind9-dnsutils-paketeilla, tai nykyisen DNS-konfiguraation testaamiseen voidaan käyttää natiivia komentoa kuten ping tai getent:
ping api.eu1.sdaconsole.io
getent hosts api.eu1.sdaconsole.io
Konfigurointi
DNS-palvelimia voivat hallita eri palvelut Linux-asennuksesta riippuen. Raspberry Pi -laitteessa niitä hallitsee tyypillisesti NetworkManager-palvelu. DNS-selvitystä hallitseva palvelu jättää todennäköisesti kommentin tiedostoon /etc/resolv.conf, jossa kerrotaan sen luoneen tiedoston, esimerkiksi:
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
Aseta globaalit DNS-palvelimet luomalla tiedosto:
sudo nano /etc/NetworkManager/conf.d/dns.conf
Ja lisää:
[global-dns-domain-*]
servers=8.8.8.8,4.4.4.4
Käynnistä NetworkManager-palvelu uudelleen ja tarkista uudet arvot tiedostosta /etc/resolv.conf
sudo systemctl restart NetworkManager
# Verify /etc/resolv.conf was updated
cat /etc/resolv.conf
sudo nano /etc/dhcpcd.conf
Lisää tai muokkaa tiedoston loppuun:
# Static DNS configuration
static domain_name_servers=8.8.8.8 4.4.4.4
Ota muutokset käyttöön käynnistämällä dhcpcd-palvelu uudelleen ja tarkista, päivittyivätkö DNS-palvelimet:
sudo systemctl restart dhcpcd
# Verify /etc/resolv.conf was updated
cat /etc/resolv.conf
Tarkista, onko resolvconf käytettävissä:
which resolvconf
dpkg -l | grep resolvconf
Määritä DNS-palvelimet resolvconf-työkalun kautta muokkaamalla perusasetuksia:
# Edit the base configuration
sudo nano /etc/resolvconf/resolv.conf.d/head
Lisää:
nameserver 8.8.8.8
nameserver 4.4.4.4
Päivitä resolvconf-palvelu ja tarkista, päivittyivätkö DNS-palvelimet:
sudo resolvconf -u
# Verify /etc/resolv.conf was updated
cat /etc/resolv.conf
NTP-palvelimet
Network Time Protocol (NTP) -palvelinta käytetään Linux-järjestelmissä järjestelmäkellon synkronointiin aikalähteen, kuten atomikellon tai keskuspalvelimen, kanssa. Tarkka ajanpito on ratkaisevan tärkeää lokitukselle, turvaprotokollille ja toimintojen koordinoinnille verkon yli. NTP-palvelimen virheellinen määritys aiheuttaa HTTPS-kutsujen epäonnistumisen SSL-varmenteen mitätöitymisen vuoksi.
Testaus
Tarkista NTP-synkronoinnin tila sekä se, ovatko nykyinen päivämäärä ja kellonaika oikein.
# 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
Yhteyden testaaminen tiettyyn palvelimeen:
# 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
Konfigurointi
NTP-palvelin voidaan määrittää verkkotunnuksella, kuten 0.debian.pool.ntp.org tai ntp.myorg.com, tai suoraan IP-osoitteella.
# Configure systemd-timesyncd
sudo nano /etc/systemd/timesyncd.conf
Lisää mukautettu NTP-palvelin [Time]-lohkoon ja varmista, ettei rivi ole kommentoitu. Poista FallbackNTP-kohdasta kaikki palvelimet, joita ei voida tavoittaa.
[Time]
NTP=ntp.myorg.com ntp.myorg.local
FallbackNTP=
Käynnistä uudelleen ja varmista, että timesync-palvelu otetaan käyttöön.
# 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
Välityspalvelimet
Välityspalvelin toimii välittäjänä asiakkaan ja kohdepalvelimien välillä välittäen pyyntöjä ja vastauksia. Yritysympäristöissä välityspalvelimia käytetään yleisesti tietoturvan hallintaan, sisällön suodatukseen, kaistanleveyden hallintaan ja lähtevän liikenteen lokitukseen. Tällaisissa verkoissa olevat Linux-järjestelmät on määritettävä reitittämään HTTP/HTTPS-pyyntönsä yrityksen välityspalvelimen kautta, jotta ne pääsevät käsiksi ulkoisiin resursseihin, kuten pakettivarastoihin ja verkkopalveluihin.
Testaus
Tarkista, onko välityspalvelin tällä hetkellä määritetty, tarkastelemalla ympäristömuuttujia ja järjestelmänlaajuisia välityspalvelinasetuksia:
# 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
Tarkistaaksesi, tarvitaanko välityspalvelinta, yritä muodostaa yhteys suoraan ulkoiseen palvelimeen:
# 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"
Jos yritys epäonnistuu yhteysvirheisiin, välityspalvelinta saatetaan tarvita. Yleisiä virheitä ovat esimerkiksi Failed to connect tai Connection timed out.
Pyynnön testaaminen tietyllä välityspalvelimella:
# 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
Konfigurointi
Välityspalvelimen osoite on jommassakummassa muodossa:
<protocol>://<proxy-address>:<port-number>
<protocol>://<username>:<password>@<proxy-address>:<port-number>
Määritä välityspalvelin kaikille käyttäjille ja sovelluksille:
# Edit system-wide environment
sudo nano /etc/environment
Lisää tai muokkaa seuraavia rivejä:
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"
Ota muutokset käyttöön:
# Reload environment (or log out and back in)
source /etc/environment
# Verify variables are set
env | grep -i proxy
Tarkistaaksesi, kulkeeko liikenne todella välityspalvelimen kautta:
# 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...
Jotkin välityspalvelimet suorittavat SSL-tarkastuksen. Saatat joutua asentamaan yrityksen CA-varmenteet:
# 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-pakettivarastot
Debian-pakettivarastot ovat palvelimia, jotka isännöivät ohjelmistopaketteja ja päivityksiä Debian-pohjaisille järjestelmille. Eristetyissä yritysympäristöissä pääsy julkisiin Debian-peilipalvelimiin (kuten deb.debian.org tai archive.ubuntu.com) voi olla estetty tietoturvasyistä. Yritykset ylläpitävät usein omia sisäisiä peilipalvelimiaan hallitakseen, mitkä paketit ovat saatavilla, ja vähentääkseen ulkoisen kaistanleveyden käyttöä.
Testaus
Tarkista tällä hetkellä määritetyt pakettivarastot:
# 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
Tässä on kattava bash-skripti, jolla voidaan testata yhteydet määritettyihin pakettivarastoihin täydellisesti:
# 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
Toinen menetelmä on yrittää päivittää pakettiluettelot pakettivarasto-ongelmien tunnistamiseksi:
# Try to update package lists
sudo apt update
# Check for errors in apt logs
tail -20 /var/log/apt/term.log
Yleisiä virheilmoituksia, jotka viittaavat estettyihin pakettivarastoihin:
Failed to fetch http://deb.debian.org/...Could not resolve 'deb.debian.org'Connection timed outUnable to connect to...
Testaa tietty pakettivarastopalvelin manuaalisesti:
# 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
Konfigurointi
Muokkaa pääasiallista lähdetiedostoa:
sudo nano /etc/apt/sources.list
Korvaa sisältö sisäisellä peilipalvelimellasi. Debian 12:lle (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
Jos sisäinen peilipalvelimesi käyttää HTTPS:ää:
deb https://mirror.company.local/debian bookworm main contrib non-free non-free-firmware
Huomautus: HTTPS-pakettivarastoja varten varmista, että paketit apt-transport-https ja ca-certificates on asennettu.
Pakettivarastojen prioriteetin määrittäminen (valinnainen)
Jos sinun on käytettävä sekä sisäisiä että ulkoisia pakettivarastoja siten, että sisäisiä suositaan:
sudo nano /etc/apt/preferences.d/internal-mirror
Lisää:
Package: *
Pin: origin mirror.company.local
Pin-Priority: 900
Package: *
Pin: origin deb.debian.org
Pin-Priority: 500
Tämä antaa sisäisille peilipalvelimille korkeamman prioriteetin.
Välityspalvelimen määrittäminen pakettivarastoille (valinnainen)
Jos verkkosi edellyttää välityspalvelinta pakettivarastojen tavoittamiseksi:
# 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
Päivitä ja varmista
Pakettivarastojen määrittämisen jälkeen:
# 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
Yleisiä ongelmia
Ongelma: apt update jumiutuu loputtomasti
# 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
Ongelma: Paketteja ei löydy peilipalvelimen määrittämisen jälkeen
# 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
Ongelma: Sekoittuneet pakettivarastolähteet aiheuttavat ristiriitoja
# 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