Ubah arah lalu lintas dari satu IP dan port ke IP dan port yang lain

Sesuatu yang sangat biasa semasa menguruskan pelayan adalah mengarahkan lalu lintas.

Andaikan kita mempunyai pelayan dengan perkhidmatan tertentu berjalan, tetapi atas sebab apa pun kita menukar salah satu perkhidmatan tersebut (Saya tidak tahu, contohnya pop3 yang merupakan port 110) ke pelayan lain. Perkara biasa dan paling kerap adalah dengan menukar IP dalam rekod DNS, namun jika seseorang menggunakan IP dan bukan subdomain, itu akan terpengaruh.

Apa nak buat? ... mudah, ubah arah lalu lintas yang diterima oleh pelayan itu melalui port tersebut ke pelayan lain dengan port yang sama.

pelayan-nod-lan-ethernet

Bagaimana kita mula mengarahkan lalu lintas?

Perkara pertama ialah kita mesti mengaktifkannya penghantaran di pelayan, untuk ini kami akan meletakkan perkara berikut:

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

Semua arahan yang ditunjukkan dalam tutorial ini mesti dilaksanakan dengan hak pentadbiran, saya mengesyorkan agar ia dilaksanakan secara langsung dengan pengguna root.

Anda juga boleh menggunakan perintah lain ini, sekiranya yang sebelumnya tidak berfungsi untuk anda (ia berlaku kepada saya seperti ini di CentOS):
sysctl net.ipv4.ip_forward=1
Kemudian kami akan memulakan semula rangkaian:

service networking restart

Di distro RPM seperti CentOS dan lain-lain, ia adalah:

service nertwork restart

Sekarang kita akan beralih ke perkara penting, memberitahu pelayan melalui iptables apa yang hendak diarahkan:

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

Dengan kata lain, dan mengikuti contoh yang saya sebutkan, anggaplah bahawa kita ingin mengarahkan semua lalu lintas yang diterima pelayan kita melalui port 110 ke pelayan lain (cth: 10.10.0.2), yang masih akan menerima lalu lintas itu melalui 110 (ia adalah perkhidmatan yang sama):

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

Pelayan 10.10.0.2 akan melihat bahawa semua paket atau permintaan berasal dari IP pelanggan, sekiranya mereka ingin memenuhi permintaan, iaitu, pelayan ke-2 melihat bahawa permintaan tiba dengan IP pelayan pertama (dan di yang kita gunakan pengalihan), juga akan meletakkan baris kedua ini:

iptables -t nat -A POSTROUTING -j MASQUERADE

Beberapa soalan dan jawapan

Dalam contoh saya menggunakan port yang sama pada kedua-dua kesempatan (110), namun mereka dapat mengarahkan lalu lintas dari satu port ke port lain tanpa masalah. Sebagai contoh, andaikan saya ingin mengarahkan lalu lintas dari port 80 hingga 443 pada pelayan lain, kerana ini adalah:

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

Ini adalah iptables, mereka dapat menggunakan semua parameter lain yang kita ketahui, misalnya, jika kita hanya ingin mengarahkan lalu lintas dari IP tertentu, itu adalah dengan menambahkan -s Sebagai contoh, saya akan mengalihkan hanya lalu lintas yang berasal dari 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

