109.2 Lecke 1
Tanúsítvány: |
LPIC-1 |
---|---|
Verzió: |
5.0 |
Témakör: |
109 Hálózati alapok |
Fejezet: |
109.2 Perzisztens hálózatkonfiguráció |
Lecke: |
1/2 |
Bevezetés
Bármely TCP/IP-hálózatban minden csomópontnak úgy kell konfigurálnia a hálózati adapterét, hogy az megfeleljen a hálózati követelményeknek, különben nem tudnak egymással kommunikálni. Ezért a rendszergazdának meg kell adnia az alapkonfigurációt, hogy az operációs rendszer minden indításkor képes legyen beállítani a megfelelő hálózati interfészt, valamint azonosítani magát és a hálózat alapvető jellemzőit.
A hálózati beállítások nem függnek az operációs rendszerektől, de ez utóbbiaknak saját módszerük van a beállítások tárolására és alkalmazására. A Linux rendszerek az /etc
mappában található egyszerű szöveges fájlokban tárolt konfigurációkra támaszkodnak a hálózati kapcsolat létrehozásához a rendszerindítás során. Érdemes tudni, hogyan vannak használva ezek a fájlok, hogy elkerüljük a helyi hibás konfiguráció miatti kapcsolatvesztést.
A Network Interface
A network interface (hálózati interfész) az a kifejezés, amellyel az operációs rendszer a rendszerhez csatlakoztatott hálózati hardverrel, például egy ethernet vagy wi-fi eszközzel való együttműködésre konfigurált kommunikációs csatornára utal. Kivételt képez ezalól a loopback interfész, amelyet az operációs rendszer akkor használ, ha kapcsolatot kell létesítenie önmagával, de a hálózati interfész fő célja, hogy olyan útvonalat biztosítson, amelyen keresztül helyi adatokat lehet küldeni és távoli adatokat fogadni. Ha a hálózati interfész nincs megfelelően konfigurálva, akkor az operációs rendszer nem tud kommunikálni a hálózat más gépeivel.
A legtöbb esetben a megfelelő interfészbeállítások vagy alapértelmezés szerint vannak megadva, vagy az operációs rendszer telepítése során testre szabhatók. Mindazonáltal ezeket a beállításokat gyakran ellenőrizni vagy akár módosítani kell, ha a kommunikáció nem működik megfelelően, vagy ha az interfész viselkedése testreszabást igényel.
Számos Linux-parancs létezik a rendszerben lévő hálózati interfészek listázására, de nem mindegyik érhető el minden disztribúcióban. Az ip
parancs azonban a minden Linux disztribúcióhoz mellékelt hálózati eszközök alapkészletének része, és használható a hálózati interfészek listázására. Az interfészek megjelenítésére szolgáló teljes parancs az ip link show
:
$ ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp3s5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:16:3e:8d:2b:5b brd ff:ff:ff:ff:ff:ff
Ha elérhető, az nmcli device
parancs is használható:
$ nmcli device DEVICE TYPE STATE CONNECTION enp3s5 ethernet connected Gigabit Powerline Adapter lo loopback unmanaged --
A példákban bemutatott parancsok nem módosítanak semmilyen beállítást a rendszerben, így egy nem privilegizált felhasználó is végrehajthatja őket. Mindkét parancs két hálózati interfészt sorol fel: lo
(a loopback interfész) és enp3s5
(egy ethernet interfész).
A Linuxot futtató asztali számítógépek és laptopok általában két vagy három előre definiált hálózati interfésszel rendelkeznek: egy a loopback virtuális interfészhez, a többi pedig a rendszer által talált hálózati hardverhez van rendelve. A Linuxot futtató szerverek és hálózati eszközök viszont több tucat hálózati interfésszel rendelkezhetnek, de ugyanazok az elvek vonatkoznak mindegyikre. Az operációs rendszer által biztosított absztrakció lehetővé teszi a hálózati interfészek beállítását ugyanazon módszerek alkalmazásával, függetlenül a mögöttes hardvertől.
Az interfész mögöttes hardverének részleteinek ismerete azonban hasznos lehet ahhoz, hogy jobban megértsük, mi történik, amikor a kommunikáció nem a várt módon működik. Egy olyan rendszerben, ahol számos hálózati interfész áll rendelkezésre, nem biztos, hogy egyértelmű, hogy melyik felel meg például a wi-fi-nek, és melyik az ethernetnek. Ezért a Linux olyan interfész elnevezési konvenciót használ, amely segít azonosítani, hogy melyik hálózati interfész melyik eszköznek és portnak felel meg.
Interfészek nevei
A régebbi Linux disztribúciók az ethernet hálózati interfészeket eth0
, eth1
stb. néven nevezték el, aszerint a sorrend szerint, ahogy a kernel azonosítja az eszközöket. A vezeték nélküli interfészek neve wlan0
, wlan1
stb. volt. Ez az elnevezési konvenció azonban nem tisztázza azt a kédést, hogy például az eth0
interfészhez melyik konkrét ethernet-port tartozik. Attól függően, hogy a hardvert hogyan észlelte a rendszer, még az is előfordulhatott, hogy két hálózati interfész nevet cserélt egy újraindítás után.
Ennek a kétértelműségnek a kiküszöbölésére az újabb Linux-rendszerek kiszámítható elnevezési konvenciót alkalmaznak a hálózati interfészekre, szorosabb kapcsolatot teremtve az interfész neve és a mögöttes hardverkapcsolat között.
A systemd elnevezési sémát használó Linux-disztribúciókban minden interfész neve egy kétkarakteres előtaggal kezdődik, amely az interfész típusát jelöli:
en
-
Ethernet
ib
-
InfiniBand
sl
-
Serial line IP (slip)
wl
-
Wireless local area network (WLAN)
ww
-
Wireless wide area network (WWAN)
Az operációs rendszer a következő szabályokat használja a hálózati interfészek elnevezésére és számozására a magasabb prioritástól az alacsonyabb prioritásig:
-
Az interfész elnevezése a BIOS vagy a beágyazott eszközök firmware-je által megadott index után, pl.
eno1
. -
Az interfész elnevezése a PCI express slot indexe után, ahogyan azt a BIOS vagy a firmware megadja, pl.
ens1
. -
Az interfész elnevezése a megfelelő buszon lévő címe után, pl.
enp3s5
. -
Az interfész elnevezése az interfész MAC-címe után, pl.
enx78e7d1ea46da
. -
Az interfész elnevezése a legacy konvenciót használva, pl.
eth0
.
Helyes az a feltételezés, hogy például az enp3s5
hálózati interfész azért kapta ezt a nevet, mert nem illett az első két elnevezési módszerhez, ezért helyette a megfelelő busz és slot címét használta a rendszer. A 03:05.0
eszközcím, amelyet az lspci
parancs kimenetén találunk, elárulja, hogy mi a a társított eszköz:
$ lspci | fgrep Ethernet 03:05.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8110SC/8169SC Gigabit Ethernet (rev 10)
A hálózati interfészeket maga a Linux kernel hozza létre, de számos parancsot lehet használni a velük való interakcióra. Általában a konfiguráció automatikusan történik, és nincs szükség a beállítások kézi módosítására. Ennek ellenére az interfész nevével meg lehet mondani a kernelnek, hogy szükség esetén hogyan járjon el a konfigurálásban.
Az interfészek menedzselése
Az évek során számos programot fejlesztettek ki a Linux kernel által biztosított hálózati funkciókkal való együttműködésre. Bár a régi ifconfig
parancs még mindig használható egyszerű interfész-konfigurációk és lekérdezések elvégzésére, mára már elavult, mivel a nem Ethernet interfészek korlátozottan támogatottak. Az ifconfig
parancsot felváltotta az ip
parancs, amely a TCP/IP interfészek számos más aspektusát, például útvonalakat és tunneleket (alagutakat) képes kezelni.
Az ip
parancs számos lehetősége túl sok lehet a legtöbb hétköznapi feladathoz, ezért vannak segédparancsok, amelyek megkönnyítik a hálózati interfészek aktiválását és konfigurálását. Az ifup
és ifdown
parancsok az /etc/network/interfaces
fájlban található interfészdefiníciók alapján konfigurálhatók. Bár ezek a parancsok manuálisan is előhívhatók, általában a rendszer indításakor automatikusan végrehajtódnak.
Az ifup
és ifdown
által kezelt összes hálózati interfésznek szerepelnie kell az /etc/network/interfaces
fájlban. A fájlban használt formátum egyszerű: az auto
szóval kezdődő sorok az ifup
-a
kapcsolóval történő végrehajtása esetén felhozandó fizikai interfészek azonosítására szolgálnak. Az interfész nevének ugyanabban a sorban kell követnie az auto
szót. Az összes auto
jelzésű interfész a rendszer indításkor a listában szereplő sorrendben jelenik meg.
Warning
|
Az |
Az interfész tényleges konfigurációja egy másik sorba kerül, amely az iface
szóval kezdődik, majd az interfész neve, az interfész által használt címcsalád neve és az interfész konfigurálásához használt módszer neve következik. A következő példa a lo
(loopback) és az enp3s5
interfészek alapvető konfigurációs fájlját mutatja be:
auto lo iface lo inet loopback auto enp3s5 iface enp3s5 inet dhcp
A címcsaládnak a TCP/IP hálózathoz inet
-nek kell lennie, de támogatott az IPX hálózat (ipx
) és az IPv6 hálózat (inet6
) is. A loopback interfészek a loopback
konfigurációs metódust használják. A dhcp
módszerrel az interfész a hálózat DHCP-szervere által biztosított IP-beállításokat használja. A példakonfiguráció beállításai lehetővé teszik az ifup
parancs végrehajtását az enp3s5
interfész nevet argumentumként használva:
# ifup enp3s5 Internet Systems Consortium DHCP Client 4.4.1 Copyright 2004-2018 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Listening on LPF/enp3s5/00:16:3e:8d:2b:5b Sending on LPF/enp3s5/00:16:3e:8d:2b:5b Sending on Socket/fallback DHCPDISCOVER on enp3s5 to 255.255.255.255 port 67 interval 4 DHCPOFFER of 10.90.170.158 from 10.90.170.1 DHCPREQUEST for 10.90.170.158 on enp3s5 to 255.255.255.255 port 67 DHCPACK of 10.90.170.158 from 10.90.170.1 bound to 10.90.170.158 -- renewal in 1616 seconds.
Ebben a példában az enp3s5
interfészhez a dhcp
módszert választottuk, így az ifup
parancs egy DHCP kliensprogramot hívott meg az IP-beállítások DHCP-szervertől való megszerzéséhez. Hasonlóképpen, az ifdown enp3s5
parancs az interfész kikapcsolására is használható.
DHCP-szerverrel nem rendelkező hálózatokban ehelyett a statikus
módszert lehet használni, és az IP-beállításokat kézzel kell megadni az /etc/network/interfaces
állományban. Például:
iface enp3s5 inet static address 192.168.1.2/24 gateway 192.168.1.1
A statikus
módszert használó interfészeknek nincs szükségük megfelelő auto
direktívára, mivel mindig akkor kerülnek elő, amikor a hálózati hardvert észlelésre kerül.
Ha ugyanannak az interfésznek egynél több iface
bejegyzése van, akkor az összes konfigurált cím és beállítás érvényesül az adott interfész megjelenítésekor. Ez hasznos lehet, ha ugyanazon az interfészen kell konfigurálni az IPv4 és IPv6 címeket, valamint ha egyetlen interfészen kell több azonos típusú címet konfigurálni.
Lokális és távoli nevek
A működő TCP/IP beállítás csak az első lépés a teljes hálózati használhatóság felé. Amellett, hogy a rendszer képes a hálózat csomópontjait IP-címük alapján azonosítani, az ember számára könnyebben érthető nevekkel is azonosítani kell őket.
A név, amivel a rendszer azonosítja magát, testreszabható, és jó gyakorlat, ha ezt megtesszük, még akkor is, ha a gép nem csatlakozik semmilyen hálózathoz. A helyi név gyakran megegyezik a gép hálózati nevével, de ez nem feltétlenül igaz. Ha az /etc/hostname
fájl létezik, az operációs rendszer az első sor tartalmát használja helyi névként, ezt követően egyszerűen hostname-ként (hostnévként). Az /etc/hostname
mappában lévő #
karakterrel kezdődő sorok nem kerülnek figyelembe vételre.
Az /etc/hostname
fájl közvetlenül is szerkeszthető, de a gép hostneve a hostnamectl
paranccsal is megadható. Ha a set-hostname
alparanccsal együtt adjuk meg, a hostnamectl
parancs a megadott nevet veszi argumentumként, és beírja az /etc/hostname
állományba:
# hostnamectl set-hostname storage # cat /etc/hostname storage
Az /etc/hostname
-ben definiált hostnév a statikus hostnév, azaz az a név, amely a rendszer hostnevének inicializálásához használatos a rendszer indításakor. A statikus hostnév egy 64 karakter hosszúságú, szabadon választott string lehet. Ajánlott azonban, hogy csak ASCII kisbetűs karakterekből álljon, szóközök és pontok nélkül. A DNS-domainnevek címkéinek megengedett formátumára kell korlátozódnia, még ha ez nem is szigorú követelmény.
A hostnamectl
parancs használatával a statikus hostnév mellett két másik típusú hostnevet is beállíthatunk:
- Pretty hostname
-
A statikus hostnévvel ellentétben a pretty hostnév mindenféle speciális karaktert tartalmazhat. Használható a gép leíróbb nevének beállítására, pl. “LAN Megosztott Tarhely”:
# hostnamectl --pretty set-hostname "LAN Megosztott Tarhely"
- Transient hostname
-
Akkor használatos, ha a statikus hostnév nincs beállítva, vagy ha ez az alapértelmezett
localhost
név. Az átmeneti hostnév általában az egyéb automatikus konfigurációkkal együtt beállított név, de ahostnamectl
paranccsal is módosítható, pl.# hostnamectl --transient set-hostname generic-host
Ha sem a --pretty
, sem a --transient
kapcsolót nem használjuk, akkor mindhárom hostnévtípus a megadott névre lesz beállítva. Ha a statikus hostnevet akarjuk beállítani, de a pretty és transient neveket nem, akkor a --static
kapcsolót kell használnunk. Minden esetben csak a statikus hostnév kerül tárolásra az /etc/hostname
fájlban. A hostnamectl
paranccsal különböző leíró és azonosító információk is megjeleníthetők a futó rendszerről:
$ hostnamectl status Static hostname: storage Pretty hostname: LAN Shared Storage Transient hostname: generic-host Icon name: computer-server Chassis: server Machine ID: d91962a957f749bbaf16da3c9c86e093 Boot ID: 8c11dcab9c3d4f5aa53f4f4e8fdc6318 Operating System: Debian GNU/Linux 10 (buster) Kernel: Linux 4.19.0-8-amd64 Architecture: x86-64
Ez a hostnamectl
parancs alapértelmezett művelete, így a status
alparancs elhagyható.
Ami a távoli hálózati csomópontok nevét illeti, az operációs rendszer két alapvető módot alkalmazhat a nevek és az IP-címek megfeleltetésére: helyi forrást, vagy egy távoli szervert használ a nevek IP-re való lefordítására és fordítva. A módszerek kiegészíthetik egymást és prioritási sorrendjüket a Name Service Switch konfigurációs fájlban határozzuk meg: /etc/nsswitch.conf
. Ezt a fájlt a rendszer és az alkalmazások arra használják, hogy ne csak a név-IP megfeleltetések forrásait határozzák meg, hanem azt is, hogy mely forrásokból szerezzenek be névszolgáltatási információkat egy sor kategóriában, az úgynevezett adatbázisokban (database).
A hosts adatbázis nyomon követi az hostnevek és a hostszámok közötti megfeleltetést. Az /etc/nsswitch.conf
állományban a hosts
kezdetű sor határozza meg a hozzárendelések biztosításáért felelős szolgáltatásokat:
hosts: files dns
Ebben a példában a files
és a dns
a szolgáltatásnevek, amelyek meghatározzák, hogyan fog működni a hostnevek keresési folyamata. A rendszer először a helyi fájlokban keres egyezéseket, majd a DNS-szolgáltatástól kér egyezést.
A hosts adatbázis helyi fájlja az /etc/hosts
, egy egyszerű szöveges fájl, amely IP-címeket társít hostnevekhez, IP-címenként egy sor formában, pl.:
127.0.0.1 localhost
A 127.0.0.0.1 IP-cím a loopback interfész alapértelmezett címe, ezért kapcsolódik a localhost névhez.
Lehetőség van arra is, hogy opcionális aliasokat kössünk ugyanahhoz az IP-címhez. Az aliasok alternatív írásmódokat, rövidebb hostneveket biztosíthatnak, és a sor végén kell hozzáadni őket, például:
192.168.1.10 foo.mydomain.org foo
Az /etc/hosts
fájl formázási szabályai a következők:
-
A bejegyzés mezőit tetszőleges számú üres és/vagy tabulátor karakter választja el egymástól.
-
A
#
karaktertől a sor végéig terjedő szöveg megjegyzésnek minősül, és figyelmen kívül hagyjuk. -
A hostnevek csak alfanumerikus karaktereket, mínuszjeleket és pontokat tartalmazhatnak.
-
A hostneveknek alfanumerikus karakterrel kell kezdődniük és alfanumerikus karakterrel kell végződniük.
Az IPv6-címek az /etc/hosts
állományba is felvehetők. A következő bejegyzés az IPv6 loopback címre vonatkozik:
::1 localhost ip6-localhost ip6-loopback
A files
szolgáltatási specifikációt követően a dns
specifikáció azt mondja a rendszernek, hogy kérjen egy DNS-szolgáltatást a kívánt név/IP társításhoz. Az ezért a módszerért felelős rutinokat resolver-nek (feloldó) nevezik, és a konfigurációs fájl az /etc/resolv.conf
. Az alábbi példa egy általános /etc/resolv.conf
állományt mutat be, amely a Google nyilvános DNS-szervereinek bejegyzéseit tartalmazza:
nameserver 8.8.4.4 nameserver 8.8.8.8
A példában látható módon a nameserver
kulcsszó a DNS-szerver IP-címét jelöli. Csak egy névszerver szükséges, de legfeljebb három névszerver is megadható. A továbbiak tartalékként lesznek használva. Ha nincs névszerver bejegyzés, akkor alapértelmezés szerint a helyi gépen lévő névszerver lesz használatban.
A resolver beállítható úgy, hogy automatikusan hozzáadja a domaint a nevekhez, mielőtt a névszerveren lekérdezné azokat. Például:
nameserver 8.8.4.4 nameserver 8.8.8.8 domain mydomain.org search mydomain.net mydomain.com
A domain
bejegyzés a mydomain.org
-ot állítja be helyi domainnévként, így az ezen a domainen belüli nevekre vonatkozó lekérdezések a helyi domainhez viszonyított rövid neveket használhatják. A search
bejegyzésnek hasonló a célja, de itt a rövid név megadása esetén megpróbálandó domainek listáját fogadja el. Alapértelmezés szerint csak a helyi domainnevet tartalmazza.
Gyakorló feladatok
-
Milyen parancsokkal lehet listázni a rendszerben lévő hálózati adaptereket?
-
Milyen típusú az a hálózati adapter, amelynek az interfész neve
wlo1
? -
Milyen szerepet játszik az
/etc/network/interfaces
fájl a rendszerindítás során? -
Az
/etc/network/interfaces
-ben melyik bejegyzés konfigurálja azeno1
interfészt, hogy IP-beállításait DHCP-vel kapja meg?
Gondolkodtató feladatok
-
Hogyan lehetne a
hostnamectl
parancsot arra használni, hogy csak a helyi gép statikus hostnevét változtassuk megfirewall
-ra? -
Milyen adatokat lehet módosítani a hostneveken kívül a
hostnamectl
paranccsal? -
Az
/etc/hosts
-ban melyik bejegyzés társítja afirewall
és arouter
nevet a10.8.0.1
IP-hez? -
Hogyan lehetne módosítani az
/etc/resolv.conf
fájlt, hogy minden DNS-kérést az1.1.1.1
címre küldjön?
Összefoglalás
Ez a lecke a helyi hálózati konfiguráció tartós módosítását mutatja be a szabványos Linux fájlok és parancsok segítségével. A Linux elvárja, hogy a TCP/IP-beállítások meghatározott helyeken legyenek, és szükség lehet ezek megváltoztatására, ha az alapértelmezett beállítások nem megfelelőek. A lecke a következő témákat járja körül:
-
Hogyan azonosítja a Linux a hálózati interfészeket.
-
Az interfész aktiválása a rendszerindítás során és az alapvető IP-konfiguráció.
-
Hogyan társítja az operációs rendszer a neveket a hostokhoz.
A bemutatott koncepciók, parancsok és procedúrák az alábbiak voltak:
-
Interfész elnevezési konvenciók.
-
Hálózati interfészek listázása az
ip
ésnmcli
segítségével. -
Interfészek aktiválása az
ifup
ésifdown
segítségével. -
A
hostnamectl
parancs és az/etc/hostname
fájl. -
Az
/etc/nsswitch.conf
,/etc/hosts
és/etc/resolv.conf
fájlok.
Válaszok a gyakorló feladatokra
-
Milyen parancsokkal lehet listázni a rendszerben lévő hálózati adaptereket?
Az
ip link show
,nmcli device
és a legacyifconfig
parancsokkal. -
Milyen típusú az a hálózati adapter, amelynek az interfész neve
wlo1
?A név
wl
-el kezdődik, tehát egy vezeték nélküli (wireless) LAN adapter. -
Milyen szerepet játszik az
/etc/network/interfaces
fájl a rendszerindítás során?Az
ifup
parancs által használt konfigurációkat tartalmazza a megfelelő interfészek aktiválásához a rendszerindítás során. -
Az
/etc/network/interfaces
-ben melyik bejegyzés konfigurálja azeno1
interfészt, hogy IP-beállításait DHCP-vel kapja meg?Az
iface eno1 inet dhcp
sor.
Válaszok a gondolkodtató feladatokra
-
Hogyan lehetne a
hostnamectl
parancsot arra használni, hogy csak a helyi gép statikus hostnevét változtassuk megfirewall
-ra?A
--static
kapcsolóval:hostnamectl --static set-hostname firewall
. -
Milyen adatokat lehet módosítani a hostneveken kívül a
hostnamectl
paranccsal?A
hostnamectl
beállíthatja a helyi gép alapértelmezett ikonját, az eszköz (chassis) típusát, a helyet és a telepítési környezetet is. -
Az
/etc/hosts
-ban melyik bejegyzés társítja afirewall
és arouter
nevet a10.8.0.1
IP-hez?A
10.8.0.1 firewall router
sor. -
Hogyan lehetne módosítani az
/etc/resolv.conf
fájlt, hogy minden DNS-kérést az1.1.1.1
címre küldjön?A
nameserver 1.1.1.1
használatával a névszerver bejegyzésnél.