Trafiği bir IP ve bağlantı noktasından başka bir IP'ye ve bağlantı noktasına yönlendirin

Sunucuları yönetirken çok yaygın olan bir şey trafiği yeniden yönlendirmektir.

Diyelim ki belirli hizmetlerin çalıştığı bir sunucumuz var, ancak herhangi bir nedenle bu hizmetlerden birini (Bilmiyorum, örneğin port 3 olan pop110) başka bir sunucuya. Normal ve en sık karşılaşılan şey, DNS kaydındaki IP'yi değiştirmektir, ancak birisi alt alan adı yerine IP'yi kullanıyorsa bu etkilenecektir.

Ne yapalım? ... basit, o sunucu tarafından alınan trafiği o bağlantı noktası üzerinden aynı bağlantı noktasına sahip başka bir sunucuya yönlendirin.

sunucu-düğüm-lan-ethernet

Trafiği yeniden yönlendirmeye nasıl başlarız?

İlk olarak şunu etkinleştirmiş olmamız gerekir: nakliye sunucuda, bunun için aşağıdakileri koyacağız:

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

Bu öğreticide gösterilen tüm komutlar yönetici ayrıcalıklarıyla yürütülmelidir, bunların doğrudan kök kullanıcıyla yürütülmesini öneririm.

