I-redirect ang trapiko mula sa isang IP at port sa isa pang IP at port

Isang bagay na napaka-karaniwan kapag namamahala ng mga server ay nagre-redirect sa trapiko.

Ipagpalagay na mayroon kaming isang server na may ilang mga serbisyo na tumatakbo, ngunit sa anumang kadahilanan binago namin ang isa sa mga serbisyong iyon (Hindi ko alam, halimbawa pop3 na kung saan ay port 110) sa ibang server. Ang normal at pinaka-madalas na bagay ay simpleng baguhin ang IP sa tala ng DNS, subalit kung may gumagamit ng IP sa halip na subdomain maaapektuhan ito.

Anong gagawin? ... simple, i-redirect ang trapiko na natatanggap ng server sa pamamagitan ng port na iyon sa isa pang server na may parehong port.

server-node-lan-ethernet

Paano namin masisimulan ang pag-redirect ng trapiko?

Ang unang bagay ay dapat nating pinagana ang pagpapasa sa server, para dito mailalagay namin ang mga sumusunod:

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

Ang lahat ng mga utos na ipinakita sa tutorial na ito ay dapat na naisakatuparan sa mga pribilehiyong pang-administratibo, inirerekumenda ko na direktang maisagawa ang mga ito sa root user.

Maaari mo ring gamitin ang iba pang utos na ito, kung sakaling hindi gumana para sa iyo ang nakaraang (nangyari sa akin ng ganito sa isang CentOS):
sysctl net.ipv4.ip_forward=1
Pagkatapos ay i-restart namin ang network:

service networking restart

Sa mga distribusyon ng RPM tulad ng CentOS at iba pa, magiging:

service nertwork restart

Ngayon ay lilipat tayo sa mahalagang bagay, sabihin sa server ang iptables ano ang ire-redirect:

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

Iyon ay, at pagsunod sa halimbawang nabanggit ko, ipagpalagay na nais naming i-redirect ang lahat ng trapiko na natatanggap ng aming server sa pamamagitan ng port 110 sa ibang server (hal: 10.10.0.2), na makakatanggap pa rin ng trapikong iyon sa pamamagitan ng 110 (ito ay ang parehong serbisyo):

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

Makikita ng server ng 10.10.0.2 na ang lahat ng mga packet o hiling ay nagmula sa IP ng kliyente, kung sakaling nais nilang lumangoy ang mga kahilingan, iyon ay, nakikita ng ika-2 server na dumating ang mga kahilingan kasama ang IP ng ika-1 server (at sa na inilalapat namin ang pag-redirect), mailalagay din nito ang pangalawang linya:

iptables -t nat -A POSTROUTING -j MASQUERADE

Ang ilang mga katanungan at sagot

Sa halimbawang ginamit ko ang parehong port sa parehong mga okasyon (110), subalit maaari nilang mai-redirect ang trapiko mula sa isang port patungo sa isa pa nang walang mga problema. Halimbawa, ipagpalagay na nais kong i-redirect ang trapiko mula sa port 80 hanggang 443 sa ibang server, para ito ay:

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

Ito ay iptables, magagamit nila ang lahat ng iba pang mga parameter na alam namin, halimbawa, kung nais lamang namin na mag-redirect ng trapiko mula sa isang tukoy na IP, ito ay magiging mga pagdaragdag ... Halimbawa ire-redirect ko lang ang trapiko na nagmula sa 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

