Alihkan lalu lintas dari satu IP dan port ke IP dan port lain

Sesuatu yang sangat umum saat mengelola server mengarahkan lalu lintas.

Misalkan kita memiliki server dengan layanan tertentu yang sedang berjalan, tetapi karena alasan apa pun kita mengubah salah satu layanan tersebut (Entahlah, misalnya pop3 yang merupakan port 110) ke server lain. Hal yang normal dan paling sering adalah dengan mengubah IP dalam catatan DNS, namun jika seseorang menggunakan IP dan bukan subdomain, itu akan terpengaruh.

Apa yang harus dilakukan? ... sederhana, alihkan lalu lintas yang diterima oleh server tersebut melalui port tersebut ke server lain dengan port yang sama.

server-node-lan-ethernet

Bagaimana kami mulai mengarahkan lalu lintas?

Hal pertama adalah kita harus mengaktifkan ekspedisi di server, untuk ini kami akan meletakkan yang berikut:

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

Semua perintah yang ditampilkan dalam tutorial ini harus dijalankan dengan hak akses administratif, saya merekomendasikan agar perintah tersebut dijalankan langsung dengan pengguna root.

Anda juga dapat menggunakan perintah lain ini, jika perintah sebelumnya tidak berfungsi untuk Anda (itu terjadi pada saya seperti ini di CentOS):
sysctl net.ipv4.ip_forward=1
Kemudian kami akan memulai ulang jaringan:

service networking restart

Di distro RPM seperti CentOS dan lainnya, itu akan menjadi:

service nertwork restart

Sekarang kita akan beralih ke hal yang penting, beri tahu server melalui iptables apa yang harus dialihkan:

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

Yaitu, dan mengikuti contoh yang saya sebutkan, misalkan kita ingin mengarahkan semua lalu lintas yang diterima server kita melalui port 110 ke server lain (mis .: 10.10.0.2), yang masih akan menerima lalu lintas itu hingga 110 (itu adalah layanan yang sama):

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

Server 10.10.0.2 akan melihat bahwa semua paket atau permintaan berasal dari IP klien, jika mereka ingin memasukkan permintaan, yaitu, bahwa server ke-2 melihat bahwa permintaan datang dengan IP dari server pertama (dan dalam yang kami terapkan redirection), itu juga akan menempatkan baris kedua ini:

iptables -t nat -A POSTROUTING -j MASQUERADE

Beberapa pertanyaan dan jawaban

Dalam contoh saya menggunakan port yang sama dua kali (110), namun mereka dapat mengarahkan lalu lintas dari satu port ke port lain tanpa masalah. Misalnya, saya ingin mengarahkan lalu lintas dari port 80 ke 443 di server lain, untuk ini akan menjadi:

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

