Internet megosztás Ubuntu Server alatt

A most következő leírásban bemutatom, hogyan osszuk meg hálózatunkon az internetet Ubuntu 8.10 Server segítségével.
Ebbe bele tartozik a DHCP és DNS szerver, tűzfal (köztük a portforward), valamint a proxy telepítése, beállítása (bár proxyt csak nagyobb hálózatokon érdemes használni).
Telepítsük az Ubuntu 8.10 Server kiadását. Jelen esetben a szerverben két hálókártya lesz, egyik az internet a másik pedig a hálózat felé.
A telepített rendszerre természetesen majd telepíthetünk további szolgáltatásokat is, pl. web szervert, ftp szervert, vagy torrent szervert (ezekről majd egy későbbi leírásban lesz szó).

Először is telepítsük az Ubuntu 8.10 Server verzióját, és állítsuk be megfelelően a hálókártyákat.
Jelen esetben én két hálókártyás szerverrel fogok dolgozni, ahol az eth0 az internet felé néz (ahonnét DHCP-n kapja az IP címet) és az eth1 néz a belső hálózat felé (192.168.1.1/24 cím tartomány).

ADSL beállítása

Ha ADSL internetünk van, akkor előbb azt kell beállítani.

sudo pppoeconf

DHCP szerver

Először telepítsük a DHCP szervert, hogy a belső hálózaton lévő klienseink automatikusan kapjanak IP címet.

sudo apt-get install dhcp3-server

Ha feltelepült a dhcp3-server csomag, akkor nyissuk meg szerkesztésre a konfigurációs fájlját

sudo nano /etc/dhcp3/dhcpd.conf

Töröljük ki a fájl tartalmát, majd másoljuk be a következőt:

ddns-update-style none;
option domain-name "otthon.local";
option domain-name-servers 192.168.1.1;
option routers 192.168.1.1;
default-lease-time 42300;
max-lease-time 84600;
authoritative;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.5 192.168.1.100;
}

Nézzük, mit is jelentenek a sorok:

  • option domain-name “otthon.local” otthoni hálózatunk neve (munkacsoportja), tetszőleges lehet, ékezetek nélkül
  • option domain-name-servers értékként a DNS szerverek IP címeit adjuk meg. Most a szerver címét adtam meg, de többet is fel lehet sorolni, vesszővel elválasztva. Ha nem telepítünk DNS szervert a szerverre, akkor használjuk szolgáltatónk DNS szervereit, vagy ezt a két IP címet: 208.67.222.222, 208.67.220.220
  • option routers átjáró IP címe (router, vagy jelen esetben a szerver IP címe)
  • default-lease-time az IP cím bérletének ideje másodpercben (eddig használja a kliens az adott IP címet anélkül, hogy újból kérne egyet)
  • max-lease-time maximum ennyi ideig nem kérhet a kliens IP címet
  • subnet 192.168.1.0 netmask 255.255.255.0 itt adjuk meg a hálózatunk IP trtományát. A subnethez írjuk be a szerver IP címét, majd az utolsó rész írjuk át nullása. a netmask a hálózat méretét határozza meg, a 255.255.255.0 azt jelenti, hogy a hálózatunkban 255 IP címet lehet felhasználni (192.168.1.0-tól 192.168.1.255-ig)
  • range ezen két IP cím közötti IP címeket osztja ki a szerver a klienseknek

CTRL+X billentyűkombinációt lenyomva léphetünk ki, majd egy Y (vagy ha magyar, akkor I) betüt lenyomva és egy entert ütve menthetjük a beállításokat.
Ha szeretnénk klienseinknek mindig ugyanazt az IP címet kiosztani, akkor ahhoz fel kell vennünk a dhcpd.conf fájlba a kliens hálózati kártyájának MAC címét, és a kíván IP címet, a subnet részen belül.

host kliensneve {
                hardware ethernet 00:50:8b:de:2d:f8;
                fixed-address 192.168.1.16;
        }

A host-nél adjuk meg a kliens nevét (ékezettelenül), a hardware ethernet sor tartalmazza a MAC címet, míg a fixed-address a kívánt IP címet (arra ügyeljünk, hogy ez a cím benne legyen kiosztható tartományban).
Ha felveszünk fix IP címmel klienseket, akkor a konfigurációs fájl így fog kinézni:

ddns-update-style none;
option domain-name "otthon.local";
option domain-name-servers 192.168.1.1;
option routers 192.168.1.1;
default-lease-time 42300;
max-lease-time 84600;
authoritative;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.5 192.168.1.100;
            host kliensneve {
                hardware ethernet 00:50:8b:de:2d:f8;
                fixed-address 192.168.1.16;
           }
}

