Redirekti trafikon de unu IP kaj haveno al alia IP kaj haveno

Io tre ofta dum administrado de serviloj redirektas trafikon.

Supozu, ke ni havas servilon kun iuj servoj funkciantaj, sed ial ajn ni ŝanĝas unu el tiuj servoj (Mi ne scias, ekzemple pop3, kiu estas haveno 110) al alia servilo. La normala kaj plej ofta afero estus simple ŝanĝi la IP en la DNS-rekordo, tamen se iu uzus la IP anstataŭ la subdomajno, ĝi trafos.

Kion fari? ... simple, redirektu la trafikon, kiun tiu servilo ricevas tra tiu haveno al alia servilo kun la sama haveno.

servilo-nodo-lan-ethernet

Kiel ni komencas redirekti trafikon?

La unua afero estas, ke ni certe ebligis la plusendado en la servilo, por tio ni metos la jenon:

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

Ĉiuj komandoj montritaj en ĉi tiu lernilo devas esti plenumitaj kun administraj privilegioj, mi rekomendas, ke ili estu plenumitaj rekte kun la radika uzanto.

Vi ankaŭ povas uzi ĉi tiun alian komandon, se la antaŭa ne funkcias por vi (ĝi okazis al mi tiel sur CentOS):
sysctl net.ipv4.ip_forward=1
Tiam ni rekomencos la reton:

service networking restart

En RPM-distribuoj kiel CentOS kaj aliaj, ĝi estus:

service nertwork restart

Nun ni transiros al la grava afero, diru al la servilo iptables kion redirekti:

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

Alivorte, kaj sekvante la ekzemplon, kiun mi menciis, supozu, ke ni volas redirekti la tutan trafikon, kiun nia servilo ricevas per la haveno 110 al alia servilo (ekz: 10.10.0.2), kiu ankoraŭ ricevos tiun trafikon tra 110 (ĝi estas la sama servo):

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

La servilo 10.10.0.2 vidos, ke ĉiuj pakoj aŭ petoj devenas de la IP de la kliento, se ili volas naĝi la petojn, tio estas, ke la dua servilo vidas, ke la petoj alvenas kun la IP de la unua servilo (kaj en la kiun ni aplikas la alidirektadon), ĝi ankaŭ estus meti ĉi tiun duan linion:

iptables -t nat -A POSTROUTING -j MASQUERADE

Iuj demandoj kaj respondoj

En la ekzemplo mi uzis la saman havenon ambaŭfoje (110), tamen ili povas redirekti trafikon de unu haveno al alia senprobleme. Ekzemple, supozu, ke mi volas redirekti trafikon de la haveno 80 ĝis 443 sur alia servilo, por tio ĝi estus:

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

Ĉi tio estas iptables, ili povas uzi ĉiujn aliajn parametrojn, kiujn ni konas, ekzemple, se ni nur volas redirekti trafikon de specifa IP, ĝi aldonus -s ... Ekzemple mi redirektos nur la trafikon de 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

