Omdiriger trafikk fra en IP og port til en annen IP og port

Noe veldig vanlig når du administrerer servere, er å omdirigere trafikk.

Anta at vi har en server med visse tjenester som kjører, men av en eller annen grunn endrer vi en av disse tjenestene (Jeg vet ikke, for eksempel pop3 som er port 110) til en annen server. Det normale og hyppigste ville være å bare endre IP i DNS-posten, men hvis noen brukte IP-en i stedet for underdomenet, vil det bli påvirket.

Hva å gjøre? ... enkelt, omdiriger trafikken som serveren mottar gjennom den porten til en annen server med samme port.

server-node-lan-ethernet

Hvordan begynner vi å omdirigere trafikk?

Det første er at vi må ha aktivert videresending på serveren, for dette vil vi sette følgende:

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

Alle kommandoene som vises i denne opplæringen, må utføres med administrative rettigheter, jeg anbefaler at de utføres direkte med rotbrukeren.

Du kan også bruke denne andre kommandoen, hvis den forrige ikke fungerer for deg (det skjedde med meg slik på en CentOS):
sysctl net.ipv4.ip_forward=1
Deretter starter vi nettverket på nytt:

service networking restart

I RPM-distribusjoner som CentOS og andre vil det være:

service nertwork restart

Nå skal vi gå videre til det viktige, fortell serveren gjennom det iptables hva du skal omdirigere:

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

Det vil si, og i følge eksemplet jeg nevnte, antar vi at vi vil omdirigere all trafikken som serveren vår mottar gjennom port 110 til en annen server (eks: 10.10.0.2), som fremdeles vil motta trafikken gjennom 110 (det er den samme tjenesten):

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 pakkene eller forespørslene kommer fra klientens IP, hvis de vil svømme forespørslene, det vil si at den andre serveren ser at forespørslene kommer med IP-en til den første serveren (og hvilken vi bruker omdirigering), ville det også være å sette denne andre linjen:

iptables -t nat -A POSTROUTING -j MASQUERADE

Noen spørsmål og svar

I eksemplet brukte jeg samme port begge ganger (110), men de kan omdirigere trafikk fra en port til en annen uten problemer. Anta for eksempel at jeg vil omdirigere trafikk fra port 80 til 443 på en annen server, for dette vil det være:

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