Önceki komut sizin için çalışmıyorsa, bu diğer komutu da kullanabilirsiniz (bana bir CentOS'ta böyle oldu):
sysctl net.ipv4.ip_forward=1
Ardından ağı yeniden başlatacağız:

service networking restart

CentOS ve diğerleri gibi RPM dağıtımlarında, şunlar olacaktır:

service nertwork restart

Şimdi önemli şeye geçeceğiz, sunucuya şunu söyleyelim: iptables neyin yönlendirileceği:

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

Başka bir deyişle ve bahsettiğim örneği takip ederek, sunucumuzun 110 numaralı bağlantı noktası üzerinden aldığı tüm trafiği başka bir sunucuya (ör .: 10.10.0.2), bu trafiği 110 (aynı hizmet):

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

10.10.0.2 sunucusu, tüm paketlerin veya isteklerin istemcinin IP'sinden geldiğini, istekleri yüzmek istemeleri durumunda, yani 2. sunucunun isteklerin 1. sunucunun IP'si ile geldiğini görmesi durumunda (ve yönlendirmeyi uygularız), bu ikinci satırı da koymak olacaktır:

iptables -t nat -A POSTROUTING -j MASQUERADE

Bazı sorular ve cevaplar

Örnekte her iki durumda da aynı bağlantı noktasını kullandım (110), ancak trafiği bir bağlantı noktasından diğerine sorunsuz bir şekilde yönlendirebilirler. Örneğin, başka bir sunucuda 80 numaralı bağlantı noktasından 443 numaralı bağlantı noktasına trafiği yeniden yönlendirmek istediğimi varsayalım, bunun için şöyle olur:

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

yani iptables, bildiğimiz diğer tüm parametreleri kullanabilirler, örneğin, yalnızca belirli bir IP'den gelen trafiği yeniden yönlendirmek istiyorsak, bu, -s … Örneğin, yalnızca 10.10.0.51'den gelen trafiği yeniden yönlendireceğim:

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

Veya tüm bir ağ (/ 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

Ağ arayüzünü -i ile de belirtebiliriz :

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

Son!

Daha önce de söylediğim gibi, bu iptables, zaten bilinenleri uygulayabilirsiniz, böylece sunucu tam olarak ne yapmasını istiyorsanız onu yapar 😉

Selamlar!

DedicatedServer_SubImage


Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.

  1.   Fer dijo

    Bunu port yönlendirmeye izin veren bir güvenlik duvarından da yapabiliriz, değil mi? (ilgili kuralları uygulayarak).

    1.    KZKG ^ Gaara dijo

      Evet elbette, sonunda Pfsense veya diğerleri gibi bir güvenlik duvarı, iptables'ı arkadan kullanın.

      1.    dhunter dijo

        Kesin olarak, pfsense iptables kullanmaz, ancak pf kullanır, bunun içinde bir bsd olduğunu unutmayın.

        1.    KZKG ^ Gaara dijo

          Oh doğru, benim hatam!

  2.   nicolas dijo

    Bahşiş için çok teşekkür ederim 🙂

    Birkaç şüphem var:
    1 - Değişiklik kalıcı mı? veya sunucuyu yeniden başlatırken kaybolur mu?
    2 - Aynı alt ağda birden çok örneğim var (örneğin A, B ve C). Örnek A'da, trafiği harici bir IP'ye yönlendirmek için kuralı uyguluyorum ve B ve C örneklerinden buklelerle test ediyorum, her şey harikalar yaratıyor. Sorun, örnek A'dan itibaren çalışmamasıdır. Hem ip'inizi hem de geridöngü arayüzünü kullanmayı denedim ve ikisi de çalışmıyor:
    $ iptables -t nat -A PREROUTING -p tcp –dport 8080 -j DNAT – hedefe xxxx: 8080
    $ iptables -t nat -A PREROUTING -p tcp -i lo –dport 8080 -j DNAT – hedefe xxxx: 8080

    $ curl ip-yyyy: 8080 / hello_world
    curl: (7) ip-yyyy bağlantı noktası 8080'e bağlanılamadı: Bağlantı reddedildi
    $ curl localhost: 8080 / hello_world
    curl: (7) 8080 localhost bağlantı noktasına bağlanılamadı: Bağlantı reddedildi

    Sorunun ne olabileceği hakkında bir fikriniz var mı?

    1.    KZKG ^ Gaara dijo

      Evet, değişiklik yeniden başlatıldığında kaybolur, bundan kaçınmak için iptables-save & iptables-restore veya buna benzer bir şey kullanmanız gerekecektir.
      Ne yapmak istediğini tam olarak anlamadım, örnek A?

      1.    nicolas dijo

        Yalnızca belirli bir IP'den (sunucu A) gelen bağlantıları destekleyen bir sunucum var, beyaz listeye daha fazla ips ekleyemiyorum veya eklemek istemiyorum (ölçeklenebilirlik sorunları için), bu nedenle harici sunucuya giden tüm trafiğin geçmesini istiyorum söz konusu sunucu (A).
        Pratiklik açısından, her hizmet için hangi IP'nin kullanılacağını tanımlayan global yapılandırmalarım var, bu nedenle bu durumda "harici hizmeti kullanmak isteyen herkes IP A kullanmalıdır" gibi bir şey.
        Bunu bu makaledeki yöntemi kullanarak başarıyla başardım, ancak bunu uygularken, sunucu A'nın hizmete kendi ipini kullanarak erişememesi (ancak diğer tüm sunucularda) sorunuyla karşılaşıyorum.
        Şimdiye kadar bulduğum en iyi şey, eşlemeyi sunucu A'nın / etc / hosts dosyasına ekleyerek harici ip'i göstererek genel ayarı geçersiz kılmaktı.

  3.   Braybaut dijo

    Çok iyi, eğer başka bir posta sunucum varsa, 143 numaralı bağlantı noktasından gelen trafiği sunucu1'den sunucu2'ye iletebilirim ve e-postalar bana sunucu2'de ulaşır, değil mi?

    selamlar

    1.    KZKG ^ Gaara dijo

      Teorik olarak evet, bu şekilde çalışıyor. Elbette, posta sunucusunun sunucu2'ye düzgün şekilde yüklenmiş olması gerekir 🙂

  4.   msx dijo

    Okumayı sevdiğimiz yazılar, teşekkürler!

  5.   İbrahim İbarra dijo

    Mükemmel makale, çalıştığım bir projem var ve size bir soru sormak istiyorum, donanımda değişiklik yapmadan bir IP adresini çevirmek için NAT işlevine sahip endüstriyel anahtarlar var (sanırım aşağıda IPTables kullanıyorlar), bir örnek, bir Sunucum var 10.10.2.1.X bilgisayarlar ile ve switch üzerinden haberleşen 10.10.2, 192.168.2.4 adresi olan bir bilgisayarın sunucudan 10.10.2.5 olarak görünmesi için programlanır, IP adresini görülecek Bu adrese sahip diğer bilgisayarlardan Ubuntu'lu bir sunucudan veya başka bir dağıtımdan yapmak istiyorum, iptables kuralları ne olurdu?

  6.   Belki dijo

    Çok iyi bilgi teşekkür ederim ^ _ ^

  7.   yisus dijo

    İyi günler.
    Yönlendirme yapmaya çalışırken sorun yaşıyorum. Açıklarım:
    Ubuntu'da 2 ağ kartına sahip bir proxy sunucum var:
    eth0 = 192.168.1.1 yerel ağın geri kalanına bağlı.
    eth1 = 192.168.2.2 yönlendiriciye bağlı.
    Eth0 üzerinden gelen her şeye eth1 ve ayrıca proxy üzerinden (varsayılan bağlantı noktası 3128 olan Squid kullanıyorum) ihtiyacım var ve anahtarı IPTABLES yapılandırmasında bulamıyorum.
    Herhangi bir kısıtlamaya ihtiyacım yok, sadece ziyaret edilen web adreslerinin günlüğünde bir kayıt kalıyor.

    Birkaç gündür beni endişelendiren oldukça külfetli bir iş olduğu için bana yardım edebileceğinizi umuyorum.

    Teşekkür ederim.

  8.   Cebrail dijo

    Arkadaşım, diğer sunucularda çok yeniyim, hiçbir fikrim yok ama konuyu anlıyorum ve çabuk öğreniyorum, sorum şu: Aynı intranete bağladığım serv_2 ve serv_1 2 sunucum var, bu sunucularda owncloud kurdum Aşağıdakileri yapmak istiyorum:

    Owncloud'a (ipowncloud) bir erişim ipi yerleştirirken belirli bir ips aralığı örneğin rangeip_1 serv_1'e yönlendirilir ve eğer başka bir rangeip_2 yerleştirilmişse aynı ipowncloud serv_2'ye yönlendirilir, bu 2 sunucunun yerleştirilmesi için iki farklı şehirde ve IP aralıkları farklı ancak hepsi aynı ağ üzerinde, yani birinci kısım olacak, ikincisi bu 2 sunucuyu ayna olacak şekilde senkronize etmektir veya genişliği optimize etmek için bana bunu tavsiye etsinler. band, lütfen bana süper programcı moduna değil adım adım nasıl yapılacağını açıklayacaksanız = (

  9.   Antonio Carrizosa dijo

    Merhabalar, afedersiniz, ağımı oluşturan tüm cihazların iletişiminden sorumlu bir anahtarım var ve bundan sonra bir güvenlik duvarı ve son olarak da İnternet çıkışı, olan şey şu ki, yeniden yönlendirmenin anahtarını değiştirin ve istenen hizmet internet olmadığı sürece güvenlik duvarına erişmesi gerekmez.

  10.   John dijo

    Bu yöntemi kullanarak HTTPS'yi HTTP'ye yönlendirebilir misiniz?

  11.   mati dijo

    Merhaba, belki biraz geç, ama size sormak istedim, aynı ağdaki bir web sunucusuna bağlanmak istediğimde squid'in istemcinin IP'sini değiştirmemesini nasıl sağlayabilirim?

  12.   lafat32 dijo

    Bana sorduğum için kötü davranma. Bu Windows'ta yapılabilir mi?

  13.   kırlangıç dijo

    Bu bilgi benim için faydalı oldu. Her zaman olduğu gibi, size güvenilebilir, İngilizce bir şey bulamadığımda genellikle İspanyolca bakıyorum, bu durumlarda neredeyse her zaman bu siteye geliyorum.

  14.   Sheba dijo

    Yönetmediğim bir ağın istemcisi olan bir 4G yönlendiricim var (tabii ki ben bir müşteriyim)… bu yönlendirici, OpenVPN aracılığıyla bu uzak ağa açılan bir ağ geçididir. Ek olarak, söz konusu yönlendirici, alandaki bu alt ağlardan birinin sunucusunun 80 numaralı bağlantı noktasına erişmek için bağlantı noktası iletme işlevini yerine getirir.

    Bu, yönlendiriciye güvenlik duvarı özel kuralı olarak "-t nat -A POSTROUTING -j MASQUERADE" koymak zorunda kaldığım bildirimdi.

    Yardım için teşekkürler!