Pāradresēt trafiku no viena IP un porta uz citu IP un portu

Pārvaldot serverus, ļoti bieži notiek trafika novirzīšana.

Pieņemsim, ka mums ir serveris, kurā darbojas noteikti pakalpojumi, taču kāda iemesla dēļ mēs mainām vienu no šiem pakalpojumiem (Es nezinu, piemēram, pop3, kas ir 110. osta) uz citu serveri. Normāla un visbiežāk sastopamā lieta būtu vienkārši mainīt IP ierakstā DNS, taču, ja kāds izmantoja IP apakšdomēna vietā, tas tiks ietekmēts.

Ko darīt? ... vienkārši, novirziet trafiku, ko serveris saņem caur šo portu, uz citu serveri ar to pašu portu.

servera mezgls-lan-Ethernet

Kā mēs sākam pāradresēt satiksmi?

Pirmā lieta ir tāda, ka mums jābūt iespējotai nosūtot uz servera, šim nolūkam mēs ievietosim:

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

Visas komandas, kas parādītas šajā apmācībā, ir jāizpilda ar administratora tiesībām, es iesaku tās izpildīt tieši ar root lietotāju.

Varat arī izmantot šo citu komandu, ja iepriekšējā nedarbojas jums (tas notika ar mani šādi CentOS):
sysctl net.ipv4.ip_forward=1
Tad mēs restartēsim tīklu:

service networking restart

RPM apgabalos, piemēram, CentOS un citos, tas būtu:

service nertwork restart

Tagad mēs pāriesim pie svarīgās lietas, pateiksim to serverim iptables ko novirzīt:

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

Tas ir, un, sekojot manis pieminētajam, pieņemsim, ka mēs vēlamies visu trafiku, ko mūsu serveris saņem, izmantojot 110. portu, novirzīt uz citu serveri (piemēram: 10.10.0.2), kas joprojām saņems šo datplūsmu caur 110 (tas ir tas pats pakalpojums):

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

10.10.0.2 serveris redzēs, ka visas paketes vai pieprasījumi nāk no klienta IP, ja viņi vēlas peldēt pieprasījumus, tas ir, ka 2. serveris redz, ka pieprasījumi pienāk ar 1. servera IP (un kuru mēs izmantojam novirzīšanu), tas būtu arī ievietot šo otro rindiņu:

iptables -t nat -A POSTROUTING -j MASQUERADE

Daži jautājumi un atbildes

Šajā piemērā es abos gadījumos izmantoju vienu un to pašu portu (110), tomēr tie var bez problēmām novirzīt trafiku no vienas ostas uz otru. Piemēram, pieņemu, ka es vēlos pāradresēt trafiku no 80. porta uz 443 uz citu serveri, tāpēc tas būtu:

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

Tas ir iptables, viņi var izmantot visus pārējos mums zināmos parametrus, piemēram, ja mēs vēlamies tikai novirzīt trafiku no konkrēta IP, tas būtu pievienojot -s ... Piemēram, es novirzīšu tikai datplūsmu, kas nāk no 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

