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 | konf_router_internet |
| Router 2 | Local_1 | Router na privatnoj mreži 1 | konf_router_1 |
| Router 3 | Local_2 | Router na privatnoj mreži 2 | konf_router_2 |
| Računalo | DSL_01 | Računalo na privatnoj mreži 1 | konf_dsl_1 |
| Računalo | DSL_02 | Računalo na privatnoj mreži 1 (web server) | konf_dsl_2 |
| Računalo | DSL_03 | Računalo na privatnoj mreži 2 | konf_dsl_3 |
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 . 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 <fc #ff0000>10.0.2.1</fc> koju NAT rutera na mreži 2 zamjenjuje svojom javnom adresom <fc #ff0000>203.0.113.253</fc> 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 <fc #ff0000>203.0.113.253</fc> na odredišnu IP adresu<fc #ff0000>192.51.100.253</fc> 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 <fc #ff0000>10.0.1.100</fc>. Izvorišna IP adresa ostaje ista: <fc #ff0000>203.0.113.253</fc>. |
| 03 | 10.0.1.100 | 203.0.113.253 | Server odgovara na klijentov zahtjev paketom koji za izvorišnu IP adresu ima<fc #ff0000>10.0.1.100</fc> a za odredišnu <fc #ff0000>203.0.113.253</fc>. |
| 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 <fc #ff0000>203.0.113.253</fc>, a izvorišna<fc #ff0000>192.51.100.253</fc>. |
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 <fc #ff0000>10.0.1.1</fc> na odredišnu IP adresu <fc #ff0000>192.51.100.253</fc> 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 <fc #ff0000>10.0.1.100</fc>. Izvorišna IP adresa ostaje ista: <fc #ff0000>10.0.1.1</fc>. |
| 03 | 10.0.1.100 | 10.0.1.1 | Server odgovara na klijentov zahtjev paketom koji za izvorišnu IP adresu ima<fc #ff0000>10.0.1.100</fc> a za odredišnu <fc #ff0000>10.0.1.1</fc>. 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 <fc #ff0000>10.0.1.1</fc> na odredišnu IP adresu <fc #ff0000>192.51.100.253</fc> 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 <fc #ff0000>10.0.1.100</fc>, ali i izvorišnu IP adresa zamjenjuje adresom routera: <fc #ff0000>10.0.1.254</fc>. |
| 03 | 10.0.1.100 | 10.0.1.254 | Server odgovara na klijentov zahtjev paketom koji za izvorišnu IP adresu ima<fc #ff0000>10.0.1.100</fc> a za odredišnu <fc #ff0000>10.0.1.254</fc>. |
| 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 <fc #ff0000>192.51.100.253</fc> a za odredišnu <fc #ff0000>10.0.1.1</fc> |
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)
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 <fc #ff0000>osim za sam server</fc>. 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
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
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
- <fc #ff0000>kreiran je Source NAT (masquerade) koji adrese sa lokalne mreže koje pristupaju web serveru maskira privatnom adresom routera</fc>
- dodana je defaultna ruta za sav promet koji nije namijenjen lokalnoj mreži
- na ruteru je onemogućen lokalni web server namijenjen konfiguraciji
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
Računalo "DSL_01" - konfiguracija
Ime računala: DSL_01 IP adresa: 10.0.1.1 Def. Gateway: 10.0.1.254 Funkcija: klijent
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
Računalo "DSL_03" - konfiguracija
Ime računala: DSL_03 IP adresa: 10.0.2.1 Def. Gateway: 10.0.2.254 Funkcija: klijent


