Teme: Mikrotik

Mikrotik: više javnih IP na jednom interfejsu

Skraćena veza: http://pedja.supurovic.net/veza/5211

Nedavno sam imao neobičan slučaj mapiranja portova za dva servera iza NAT rutera. U lokalnoj mreži su podignuta dva veb servera, i trebalo je obezbediti da svaki od njih vidi sa Interneta.

Sa jednim serverom je to lako, na mrežnom interfejsu na koji dolazi internet link se podesi dst-nat porta tcp 80 ka serveru i to je gotova stvar. Podešavanje izgleda ovako:

Interfejsu dodeljujemo ip adresu:
/ip address add address=89.72.87.41/28 interface=wan disabled=no

Sve odlazne konekcije su usemrene maskaradom preko wan interfejsa:
/ip firewall nat chain=srcnat action=masquerade out-interface=wan

Dolazne konekcije na port 80 su mapirane na ip adresu lokalnog servera:
/ip firewall nat chain=dstnat action=dst-nat
\
dst-port=80 protocol=tcp to-addresses=10.10.10.2

Dva servera i ruter – vašar

Ali, šta kada je to potrebno uraditi kada je potrebno mapirati isti port na dva servera? Jedan port se ne može mapirati na više lokalnih ip adresa. Obično se jednom serveru promeni port i tako izbegne problem, ali u ovom slučaju je vilo neophodno da i drugi server bude na portu 80, tako da mi je preostalo jedino rešenje da upotrebim dve javne ip adrese.

To nije bilo problem jer sam još onomad kada je link uvođen, rezervisao ceo opseg javnih ip adresa, baš za takve potrebe.

Na prvi pogled stvar nije delovala komplikovana. Potrebno je bilo da mapiranje portova dodatno uslovim dolaznim ip adresama i tako omogućim za svaku adresu posebno mapiranje porta 80.

Prvo sam promenio mapiranje za postojeću ip adresu:

/ip firewall nat chain=dstnat action=dst-nat \
dst-port=80 protocol=tcp dst-address=89.72.87.41 \
to-addresses=10.10.10.2 protocol=tcp

Razlika je samo utoliko što sam dodao parametar dst-address=89.72.87.41 kojim sam ograničio da pravilo mapiranja porta važi samo ako je dolazna konekcija upućena na adresu 89.72.87.41. To je adresa koje je dodeljena mrežnoj kartici.

Sada sam mogao da dodam drugi ip adresu istoj mrežnoj kartici i da za nju podesim slično pravilo mapiranja porta 80:

/ip firewall nat chain=dstnat action=dst-nat \
dst-port=80 protocol=tcp dst-address=89.72.87.42 \
to-addresses=10.10.10.3 protocol=tcp

Različite su samo javna ip adresa i adresa drugog servera, tako da sve konekcije na port 80 na adresu 89.72.87.42 bivaju usmerene na server na adresi 10.10.10.3.

To je odmah proradilo, i taman kada sam mislio da je podešavanje završeno, primetio sam da su sve odlazne konekcije iz cele mreže na Internet išle sa novom ip adresom umesto sa onom starom, a to nije smelo da se dešava.

Igranka bez prestanka

Malo sam se raspitao po Internetu i saznao da Mikrotik, u slučajevima kada jedan mrežni interfejs ima više ip adresa, nat konekcijama dodeljuje ip adresu koja je interfejsu prva dodeljena u trenutku kada se podizao sistem. To ne mora biti adresa koju smo mi prvu dodelili interfejsu, a čak i ne mora biti ista adresa svaki put kada se sistem podigne.

Razlog tome je previše opšte pravilo maskarade koje sam upotrebio, a koje je u slučaju jedne ip adrese sasvim dovoljno. Morao sam dakle promeniti način izvođenja maskarade, a srećom Mikrotik je već imao potrebno rešenje koje mi je trebalo: umesto uobičajenog action=masquerade dovoljno je bilo upotrebiti action=src-nat i dodatno navesti ip adresu koja će se koristiti za te konekcije. umesto prvobitnog pravila za maskaradu upotrebio sam dva nova.

Pošto je jedna maskarada trebalo da radi za sve računare u mreži, a jedna samo za jedan server, onda sam prvo postavio pravilo koje se odnosi na taj server, a iza njega je sledilo pravilo koje se odnosi na sve ostale računare. Mikrotik, kada primenjuje pravila uvek ide sa vrha ka kraju liste, i kada naiđe na pravilo koje odgovara konekciji primenjuje ga. U ovom slučaju to je značilo da će prva maskarada raditi samo za izdvojeni sever, a za sve ostale konekcije će važiti sledeće, opštije pravilo.

Za izdvojeni server maskaradu sam podesio na sledeći način:

/ip firewall nat chain=srcnat action=src-nat \
src-address=10.50.10.3 to-addresses=89.72.87.42 \
out-interface=wan

Razlika u odnosu na uobičajenu maskaradu je u tome što se za akciju koristi src-nat umesto masquarade, za src-address se navodi ip adresa računara na koga se maskarada odnosi, a to-addresses određuje koja ip adresa mrežnog interfejsa se koristi za ovu konekciju.

Da bi ovo radilo bilo je neophodno i mrežnoj kartici dodati i novu ip adresu:
/ip address add address=89.72.87.43/28 interface=wan disabled=no

Preostalo je da se podesi maskarada koja će se primenjivati na sve ostale računare u mreži. Podešavanje je slično prethodnom:

/ip firewall nat chain=srcnat action=src-nat \
src-address=10.50.10.1/24 to-addresses=89.72.87.41 \
out-interface=wan

Ovde je za to-addresses upotrebljena druga javna ip adresa a u src-address je naveden ceo opseg ip adresa. Opseg u ovom slučaju u stvari nije neophodno navoditi jer u mreži i ne postoje druge adrese koje ne pripadaju ovom opsegu, a ovo pravilo  terba da seodnosi na sve računare koji nisu onaj prvi, izdvojeni server.

Sada je podešavanje zaista bilo završeno. dolazne konekcije su ispravno mapirane sa javnih ip adresa na odgovaajuće računare, a odlazne konekcije su takođe ispravno maskirane odgovarajućim javnim ip adresama.

Na sličan način se mogu rešiti konflikti sa portovima bilo kog broja servera, odnosno ip adresa.


Podelite ovaj članak sa prijateljima


7 comments to Mikrotik: više javnih IP na jednom interfejsu

  • vladan

    Pedja,

    Volio bih da mogu da u nekom fajlu recimo ip.txt upisujem adrese koje dobijam od ISP-a, sa datumom i vremenom kad se desi promjena. U ovu svrhu bih iskoristio skriptu koju već koristim za DynDNS i u momentu kad se desi razlika u adresama da on upiše u pomenutom fajlu novi zapis (novi ip, datum i vrijeme promjene i znak za novi red), ali da ne briše stare zapise, već da pravi listu. U programiranju se koristi oznaka EOF za ovu svrhu, ali u Mikrotiku nikako da nađem da li to može.

    Veliki pozdrav i poštovanje,

    Vladan Bojović, Podgorica

    • Svaki upis u datoteku briše prethodni sadržaj.

      Moraš da na početku skripte pročitaš sadržaj datoteke u promenljivu pa da nastaviš da dopisuješ. Na kraju sve zajedno upiši u datoteku.

      Pazi na ograničenje da datoteka na može biti duža od 4 KB.

  • vladan

    Mnogo hvala na pomoći!

    Uradio sam prema tvojim instrukcijama i sada mi radi upisivanje u fajl kako sam i želio.

    Veliki pozdrav i Hvala!

  • Vladan Bojović

    Da li se preko Mikrotika može nekako podesiti da preko jedne tel linije bude omogućen adsl internet i T-comov IPTV, kao što je to moguće na T-com-ovim bezveznim ruterima (npr Pirelli)? U podešavanju tog Pirellija za internet se koristi VPI 8 VCI 35, a za IPTV druga konekcija VPI 8 VCI 36 i sa još nekim bridgovanjem… Nadam se da me možete razumjeti.

    • NE ynam kako radi T-comm ali pretpsotavljam da je slično kao i svi drugi provajderi: korisnik dobija ADSL ruter preko koga ima internet i IPTV.

      Tu je kvaka u onom ADSL. Mikrotik već godinama odbija da uopšte razmišlja o ugradnji direktne podrške za ADSL, pa tako Mikrotik ne može da se spoji direktno na ADSL liniju već ispred uvek mora da bude neki ADSL uređaj kao taj što si dobio od T-comm.

      Mikrotik je ruter, tako da ne može da obavlja te poslove koje spadaju u ADSL protokol.

  • Vlada

    Da li mikrotik moze da na neki nacin da
    obradi dinamicku IP adresu i mom racunaru
    dodeli staticku? Imam ADSL i neki CS server
    i problem je sto se stalno menja adresa jer
    je dinamicka i moram uvek drugovima da dajem drugu.

    • Tu imaš tri moguća rešenja:

      1. koristi dinamički DNS. To će omogućiti da serveru pristupaš po nekoj mnemoničkoj adresi kojoj će se IP menjati kako se menja IP linka.

      2. Koristi neki od VPN sevisa koji imaju uslugu dodelu statične javne IP adrese VPN konekciji.

      3. Vodi sa provadjerom kakv je postupak i koliko košta da ti dodele statičnu IP adresu.

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Popunite izraz tako da bude tačan: *