Állítsuk be, hogy melyik hálózati kártyákon (interfészen) szolgáltasson a DHCP szerver.

sudo nano /etc/default/dhcp3-server

Majd itt az Interfaces sornál a két időzőjel közé írjuk be a hálózati kártya nevét (eth1 legtöbbször) ami a helyi hálózatunkra mutat
Majd indítsuk el a DHCP szerver:

sudo /etc/init.d/dhcp3-server start

DNS továbbító

Most a dnsmasq nevű programot fogjuk telepíteni. Ez a program nem egy igazi DNS szerver, hanem inkább egy DNS cachelő alkalmazás. Kis hálózatok esetén nem szükséges telepíteni, azonban sok gép esetén már érdemes.
Telepítése:

sudo apt-get install dnsmasq

Majd ha kész a telepítés, akkor nyissuk meg szerkesztésre a konfigurációs fájlját:

sudo nano /etc/dnsmasq.conf

Töröljük ki a gyárilag meglévő tartalmat, majd a következőket másoljuk be:

resolv-file=/etc/resolv.conf
interface=eth1

az interface sorban azt a hálózati kártyát kell megadni, ami a belső hálózat felé néz.
indítsuk újra a dnsmasq szolgáltatást

sudo /etc/init.d/dnsmasq restart

NAT és tűzfal beállítása

sudo nano /etc/sysctl.conf

Majd a 28. sorban a net.ipv4.ip_forward=1 elől töröljük a # jelet.
Majd nyissuk meg szerkesztésre az /etc/rc.local fájlt. Ide fogjuk a tűzfal szabályokat beírni

sudo nano /etc/rc.local

a következő két sort másoljuk be az exit sor elé (ha ADSL-t használunk, akkor az eth0 értékeket írjuk át ppp0 (három P betű és egy nulla) értékre!)

# Láncok törlése, ürítése, és alapértelmezett szabály beállítása.
iptables -F # Összes default láncot ürít.
iptables -X # Összess user általá létrehozott láncot töröl.
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# Policy-k legyenek mindig DROP-olva
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
# LOGDROP részt kivettem, mert nincs használva
# NAT beállítása (Ellenőrzés: `sudo iptables -L -t nat -vn`)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# INPUT lánc
# Loopback-ről midnent beengedünk.
iptables -A INPUT -i lo -j ACCEPT
# Mar kiépített kapcsolatokhoz tartozó csomagok beengedése. (Állapotkövetés)
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Másodpercenként 1×5 vagyis 5db ping képés beengedése. (Azért, mert a limit-burst alapértelmezett értéke=5)
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
# Ping válaszok beengedése
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
# Minden mást törlünk, de levileg a default policy is eldobná.
iptables -A INPUT -p icmp -j DROP
# FORWARD lánc
# Kifelé a userek mehetnek, visszafelé csak a kiépített kapcsolatokhoz tartozó csomagokat engedjük be a belső háló (lan0) felé.
iptables -A FORWARD -i eth0 -o lan0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i lan0 -o eth0 -j ACCEPT

A beállítások érvényesüléséhez indítsuk újra a számítógépet:

sudo reboot

Portforwardhoz a következő parancsot illesszük az /etc/rc.local fájlba a többi parancs után

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.15
iptables -A FORWARD -p tcp -d 192.168.1.15 --destination-port 80 -j ACCEPT

A fenti szabállyal a 192.168.1.15 IP című gépre forwaldoltam be a 80-as portot és a TCP protokollt.
Ha több portot szeretnénk egyszerre beforvaldolni, akkor megadhatunk egy tartományt is, ebben az esetben így írjuk: 80:100 Ekkor a 80-tól 100-ig lévő összes portot beforwaldoltuk a kliens felé. Ha nem csak a tcp protokollt szeretnénk engedélyezni, akkor a -p kapcsolónál írhatjuk át all értékre.

