Redirecționați traficul de la un IP și port la alt IP și port

Ceva foarte frecvent în gestionarea serverelor este redirecționarea traficului.

Să presupunem că avem un server cu anumite servicii rulate, dar din orice motiv schimbăm unul dintre aceste servicii (Nu știu, de exemplu pop3, care este portul 110) către alt server. Lucrul normal și cel mai frecvent ar fi să schimbați pur și simplu IP-ul din înregistrarea DNS, cu toate acestea, dacă cineva a folosit IP-ul în loc de subdomeniu, acesta va fi afectat.

Ce sa fac? ... simplu, redirecționați traficul primit de acel server prin acel port către alt server cu același port.

server-nod-lan-ethernet

Cum începem să redirecționăm traficul?

Primul lucru este că trebuie să fi activat transmiterea pe server, pentru aceasta vom pune următoarele:

echo "1" > /proc/sys/net/ipv4/ip_forward

Toate comenzile afișate în acest tutorial trebuie executate cu privilegii administrative, vă recomand să fie executate direct cu utilizatorul root.

Puteți utiliza și această altă comandă, în cazul în care cea anterioară nu funcționează pentru dvs. (mi s-a întâmplat așa pe un CentOS):
sysctl net.ipv4.ip_forward=1
Apoi vom reporni rețeaua:

service networking restart

În distribuțiile RPM precum CentOS și altele, ar fi:

service nertwork restart

Acum vom trece la ceea ce este important, spuneți serverului iptables ce să redirecționați:

iptables -t nat -A PREROUTING -p tcp --dport <puerto receptor> -j DNAT --to-destination <ip final>:<puerto de ip final>

Cu alte cuvinte, și urmând exemplul pe care l-am menționat, să presupunem că dorim să redirecționăm tot traficul pe care îl primește serverul nostru prin portul 110 către alt server (ex: 10.10.0.2), care va primi în continuare traficul respectiv prin 110 (este același serviciu):

iptables -t nat -A PREROUTING -p tcp --dport 110 -j DNAT --to-destination 10.10.0.2:110

Serverul 10.10.0.2 va vedea că toate pachetele sau cererile provin de la adresa IP a clientului, în cazul în care doresc să înoate cererile, adică al doilea server vede că solicitările ajung cu IP-ul primului server (și în pe care aplicăm redirecționarea), ar fi, de asemenea, să punem această a doua linie:

iptables -t nat -A POSTROUTING -j MASQUERADE

Câteva întrebări și răspunsuri

În exemplu, am folosit același port în ambele ocazii (110), totuși pot redirecționa traficul de la un port la altul fără probleme. De exemplu, să presupunem că vreau să redirecționez traficul de la portul 80 la 443 pe un alt server, pentru aceasta ar fi:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.0.2:443

Asta este iptables, pot folosi toți ceilalți parametri pe care îi cunoaștem, de exemplu, dacă dorim doar să redirecționăm traficul de la un anumit IP, ar fi adăugarea -s … De exemplu, voi redirecționa numai traficul care vine de la 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

