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.
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
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!
20 komen, tinggalkan komen anda
Kita juga boleh melakukan ini dari firewall yang membolehkan pemajuan port, bukan? (menggunakan peraturan yang sesuai).
Ya tentu saja, pada akhirnya firewall seperti Pfsense atau yang lain, gunakan iptables dari belakang.
Tepatnya, pfsense tidak menggunakan iptables tetapi pf, ingat bahawa itu adalah bsd di dalamnya.
Oh betul, buruk saya!
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?
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?
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.
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
Secara teori ya, ia berfungsi seperti ini. Sudah tentu, anda mesti memasang pelayan mel dengan betul pada pelayan2 🙂
Jenis catatan yang kami suka baca, terima kasih!
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?
Maklumat yang sangat baik terima kasih ^ _ ^
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.
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 = (
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.
Dengan menggunakan kaedah ini dapatkah anda mengarahkan HTTPS ke HTTP?
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?
Jangan melayan saya dengan buruk kerana bertanya. Bolehkah ini dilakukan di Windows?
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.
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!