Nešto vrlo često kod upravljanja poslužiteljima je preusmjeravanje prometa.
Pretpostavimo da imamo poslužitelj s određenim uslugama, ali iz bilo kojeg razloga mijenjamo jednu od tih usluga (Ne znam, na primjer pop3 koji je port 110) na drugi poslužitelj. Normalna i najčešća stvar bila bi jednostavna promjena IP-a u DNS zapisu, no ako netko koristi IP umjesto poddomene, to će biti pogođeno.
Što uraditi? ... jednostavno, preusmjerite promet koji je taj poslužitelj primio preko tog porta na drugi poslužitelj s istim priključkom.
Kako započeti preusmjeravanje prometa?
Prva stvar je da smo sigurno omogućili prosljeđivanje na poslužitelj, za ovo ćemo staviti sljedeće:
echo "1" > /proc/sys/net/ipv4/ip_forward
Možete koristiti i ovu drugu naredbu, u slučaju da vam prethodna ne uspije (dogodilo mi se ovako na CentOS-u):
sysctl net.ipv4.ip_forward=1
Tada ćemo ponovno pokrenuti mrežu:
service networking restart
U RPM distribucijama poput CentOS-a i drugih, to bi bilo:
service nertwork restart
Sada ćemo prijeći na važnu stvar, recite poslužitelju iptables što preusmjeriti:
iptables -t nat -A PREROUTING -p tcp --dport <puerto receptor> -j DNAT --to-destination <ip final>:<puerto de ip final>
Drugim riječima, i slijedeći primjer koji sam spomenula, pretpostavimo da sav promet koji naš poslužitelj prima putem porta 110 preusmjerimo na drugi poslužitelj (primjer: 10.10.0.2), koja će i dalje primati taj promet kroz 110 (to je ista usluga):
iptables -t nat -A PREROUTING -p tcp --dport 110 -j DNAT --to-destination 10.10.0.2:110
Poslužitelj 10.10.0.2 vidjet će da svi paketi ili zahtjevi dolaze s klijentovog IP-a, u slučaju da žele preplivati zahtjeve, odnosno da drugi poslužitelj vidi da zahtjevi stižu s IP-om prvog poslužitelja (i u koje primjenjujemo preusmjeravanje), bilo bi također staviti ovaj drugi redak:
iptables -t nat -A POSTROUTING -j MASQUERADE
Neka pitanja i odgovori
U primjeru sam oba puta koristio isti port (110), međutim oni mogu bez problema preusmjeriti promet s jednog porta na drugi. Na primjer, pretpostavimo da želim preusmjeriti promet s porta 80 na 443 na drugom poslužitelju, jer bi to bilo:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.0.2:443
Ovo je iptables, oni mogu koristiti sve ostale parametre koje znamo, na primjer, ako želimo samo preusmjeriti promet s određene IP adrese, to bi bilo dodavanje -s ... Na primjer, preusmjerit ću samo promet koji dolazi od 10.10.0.51:
iptables -t nat -A PREROUTING -p tcp -s 10.10.0.51 --dport 80 -j DNAT --to-destination 10.10.0.2:443
Ili cijela mreža (/ 24):
iptables -t nat -A PREROUTING -p tcp -s 10.10.0.0/24 --dport 80 -j DNAT --to-destination 10.10.0.2:443
Mrežno sučelje možemo odrediti i s -i :
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to-destination 10.10.0.2:443
Kraj!
Kao što sam već rekao, to su iptables, možete primijeniti ono što je već poznato, tako da poslužitelj radi točno ono što vi želite 😉
Pozdrav!
20 komentara, ostavi svoj
To možemo učiniti i putem vatrozida koji omogućuje prosljeđivanje priključaka, zar ne? (primjenjujući odgovarajuća pravila).
Da, naravno, na kraju vatrozid poput Pfsensea ili drugih, koristite iptable s leđa.
Točnije, pfsense ne koristi iptables već pf, imajte na umu da je unutra bsd.
Ma dobro, loše!
Najljepša hvala na savjetu 🙂
Imam par sumnji:
1 - Je li promjena trajna? ili se gubi prilikom ponovnog pokretanja poslužitelja?
2 - Imam više instanci (recimo A, B i C) na istoj podmreži. U primjeru A primjenjujem pravilo za usmjeravanje prometa na vanjsku IP adresu, a pokušavajući s uvojcima iz instanci B i C, sve čini čuda. Problem je što od instance A to ne radi. Pokušao sam koristiti i vaš ip i loopback sučelje, a niti jedno ne funkcionira:
$ iptables -t nat -A PREROUTING -p tcp –port 8080 -j DNAT –do odredišta xxxx: 8080
$ iptables -t nat -A PREROUTING -p tcp -i lo –dport 8080 -j DNAT –do odredišta xxxx: 8080
$ curl ip-yyyy: 8080 / hello_world
curl: (7) Nije uspjelo povezivanje s ip-yyyy portom 8080: Veza je odbijena
$ curl localhost: 8080 / hello_world
curl: (7) Nije uspjelo povezivanje s portalom localhost 8080: Veza je odbijena
Imate li pojma u čemu je problem?
Da, promjena se gubi pri ponovnom pokretanju, morat ćete koristiti iptables-save & iptables-restore ili nešto slično da biste to izbjegli.
Nisam baš razumio što želite učiniti, primjer A?
Imam poslužitelj koji podržava samo veze s određenog ip-a (poslužitelja A), ne mogu ili želim dodati više ips-a na bijelu listu (zbog problema s skalabilnošću), pa želim da sav promet prema vanjskom poslužitelju prolazi rekao je poslužitelj (A).
Iz praktičnih razloga, imam globalne konfiguracije koje definiraju koji će se IP koristiti za svaku uslugu, tako da je u ovom slučaju to nešto poput "svi koji žele koristiti vanjsku uslugu moraju koristiti IP A"
Uspješno sam to postigao metodom u ovom članku, ali nailazim na problem da prilikom njegove primjene poslužitelj A ne može pristupiti usluzi pomoću vlastitog ip-a (ali svi ostali poslužitelji to rade).
Do sada je najbolje što sam pronašao bilo dodavanje mapiranja u datoteku poslužitelja / etc / hosts, pokazujući na vanjski ip, prepisujući globalnu postavku.
Vrlo dobro, ako imam drugi poslužitelj pošte, mogao bih proslijediti promet s priključka 143 s poslužitelja1 na poslužitelj2 i e-poruke će mi stići na poslužitelj2, zar ne?
pozdravi
U teoriji da, djeluje ovako. Svakako, na serveru2 XNUMX morate imati pravilno instaliran poslužitelj pošte
Objave koje volimo čitati, hvala!
Izvrstan članak, imam projekt u kojem radim i htio sam vas pitati pitanje, postoje industrijski prekidači s NAT funkcijom (pretpostavljam da koriste IPTablice u nastavku), za prevođenje IP adrese bez izmjena opreme, primjer, imam poslužitelj 10.10.2.1 koji komunicira s računalima 10.10.2.X i preko prekidača je programiran tako da se računalo koje ima adresu 192.168.2.4 sa poslužitelja zapravo vidi kao 10.10.2.5, prevelo je tu IP adresu da se vidi S ostalih računala s tom adresom, želim to učiniti sa poslužitelja s Ubuntuom ili nekom drugom distribucijom, koja bi bila iptables pravila?
Vrlo dobre informacije hvala ^ _ ^
Dobar dan.
Imam problem s pokušajem preusmjeravanja. Ja objašnjavam:
Imam proxy poslužitelj u Ubuntuu, s 2 mrežne kartice:
eth0 = 192.168.1.1 povezan je s ostatkom lokalne mreže.
eth1 = 192.168.2.2 spojen je na usmjerivač.
Treba mi sve što dolazi kroz eth0 da bih prošao kroz eth1, a također i preko proxyja (koristim Squid, čiji je zadani port 3128), a ne mogu pronaći ključ u konfiguraciji IPTABLES.
Ne trebaju mi nikakva ograničenja, samo da zapis ostane u zapisniku posjećenih web adresa.
Nadam se da mi možete pomoći jer je to prilično glomazan zadatak koji me brine već par dana.
Hvala Vam.
Prijatelju, jako sam nov na drugim poslužiteljima, nemam pojma, ali razumijem temu i brzo učim, moje pitanje je sljedeće. Imam 2 poslužitelja serv_1 i serv_2 koje sam povezao na isti intranet, na tim poslužiteljima imam postavljen vlastiti oblak, Želio bih učiniti sljedeće:
da je određeni raspon ips, na primjer rangeip_1 prilikom postavljanja pristupnog ip-a vlastitom oblaku (ipowncloud) usmjeren prema serv_1, a ako je to drugi rangeip_2, isti ipowncloud usmjeren je na serv_2, to kako bi se smjestila 2 poslužitelja u dva različita grada i rasponi IP-a su različiti, ali svi su na istoj mreži, to bi bio prvi dio, drugi bi bio jasan, sinkronizirati ova dva poslužitelja tako da budu zrcala ili da mi to savjetuju kako bih optimizirao širinu band, molim vas, ako ćete mi objasniti kako to učiniti korak po korak, a ne u super programer mod =
Pozdrav, oprostite, imam prekidač zadužen za komunikaciju svih uređaja koji čine moju mrežu, a nakon toga vatrozid i konačno izlaz iz Interneta, ono što se događa je da bih želio da preusmjeravanje bude dato u preklopnik i ne mora doći do vatrozida ako tražena usluga nije internet.
Pomoću ove metode možete li HTTPS preusmjeriti na HTTP?
Pozdrav, možda je malo kasno, ali htio sam te pitati, kako da lignje ne mijenjaju IP klijenta kada se želim povezati s web serverom na istoj mreži?
Ne ponašaj se loše prema meni što pitaš. Može li se to učiniti u sustavu Windows?
Ove su mi informacije bile korisne. Kao i uvijek mogu vam se vjerovati, kad ne mogu pronaći nešto na engleskom, obično na kraju potražim španjolski, u tim prilikama gotovo uvijek dođem na ovu stranicu. Hvala.
Imam 4G usmjerivač koji je klijent mreže kojom ne upravljam (očito sam ja klijent)… ovaj je usmjerivač pristupnik toj udaljenoj mreži putem OpenVPN-a. Nadalje, navedeni usmjerivač ispunjava funkciju prosljeđivanja portova za pristup portu 80 poslužitelja jedne od tih podmreža na terenu.
To je bila deklaracija koju sam morao staviti u usmjerivač kao prilagođeno pravilo vatrozida “-t nat -A POSTROUTING -j MASQUERADE”
Hvala na pomoći!