Теме: Микротик

Микротик: више јавних ИП на једном интерфејсу

Скраћена веза: http://pedja.supurovic.net/veza/5211

Недавно сам имао необичан случај мапирања портова за два сервера иза НАТ рутера. У локалној мрежи су подигнута два веб сервера, и требало је обезбедити да сваки од њих види са Интернета.

Са једним сервером је то лако, на мрежном интерфејсу на који долази интернет линк се подеси dst-nat порта tcp 80 ка серверу и то је готова ствар. Подешавање изгледа овако:

Интерфејсу додељујемо ип адресу:
/ip address add address=89.72.87.41/28 interface=wan disabled=no

Све одлазне конекције су усемрене маскарадом преко wan интерфејса:
/ip firewall nat chain=srcnat action=masquerade out-interface=wan

Долазне конекције на порт 80 су мапиране на ип адресу локалног сервера:
/ip firewall nat chain=dstnat action=dst-nat
\
dst-port=80 protocol=tcp to-addresses=10.10.10.2

Два сервера и рутер – вашар

Али, шта када је то потребно урадити када је потребно мапирати исти порт на два сервера? Један порт се не може мапирати на више локалних ип адреса. Обично се једном серверу промени порт и тако избегне проблем, али у овом случају је вило неопходно да и други сервер буде на порту 80, тако да ми је преостало једино решење да употребим две јавне ип адресе.

То није било проблем јер сам још ономад када је линк увођен, резервисао цео опсег јавних ип адреса, баш за такве потребе.

На први поглед ствар није деловала компликована. Потребно је било да мапирање портова додатно условим долазним ип адресама и тако омогућим за сваку адресу посебно мапирање порта 80.

Прво сам променио мапирање за постојећу ип адресу:

/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

Разлика је само утолико што сам додао параметар dst-address=89.72.87.41 којим сам ограничио да правило мапирања порта важи само ако је долазна конекција упућена на адресу 89.72.87.41. То је адреса које је додељена мрежној картици.

Сада сам могао да додам други ип адресу истој мрежној картици и да за њу подесим слично правило мапирања порта 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

Различите су само јавна ип адреса и адреса другог сервера, тако да све конекције на порт 80 на адресу 89.72.87.42 бивају усмерене на сервер на адреси 10.10.10.3.

То је одмах прорадило, и таман када сам мислио да је подешавање завршено, приметио сам да су све одлазне конекције из целе мреже на Интернет ишле са новом ип адресом уместо са оном старом, а то није смело да се дешава.

Игранка без престанка

Мало сам се распитао по Интернету и сазнао да Микротик, у случајевима када један мрежни интерфејс има више ип адреса, нат конекцијама додељује ип адресу која је интерфејсу прва додељена у тренутку када се подизао систем. То не мора бити адреса коју смо ми прву доделили интерфејсу, а чак и не мора бити иста адреса сваки пут када се систем подигне.

Разлог томе је превише опште правило маскараде које сам употребио, а које је у случају једне ип адресе сасвим довољно. Морао сам дакле променити начин извођења маскараде, а срећом Микротик је већ имао потребно решење које ми је требало: уместо уобичајеног action=masquerade довољно је било употребити action=src-nat и додатно навести ип адресу која ће се користити за те конекције. уместо првобитног правила за маскараду употребио сам два нова.

Пошто је једна маскарада требало да ради за све рачунаре у мрежи, а једна само за један сервер, онда сам прво поставио правило које се односи на тај сервер, а иза њега је следило правило које се односи на све остале рачунаре. Микротик, када примењује правила увек иде са врха ка крају листе, и када наиђе на правило које одговара конекцији примењује га. У овом случају то је значило да ће прва маскарада радити само за издвојени север, а за све остале конекције ће важити следеће, општије правило.

За издвојени сервер маскараду сам подесио на следећи начин:

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

Разлика у односу на уобичајену маскараду је у томе што се за акцију користи src-nat уместо masquarade, za src-address се наводи ип адреса рачунара на кога се маскарада односи, а to-addresses одређује која ип адреса мрежног интерфејса се користи за ову конекцију.

Да би ово радило било је неопходно и мрежној картици додати и нову ип адресу:
/ip address add address=89.72.87.43/28 interface=wan disabled=no

Преостало је да се подеси маскарада којa ће се примењивати на све остале рачунаре у мрежи. Подешавање је слично претходном:

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

Овде је за to-addresses употребљена друга јавна ип адреса а у src-address је наведен цео опсег ип адреса. Опсег у овом случају у ствари није неопходно наводити јер у мрежи и не постоје друге адресе које не припадају овом опсегу, а ово правило  терба да сеодноси на све рачунаре који нису онај први, издвојени сервер.

Сада је подешавање заиста било завршено. долазне конекције су исправно мапиране са јавних ип адреса на одговаајуће рачунаре, а одлазне конекције су такође исправно маскиране одговарајућим јавним ип адресама.

На сличан начин се могу решити конфликти са портовима било ког броја сервера, односно ип адреса.


Поделите овај чланак са пријатељима


7 comments to Микротик: више јавних ИП на једном интерфејсу

  • 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

    • Сваки упис у датотеку брише претходни садржај.

      Мораш да на почетку скрипте прочиташ садржај датотеке у променљиву па да наставиш да дописујеш. На крају све заједно упиши у датотеку.

      Пази на ограничење да датотека на може бити дужа од 4 КБ.

  • 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>

Попуните израз тако да буде тачан: *