Dette er iptables, kan de bruke alle de andre parametrene vi kjenner, for eksempel hvis vi bare vil omdirigere trafikk fra en bestemt IP, ville det være ved å legge til -s ... For eksempel vil jeg bare omdirigere trafikken som 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 nettverk (/ 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å spesifisere nettverksgrensesnittet med -i :

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

Slutten!

Dette er som sagt allerede iptables, du kan bruke det som allerede er kjent, slik at serveren gjør akkurat det du vil at den skal gjøre 😉

Greetings!

DedicatedServer_SubImage


Innholdet i artikkelen følger våre prinsipper for redaksjonell etikk. Klikk på for å rapportere en feil her.

19 kommentarer, legg igjen dine

Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   Fer sa

    Vi kan også gjøre dette fra en brannmur som tillater portvideresending, ikke sant? (bruker de tilsvarende reglene).

    1.    KZKG ^ Gaara sa

      Ja selvfølgelig, til slutt bruker en brannmur som Pfsense eller andre iptables bakfra.

      1.    dhunter sa

        For å være nøyaktig bruker ikke pfsense iptables, men pf, husk at det er en bsd inni.

        1.    KZKG ^ Gaara sa

          Oh right, min dårlige!

  2.   Nicolas sa

    Tusen takk for tipset 🙂

    Jeg er i tvil:
    1 - Er endringen permanent? eller er det tapt når du starter serveren på nytt?
    2 - Jeg har flere forekomster (si A, B og C) på samme delnett. I eksempel A bruker jeg regelen for å dirigere trafikk til en ekstern IP, og testing med krøller fra forekomster B og C, alt gjør underverker. Problemet er at det fra eksempel A ikke fungerer. Jeg prøvde å bruke både ip og loopback-grensesnittet, og verken fungerer:
    $ iptables -t nat -A PREROUTING -p tcp –port 8080 -j DNAT –to-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 koble til ip-åååå port 8080: Tilkobling nektet
    $ curl localhost: 8080 / hello_world
    curl: (7) Kunne ikke koble til localhost-port 8080: Tilkobling nektet

    Noen anelse om hva problemet kan være?

    1.    KZKG ^ Gaara sa

      Ja, endringen går tapt ved omstart, du må bruke iptables-save & iptables-reset eller noe sånt for å unngå det.
      Jeg forsto ikke helt hva du vil gjøre, eksempel A?

      1.    Nicolas sa

        Jeg har en server som bare støtter tilkoblinger fra en bestemt ip (server A), jeg kan ikke eller vil legge til flere ips til hvitlisten (for skalerbarhetsproblemer), så jeg vil at all trafikk til den eksterne serveren skal gå gjennom sa serveren (A).
        For en praktisk sak har jeg globale konfigurasjoner som definerer hvilken IP som skal brukes for hver tjeneste, så i dette tilfellet er det noe som "alle som vil bruke den eksterne tjenesten, må bruke IP A"
        Jeg oppnådde dette med metoden i denne artikkelen, men jeg støter på problemet at server A ikke får tilgang til tjenesten ved hjelp av sin egen ip (men alle andre servere gjør det) når jeg bruker den.
        Så langt var det beste jeg fant å legge til kartleggingen i server A / etc / hosts-filen, peke på den eksterne ip, overstyre den globale innstillingen.

  3.   braybaut sa

    Veldig bra, hvis jeg har en annen e-postserver, kan jeg videresende trafikken fra port 143 fra server1 til server2, og e-postene når server2, ikke sant?

    Hilsen

    1.    KZKG ^ Gaara sa

      I teorien ja, fungerer det slik. Jo, du må ha e-postserveren riktig installert på server2 🙂

  4.   MSX sa

    Slike innlegg vi liker å lese, takk!

  5.   Abraham ibarra sa

    Utmerket artikkel, jeg har et prosjekt der jeg jobber og jeg ønsket å stille deg et spørsmål, det er industrielle brytere med NAT-funksjon (jeg antar at de bruker IPTables nedenfor), for å oversette en IP-adresse uten å gjøre endringer i utstyret, en for eksempel har jeg en Server 10.10.2.1 som kommuniserer med 10.10.2.X datamaskiner og gjennom bryteren er programmert slik at en datamaskin som har en adresse 192.168.2.4 faktisk blir sett fra serveren som 10.10.2.5, oversatte den den IP adresse som skal sees Fra de andre datamaskinene med den adressen, vil jeg gjøre det fra en server med Ubuntu eller en annen distribusjon. Hva ville være iptables-reglene?

  6.   Kuk sa

    Veldig god info takk ^ _ ^

  7.   Yisus sa

    God dag.
    Jeg har problemer med å prøve å omdirigere. Jeg forklarer:
    Jeg har en proxy-server i Ubuntu, med 2 nettverkskort:
    eth0 = 192.168.1.1 er koblet til resten av det lokale nettverket.
    eth1 = 192.168.2.2 er koblet til ruteren.
    Jeg trenger alt som kommer gjennom eth0 for å gå gjennom eth1, og også gjennom proxyen (jeg bruker blekksprut, hvis standardport er 3128), og jeg finner ikke nøkkelen i IPTABLES-konfigurasjonen.
    Jeg trenger ikke begrensning av noe slag, bare at en post forblir i loggen til nettadressene som besøkes.

    Jeg håper du kan hjelpe meg, siden det er ganske tungvint oppgave som har bekymret meg i et par dager.

    Takk.

  8.   Gabriel sa

    Venn, jeg er veldig ny på andre servere, jeg aner ikke, men jeg forstår emnet, og jeg lærer raskt, spørsmålet mitt er følgende. Jeg har 2 servere serv_1 og serv_2 som jeg har koblet til samme intranett, i disse serverne har jeg en egencloud satt opp Jeg vil gjøre følgende:

    at et bestemt utvalg av ips for eksempel rangeip_1 når du plasserer en tilgangs-ip til owncloud (ipowncloud) er rettet mot serv_1 og hvis det er et annet rangeip_2 plasseres den samme ipowncloud til serv_2, dette for at de 2 serverne skal være i to forskjellige byer og IP-områdene er forskjellige, men de er alle på samme nettverk, det ville være den første delen, den andre ville være tydelig, er å synkronisere disse 2 serverne slik at de er speil, eller at de anbefaler meg dette for å optimalisere bredden band, vær så snill, hvis du skal forklare meg hvordan du gjør det trinn for trinn, ikke til superprogrammeringsmodus = (

  9.   Antonio Carrizosa sa

    Hei, unnskyld meg, jeg har en bryter som har ansvaret for kommunikasjonen til alle enhetene som utgjør nettverket mitt, og etter dette en brannmur og til slutt internettutgangen, det som skjer er at jeg ønsker at omdirigering skal gis i bryteren og trenger ikke nå brannmuren med mindre den forespurte tjenesten er internett.

  10.   John sa

    Ved å bruke denne metoden kan du omdirigere HTTPS til HTTP?

  11.   mati sa

    Hei, kanskje det er litt sent, men jeg ønsket å spørre deg, hvordan skal jeg gjøre blekksprut ikke endre klientens IP når jeg vil koble til en webserver på samme nettverk?

  12.   Lafat32 sa

    Ikke behandle meg dårlig for å spørre. Kan dette gjøres i Windows?

  13.   Martin sa

    Denne informasjonen har vært nyttig for meg. Som alltid kan dere stole på dere, når jeg ikke finner noe på engelsk, pleier jeg å lete på spansk, ved de anledninger kommer jeg nesten alltid til denne siden. Takk.