FreeBSD kézikönyv
Előző | Fejezet 31. Egyéb haladó hálózati témák | Következő

# 31.9. Hálózati címfordítás

Írta: Chern Lee.

## 31.9.1. Áttekintés

A FreeBSD hálózati címfordításért felelős démonprogramja, a natd(8) (Network Address Translation daemon), a beérkező nyers IP csomagokat dolgozza fel, és a helyi gépek forráscímét kicserélve visszailleszti ezeket a csomagokat a kimenő folyamba. A natd(8) mindezt úgy teszi a forrás IP-címekkel és portokkal, hogy amikor az adat visszaérkezik, akkor képes lesz megmondani a csomag eredeti küldőjét és visszaküldeni neki a választ.

A hálózati címfordítást általában az internet-kapcsolatok megosztásánál alkalmazzuk.

## 31.9.2. A hálózat felépítése

Az IPv4 világában egyre jobban fogyó IP-címek és az egyre növekvő számú, nagysebességre vágyó, például kábeles vagy DSL-es fogyasztók miatt az igény is egyre nagyobb az internet-kapcsolatok megosztására. Ha több számítógéppel szeretnénk egyetlen kapcsolaton és egy IP-címen keresztül kapcsolódni az internetre, akkor ehhez a natd(8) tökéletes választás.

Az esetek többségében a felhasználók egy kábeles vagy DSL vonalra csatlakoznak, melyhez egyetlen IP-cím tartozik, és ezen a gépen keresztül szeretnék elérni az internetet a helyi hálózaton levő többi gépről.

Ezt úgy tudjuk elérni, ha az internethez kapcsolódó FreeBSD-s gépet átjárónak állítjuk be. Ebben az átjáróban legalább két hálózati felületnek kell léteznie -- az egyikkel az internetes útválasztóhoz, a másikkal pedig a helyi hálózathoz kapcsolódik. A belső hálózaton levő gépek egy hub vagy egy switch segítségével csatlakoznak egymáshoz.

> Megjegyzés: Több módon is el tudjuk érni a belső hálózatról az internetet egy FreeBSD-s átjárón keresztül. Ebben a példában most csak olyan átjárókkal foglalkozunk, amelyekben legalább két hálózati kártya található.

Egy ehhez hasonló beállítás igen gyakori a megosztott internet-kapcsolatok esetében. A helyi hálózat egyik gépe csatlakozik az internetre. A többi gép ezen az “átjárón” keresztül éri el az internetet.

## 31.9.3. A rendszerbetöltő beállítása

A natd(8) működéséhez szükséges címfordítási támogatást a `GENERIC` típusú rendszermagok nem tartalmazzák, viszont a `/boot/loader.conf` megfelelő paraméterezésével a rendszer betöltése közben ezt hozzá tudjuk adni:

    ipfw_load="YES"
    ipdivert_load="YES"

Valamint a `net.inet.ip.fw.default_to_accept` változót állítsuk az `1` értékre.

    net.inet.ip.fw.default_to_accept="1"

> Megjegyzés: Ez utóbbi beállítást leginkább a tűzfal és a címfordítást végző átjáró próbálgatásakor érdemes alkalmazni. Ilyenkor ugyanis az ipfw(8) alapértelmezett módon az `allow ip from any to any` (minden forgalom engedélyezett) szabályt követi, és nem pedig a kevésbé barátságos `deny ip from any to any` (minden forgalom tiltott) szabályt. A rendszer újraindításakor így valamivel nehezebb lesz kizárnunk magunkat a szabályok megadása során.

## 31.9.4. A rendszermag beállítása

Amikor viszont nincs lehetőségünk modulok használatára, vagy szeretnénk minden igényelt funkciót beépíteni a rendszermagba, akkor a rendszermag beállításait tartalmazó állományban a következőket kell megadnunk:

    options IPFIREWALL
    options IPDIVERT

A fentiek mellett még ezeket a lehetőségeket tudjuk választani:

    options IPFIREWALL_DEFAULT_TO_ACCEPT
    options IPFIREWALL_VERBOSE

## 31.9.5. A rendszerindítás beállítása

A tűzfal és a hálózati címfordítás beindításához a következőknek kell az `/etc/rc.conf` állományban lennie:

    gateway_enable="YES"
    firewall_enable="YES"
    firewall_type="OPEN"
    natd_enable="YES"
    natd_interface="fxp0"
    natd_flags=""

  A gépet átjárónak állítja be. Hatása megegyezik a `sysctl net.inet.ip.forwarding=1` parancs kiadásával.
  A rendszer indításakor engedélyezi az `/etc/rc.firewall` állományban szereplő tűzfalszabályok használatát.
  Egy olyan előre definiált tűzfalat ad meg, amely alapból mindent beenged. Az `/etc/rc.firewall` állományban találhatjuk a többi típust.
  Megadja, hogy melyik felületen továbbítsunk csomagokat az internet felé (ez a felület csatlakozik az internetre).
  Itt szerepel minden további paraméter, amelyet még az indításkor át kell adnunk a natd(8) démonnak.

Amikor megadjuk ezeket a beállításokat az `/etc/rc.conf` állományban, pontosan ugyanaz történik, mintha a `natd -interface fxp0` parancsot adtunk volna ki a rendszer indításakor. Ez tehát manuálisan is elindítható.