Vai viss tīkls (/ 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

Mēs varam arī norādīt tīkla saskarni ar -i :

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

Beigas!

Tas, kā jau teicu, ir iptables, jūs varat lietot jau zināmo, lai serveris darītu tieši to, ko vēlaties. 😉

Sveicieni!

DedicatedServer_SubImage


20 komentāri, atstājiet savus

Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.

  1.   Fer teica

    Mēs to varam izdarīt arī no ugunsmūra, kas ļauj pārsūtīt portu, vai ne? (piemērojot attiecīgos noteikumus).

    1.    KZKG ^ Gaara teica

      Jā, protams, beigās tāds ugunsmūris kā Pfsense vai citi izmanto iptables no aizmugures.

      1.    dunter teica

        Pareizāk sakot, pfsense neizmanto iptables, bet pf, atcerieties, ka iekšpusē tas ir bsd.

        1.    KZKG ^ Gaara teica

          Ak pareizi, mans sliktais!

  2.   Nicolas teica

    Liels paldies par padomu 🙂

    Man ir pāris šaubas:
    1 - vai izmaiņas ir pastāvīgas? vai arī tas tiek zaudēts, restartējot serveri?
    2 - man ir vairāki gadījumi (teiksim A, B un C) vienā apakštīklā. Piemērā A es piemēroju likumu, lai novirzītu trafiku uz ārēju IP, un, mēģinot izmantot cirtas no B un C gadījumiem, viss rada brīnumus. Problēma ir tā, ka no A instances tas nedarbojas. Es mēģināju izmantot gan jūsu ip, gan loopback interfeisu, un neviens no tiem nedarbojas:
    $ iptables -t nat -A PREROUTING -p tcp –port 8080 -j DNAT – uz galamērķi xxxx: 8080
    $ iptables -t nat -A PREROUTING -p tcp -i lo –port 8080 -j DNAT –mērķa xxxx: 8080

    $ čokurošanās ip-gggg: 8080 / labdien_pasaule
    čokurošanās: (7) Neizdevās izveidot savienojumu ar ip-yyyy 8080 portu: savienojums tika atteikts
    $ curl localhost: 8080 / hello_world
    čokurošanās: (7) Neizdevās izveidot savienojumu ar localhost 8080 portu: savienojums tika noraidīts

    Vai ir kāda ideja, kāda var būt problēma?

    1.    KZKG ^ Gaara teica

      Jā, izmaiņas tiek zaudētas atsāknēšanas laikā, lai to izvairītos, jums būs jāizmanto iptables-save & iptables-restore vai kaut kas tamlīdzīgs.
      Es īsti nesapratu, ko jūs vēlaties darīt, piemēram, A?

      1.    Nicolas teica

        Man ir serveris, kas atbalsta tikai savienojumus no noteikta ip (serveri A), es nevaru vai nevēlos pievienot vairāk ips baltajam sarakstam (mērogojamības problēmu gadījumā), tāpēc es vēlos, lai visa ārējā servera trafika tiktu cauri minētais serveris (A).
        Praktiski man ir globālas konfigurācijas, kas nosaka, kuru IP izmantot katram pakalpojumam, tāpēc šajā gadījumā tas ir kaut kas līdzīgs "visiem, kas vēlas izmantot ārējo pakalpojumu, ir jāizmanto IP A"
        Es to veiksmīgi sasniedzu, izmantojot šajā rakstā aprakstīto metodi, taču man rodas problēma, ka, to piemērojot, serveris A nevar piekļūt pakalpojumam, izmantojot savu ip (bet visi pārējie serveri to dara).
        Līdz šim labākais, ko atradu, bija pievienot kartēšanu servera A failā / etc / hosts, norādot uz ārējo ip, ignorējot globālo iestatījumu.

  3.   braibaut teica

    Ļoti labi, ja man ir cits pasta serveris, es varētu pārsūtīt trafiku no 143. porta no 1. servera uz 2. serveri, un e-pasta ziņojumi mani sasniegs 2. serverī, vai ne?

    Sveicieni

    1.    KZKG ^ Gaara teica

      Teorētiski jā, tas darbojas šādi. Protams, pasta serverim jābūt pareizi instalētam serverī2 🙂

  4.   MSX teica

    Tādas ziņas, kuras mums patīk lasīt, paldies!

  5.   Ābrahams Ibarra teica

    Lielisks raksts, man ir projekts, kurā es strādāju, un es gribēju jums uzdot jautājumu, ir rūpnieciski slēdži ar NAT funkciju (es domāju, ka viņi izmanto zemāk esošās IPTable tabulas), lai tulkotu IP adresi, neveicot izmaiņas iekārtā, piemēram, man ir serveris 10.10.2.1, kas sazinās ar 10.10.2.X datoriem un caur slēdzi ir ieprogrammēts tā, ka datoru, kura adrese ir 192.168.2.4, no servera faktiski redzētu kā 10.10.2.5, tas pārtulkoja šo IP adresi, lai tā būtu redzama No citiem datoriem ar šo adresi es vēlos to izdarīt no servera ar Ubuntu vai citu izplatīšanu, kādi būtu iptables noteikumi?

  6.   Gurns teica

    Ļoti laba informācija paldies ^ _ ^

  7.   yisus teica

    Labdien.
    Man ir problēma, mēģinot veikt novirzīšanu. Es paskaidroju:
    Man Ubuntu ir starpniekserveris ar 2 tīkla kartēm:
    eth0 = 192.168.1.1 ir savienots ar pārējo vietējo tīklu.
    eth1 = 192.168.2.2 ir savienots ar maršrutētāju.
    Man ir nepieciešams viss, kas nāk caur eth0, lai izietu caur eth1, un arī caur starpniekserveri (es izmantoju Squid, kura noklusējuma ports ir 3128), un es nevaru atrast atslēgu IPTABLES konfigurācijā.
    Man nav nepieciešami nekādi ierobežojumi, tikai tas, ka apmeklēto tīmekļa adrešu žurnālā paliek ieraksts.

    Es ceru, ka jūs varat man palīdzēt, jo tas ir diezgan apgrūtinošs uzdevums, kas mani satrauc jau pāris dienas.

    Paldies.

  8.   Gabriel teica

    Draugs, es esmu ļoti jauns pārējiem serveriem, man nav ne mazākās nojausmas, bet es saprotu tēmu un ātri mācos, mans jautājums ir šāds: Man ir 2 serveri serv_1 un serv_2, kurus esmu savienojis ar to pašu iekštīklu, šajos serveros man ir izveidots savs mākonis, Es gribētu rīkoties šādi:

    ka noteikts ips diapazons, piemēram, rangeip_1, ievietojot piekļuvi ip savam mākonim (ipowncloud), ir vērsts uz serv_1 un, ja tas ir cits rangeip_2, tad tas pats ipowncloud tiek novirzīts uz serv_2, tas notiek, lai atrastu 2 serverus divās dažādās pilsētās un ip diapazoni ir atšķirīgi, bet tie visi atrodas vienā tīklā, tā būtu pirmā daļa, otrā būtu skaidra sinhronizēt šos 2 serverus, lai tie būtu spoguļi, vai ka viņi man to konsultē, lai optimizētu platumu grupa, lūdzu, lūdzu, ja jūs gatavojaties man paskaidrot, kā to izdarīt soli pa solim, nevis super programmētāja režīms = (

  9.   Antonio Karizosa teica

    Sveiki, atvainojiet, man ir slēdzis, kas atbild par visu ierīču, kas veido manu tīklu, komunikāciju, un pēc tam ugunsmūris un visbeidzot izeja no interneta notiek tā, ka es vēlētos, lai novirzīšana tiktu sniegta slēdzi un tam nav jāsasniedz ugunsmūris, ja vien pieprasītais pakalpojums nav internets.

  10.   John teica

    Izmantojot šo metodi, vai jūs varētu novirzīt HTTPS uz HTTP?

  11.   Mati teica

    Sveiki, varbūt ir mazliet par vēlu, bet es gribēju jums pajautāt, kā lai es kalmārus nemainītu klienta IP, kad es vēlos izveidot savienojumu ar tīmekļa serveri tajā pašā tīklā?

  12.   Lafāts32 teica

    Nelietojiet pret mani slikti par to, ka prasāt. Vai to var izdarīt sistēmā Windows?

  13.   čurkste teica

    Šī informācija man ir bijusi noderīga. Kā vienmēr, jums, puiši, var uzticēties. Kad es nevaru kaut ko atrast angļu valodā, es parasti meklēju spāņu valodu, tajos gadījumos es gandrīz vienmēr apmeklēju šo vietni. Paldies.

  14.   Seba teica

    Man ir 4G maršrutētājs, kas ir tāda tīkla klients, kuru es nepārvaldu (acīmredzot, es esmu klients)... šis maršrutētājs ir vārteja uz šo attālo tīklu, izmantojot OpenVPN. Turklāt minētais maršrutētājs pilda pārsūtīšanas funkciju, lai piekļūtu viena no laukā esošajiem apakštīkliem servera 80. portam.

    Šī bija deklarācija, kas man bija jāievieto maršrutētājā kā ugunsmūra pielāgotais noteikums "-t nat -A POSTROUTING -j MASQUERADE"

    Paldies par palīdzību!