Omdirigera trafik från en IP och port till en annan IP och port

Något mycket vanligt vid hantering av servrar är att omdirigera trafik.

Anta att vi har en server med vissa tjänster som körs, men av någon anledning ändrar vi någon av dessa tjänster (Jag vet inte, till exempel pop3 som är port 110) till en annan server. Det normala och vanligaste är att helt enkelt ändra IP i DNS-posten, men om någon använde IP istället för underdomänen kommer det att påverkas.

Vad ska man göra? ... enkelt, omdirigera trafiken som mottagits av den servern genom den porten till en annan server med samma port.

server-nod-lan-ethernet

Hur börjar vi omdirigera trafik?

Det första är att vi måste ha aktiverat vidarebefordran på servern, för detta kommer vi att lägga följande:

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

Alla kommandon som visas i denna handledning måste köras med administrativa behörigheter, jag rekommenderar att de körs direkt med rotanvändaren.

Du kan också använda det här andra kommandot, om det föregående inte fungerar för dig (det hände mig så här på en CentOS):
sysctl net.ipv4.ip_forward=1
Sedan startar vi om nätverket:

service networking restart

I RPM-distributioner som CentOS och andra skulle det vara:

service nertwork restart

Nu ska vi gå vidare till det viktiga, berätta för servern igenom iptables vad ska man omdirigera:

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

Antag med andra ord och enligt det exempel jag nämnde att vi vill omdirigera all trafik som vår server tar emot via port 110 till en annan server (ex: 10.10.0.2), som fortfarande kommer att ta emot trafiken genom 110 (det är samma tjänst):

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

Servern 10.10.0.2 ser att alla paket eller förfrågningar kommer från klientens IP, om de vill simma förfrågningarna, det vill säga att den andra servern ser att förfrågningarna kommer med IP: n för den första servern (och i som vi använder omdirigeringen), skulle det också vara att sätta den andra raden:

iptables -t nat -A POSTROUTING -j MASQUERADE

Några frågor och svar

I exemplet använde jag samma port vid båda tillfällena (110), men de kan omdirigera trafik från en port till en annan utan problem. Antag till exempel att jag vill omdirigera trafik från port 80 till 443 på en annan server, för detta skulle det vara:

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