Sau o întreagă rețea (/ 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

De asemenea, putem specifica interfața de rețea cu -i :

iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to-destination 10.10.0.2:443

Sfarsit!

Așa cum am spus deja, este iptables, puteți aplica ceea ce este deja cunoscut, astfel încât serverul să facă exact ceea ce doriți să facă 😉

Salutări!

DedicatedServer_SubImage


20 comentarii, lasă-le pe ale tale

Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   Fer el a spus

    Putem face acest lucru și dintr-un firewall care permite redirecționarea porturilor, nu? (aplicarea regulilor corespunzătoare).

    1.    KZKG ^ Gaara el a spus

      Da, desigur, până la urmă un firewall precum Pfsense sau altele, folosește iptables din spate.

      1.    dhunter el a spus

        Pentru a fi exact, pfsense nu folosește iptables, ci pf, amintiți-vă că este un bsd în interior.

        1.    KZKG ^ Gaara el a spus

          Oh, bine, răul meu!

  2.   Nicolas el a spus

    Vă mulțumesc foarte mult pentru sfat 🙂

    Am câteva îndoieli:
    1 - Schimbarea este permanentă? sau se pierde la repornirea serverului?
    2 - Am mai multe instanțe (să zicem A, B și C) pe aceeași subrețea. În cazul A, aplic regula pentru a direcționa traficul către un IP extern și încercând cu bucle din instanțele B și C, totul face minuni. Problema este că din instanța A nu funcționează. Am încercat să folosesc atât interfața IP, cât și interfața loopback și nici una nu funcționează:
    $ iptables -t nat -A PREROUTING -p tcp –port 8080 -j DNAT –pentru destinație xxxx: 8080
    $ iptables -t nat -A PREROUTING -p tcp -i lo –dport 8080 -j DNAT –to-destination xxxx: 8080

    $ curl ip-aaaa: 8080 / hello_world
    curl: (7) Nu s-a putut conecta la portul 8080 ip-aaaa: Conexiunea a fost refuzată
    $ curl localhost: 8080 / hello_world
    curl: (7) Nu s-a putut conecta la portul localhost 8080: Conexiunea a fost refuzată

    Ai vreo idee care ar putea fi problema?

    1.    KZKG ^ Gaara el a spus

      Da, schimbarea se pierde la repornire, va trebui să utilizați iptables-save & iptables-restore sau ceva de genul acesta pentru a evita acest lucru.
      Nu prea am înțeles ce vrei să faci, instanța A?

      1.    Nicolas el a spus

        Am un server care acceptă doar conexiuni de la un anumit ip (server A), nu pot sau vreau să adaug mai multe IP-uri la lista albă (pentru probleme de scalabilitate), așa că vreau să treacă tot traficul către serverul extern respectivul server (A).
        Din punct de vedere practic, am configurații globale care definesc ce IP să folosească pentru fiecare serviciu, așa că în acest caz este ceva de genul "toți cei care doresc să utilizeze serviciul extern trebuie să utilizeze IP A"
        Acest lucru a fost realizat cu succes folosind metoda din acest articol, dar am întâmpinat problema că, atunci când îl aplic, serverul A nu poate accesa serviciul folosind propriul său IP (dar toate celelalte servere o fac).
        Până în prezent, cel mai bun lucru pe care l-am găsit a fost să adaug maparea în fișierul / etc / hosts al serverului A, arătând spre IP extern, suprascriind setarea globală.

  3.   braybaut el a spus

    Foarte bine, dacă am un alt server de mail, aș putea redirecționa traficul de la portul 143 de la server1 la server2 și e-mailurile vor ajunge la mine pe server2, nu?

    În ceea ce priveşte

    1.    KZKG ^ Gaara el a spus

      În teorie da, funcționează așa. Sigur, trebuie să aveți serverul de e-mail instalat corect pe server2 🙂

  4.   MSX el a spus

    Genul de postări pe care ne place să le citim, mulțumesc!

  5.   Abraham Ibarra el a spus

    Articol excelent, am un proiect în care lucrez și am vrut să vă pun o întrebare, există switch-uri industriale cu funcție NAT (presupun că folosesc IPTables mai jos), pentru a traduce o adresă IP fără a face modificări echipamentului, un exemplu, am un Server 10.10.2.1 care comunică cu computerele 10.10.2.X și prin comutator este programat astfel încât un computer care are o adresă 192.168.2.4 să fie de fapt văzut de pe server ca 10.10.2.5, a tradus acea adresă IP pentru a fi văzută De pe celelalte computere cu adresa respectivă, vreau să o fac de pe un server cu Ubuntu sau altă distribuție, care ar fi regulile iptables?

  6.   Şold el a spus

    Informații foarte bune mulțumesc ^ _ ^

  7.   yisus el a spus

    Bună ziua.
    Am o problemă la încercarea de a face o redirecționare. Explic:
    Am un server proxy în Ubuntu, cu 2 plăci de rețea:
    eth0 = 192.168.1.1 este conectat la restul rețelei locale.
    eth1 = 192.168.2.2 este conectat la router.
    Am nevoie de tot ce vine prin eth0 pentru a trece prin eth1 și, de asemenea, prin proxy (folosesc Squid, al cărui port implicit este 3128) și nu găsesc cheia în configurația IPTABLES.
    Nu am nevoie de restricții de niciun fel, ci doar că o înregistrare rămâne în jurnalul adreselor web vizitate.

    Sper că mă puteți ajuta, deoarece este o sarcină destul de greoaie, care mă îngrijorează de câteva zile.

    Mulţumesc.

  8.   Gabriel el a spus

    Prietene, sunt foarte nou pentru alte servere, habar n-am, dar înțeleg subiectul și învăț repede, întrebarea mea este următoarea Am 2 servere serv_1 și serv_2 pe care le-am conectat la același intranet, în aceste servere am un propriu cloud configurat Aș dori să fac următoarele:

    că o anumită gamă de ips, de exemplu rangeip_1, atunci când plasează un IP de acces la owncloud (ipowncloud) este direcționată către serv_1 și dacă este un alt rangeip_2 plasat, același ipowncloud este direcționat către serv_2, pentru ca cele 2 servere să fie localizate în două orașe diferite și intervalele ip sunt diferite, dar toate sunt pe aceeași rețea, aceasta ar fi prima parte, a doua ar fi clar este să sincronizezi aceste 2 servere astfel încât să fie oglinzi sau să mă sfătuiască acest lucru pentru a optimiza lățimea band, te rog, dacă îmi vei explica cum să o faci pas cu pas, nu modul super programator = (

  9.   Antonio Carrizosa el a spus

    Bună, scuzați-mă, am un comutator responsabil de comunicarea tuturor dispozitivelor care alcătuiesc rețeaua mea, iar după aceasta un firewall și în cele din urmă ieșirea de pe Internet, ceea ce se întâmplă este că aș dori ca redirecționarea să fie dată în și nu trebuie să ajungă la firewall decât dacă serviciul solicitat este internet.

  10.   Ioan el a spus

    Folosind această metodă, ați putea redirecționa HTTPS către HTTP?

  11.   Mati el a spus

    Bună, poate că este cam târziu, dar am vrut să te întreb, cum ar trebui să fac ca calmarul să nu modifice adresa IP a clientului când vreau să mă conectez la un server web din aceeași rețea?

  12.   lafat32 el a spus

    Nu mă trata rău pentru că am întrebat. Se poate face acest lucru în Windows?

  13.   Martin el a spus

    Aceste informații mi-au fost utile. Ca întotdeauna, puteți avea încredere în voi, atunci când nu găsesc ceva în limba engleză, de obicei ajung să caut în spaniolă, în acele ocazii aproape că vin mereu pe acest site. Mulțumesc.

  14.   Seba el a spus

    Am un router 4G care este un client al unei rețele pe care nu o administrez (evident, sunt client)... acest router este o poartă către acea rețea la distanță prin OpenVPN. În plus, respectivul router îndeplinește funcția de portforwarding pentru a accesa portul 80 al serverului uneia dintre acele subrețele din domeniu.

    Aceasta a fost declarația pe care a trebuit să o pun în router ca regulă personalizată pentru firewall „-t nat -A POSTROUTING -j MASQUERADE”

    Multumesc pentru ajutor!