Omdiriger trafik fra en IP og port til en anden IP og port

Noget meget almindeligt ved styring af servere omdirigerer trafik.

Antag, at vi har en server med visse tjenester, der kører, men af ​​en eller anden grund ændrer vi en af ​​disse tjenester (Jeg ved det ikke, for eksempel pop3, som er port 110) til en anden server. Den normale og hyppigste ting ville være at ændre IP'en i DNS-posten, men hvis nogen brugte IP i stedet for underdomænet, vil det blive påvirket.

Hvad skal man gøre? ... enkelt, omdiriger trafikken, som serveren modtager gennem den port, til en anden server med den samme port.

server-node-lan-ethernet

Hvordan begynder vi at omdirigere trafik?

Den første ting er, at vi skal have aktiveret videresendelse på serveren, for dette lægger vi følgende:

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

Alle kommandoer vist i denne vejledning skal udføres med administrative rettigheder, jeg anbefaler, at de udføres direkte med rodbrugeren.

Du kan også bruge denne anden kommando, hvis den forrige ikke virker for dig (det skete for mig sådan på en CentOS):
sysctl net.ipv4.ip_forward=1
Derefter genstarter vi netværket:

service networking restart

I RPM-distroer som CentOS og andre ville det være:

service nertwork restart

Nu går vi videre til det vigtige, fortæller serveren igennem iptables hvad man skal omdirigere:

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

Antag med andre ord og efter det eksempel, jeg nævnte, at vi vil omdirigere al den trafik, som vores server modtager gennem port 110 til en anden server (eks: 10.10.0.2), som stadig modtager trafikken gennem 110 (det er den samme tjeneste):

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

10.10.0.2-serveren vil se, at alle pakker eller anmodninger kommer fra klientens IP, hvis de vil svømme anmodningerne, det vil sige, at den anden server ser, at anmodningerne ankommer med IP'en til den første server (og i som vi anvender omdirigering), ville det også være at sætte denne anden linje:

iptables -t nat -A POSTROUTING -j MASQUERADE

Nogle spørgsmål og svar

I eksemplet brugte jeg den samme port ved begge lejligheder (110), men de kan omdirigere trafik fra en port til en anden uden problemer. Antag for eksempel, at jeg vil omdirigere trafik fra port 80 til 443 på en anden server, for dette ville det være:

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

Dette er iptables, de kan bruge alle de andre parametre, som vi kender, for eksempel hvis vi kun vil omdirigere trafik fra en bestemt IP, tilføjer det -s ... For eksempel vil jeg kun omdirigere den trafik, der kommer fra 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