Ini iptables, mereka dapat menggunakan semua parameter lain yang kita ketahui, misalnya, jika kita hanya ingin mengalihkan lalu lintas dari IP tertentu, itu akan dengan menambahkan -s … Misalnya saya hanya akan mengarahkan 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 seluruh jaringan (/ 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

Kita juga bisa menentukan antarmuka jaringan 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 sudah saya katakan, adalah iptables, Anda dapat menerapkan apa yang sudah diketahui sehingga server melakukan apa yang Anda inginkan 😉

Salam!

Dedicated Server_SubImage


20 komentar, tinggalkan punyamu

tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.

  1.   Fer dijo

    Kami juga dapat melakukan ini dari firewall yang memungkinkan penerusan port, bukan? (menerapkan aturan yang sesuai).

    1.    KZKG ^ Gaara dijo

      Ya tentu saja pada akhirnya firewall seperti Pfsense atau yang lainnya menggunakan iptables dari belakang.

      1.    pemburu dijo

        Tepatnya, pfsense tidak menggunakan iptables tetapi pf, ingat bahwa di dalamnya ada bsd.

        1.    KZKG ^ Gaara dijo

          Oh benar, salahku!

  2.   Nicolas dijo

    Terima kasih banyak atas tipnya 🙂

    Saya memiliki beberapa keraguan:
    1 - Apakah perubahannya permanen? atau hilang saat memulai ulang server?
    2 - Saya memiliki beberapa instance (katakanlah A, B, dan C) di subnet yang sama. Dalam contoh A saya menerapkan aturan untuk merutekan lalu lintas ke IP eksternal, dan mencoba dengan ikal dari contoh B dan C, semuanya bekerja dengan sangat baik. Masalahnya adalah bahwa dari instance A itu tidak berfungsi. Saya mencoba menggunakan ip Anda dan antarmuka loopback, dan tidak ada yang berfungsi:
    $ iptables -t nat -A PREROUTING -p tcp –dport 8080 -j DNAT –ke-tujuan xxxx: 8080
    $ iptables -t nat -A PREROUTING -p tcp -i lo –dport 8080 -j DNAT –ke-tujuan xxxx: 8080

    $ curl ip-yyyy: 8080 / hello_world
    curl: (7) Gagal terhubung ke port ip-yyyy 8080: Sambungan ditolak
    $ curl localhost: 8080 / hello_world
    curl: (7) Gagal terhubung ke port localhost 8080: Koneksi ditolak

    Tahu apa masalahnya?

    1.    KZKG ^ Gaara dijo

      Ya, perubahan hilang saat reboot, Anda harus menggunakan iptables-save & iptables-restore atau semacamnya untuk menghindarinya.
      Saya kurang paham apa yang ingin Anda lakukan, misalnya A?

      1.    Nicolas dijo

        Saya memiliki server yang hanya mendukung koneksi dari ip tertentu (server A), saya tidak dapat atau ingin menambahkan lebih banyak ips ke daftar putih (untuk masalah skalabilitas), jadi saya ingin semua lalu lintas ke server eksternal melalui kata server (A).
        Untuk masalah kepraktisan, saya memiliki konfigurasi global yang menentukan IP mana yang akan digunakan untuk setiap layanan, jadi dalam hal ini adalah seperti "setiap orang yang ingin menggunakan layanan eksternal harus menggunakan IP A"
        Saya berhasil mencapai ini menggunakan metode dalam artikel ini, tetapi saya mengalami masalah bahwa ketika menerapkannya, server A tidak dapat mengakses layanan menggunakan ipnya sendiri (tetapi semua server lain melakukannya).
        Sejauh ini yang terbaik yang saya temukan adalah menambahkan pemetaan di file / etc / hosts server A, menunjuk ke ip eksternal, mengesampingkan pengaturan global.

  3.   braybaut dijo

    Bagus sekali, jika saya memiliki server email lain, saya dapat meneruskan lalu lintas dari port 143 dari server1 ke server2 dan email akan mencapai server2, bukan?

    salam

    1.    KZKG ^ Gaara dijo

      Secara teori ya, cara kerjanya seperti ini. Tentu, Anda harus menginstal server email dengan benar di server2 🙂

  4.   MSX dijo

    Jenis posting yang ingin kami baca, terima kasih!

  5.   Abraham Ibarra dijo

    Artikel yang sangat bagus, saya memiliki proyek di mana saya bekerja dan saya ingin mengajukan pertanyaan kepada Anda, ada sakelar industri dengan fungsi NAT (saya kira mereka menggunakan IPTables di bawah), untuk menerjemahkan alamat IP tanpa melakukan perubahan pada peralatan, contoh, saya memiliki Server 10.10.2.1 yang berkomunikasi dengan komputer 10.10.2.X dan melalui sakelar diprogram sehingga komputer yang memiliki alamat 192.168.2.4 sebenarnya terlihat dari server sebagai 10.10.2.5, diterjemahkan bahwa alamat IP dapat dilihat Dari komputer lain dengan alamat itu, saya ingin melakukannya dari server dengan Ubuntu atau distribusi lain, apa aturan iptables?

  6.   Kuku dijo

    Info yang sangat bagus terima kasih ^ _ ^

  7.   yisus dijo

    Selamat siang.
    Saya mengalami masalah saat mencoba melakukan pengalihan. Aku jelaskan:
    Saya memiliki server proxy di Ubuntu, dengan 2 kartu jaringan:
    eth0 = 192.168.1.1 terhubung ke seluruh jaringan lokal.
    eth1 = 192.168.2.2 terhubung ke router.
    Saya membutuhkan semua yang datang melalui eth0 melalui eth1, dan juga melalui proxy (saya menggunakan Squid, yang port defaultnya adalah 3128), dan saya tidak dapat menemukan kunci dalam konfigurasi IPTABLES.
    Saya tidak memerlukan batasan apa pun, hanya catatan yang tetap ada di log alamat web yang dikunjungi.

    Saya harap Anda dapat membantu saya karena ini adalah tugas yang cukup rumit yang telah membuat saya khawatir selama beberapa hari.

    Terima kasih.

  8.   gabriel dijo

    Sobat, saya sangat baru ke server lain, saya tidak tahu tetapi saya memahami subjek dan saya belajar dengan cepat, pertanyaan saya adalah berikut ini Saya memiliki 2 server serv_1 dan serv_2 yang telah saya sambungkan ke intranet yang sama, di server ini saya memiliki pengaturan awan sendiri, Saya ingin melakukan hal berikut:

    bahwa kisaran tertentu dari ips misalnya rangeip_1 ketika menempatkan ip akses ke owncloud (ipowncloud) diarahkan ke serv_1 dan jika rangeip_2 lain ditempatkan ipowncloud yang sama diarahkan ke serv_2, ini agar 2 server berada di dua kota yang berbeda dan rentang IP berbeda tetapi semuanya berada di jaringan yang sama, itu akan menjadi bagian pertama, yang kedua akan jelas adalah menyinkronkan 2 server ini sehingga mereka adalah cermin atau mereka memberi tahu saya ini untuk mengoptimalkan lebar band, tolong, jika Anda akan menjelaskan kepada saya bagaimana melakukannya langkah demi langkah untuk tidak ke mode super programmer = (

  9.   Antonio Carrizosa dijo

    Halo, permisi, saya memiliki sakelar yang bertanggung jawab atas komunikasi semua perangkat yang membentuk jaringan saya, dan setelah ini firewall dan akhirnya keluar Internet, yang terjadi adalah saya ingin pengalihan diberikan di beralih dan tidak harus menjangkau firewall kecuali layanan yang diminta adalah internet.

  10.   juan dijo

    Dengan menggunakan metode ini, bisakah Anda mengalihkan HTTPS ke HTTP?

  11.   mati dijo

    Hai, mungkin ini agak terlambat, tetapi saya ingin bertanya kepada Anda, bagaimana saya harus membuat Squid tidak mengubah IP klien ketika saya ingin terhubung ke server web di jaringan yang sama?

  12.   Lafat 32 dijo

    Jangan perlakukan aku buruk karena meminta. Bisakah ini dilakukan di Windows?

  13.   Martin dijo

    Informasi ini berguna bagi saya. Seperti biasa, kalian bisa dipercaya, ketika saya tidak bisa menemukan sesuatu dalam bahasa Inggris, saya biasanya mencari dalam bahasa Spanyol, pada kesempatan itu saya hampir selalu datang ke situs ini. Terima kasih.

  14.   Seba dijo

    Saya memiliki router 4G yang merupakan klien dari jaringan yang tidak saya kelola (jelas, saya adalah klien)… router ini adalah pintu gerbang ke jaringan jarak jauh itu melalui OpenVPN. Selain itu, router tersebut memenuhi fungsi portforwarding untuk mengakses port 80 dari server salah satu subnet di lapangan.

    Ini adalah deklarasi yang harus saya masukkan ke router sebagai aturan khusus firewall “-t nat -A POSTROUTING -j MASQUERADE”

    Terima kasih atas bantuan!