Detta är iptables, de kan använda alla andra parametrar som vi känner, till exempel om vi bara vill omdirigera trafik från en specifik IP, skulle det lägga till -s ... Till exempel omdirigerar jag bara trafiken som kommer från 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 ett helt nätverk (/ 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 också ange nätverksgränssnittet med -i :

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

Slutet!

Detta är som sagt redan iptables, du kan använda det som redan är känt så att servern gör exakt vad du vill att den ska göra 😉

Hälsningar!

DedicatedServer_SubImage


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   Fer sade

    Vi kan också göra detta från en brandvägg som gör att port vidarebefordras, eller hur? (tillämpa motsvarande regler).

    1.    KZKG ^ Gaara sade

      Ja naturligtvis, i slutändan använder en brandvägg som Pfsense eller andra iptables bakifrån.

      1.    djägare sade

        För att vara exakt använder pfsense inte iptables utan pf, kom ihåg att det är en bsd inuti.

        1.    KZKG ^ Gaara sade

          Åh rätt, min dåliga!

  2.   Nicolas sade

    Tack så mycket för tipset 🙂

    Jag har några tvivel:
    1 - Är förändringen permanent? eller går den förlorad när du startar om servern?
    2 - Jag har flera instanser (säg A, B och C) på samma undernät. I exempel A tillämpar jag regeln för att dirigera trafik till en extern IP, och testning med lockar från instanser B och C, allt fungerar underverk. Problemet är att från exempel A fungerar det inte. Jag försökte använda både din ip och loopback-gränssnittet och fungerar inte heller:
    $ iptables -t nat -A PREROUTING -p tcp –dport 8080 -j DNAT –to-destination xxxx: 8080
    $ iptables -t nat -A PREROUTING -p tcp -i lo –dport 8080 -j DNAT –to-destination xxxx: 8080

    $ curl ip-åååå: 8080 / hello_world
    curl: (7) Det gick inte att ansluta till ip-åååå port 8080: Anslutning nekades
    $ curl localhost: 8080 / hello_world
    curl: (7) Det gick inte att ansluta till localhost-port 8080: Anslutning nekades

    Har du någon aning om vad problemet kan vara?

    1.    KZKG ^ Gaara sade

      Ja, ändringen går förlorad vid omstart, du måste använda iptables-save & iptables-recovery eller något liknande för att undvika det.
      Jag förstod inte riktigt vad du vill göra, exempel A?

      1.    Nicolas sade

        Jag har en server som endast stöder anslutningar från en viss ip (server A), jag kan inte eller vill lägga till fler ips till vitlistan (för skalbarhetsproblem), så jag vill att all trafik till den externa servern ska gå igenom nämnda server (A).
        Som en praktisk fråga har jag globala konfigurationer som definierar vilken IP som ska användas för varje tjänst, så i det här fallet är det något som "alla som vill använda den externa tjänsten, måste använda IP A"
        Detta uppnåddes framgångsrikt med metoden i den här artikeln, men jag stöter på problemet att server A inte kan få åtkomst till tjänsten med sin egen ip vid tillämpning av den (men alla andra servrar gör).
        Hittills var det bästa jag hittade att lägga till kartläggningen i server A / etc / hosts-filen, peka på den externa ip, skriva över den globala inställningen.

  3.   braybaut sade

    Mycket bra, om jag har en annan e-postserver kan jag vidarebefordra trafiken från port 143 från server1 till server2 och e-postmeddelandena når mig på server2, eller hur?

    hälsningar

    1.    KZKG ^ Gaara sade

      I teorin ja, det fungerar så här. Visst, du måste ha e-postservern korrekt installerad på server2 🙂

  4.   MSX sade

    Den typ av inlägg vi gillar att läsa, tack!

  5.   Abraham Ibarra sade

    Utmärkt artikel, jag har ett projekt där jag arbetar och jag ville ställa en fråga, det finns industriella switchar med NAT-funktion (jag antar att de använder IPTables nedan), för att översätta en IP-adress utan att göra ändringar i utrustningen, ett exempel, jag har en server 10.10.2.1 som kommunicerar med 10.10.2.X-datorer och via omkopplaren är programmerad så att en dator som har en adress 192.168.2.4 faktiskt ses från servern som 10.10.2.5, det översatte den IP-adressen som ska ses Från de andra datorerna med den adressen vill jag göra det från en server med Ubuntu eller en annan distribution, vad skulle iptables-reglerna vara?

  6.   kuk sade

    Mycket bra info tack ^ _ ^

  7.   Yisus sade

    God middag.
    Jag har problem med att göra en omdirigering. Jag förklarar:
    Jag har en proxyserver i Ubuntu med 2 nätverkskort:
    eth0 = 192.168.1.1 är ansluten till resten av det lokala nätverket.
    eth1 = 192.168.2.2 är ansluten till routern.
    Jag behöver allt som kommer genom eth0 för att gå igenom eth1, och även genom proxyen (jag använder Squid, vars standardport är 3128), och jag kan inte hitta nyckeln i IPTABLES-konfigurationen.
    Jag behöver inte begränsa något slag, bara att en post finns kvar i loggen för de webbadresser som besöks.

    Jag hoppas att du kan hjälpa mig eftersom det är en ganska besvärlig uppgift som har oroat mig i ett par dagar.

    Tack.

  8.   Gabriel sade

    Vän, jag är väldigt ny på andra servrar, jag har ingen aning om men jag förstår ämnet och jag lär mig snabbt, min fråga är följande jag har 2 servrar serv_1 och serv_2 som jag har anslutit till samma intranät, i dessa servrar har jag en egencloud inställd Jag skulle vilja göra följande:

    att ett visst intervall av ips till exempel rangeip_1 när du placerar en åtkomst-ip till owncloud (ipowncloud) riktas mot serv_1 och om det är ett annat rangeip_2 placeras samma ipowncloud till serv_2, detta för att de 2 servrarna ska lokaliseras i två olika städer och ip-intervallen är olika men de är alla i samma nätverk, det skulle vara den första delen, den andra skulle vara tydlig är att synkronisera dessa 2 servrar så att de är speglar eller att de rekommenderar mig detta för att optimera bredden band, snälla, om du ska förklara för mig hur man gör det steg för steg inte super programmeringsläge = (

  9.   Antonio Carrizosa sade

    Hej, ursäkta mig, jag har en omkopplare som ansvarar för kommunikationen av alla enheter som utgör mitt nätverk, och efter detta en brandvägg och slutligen Internetutgången, vad som händer är att jag skulle vilja att omdirigeringen ska ges i och behöver inte nå brandväggen om inte den begärda tjänsten är internet.

  10.   John sade

    Med den här metoden kan du omdirigera HTTPS till HTTP?

  11.   mati sade

    Hej, kanske är det lite sent, men jag ville fråga dig, hur ska jag få bläckfisk att inte ändra klientens IP när jag vill ansluta till en webbserver i samma nätverk?

  12.   lafat32 sade

    Behandla mig inte illa för att fråga. Kan detta göras i Windows?

  13.   Martin sade

    Denna information har varit till nytta för mig. Som alltid kan ni lita på er, när jag inte hittar något på engelska brukar jag leta på spanska, vid dessa tillfällen kommer jag nästan alltid till den här webbplatsen. Tack.

  14.   Seba sade

    Jag har en 4G-router som är en klient till ett nätverk som jag inte hanterar (uppenbarligen, jag är en klient)... den här routern är en gateway till det fjärrnätverket via OpenVPN. Dessutom fyller nämnda router funktionen att vidarebefordra portar för att komma åt port 80 på servern för ett av dessa subnät i fältet.

    Detta var deklarationen som jag var tvungen att lägga i routern som en anpassad brandväggsregel «-t nat -A POSTROUTING -j MASQUERADE»

    Tack för hjälp!