> Megjegyzés: Ha túlságosan sok paramétert akarunk egyszerre beállítani natd(8) használatához, akkor akár egy külön konfigurációs állományt is megadhatunk. Ebben az esetben a konfigurációs állományt a következő módon kell megjelölni az `/etc/rc.conf` állományban:

>     natd_flags="-f /etc/natd.conf"

> Ekkor a `/etc/natd.conf` állomány fogja tartalmazni a beállításokat, soronként egyet. Például a következő szakaszban ez lesz a tartalma:

>     redirect_port tcp 192.168.0.2:6667 6667
>     redirect_port tcp 192.168.0.3:80 80

> A konfigurációs állományról és az `-f` opció használatával kapcsolatban olvassuk el a natd(8) man oldalát.

A helyi hálózaton mindegyik gépnek az RFC 1918 által megadott privát IP-címterekből származó címet kell használnia, és az alapértelmezett átjárónak mindenhol a natd démont futtató gép IP-címét kell megadni.

Például a belső hálózaton található `A` és `B` kliensek IP-címei rendre `192.168.0.2` és `192.168.0.3`, míg a natd(8) démont futtató gép belső címe `192.168.0.1`. Az `A` és a `B` kliens alapértelmezett átjáróját a natd gépre, vagyis a `192.168.0.1` címre kell beállítanunk. A natd gép külső, avagy internetes felülete semmilyen további módosítást nem igényel a natd(8) működéséhez.

## 31.9.6. A portok átirányítása

A natd(8) alkalmazásának hátránya, hogy a belső hálózatra csatlakozó kliensek az internetről nem érhetőek el. Tehát a helyi hálózat kliensei képesek elérni a külvilágot, de az visszafelé már nem igaz. Ez akkor jelent igazából problémát, ha az egyik belső kliensen szolgáltatásokat akarunk futtatni. A probléma egyik egyszerű megoldása, ha a natd használatával az internet felől egyszerűen átirányítunk bizonyos portokat a megfelelő belső kliensre.

Például tegyük fel, hogy az `A` kliens egy IRC szervert, míg a `B` kliens egy webszervert futtat. Ez akkor fog működni, ha a szolgáltatásokhoz tartozó 6667 (IRC) és 80 (web) portokat átirányítjuk a hozzájuk tartozó gépek felé.

Ehhez a natd(8) démonnak a `-redirect_port` paramétert kell átadni. A pontos felírás így néz ki:

         -redirect_port protokoll célIP:célPORT[-célPORT]
                     [külsőIP:]külsőPORT[-külsőPORT]
                     [távoliIP[:távoliPORT[-távoliPORT]]]

A fenti példában tehát ezt kell megadnunk:

        -redirect_port tcp 192.168.0.2:6667 6667
        -redirect_port tcp 192.168.0.3:80 80

Így az egyes külső tcp portokat átirányítjuk a belső hálózat gépei felé.

A `-redirect_port` paraméternek akár egész porttartományokat is megadhatunk. Például a `tcp 192.168.0.2:2000-3000 2000-3000` megadásával az összes 2000-től 3000-ig terjedő port csatlakozását leképezzük az `A` kliens 2000 és 3000 közti portjaira.

Ezek a beállítások a natd(8) közvetlen futtatásakor adhatóak meg, esetleg az `/etc/rc.conf` állományban az `natd_flags=""` opció keresztül, vagy egy külön konfigurációs állományban.

A többi beállítási lehetőséget a natd(8) man oldalán ismerhetjük meg.

## 31.9.7. A címek átirányítása

A címek átirányítása abban az esetben hasznos, amikor több IP-cím áll rendelkezésünkre, de ezek egy géphez tartoznak. Ilyenkor az natd(8) képes a belső hálózat egyes gépeihez saját külső IP-címet rendelni. A natd(8) a belső hálózat kliensei által küldött csomagokban kicseréli a címüket a megfelelő külső IP-címmel, illetve az ezekre a címekre érkező forgalmat továbbítja a megfelelő belső kliens irányába. Ezt a megoldást statikus hálózati címfordításnak is nevezzük. Például a `128.1.1.2` és a `128.1.1.3` IP-címek a natd démont futtató átjáróhoz tartoznak. A `128.1.1.1` cím használható a natd alapú átjáró külső IP-címeként, miközben a `128.1.1.2` és a `128.1.1.3` címeket a belső hálózaton elérhető `A` és `B` kliensek felé közvetítjük.

A `-redirect_address` felírása tehát a következő:

    -redirect_address helyiIP publikusIP

`helyiIP` | A helyi hálózaton található kliens saját IP-címe.
`publikusIP` | A klienshez tartozó megfelelő külső IP-cím.

Az iménti példában a pontos paraméterek ezek lesznek:

    -redirect_address 192.168.0.2 128.1.1.2
    -redirect_address 192.168.0.3 128.1.1.3

A `-redirect_port` opcióhoz hasonlóan ez is megadható az `/etc/rc.conf` állományban az `natd_flags=""` beállításon keresztül vagy egy külön konfigurációs állományban. A címek átirányításával nincs szüksége a portok átirányítására, mivel az adott IP-címhez tartozó összes forgalmat átirányítjuk.

A natd démont futtató gépen a külső IP-címeket aktiválni kell és a külső felületéhez kell rendelni. A rc.conf(5) man oldalon járhatunk utána, hogy mindezt hogyan is tudjuk megcsinálni.

Előző | Tartalom | Következő
ISDN | Fel | Párhuzamos vonali IP (PLIP)

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.