Eller et helt netværk (/ 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

Vi kan også specificere netværksgrænsefladen med -i :

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

Slutningen!

Dette er som sagt allerede iptables, du kan anvende det, der allerede er kendt, så serveren gør nøjagtigt, hvad du vil have den til at gøre do

Greetings!

DedicatedServer_SubImage


Indholdet af artiklen overholder vores principper for redaktionel etik. Klik på for at rapportere en fejl her.

19 kommentarer, lad dine

Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.

  1.   Fer sagde han

    Vi kan også gøre dette fra en firewall, der tillader portvideresendelse, ikke? (anvendelse af de tilsvarende regler).

    1.    KZKG ^ Gaara sagde han

      Ja selvfølgelig, i sidste ende bruger en firewall som Pfsense eller andre iptables bagfra.

      1.    djæger sagde han

        For at være præcis bruger pfsense ikke iptables men pf, husk at det er en bsd inde.

        1.    KZKG ^ Gaara sagde han

          Åh rigtigt, min dårlige!

  2.   Nicolas sagde han

    Mange tak for tipet 🙂

    Jeg er i tvivl:
    1 - Er ændringen permanent? eller går det tabt, når du genstarter serveren?
    2 - Jeg har flere forekomster (siger A, B og C) på det samme undernet. I eksempel A anvender jeg reglen til at dirigere trafik til en ekstern IP, og test med krøller fra instanser B og C, alt fungerer vidundere. Problemet er, at det fra eksempel A ikke virker. Jeg prøvede at bruge både din ip og loopback-grænsefladen, og hverken fungerer:
    $ iptables -t nat -A PREROUTING -p tcp –port 8080 -j DNAT –til destination xxxx: 8080
    $ iptables -t nat -A PREROUTING -p tcp -i lo –port 8080 -j DNAT –to-destination xxxx: 8080

    $ curl ip-åååå: 8080 / hello_world
    curl: (7) Kunne ikke oprette forbindelse til ip-åååå port 8080: Forbindelse nægtet
    $ curl localhost: 8080 / hello_world
    curl: (7) Kunne ikke oprette forbindelse til localhost-port 8080: Forbindelse nægtet

    Har du nogen idé om, hvad problemet kan være?

    1.    KZKG ^ Gaara sagde han

      Ja, ændringen går tabt ved genstart, du bliver nødt til at bruge iptables-save & iptables-gendannelse eller noget lignende for at undgå det.
      Jeg forstod ikke helt, hvad du vil gøre, eksempel A?

      1.    Nicolas sagde han

        Jeg har en server, der kun understøtter forbindelser fra en bestemt ip (server A'er), jeg kan ikke eller vil tilføje flere ips til hvidlisten (for problemer med skalerbarhed), så jeg vil have al trafik til den eksterne server til at gå igennem sagde serveren (A).
        Af praktiske hensyn har jeg globale konfigurationer, der definerer, hvilken IP der skal bruges til hver tjeneste, så i dette tilfælde er det noget som "alle, der ønsker at bruge den eksterne tjeneste, skal bruge IP A"
        Dette blev opnået med succes ved hjælp af metoden i denne artikel, men jeg løber ind i problemet, at server A ikke kan få adgang til tjenesten ved hjælp af sin egen ip (men alle andre servere gør det), når det anvendes.
        Indtil videre var det bedste, jeg fandt, at tilføje kortlægningen i server A's / etc / hosts-fil, der pegede på den eksterne ip, der tilsidesætter den globale indstilling.

  3.   braybaut sagde han

    Meget godt, hvis jeg har en anden mailserver, kunne jeg videresende trafikken fra port 143 fra server1 til server2, og e-mails når mig på server2, ikke?

    hilsen

    1.    KZKG ^ Gaara sagde han

      I teorien ja, det fungerer sådan. Sikker på, du skal have mailserveren korrekt installeret på server2 🙂

  4.   MSX sagde han

    Den slags indlæg, vi kan lide at læse, tak!

  5.   Abraham Ibarra sagde han

    Fremragende artikel, jeg har et projekt, hvor jeg arbejder, og jeg ville stille dig et spørgsmål, der er industrielle switche med NAT-funktion (jeg antager, at de bruger IPTables nedenfor), for at oversætte en IP-adresse uden at foretage ændringer i udstyret, et eksempel, jeg har en server 10.10.2.1, der kommunikerer med 10.10.2.X-computere og via switchen er programmeret, så en computer, der har en adresse 192.168.2.4, faktisk ses fra serveren som 10.10.2.5, oversatte den den IP-adresse, der skal ses Fra de andre computere med den adresse vil jeg gøre det fra en server med Ubuntu eller en anden distribution. Hvad ville være iptables-reglerne?

  6.   Kuk sagde han

    Meget god info tak ^ _ ^

  7.   Yisus sagde han

    God eftermiddag.
    Jeg har et problem med at prøve at omdirigere. Jeg forklarer:
    Jeg har en proxyserver i Ubuntu med 2 netværkskort:
    eth0 = 192.168.1.1 er forbundet til resten af ​​det lokale netværk.
    eth1 = 192.168.2.2 er tilsluttet routeren.
    Jeg har brug for alt, hvad der kommer gennem eth0 for at gå igennem eth1 og også gennem proxyen (jeg bruger blæksprutte, hvis standardport er 3128), og jeg kan ikke finde nøglen i IPTABLES-konfigurationen.
    Jeg har ikke brug for begrænsning af nogen art, kun at der forbliver en post i loggen over de webadresser, der er besøgt.

    Jeg håber, du kan hjælpe mig, da det er en besværlig opgave, der har bekymret mig i et par dage.

    Tak.

  8.   Gabriel sagde han

    Ven, jeg er en meget nybegynder i dette af andre servere, jeg aner ikke, men jeg forstår emnet, og jeg lærer hurtigt, mit spørgsmål er følgende. Jeg har 2 servere serv_1 og serv_2, som jeg har tilsluttet det samme intranet, i disse servere har jeg en egencloud oprettet, Jeg vil gerne gøre følgende:

    at et bestemt interval af ips, for eksempel rangeip_1, når du placerer en adgangs-ip til owncloud (ipowncloud) er rettet mod serv_1, og hvis det er en anden rangeip_2, placeres den samme ipowncloud til serv_2, dette for at de 2 servere er placeret i to forskellige byer og ip-intervaller er forskellige, men de er alle på samme netværk, det ville være den første del, det andet ville være klart at synkronisere disse 2 servere, så de er spejle, eller at de rådgiver mig dette for at optimere bredden band, tak, hvis du vil forklare mig, hvordan man gør det trin for trin ikke super programmerer mode = (

  9.   Antonio Carrizosa sagde han

    Hej, undskyld mig, jeg har en switch, der har ansvaret for kommunikationen af ​​alle de enheder, der udgør mit netværk, og efter dette en firewall og til sidst internetafslutningen, hvad der sker er, at jeg gerne vil have omdirigering i skifte og behøver ikke nå firewallen, medmindre den ønskede service er internet.

  10.   John sagde han

    Kan du bruge denne metode til at omdirigere HTTPS til HTTP?

  11.   mati sagde han

    Hej, måske er det lidt sent, men jeg ville spørge dig, hvordan skal jeg få blæksprutter til ikke at ændre klientens IP, når jeg vil oprette forbindelse til en webserver på det samme netværk?

  12.   Lafat32 sagde han

    Forkæl mig ikke dårligt for at have spurgt. Kan dette gøres i Windows?

  13.   Martin sagde han

    Disse oplysninger har været nyttige for mig. Som altid kan man stole på jer, når jeg ikke kan finde noget på engelsk, slutter jeg som regel med at se på spansk, ved de lejligheder kommer jeg næsten altid til dette sted. Tak.