Aŭ tuta reto (/ 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

Ni ankaŭ povas specifi la retan interfacon per -i :

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

Fine!

Ĉi tio, kiel mi jam diris, estas iptables, vi povas apliki tion, kio estas jam konata, por ke la servilo faru ĝuste tion, kion vi volas, ke ĝi faru 😉

Dankon!

Dediĉa Servilo_Subbildo


La enhavo de la artikolo aliĝas al niaj principoj de redakcia etiko. Por raporti eraron alklaku Ĉi tie.

19 komentoj, lasu la viajn

Lasu vian komenton

Via retpoŝta adreso ne estos eldonita. Postulita kampojn estas markita per *

*

*

  1. Respondeculo pri la datumoj: Miguel Ángel Gatón
  2. Celo de la datumoj: Kontrola SPAM, administrado de komentoj.
  3. Legitimado: Via konsento
  4. Komunikado de la datumoj: La datumoj ne estos komunikitaj al triaj krom per laŭleĝa devo.
  5. Stokado de datumoj: Datumbazo gastigita de Occentus Networks (EU)
  6. Rajtoj: Iam ajn vi povas limigi, retrovi kaj forigi viajn informojn.

  1.   Fer diris

    Ni povas fari tion ankaŭ per fajroŝirmilo, kiu permesas havenan plusendadon, ĉu ne? (aplikante la respondajn regulojn).

    1.    KZKG ^ Gaara diris

      Jes kompreneble, finfine fajroŝirmilo kiel Pfsense aŭ aliaj, uzas iptables malantaŭe.

      1.    ĉasisto diris

        Por esti ekzakta, pfsense ne uzas iptables sed pf, memoru, ke ĝi estas bsd interne.

        1.    KZKG ^ Gaara diris

          Ho ĝuste, mia malbona!

  2.   Nicolas diris

    Koran dankon pro la konsileto 🙂

    Mi havas du dubojn:
    1 - Ĉu la ŝanĝo estas konstanta? aŭ ĉu ĝi perdiĝas restartigante la servilon?
    2 - Mi havas plurajn kazojn (ekzemple A, B kaj C) sur la sama subreto. En kazo A mi aplikas la regulon por direkti la trafikon al ekstera IP, kaj provante per bukloj de kazoj B kaj C, ĉio funkcias mirinde. La problemo estas, ke de ekzemplo A ĝi ne funkcias. Mi provis uzi kaj vian IP kaj la buklan interfacon, kaj neniu funkcias:
    $ iptables -t nat -A PREROUTING -p tcp –port 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-yyyy: 8080 / hello_world
    buklo: (7) Malsukcesis konekti al ip-yyyy-haveno 8080: Konekto rifuzita
    $ curl localhost: 8080 / hello_world
    buklo: (7) Malsukcesis konekti al loka gastiga haveno 8080: Konekto rifuzita

    Ĉu vi havas ideon, kia estas la problemo?

    1.    KZKG ^ Gaara diris

      Jes, la ŝanĝo perdiĝas dum reboot, vi devos uzi iptables-save & iptables-restore aŭ ion tian por eviti tion.
      Mi ne tute komprenis, kion vi volas fari, ekzemplon A?

      1.    Nicolas diris

        Mi havas servilon, kiu nur subtenas konektojn de aparta ip (servilo A), mi ne povas aŭ volas aldoni pli da IPs al la blanka listo (por skaleblaj problemoj), do mi volas, ke ĉiu trafiko al la ekstera servilo trairu. diris servilo (A).
        Kiel praktike, mi havas tutmondajn agordojn, kiuj difinas kiun IP uzi por ĉiu servo, do ĉi-kaze temas pri "ĉiuj, kiuj volas uzi la eksteran servon, devas uzi IP A"
        Ĉi tio sukcesis per la metodo en ĉi tiu artikolo, sed mi havas la problemon, ke servanto A ne povas aliri la servon per sia propra ip (sed ĉiuj aliaj serviloj).
        Ĝis nun la plej bona, kiun mi trovis, estis aldoni la mapadon en la dosiero / etc / hosts de servilo A, montrante la eksteran ip, anstataŭigante la tutmondan agordon.

  3.   braybaut diris

    Tre bone, se mi havas alian retpoŝtan servilon, mi povus plusendi la trafikon de haveno 143 de servilo1 al servilo2 kaj la retpoŝtoj atingos servilon2, ĉu ne?

    salutoj

    1.    KZKG ^ Gaara diris

      Teorie jes, ĝi funkcias tiel. Certe, vi devas havi la retpoŝtan servilon ĝuste instalita sur servilo2 🙂

  4.   MSX diris

    Tiajn afiŝojn ni ŝatas legi, dankon!

  5.   abraham ibarra diris

    Bonega artikolo, mi havas projekton, en kiu mi laboras, kaj mi volis fari demandon al vi, estas industriaj ŝaltiloj kun NAT-funkcio (mi supozas, ke ili uzas IPTablojn sube), por traduki IP-adreson sen fari ŝanĝojn al la ekipaĵo, ekzemple, mi havas Servilon. 10.10.2.1 kiu komunikas kun 10.10.2.X-komputiloj kaj per la ŝaltilo estas programita tiel ke komputilo kun adreso 192.168.2.4 efektive vidiĝas de la servilo kiel 10.10.2.5, ĝi tradukis tiun IP-adreson videblan De la aliaj komputiloj kun tiu adreso, mi volas fari ĝin de servilo kun Ubuntu aŭ alia distribuo, kio estus la reguloj de iptables?

  6.   Kuk diris

    Tre bona informo dankon ^ _ ^

  7.   Yisus diris

    Buenas malfruas.
    Mi havas problemon provi fari alidirektilon. Mi klarigas:
    Mi havas prokurilon en Ubuntu, kun 2 retaj kartoj:
    eth0 = 192.168.1.1 estas konektita al la resto de la loka reto.
    eth1 = 192.168.2.2 estas konektita al la enkursigilo.
    Mi bezonas ĉion, kio venas per eth0, por trairi eth1, kaj ankaŭ per la prokurilo (mi uzas Squid, kies defaŭlta haveno estas 3128), kaj mi ne povas trovi la ŝlosilon en la agordo de IPTABLES.
    Mi ne bezonas ian ajn limigon, nur ke registro restas en la protokolo de la vizitataj retaj adresoj.

    Mi esperas, ke vi povas helpi min, ĉar ĝi estas sufiĉe malfacila tasko, kiu maltrankviligas min de kelkaj tagoj.

    Dankon.

  8.   gabriel diris

    Amiko, mi estas tre nova pri aliaj serviloj, mi havas neniun ideon sed mi komprenas la temon kaj mi lernas rapide, mia demando estas jena mi havas 2 servilojn serv_1 kaj serv_2 kiujn mi konektis al la sama intrareto, en ĉi tiuj serviloj mi havas propran nubon instalitan Mi ŝatus fari la jenon:

    ke certa gamo de ips ekzemple rangeip_1 kiam metas alirip al la owncloud (ipowncloud) estas direktita al serv_1 kaj se ĝi estas alia rangeip_2 metita la sama ipowncloud estas direktita al serv_2, ĉi tio por ke la 2 serviloj troviĝu en du malsamaj urboj kaj la ip-gamoj estas malsamaj sed ĉiuj estas en la sama reto, tio estus la unua parto, la dua estus klara estas sinkronigi ĉi tiujn 2 servilojn por esti speguloj aŭ konsili min pri tio por optimumigi la larĝon bando, mi petas, se vi klarigos al mi kiel fari ĝin paŝon post paŝo ne superprograma reĝimo = (

  9.   Antonio Carrizosa diris

    Saluton, pardonu, mi havas ŝaltilon zorge de la komunikado de ĉiuj aparatoj, kiuj konsistigas mian reton, kaj post tio fajromuro kaj fine la interreta eliro, kio okazas estas, ke mi ŝatus, ke la alidirektado estu donita en la ŝanĝi kaj ne devas atingi la fajromuron krom se la petita servo estas interreto.

  10.   John diris

    Uzante ĉi tiun metodon, ĉu vi povus redirekti HTTPS al HTTP?

  11.   mati diris

    Saluton, eble iom malfruas, sed mi volis demandi vin, kiel mi devas fari kalmaron ne modifi la IP de la kliento, kiam mi volas konekti al retservilo en la sama reto?

  12.   Lafat32 diris

    Ne traktu min malbone pro mia demandado. Ĉu tio povas esti farita en Vindozo?

  13.   martin diris

    Ĉi tiu informo utilis al mi. Kiel ĉiam, vi povas fidi, kiam mi ne trovas ion en la angla, mi kutime serĉas en la hispana, en tiuj okazoj mi preskaŭ ĉiam venas al ĉi tiu retejo. Dankon.