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.
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
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!
Kami juga dapat melakukan ini dari firewall yang memungkinkan penerusan port, bukan? (menerapkan aturan yang sesuai).
Ya tentu saja pada akhirnya firewall seperti Pfsense atau yang lainnya menggunakan iptables dari belakang.
Tepatnya, pfsense tidak menggunakan iptables tetapi pf, ingat bahwa di dalamnya ada bsd.
Oh benar, salahku!
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?
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?
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.
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
Secara teori ya, cara kerjanya seperti ini. Tentu, Anda harus menginstal server email dengan benar di server2 🙂
Jenis posting yang ingin kami baca, terima kasih!
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?
Info yang sangat bagus terima kasih ^ _ ^
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.
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 = (
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.
Dengan menggunakan metode ini, bisakah Anda mengalihkan HTTPS ke HTTP?
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?
Jangan perlakukan aku buruk karena meminta. Bisakah ini dilakukan di Windows?
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.
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!