==== Javni servis na privatnoj mreži ====
Priključak na Internet korisnicima otvara cijeli spektar novih i interesantnih mogućnosti. Od "običnog" surfanja Internetskim prostranstvima i primanja i slanja mailova preko komuniciranja putem raznih javnih mrežnih servisa i gledanja streaming sadržaja pa sve do mogućnosti da i sami pružimo neku od usluga javnosti. To ne mora nužno značiti otvaranje pristupa širokim masama nego prvenstveno puštanje nekog od privatno hostanog servisa (web server, server video nadzora, privatni cloud server…) na Internet kako bismo mu sami mogli pristupiti sa bilo koje javne mreže.
Postupak za to je vrlo jednostavan na većini uređaja i zove se Destination Network Address Translation (NAT). To znači da pristupni mrežni uređaj (router), paketu koji je za ciljnu adresu imao upravo njegovu javnu adresu, istu zamjenjuje adresom uređaja na privatnoj mreži koji je tako svoju uslugu u mogućnosti prezentirati na Internetu. Ako smo iskoristili uslugu nekog od dinamičkih DNS servisa i ažurno mu dojavljujemo promjene svoje javne adrese svojem kućnom web serveru pristupat ćemo preko stalnog URL-a (Uniform Resource Locator) a ne preko adrese koja se mijenja na dnevnoj bazi ili ćešće.
Na komforno upisivanje URL-a umjesto IP adrese vrlo brzo ćemo se naviknuti i odmah naići na problem koji se javlja kad isti taj URL želimo iskoristiti za pristup svojem objavljenom servisu sa privatne mreže a omiljeni browser nam javi da to nije moguće, no ako pokušamo sa njegovom stvarnom privatnom IP adresom, vidjet ćemo da je i dalje dostupan. Zašto je tome tako?
=== Testno okruženje: ===
^Uređaj^Ime^Opis^Link na konfiguracijsku datoteku|
^Router 1|Internet|Router koji "glumi" internet odnosno povezuje dvije privatne mreže sa javnim adresama|[[:networking:mikrotik:private_public#konf_router_internet|konf_router_internet]]|
^Router 2|Local_1|Router na privatnoj mreži 1|[[:networking:mikrotik:private_public#konf_router_1|konf_router_1]]|
^Router 3|Local_2|Router na privatnoj mreži 2|[[:networking:mikrotik:private_public#konf_router_2|konf_router_2]]|
^Računalo|DSL_01|Računalo na privatnoj mreži 1|[[:networking:mikrotik:private_public#konf_dsl_1|konf_dsl_1]]|
^Računalo|DSL_02|Računalo na privatnoj mreži 1 (web server)|[[:networking:mikrotik:private_public#konf_dsl_2|konf_dsl_2]]|
^Računalo|DSL_03|Računalo na privatnoj mreži 2|[[:networking:mikrotik:private_public#konf_dsl_3|konf_dsl_3]]|
[[https://wiki.tuturutu.eu/lib/exe/detail.php?id=networking:mikrotik:private_public&media=networking:mikrotik:hairpin_01.png|{{ :networking:mikrotik:hairpin_01.png?900 }}]]
Imamo //mrežu 1// (10.0.1.0/24) na kojoj jedno od računala (DSL_02) ima instaliran **web server** koji svoje stranice na pregled nudi i ostatku korisnika interneta a dostupno je na URL-u **[[http://mywebserver.dyndnsdomain.com|http://mywebserver.dyndnsdomain.com]]** . Domena **dyndnsdomain.com** je pod kontrolom nekog od javnih servisa koji serviraju DNS za dinamičke domene, host **mywebserver** je kod njih registriran za nas i uz pomoć tome namjenjene aplikacije redovito mu osvježavamo IP adresu.
Na //mreži 2// je jednaka situacija samo bez objavljenih servisa pa se tu nalaze samo klijenti koji žele pristupiti web serveru preko interneta.
Kad klijent **DSL_02** sa privatne //mreže 2// pokuša uspostaviti vezu sa web serverom na računalu **DSL_02** koje se nalazi na privatnoj //mreži 1// upit kreće sa adrese 10.0.2.1 koju NAT rutera na //mreži 2// zamjenjuje svojom javnom adresom 203.0.113.253 a na **Routeru 1** izgleda ovako:\\
^Korak^Izvorišna IP adresa^Odredišna IP adresa^ Opis |
^01|203.0.113.253|192.51.100.253|Klijent šalje paket sa izvorišnom IP adresom of 203.0.113.253 na odredišnu IP adresu192.51.100.253 na port tcp/80 kako bi pristupio sadržaju na web serveru|
^02|203.0.113.253|10.0.2.100|Router translatira odredišnu adresu paketa u 10.0.1.100. Izvorišna IP adresa ostaje ista: 203.0.113.253.|
^03|10.0.1.100|203.0.113.253|Server odgovara na klijentov zahtjev paketom koji za izvorišnu IP adresu ima10.0.1.100 a za odredišnu 203.0.113.253.|
^04|192.51.100.253|203.0.113.253|Router odlučuje da se radi o o paketu koji je dio prethodno uspostavljene veze, skida odredišnu adresu koju je postavio destination NAT i vraća originalnu. Odredišna adresa je sada 203.0.113.253, a izvorišna192.51.100.253.|
Klijent je od web servera dobio očekivane pakete i veza je uspostavljena.
Kad istu radnju pokuša napraviti klijent DSL_01 sa privatne mreže 1, dakle uspostaviti vezu sa web serverom na računalu DSL_02 na istoj mreži koristeći pri tome URL web servera odnosno njegovu javnu adresu događa se sljedeće:
^Korak^Source IP address^Destination IP address^Description|
^01|10.0.1.1|192.51.100.253|klijent šalje paket sa izvorišnom IP adresom 10.0.1.1 na odredišnu IP adresu 192.51.100.253 na port tcp/80 kako bi pristupio sadržaju na web serveru.|
^02|10.0.1.1|10.0.1.100|Router translatira odredišnu adresu paketa u 10.0.1.100. Izvorišna IP adresa ostaje ista: 10.0.1.1.|
^03|10.0.1.100|10.0.1.1|Server odgovara na klijentov zahtjev paketom koji za izvorišnu IP adresu ima10.0.1.100 a za odredišnu 10.0.1.1. Budući su i izvorišna i odredišna IP adresa na istom subnetu ovaj odgovor web servera klijentu ne vraća se na router sa kojeg je došao nego direktno klijentu.|
Klijent dobiva odgovor ali odbacuje paket budući ga je dobio sa adrese 10.0.1.100 a ne sa 198.51.100.253 kako je očekivao.
----
=== Hair Pin NAT ===
Da bismo riješili ovaj problem potrebno nam je dodatno NAT pravilo na Routeru 1 koje će forsirati da odgovor web servera sa adrese 10.0.1.100 računalu DSL_01 na adresi 10.0.1.1 prođe kroz router bez obzira na činjenicu što se obje nalaze na istoj mreži. Pravilo može biti vrlo specifično za točno određenu adresu odnosno tip prometa a može se i proširiti tako da za svaki prosljeđeni servis ne moramo imati po jedno.
/ip firewall nat
add action=masquerade chain=srcnat comment="Masquerade to Web server" dst-address=10.0.1.100 out-interface=bridge_local protocol=tcp src-address=10.0.1.0/24
Sa dodatnim NAT pravilom tok se mijenja na sljedeći način:
^Korak^Source IP address^Destination IP address^Description|
^01|10.0.1.1|192.51.100.253|klijent šalje paket sa izvorišnom IP adresom 10.0.1.1 na odredišnu IP adresu 192.51.100.253 na port tcp/80 kako bi pristupio sadržaju na web serveru.|
^02|10.0.1.254|10.0.1.100|Router translatira odredišnu adresu paketa u 10.0.1.100, ali i izvorišnu IP adresa zamjenjuje adresom routera: 10.0.1.254.|
^03|10.0.1.100|10.0.1.254|Server odgovara na klijentov zahtjev paketom koji za izvorišnu IP adresu ima10.0.1.100 a za odredišnu 10.0.1.254.|
^04|192.51.100.253|10.0.1.1|Router odlučuje da je paket dio prethodno uspostavljene konekcije, "skida" Source i Destination NAT i paketu vraća orginalne adrese pa tako za izvorišnu IP adresu dobije 192.51.100.253 a za odredišnu 10.0.1.1|
Klijent dobiva odgovor u formi kakvu očekuje i veza je uspostavljena.
Ovaj princip se naziva još i Hair Pin NAT (hair pin - ukosnica) jer na to podsjeća putanjom paketa od klijenta do servera i natrag.
----
=== Zasebna mreža ===
Sljedeći način za rješavanje ovog problema je postavljanje web servera na zasebnu mrežu (subnet)
[[https://wiki.tuturutu.eu/lib/exe/detail.php?id=networking:mikrotik:private_public&media=networking:mikrotik:hairpinnat_subnet.png|{{ :networking:mikrotik:hairpinnat_subnet.png?900 }}]]
Server je preseljen u mrežu 10.0.11.0/24 a njegova IP adresa je 10.0.11.100.U ovom slučaju problem je u potpunosti otklonjen za sva računala osim za sam server. Naime sa svih računala na internetu a i računala na privatnoj //mreži 1// u subnetu 10.0.1.0/24 web server će biti dostupan preko javne adrese rutera ili URL-a **mywebserver.dyndnsdomain.com**. Ukoliko i sa računala DSL_02 želimo pristupiti web serveru koji se nalazi na njemu koristeći URL, pojavit će se ista greška kao i u prethodnom slučaju, koji možemo riješiti na isti način kao i prije samo što će se ovaj puta pravilo odnositi na promet koji polazi sa subneta na kojem se server nalazi prema samom sebi ali preko javne adrese.
NAT pravilo će sada izgledati ovako:
/ip firewall nat
add action=masquerade chain=srcnat comment="Masquerade to Web server" dst-address=10.0.11.100 out-interface=bridge_dmz protocol=tcp src-address=10.0.11.0/24
----
=== Split DNS ===
----
{{anchor:konf_router_internet:}}
=== Router "Internet" - konfiguracija ===
# may/19/2021 14:59:58 by RouterOS 6.48.1
# software id =
#
#
#
/system identity
set name=Internet
/ip address
add address=198.51.100.254/24 interface=ether1 network=198.51.100.0
add address=203.0.113.254/24 interface=ether5 network=203.0.113.0
/ip dhcp-client
add disabled=no interface=ether3
/ip dns
set allow-remote-requests=yes
/ip dns static
add address=198.51.100.253 name=mywebserver.dyndnsdomain.com
/ip firewall nat
add action=masquerade chain=srcnat out-interface=ether
- postavljeno je ime rutera
- dodijeljene su IP adrese na ether1 i ether5 koji će biti povezani sa routerom 1 i routerom 2
- kreiran je dhcp klijent koji na ether3 postavlja adresu dobivenu od nadređenog DHCP servera
- dozvoljeni su DNS upiti
- u statički dns dodan je web server kako bismo mu mogli pristupiti po URL adresi
- kreiran je NAT masquerade prema ether3 interfejsu okrenutom Internetu kako bi svi uređaji iza routera mogli razmjenjivati promet sa Internetom
{{anchor:konf_router_1:}}
=== Router "Local_1" - konfiguracija ===
# may/19/2021 15:22:24 by RouterOS 6.48.1
# software id =
#
#
#
/system identity
set name=Local_1
/interface bridge
add name=bridge_local
/interface bridge port
add bridge=bridge_local interface=ether1
add bridge=bridge_local interface=ether2
/ip address
add address=10.0.1.254/24 interface=bridge_local network=10.0.1.0
add address=198.51.100.253/24 interface=ether5 network=198.51.100.0
/ip pool
add name=dhcp_pool0 ranges=10.0.1.1-10.0.1.253
/ip dhcp-server
add address-pool=dhcp_pool0 disabled=no interface=bridge_local name=dhcp1
/ip dhcp-server lease
add address=10.0.1.1 mac-address=00:0C:29:2B:7F:0B server=dhcp1
add address=10.0.1.100 mac-address=00:0C:29:D6:C1:2A server=dhcp1
/ip dhcp-server network
add address=10.0.1.0/24 dns-server=198.51.100.254 gateway=10.0.1.254
/ip dns
set allow-remote-requests=yes
/ip firewall nat
add action=masquerade chain=srcnat comment="Masquerade to Internet" out-interface=ether5
add action=dst-nat chain=dstnat comment="DstNat to Web server" dst-address=198.51.100.253 dst-port=80 protocol=tcp to-addresses=10.0.1.100 to-ports=80
add action=masquerade chain=srcnat comment="Masquerade to Web server" dst-address=10.0.1.100 out-interface=bridge_local protocol=tcp src-address=10.0.1.0/24
/ip route
add distance=1 gateway=198.51.100.254
/ip service
set www disabled=yes
- postavljeno je ime rutera
- kreiran je bridge_local
- u koji su dodani ether1 i ether2
- dodijeljene su IP adrese na bridge_local i ether5 koji će biti povezani sa lokalnom mrežom 1 i Internetom
- kreiran je pool adresa za DHCP server
- kreiran je dhcp server
- rezervirane su adrese za računala DSL_01 i DSL_02 tako da uvijek budu 10.0.1.1 i 10.0.1.100
- dhcp serveru su dodani parametri mreže
- dozvoljeni su DNS upiti
- kreiran je Source NAT (masquerade) koji adrese sa lokalne mreže koje pristupaju Internetu maskira javnom adresom rutera
- kreiran je Destination NAT koji sve pakete koji dolaze sa Interneta namijenjene javnoj adresi rutera i portu 80 upućuje na port 80 računala DSL_02 na kojem je web server
- kreiran je Source NAT (masquerade) koji adrese sa lokalne mreže koje pristupaju web serveru maskira privatnom adresom routera
- dodana je defaultna ruta za sav promet koji nije namijenjen lokalnoj mreži
- na ruteru je onemogućen lokalni web server namijenjen konfiguraciji
{{anchor:konf_router_2:}}
=== Router "Local_2" - konfiguracija ===
# may/19/2021 15:25:43 by RouterOS 6.48.1
# software id =
#
#
#
/system identity
set name=Local_2
/interface bridge
add name=bridge_local
/interface bridge port
add bridge=bridge_local interface=ether1
add bridge=bridge_local interface=ether2
/ip address
add address=10.0.2.254/24 interface=bridge_local network=10.0.2.0
add address=203.0.113.253/24 interface=ether5 network=203.0.113.0
/ip pool
add name=dhcp_pool0 ranges=10.0.2.1-10.0.2.253
/ip dhcp-server
add address-pool=dhcp_pool0 disabled=no interface=bridge_local name=dhcp1
/ip dhcp-server lease
add address=10.0.2.1 mac-address=00:0C:29:8F:9E:D3 server=dhcp1
/ip dhcp-server network
add address=10.0.2.0/24 dns-server=203.0.113.254 gateway=10.0.2.254
/ip dns
set allow-remote-requests=yes
/ip firewall nat
add action=masquerade chain=srcnat out-interface=ether5
/ip route
add distance=1 gateway=203.0.113.254
- postavljeno je ime rutera
- kreiran je bridge_local
- u koji su dodani ether1 i ether2
- dodijeljene su IP adrese na bridge_local i ether5 koji će biti povezani sa lokalnom mrežom 1 i Internetom
- kreiran je pool adresa za DHCP server
- kreiran je dhcp server
- rezervirana je adresa za računalo DSL_03 tako da uvijek bude 10.0.2.1
- dhcp serveru su dodani parametri mreže
- dozvoljeni su DNS upiti
- kreiran je Source NAT (masquerade) za pristup lokalne mreže 2 Internetu
- dodana je defaultna ruta za sav promet koji nije namijenjen lokalnoj mreži
- na ruteru je onemogućen lokalni web server namijenjen konfiguraciji
{{anchor:konf_dsl_1:}}
=== Računalo "DSL_01" - konfiguracija ===
Ime računala: DSL_01
IP adresa: 10.0.1.1
Def. Gateway: 10.0.1.254
Funkcija: klijent
{{anchor:konf_dsl_2:}}
=== Računalo "DSL_02" - konfiguracija ===
Ime računala: DSL_02
IP adresa: 10.0.1.100
Def. Gateway: 10.0.1.254
Funkcija: Web Server
{{anchor:konf_dsl_3:}}
=== Računalo "DSL_03" - konfiguracija ===
Ime računala: DSL_03
IP adresa: 10.0.2.1
Def. Gateway: 10.0.2.254
Funkcija: klijent