16 thoughts on “Internet megosztás Ubuntu Server alatt

  1. Ezeknek semmi értelme:
    iptables -A INPUT -i eth0 -m state –state ESTABLISHED,RELATED -j ACCEPT
    iptables -A INPUT -p icmp –icmp-type echo-request -m limit –limit 1/s -j ACCEPT
    iptables -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT
    Azért, mert az INPUT policy ACCEPT. Ami persze orbitális hiba!
    Ez detto felesleges:
    iptables -A FORWARD -p tcp -d 192.168.1.15 –destination-port 80 -j ACCEPT
    Mindezek jó szabályok, de a policy-ket át kéne írni DROP-ra.
    A LOGDROP láncot létrehozod, de semmire nem használod.
    Szerintem gondold át ezt mégegyszer, és dobj össze ide egy használhatóbb scriptet. Segítek amiben tudok.

  2. # Javítások, amiket első hsz-omban ajánlottam:
    # Láncok törlése, ürítése, és alapértelmezett szabály beállítása.
    iptables -F # Összes default láncot ürít.
    iptables -X # Összess user általá létrehozott láncot töröl.
    iptables -t nat -F
    iptables -t nat -X
    iptables -t mangle -F
    iptables -t mangle -X
    # Policy-k legyenek mindig DROP-olva
    iptables -P INPUT DROP
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD DROP
    # LOGDROP részt kivettem, mert nincs használva
    # NAT beállítása (Ellenőrzés: `sudo iptables -L -t nat -vn`)
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    # INPUT lánc
    # Loopback-ről midnent beengedünk.
    iptables -A INPUT -i lo -j ACCEPT
    # Mar kiépített kapcsolatokhoz tartozó csomagok beengedése. (Állapotkövetés)
    iptables -A INPUT -i eth0 -m state –state ESTABLISHED,RELATED -j ACCEPT
    # Másodpercenként 1×5 vagyis 5db ping képés beengedése. (Azért, mert a limit-burst alapértelmezett értéke=5)
    iptables -A INPUT -p icmp –icmp-type echo-request -m limit –limit 1/s -j ACCEPT
    # Ping válaszok beengedése
    iptables -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT
    # Minden mást törlünk, de levileg a default policy is eldobná.
    iptables -A INPUT -p icmp -j DROP
    # FORWARD lánc
    # Kifelé a userek mehetnek, visszafelé csak a kiépített kapcsolatokhoz tartozó csomagokat engedjük be a belső háló (lan0) felé.
    iptables -A FORWARD -i eth0 -o lan0 -m state –state ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -i lan0 -o eth0 -j ACCEPT
    # Port forward
    iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j DNAT –to 192.168.1.15
    iptables -A FORWARD -p tcp -d 192.168.1.15 –destination-port 80 -j ACCEPT
    Ez csak annyi módosítást tartalmaz, hogy kb ugyan az amradjona cél, mint az eredeti szabály lista. Persze otthoni átjáró szervernek nagyjából megfelel.
    Aztán lehet, hogy ejtettem hibákat, még átnázem majd mégegyszer.

  3. Igazán nincs mit!
    Ha valaki leteszteli, légyszi jelezzen vissza, hogy javíthassuk, ha valami nem megy, vagy hiányos. köszi!

  4. segítsetek pls!
    mindent megcsináltam az itt leírtak szerint, de vmiért nem megy a dolog.
    a helyzet:
    eth0 -> adsl modembe -> ppoeconf oké, csatlakozik, elinks-szel tudok böngészni
    eth1 -> switch 2-es port -> switch 3-as port win7 kliens.
    kliens hálókari beállítás:
    automatikus IP cím
    automatikus DNS
    tűzfal off
    interfaces-ben hálókari beállítása:
    auto eth0
    iface eth1 inet dhcp
    auto eth1
    iface eth1 inet static
    address 192.168.1.1
    netmask 255.255.255.0
    dhcpd.conf:
    ddns-update-style none;
    option domain-name “ubuserv”;
    option domain-name-servers IDE BEÍRTAM AZ ADSL KAPCS.DNS-eit;
    option routers 192.168.1.1; <- ENNEK LENNIE?
    default-lease-time 42300;
    max-lease-time 84600;
    authoritative;
    log-facility local7;
    subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.5 192.168.1.15;
    }
    dhcp3-server fájlban: eth1
    dhcp működik, kliens kap IP-t (192.168.1.5)
    /etc/rc.local-ba a fentebb felsoroltakat bemásolva SSH-zni sem tudok. "üresen" SSH megy, de semmi más.
    ezen oldalon egy másik leírásból kiszedett iptables-szel sem megy, de az ott felhasznált LOG-olást felhasználva kérdem én tőletek hogy mik ezek?
    Sep 9 19:09:42 ubuserv kernel: [ 104.537798] INPUT_DROP: IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:1f:
    d0:be:51:b7:08:00 SRC=192.168.1.5 DST=192.168.1.255 LEN=78 TOS=0x00 PREC=0x00 TTL=64 ID=27933 PROTO=
    UDP SPT=137 DPT=137 LEN=58
    Sep 9 19:09:43 ubuserv kernel: [ 105.241870] INPUT_DROP: IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:1f:
    d0:be:51:b7:08:00 SRC=192.168.1.5 DST=192.168.1.255 LEN=78 TOS=0x00 PREC=0x00 TTL=64 ID=27934 PROTO=
    UDP SPT=137 DPT=137 LEN=58
    Sep 9 19:09:43 ubuserv kernel: [ 105.288559] INPUT_DROP: IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:1f:
    d0:be:51:b7:08:00 SRC=192.168.1.5 DST=192.168.1.255 LEN=78 TOS=0x00 PREC=0x00 TTL=64 ID=27935 PROTO=
    UDP SPT=137 DPT=137 LEN=58
    amit ebből értek az az hogy ez egy eldobott INPUT a 192.168.1.5-ről (win7 kliens) de a DST nemtom miért 192.168.1.255?
    teljesen meg vagyok keveredve, segítsetek pls!

  5. Üdv mindenkinek!
    Csináltam egy ubuntu servert ami átjáró, van rajta lamp és samba, az eth0 dhcp-n kér ip-t ezen van net, de azt szeretném elérni hogy két ip-t kérjen az eth0.
    Próbáltam a következővel, de nem működik:
    auto eth0
    iface eth0 inet dhcp
    auto eth0:0
    iface eth0:0 inet dhcp
    Már keresgéltem az interneten de mindenhol csak statikus ip-vel van megoldva.

  6. Próbáld ki előbb kézzel:

    # létrehozod az eth0:0 interfészt
    ifconfig eth0:0 up
    #kérsz ip-t rá
    dhclient eth0:0
  7. Leteszteltem 9.10 Koala mackón. Sikerült.
    A dhcpd.conf-ba szolgáltató dns szerverét adtam meg mert addig nem sikerült. (router mögött vagyok és öcsém gépére továbbítom :))
    Neked lan0-nak van elnevezve a másik hálókártya? én eth1-nek írtam lehet lan0-al is működik. Nekem fordítva eth0 az ISP és eth1 a lan mert az eth1 alaplapi integ.
    Azt szeretném kérdezni, hogy ha az összes portot továbbítani szeretném akkor írtad hogy all a -p kapcsoló után; gondolom ez esetben nem kell a -dport kiegészítés ugye? Ja igen is ha sok kliensem lenne akkor, hogy lehetne megoldani hogy minden kliens felé engedélyezve legyen? IPcím tartomány esetleg? vagy máshogy? reguláris kifejezést lehet iptables-be használni?
    Egyébként jó írás, szükségem volt egy ilyen szájbarágósra úgyhogy örök hálám érte. Köszi
    Viktor

  8. Nekem is lenne egy problem. Hobbi szerverhez valamien hállózati hidat szeretnék de nem tudom hogy hogy kell .
    PL:
    internet –> router –> eth0(szerver) –> eth1(szerver) –> Gépem
    Valahogy kivitelezhető Ubuntu 10.04 LTS Server -en?

  9. Jó az írás! Az lenne a kérdésem, hogy hogyan lehet naplózni az internetforgalmat? Vagy ez alapban csinálja a szerver? Csak azért kérdezem, mert szeretnék weboldalakat is blokkolni. Gondolom simán iptables-el megoldható a dolog. pl. iptables -A INPUT -s xy.hu -j DROP, iptables -A OUTPUT -d xy.hu -j DROP
    Tehát figyelni szeretném az egyes gépeket, hogy milyen weboldalakat látogatnak és azok ellenőrzésével tiltani tudnám a nem kívánatos oldalakat!
    Az én esetemben kábelmodemes az internet elérés, majd jön a router és aztán jönne a szerver. A routeren kikapcsolom a dhcp-t és a szerver veszi át a szerepet. Azért akarom a router helyett szerverre bízni egyes feladatokat, mert a router csak kb. 10 oldalt tud blokkolni.

  10. [re=11055]Bulldozer[/re]: Akkor viszont számodra felesleges a router, ha másra nem használod, csak zabálja az áramot, A szervert simán kösd össze az adsl modemmel, plusz egyel kevesebb hibalehetőség.

  11. @Bulldozer: Jól dognolod, IP-t simán tudsz úgy (iptables-el tiltani) tiltani viszont ezt a FORWARD láncban kell, ha Te vagy a gateway!

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

Ez az oldal az Akismet szolgáltatást használja a spam csökkentésére. Ismerje meg a hozzászólás adatainak feldolgozását .