O isang buong network (/ 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

Maaari din nating tukuyin ang interface ng network na may -i :

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

Wakas!

Ito tulad ng sinabi ko na, ay iptables, maaari mong ilapat kung ano ang alam na upang ang server ay eksaktong gawin ang nais mong gawin 😉

Pagbati!

DedicatedServer_SubImage


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   Fer dijo

    Magagawa din natin ito mula sa isang firewall na nagpapahintulot sa pagpapasa ng port, tama ba? (paglalapat ng kaukulang mga patakaran).

    1.    KZKG ^ Gaara dijo

      Oo syempre, sa huli isang firewall tulad ng Pfsense o iba pa, gumamit ng mga iptable mula sa likuran.

      1.    dhunter dijo

        Upang maging eksakto, ang pfsense ay hindi gumagamit ng mga iptable ngunit pf, tandaan na ito ay isang bsd sa loob.

        1.    KZKG ^ Gaara dijo

          Oh tama, ang sama ko!

  2.   Nicolas dijo

    Maraming salamat sa tip 🙂

    Mayroon akong isang pag-aalinlangan:
    1 - Permanente ba ang pagbabago? o nawala ba ito sa pag-restart ng server?
    2 - Mayroon akong maraming mga pagkakataon (sabihin ang A, B at C) sa parehong subnet. Halimbawa A inilalapat ko ang panuntunan upang mag-ruta ng trapiko sa isang panlabas na IP, at pagsubok sa mga kulot mula sa mga pagkakataong B at C, lahat ay gumagana ng mga kababalaghan. Ang problema ay mula sa halimbawa A hindi ito gumagana. Sinubukan kong gamitin ang pareho ng iyong ip at ang interface ng loopback, at ni gumagana:
    $ iptables -t nat -A PREROUTING -p tcp –dport 8080 -j DNAT –to-patutunguhan xxxx: 8080
    $ iptables -t nat -A PREROUTING -p tcp -i lo –dport 8080 -j DNAT –to-patutunguhan xxxx: 8080

    $ curl ip-yyyy: 8080 / hello_world
    curl: (7) Nabigong kumonekta sa ip-yyyy port 8080: Tumanggi ang koneksyon
    $ curl localhost: 8080 / hello_world
    curl: (7) Nabigong kumonekta sa localhost port 8080: Tumanggi ang koneksyon

    Anumang ideya kung ano ang maaaring problema?

    1.    KZKG ^ Gaara dijo

      Oo, nawala ang pagbabago sa pag-reboot, kakailanganin mong gumamit ng iptables-save & iptables-restore o isang bagay na tulad nito upang maiwasan iyon.
      Hindi ko masyadong naintindihan kung ano ang gusto mong gawin, halimbawa A?

      1.    Nicolas dijo

        Mayroon akong isang server na sumusuporta lamang sa mga koneksyon mula sa isang partikular na ip (server A), hindi ko o nais na magdagdag ng higit pang mga ip sa whitelist (para sa mga isyu sa kakayahang sumukat), kaya nais kong dumaan ang lahat ng trapiko sa panlabas na server sinabi ng server (A).
        Para sa isang bagay ng pagiging praktiko, mayroon akong mga pandaigdigang pagsasaayos na tumutukoy sa aling IP ang gagamitin para sa bawat serbisyo, kaya sa kasong ito ito ay isang bagay tulad ng "ang bawat isa na nais gumamit ng panlabas na serbisyo ay dapat gumamit ng IP A"
        Matagumpay kong nakamit ito gamit ang pamamaraan sa artikulong ito, ngunit nahahanap ko ang problema na kapag inilalapat ito, hindi maa-access ng server A ang serbisyo gamit ang sarili nitong ip (ngunit ginagawa ng lahat ng iba pang mga server).
        Sa ngayon ang pinakamahusay na natagpuan ko ay upang idagdag ang pagma-map sa file ng server A / etc / host, na tumuturo sa panlabas na ip, na pinapabilis ang setting ng pandaigdig.

  3.   braybaut dijo

    Mahusay, kung mayroon akong ibang mail server, maipapasa ko ang trapiko mula sa port 143 mula sa server1 hanggang sa server2 at maaabot ng mga email ang server2, tama ba?

    Regards

    1.    KZKG ^ Gaara dijo

      Sa teorya oo, gumagana ito tulad nito. Oo naman, dapat ay maayos na na-install ang mail server sa server2 🙂

  4.   msx dijo

    Ang uri ng mga post na gusto naming basahin, salamat!

  5.   Abraham Ibarra dijo

    Mahusay na artikulo, mayroon akong isang proyekto kung saan ako nagtatrabaho at nais kong magtanong sa iyo ng isang katanungan, may mga pang-industriya na switch na may function na NAT (Ipagpalagay ko na gumagamit sila ng mga IPTable sa ibaba), upang isalin ang isang IP address nang hindi gumagawa ng mga pagbabago sa kagamitan, isang halimbawa, mayroon akong isang Server 10.10.2.1 na nakikipag-usap sa mga computer ng 10.10.2.X at sa pamamagitan ng switch ay naka-program upang ang isang computer na may address na 192.168.2.4 ay talagang nakikita mula sa server bilang 10.10.2.5, isinalin nito ang IP address upang makita Mula sa iba pang mga computer na may address na iyon, nais kong gawin ito mula sa isang server na may Ubuntu o ibang pamamahagi, ano ang mga panuntunan sa iptables?

  6.   balakang dijo

    Napakagandang impormasyon salamat ^ _ ^

  7.   Si Yisus dijo

    Magandang hapon.
    Mayroon akong isang problema sa pagsubok na gawin ang isang pag-redirect. Ipinapaliwanag ko:
    Mayroon akong isang proxy server sa Ubuntu, na may 2 network card:
    Ang eth0 = 192.168.1.1 ay konektado sa natitirang lokal na network.
    Ang eth1 = 192.168.2.2 ay konektado sa router.
    Kailangan ko ang lahat na dumaan sa eth0 upang dumaan sa eth1, at sa pamamagitan din ng proxy (Gumagamit ako ng Squid, na ang default port ay 3128), at hindi ko mahanap ang susi sa pagsasaayos ng IPTABLES.
    Hindi ko kailangan ng paghihigpit ng anumang uri, tanging ang isang talaan ay mananatili sa log ng mga web address na binisita.

    Inaasahan kong matutulungan mo ako dahil ito ay lubos na isang mahirap na gawain na nag-aalala sa akin sa loob ng ilang araw.

    Salamat sa inyo.

  8.   Gabriel dijo

    Kaibigan, napakasariwa ko sa ibang mga server, wala akong ideya ngunit naiintindihan ko ang paksa at natututo ako nang mabilis, ang tanong ko ay ang sumusunod na mayroon akong 2 mga server na serv_1 at serv_2 na konektado ako sa parehong intranet, sa mga server na ito mayroon akong isang sariling setting na naka-set up, Nais kong gawin ang sumusunod:

    na ang isang tiyak na saklaw ng ips halimbawa rangeip_1 kapag naglalagay ng isang access ip sa sarilingcloud (ipowncloud) ay nakadirekta sa serv_1 at kung ito ay isa pang rangeip_2 na inilagay ang parehong ipowncloud ay nakadirekta sa serv_2, ito upang ang 2 server ay matatagpuan sa dalawang magkakaibang lungsod at ang mga saklaw ng IP ay magkakaiba ngunit lahat sila ay nasa parehong network, iyon ang magiging unang bahagi, ang pangalawa ay magiging malinaw ay upang isabay ang 2 server na ito upang ang mga ito ay mga salamin o ipinapayo nila sa akin ito upang ma-optimize ang lapad banda, mangyaring, kung ipaliwanag mo sa akin kung paano ito gawin hakbang-hakbang hindi super programmer mode = (

  9.   Antonio Carrizosa dijo

    Kumusta, patawarin ako, mayroon akong isang switch na namamahala sa komunikasyon ng lahat ng mga aparato na bumubuo sa aking network, at pagkatapos nito ay isang firewall at sa wakas ang paglabas sa Internet, kung ano ang mangyayari ay nais kong ibigay ang pag-redirect sa lumipat at hindi kailangang maabot ang firewall maliban kung ang hiniling na serbisyo ay internet.

  10.   John dijo

    Gamit ang pamamaraang ito maaari mo bang i-redirect ang HTTPS sa HTTP?

  11.   patay dijo

    Kumusta, marahil ito ay medyo huli na, ngunit nais kong tanungin ka, kung paano ko gagawin ang pusit na hindi baguhin ang IP ng kliyente kung nais kong kumonekta sa isang web server sa parehong network?

  12.   lafat32 dijo

    Huwag mo akong pakitunguhan nang masama sa pagtatanong. Magagawa ba ito sa Windows?

  13.   Martin dijo

    Ang impormasyong ito ay naging kapaki-pakinabang sa akin. Tulad ng nakasanayan, mapagkakatiwalaan kayong mga tao, kung wala akong makitang bagay sa Ingles na karaniwang nagtatapos ako sa pagtingin sa Espanyol, sa mga pagkakataong iyon ay halos palagi akong pumupunta sa site na ito.

  14.   Seba dijo

    Mayroon akong 4G router na isang kliyente ng isang network na hindi ko pinamamahalaan (malinaw naman, ako ay isang kliyente)... ang router na ito ay isang gateway sa malayong network na iyon sa pamamagitan ng OpenVPN. Bilang karagdagan, tinutupad ng nasabing router ang function ng portforwarding upang ma-access ang port 80 ng server ng isa sa mga subnet na iyon sa field.

    Ito ang deklarasyon na kailangan kong ilagay sa router bilang custom na panuntunan ng firewall «-t nat -A POSTROUTING -j MASQUERADE»

    Salamat sa tulong!