Atau keseluruhan rangkaian (/ 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

Kami juga dapat menentukan antara muka rangkaian dengan -i :

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

Tamat!

Ini seperti yang saya katakan, iptables, anda boleh menggunakan apa yang sudah diketahui sehingga pelayan melakukan apa yang anda mahukan 😉

Salam!

DedicatedServer_SubImage


Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.

  1.   Fer kata

    Kita juga boleh melakukan ini dari firewall yang membolehkan pemajuan port, bukan? (menggunakan peraturan yang sesuai).

    1.    KZKG ^ Gaara kata

      Ya tentu saja, pada akhirnya firewall seperti Pfsense atau yang lain, gunakan iptables dari belakang.

      1.    penipu kata

        Tepatnya, pfsense tidak menggunakan iptables tetapi pf, ingat bahawa itu adalah bsd di dalamnya.

        1.    KZKG ^ Gaara kata

          Oh betul, buruk saya!

  2.   Nicolas kata

    Terima kasih banyak atas petua 🙂

    Saya mempunyai beberapa keraguan:
    1 - Adakah perubahan itu kekal? atau hilang semasa memulakan semula pelayan?
    2 - Saya mempunyai banyak contoh (katakan A, B dan C) pada subnet yang sama. Sebagai contoh A, saya menerapkan peraturan untuk merutekan lalu lintas ke IP luaran, dan menguji dengan ikal dari contoh B dan C, semuanya berfungsi dengan luar biasa. Masalahnya ialah dari contoh A ia tidak berfungsi. Saya cuba menggunakan antara muka ip dan loopback anda, dan tidak ada yang berfungsi:
    $ iptables -t nat -A PREROUTING -p tcp –dport 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
    curl: (7) Gagal menyambung ke port ip-yyyy 8080: Sambungan ditolak
    $ curl localhost: 8080 / hello_world
    curl: (7) Gagal menyambung ke port localhost 8080: Sambungan ditolak

    Ada idea apa masalahnya?

    1.    KZKG ^ Gaara kata

      Ya, perubahan itu hilang semasa reboot, anda harus menggunakan iptables-save & iptables-restore atau sesuatu seperti itu untuk mengelakkannya.
      Saya tidak faham apa yang anda mahu lakukan, contoh A?

      1.    Nicolas kata

        Saya mempunyai pelayan yang hanya menyokong sambungan dari ip tertentu (pelayan A), saya tidak boleh atau mahu menambah lebih banyak ips ke senarai putih (untuk masalah skalabiliti), jadi saya mahu semua lalu lintas ke pelayan luaran melalui pelayan tersebut (A).
        Sebagai masalah kepraktisan, saya mempunyai konfigurasi global yang menentukan IP mana yang akan digunakan untuk setiap perkhidmatan, jadi dalam hal ini ia seperti "semua orang yang ingin menggunakan perkhidmatan luaran, harus menggunakan IP A"
        Ini berjaya dicapai dengan menggunakan kaedah dalam artikel ini, tetapi saya menghadapi masalah bahawa ketika menerapkannya, pelayan A tidak dapat mengakses perkhidmatan menggunakan ipnya sendiri (tetapi semua pelayan lain melakukannya).
        Setakat ini, yang terbaik yang saya dapati ialah menambahkan pemetaan dalam fail pelayan A / etc / hosts, menunjuk ke ip luaran, mengatasi tetapan global.

  3.   braybaut kata

    Sangat bagus, jika saya mempunyai pelayan mel lain, saya dapat meneruskan lalu lintas dari port 143 dari server1 ke server2 dan e-mel akan menghubungi saya di server2, bukan?

    salam

    1.    KZKG ^ Gaara kata

      Secara teori ya, ia berfungsi seperti ini. Sudah tentu, anda mesti memasang pelayan mel dengan betul pada pelayan2 🙂

  4.   MSX kata

    Jenis catatan yang kami suka baca, terima kasih!

  5.   Abraham Ibarra kata

    Artikel yang sangat baik, saya mempunyai projek di mana saya sedang bekerja dan saya ingin mengemukakan soalan kepada anda, terdapat suis industri dengan fungsi NAT (saya rasa mereka menggunakan IPTables di bawah), untuk menterjemahkan alamat IP tanpa membuat perubahan pada peralatan, contoh, saya mempunyai Pelayan 10.10.2.1 yang berkomunikasi dengan komputer 10.10.2.X dan melalui suis diprogramkan supaya komputer yang mempunyai alamat 192.168.2.4 sebenarnya dilihat dari pelayan sebagai 10.10.2.5, ia menerjemahkan IP itu alamat yang perlu dilihat Dari komputer lain dengan alamat tersebut, saya ingin melakukannya dari pelayan dengan Ubuntu atau sebaran lain, apakah peraturan iptables?

  6.   kuk kata

    Maklumat yang sangat baik terima kasih ^ _ ^

  7.   yisus kata

    Selamat petang.
    Saya menghadapi masalah semasa melakukan pengalihan. Saya menerangkan:
    Saya mempunyai pelayan proksi di Ubuntu, dengan 2 kad rangkaian:
    eth0 = 192.168.1.1 disambungkan ke rangkaian tempatan yang lain.
    eth1 = 192.168.2.2 disambungkan ke penghala.
    Saya memerlukan semua yang ada melalui eth0 untuk melalui eth1, dan juga melalui proksi (saya menggunakan Squid, yang port lalai adalah 3128), dan saya tidak dapat menemui kunci dalam konfigurasi IPTABLES.
    Saya tidak memerlukan sekatan apa pun, hanya catatan yang tersimpan di log alamat web yang dikunjungi.

    Saya harap anda dapat menolong saya kerana ini adalah tugas yang agak membebankan yang telah membimbangkan saya selama beberapa hari.

    Terima kasih.

  8.   Gabriel kata

    Kawan, saya sangat baru dengan pelayan lain, saya tidak mempunyai idea tetapi saya faham subjeknya dan saya belajar dengan cepat, soalan saya ialah berikut saya mempunyai 2 pelayan serv_1 dan serv_2 yang saya sambungkan ke intranet yang sama, di pelayan ini saya ada saya akan melakukan perkara berikut:

    bahawa julat ips tertentu misalnya rangeip_1 ketika meletakkan ip akses kecloud own (ipowncloud) diarahkan ke serv_1 dan jika itu adalah rangeip_2 yang lain diletakkan ipowncloud yang sama diarahkan ke serv_2, ini agar 2 pelayan berada di dua bandar yang berbeza dan julat ip berbeza tetapi semuanya berada di rangkaian yang sama, itu akan menjadi bahagian pertama, yang kedua jelas adalah menyegerakkan 2 pelayan ini supaya mereka bercermin atau bahawa mereka menasihati saya ini agar untuk mengoptimumkan jalur lebar, sila, jika anda akan menerangkan kepada saya bagaimana melakukannya langkah demi langkah bukan mod pengaturcara super = (

  9.   Antonio Carrizosa kata

    Halo, maafkan saya, saya mempunyai suis yang bertanggungjawab untuk komunikasi semua peranti yang membentuk rangkaian saya, dan selepas ini firewall dan akhirnya keluar dari Internet, apa yang berlaku ialah saya mahu pengalihan semula diberikan di suis dan tidak perlu mencapai firewall kecuali perkhidmatan yang diminta adalah internet.

  10.   John kata

    Dengan menggunakan kaedah ini dapatkah anda mengarahkan HTTPS ke HTTP?

  11.   mati kata

    Hai, mungkin agak lewat, tetapi saya ingin bertanya kepada anda, bagaimana saya harus membuat squid tidak mengubah IP klien ketika saya ingin menyambung ke pelayan web di rangkaian yang sama?

  12.   lafat32 kata

    Jangan melayan saya dengan buruk kerana bertanya. Bolehkah ini dilakukan di Windows?

  13.   Martin kata

    Maklumat ini telah berguna bagi saya. Seperti biasa, anda boleh dipercayai, apabila saya tidak dapat menjumpai sesuatu dalam bahasa Inggeris, saya biasanya mencari dalam bahasa Sepanyol, pada kebiasaan saya hampir selalu datang ke laman web ini. Terima kasih.

  14.   Seba kata

    Saya mempunyai penghala 4G yang merupakan pelanggan rangkaian yang saya tidak uruskan (jelas, saya adalah pelanggan)… penghala ini ialah pintu masuk ke rangkaian jauh itu melalui OpenVPN. Di samping itu, penghala tersebut memenuhi fungsi portforwarding untuk mengakses port 80 pelayan salah satu daripada subnet tersebut dalam medan.

    Ini adalah pengisytiharan yang saya perlu masukkan ke dalam penghala sebagai peraturan tersuai firewall "-t nat -A POSTROUTING -j MAQUERADE"

    Terima kasih atas pertolongan!