Saya harus bisa mendapatkan salinan paket yang diterima pada port 8001 ke port 8002. Saya telah mencoba yang berikut ini tetapi saya mendapatkan kesalahan bahwa --tee tidak terdefinisi.
sudo iptables -t nat -A PREROUTING -p TCP -s 127.0.0.1 --sport 8001 -j DNAT --to-destination 127.0.0.1:8002 --tee
iptables
mungkin terlalu tua; lihat Mengirim paket duplikat melalui dua koneksi Internet.Jawaban:
The
--tee
bendera bukan bagian dari rantai DNAT, itu adalah bagian dari ROUTE. Anda hanya dapat menggunakannya setelah deklarasi-j ROUTE
. Anda bisa mendapatkan bantuan khusus dari iptables pada subjek seperti ini:Saya melihat perintah iptables Anda, dan itu tidak masuk akal bagi saya. Mengapa Anda mencoba mencocokkan dengan sumber dan port sumber paket ketika dalam pertanyaan Anda Anda mengatakan "paket diterima di port"? Apakah Anda mencoba membagi lalu lintas masuk untuk menekan dua port atau mengambil output dari satu port dan mengikatnya ke input yang lain?
Jika yang pertama, benar-benar ada dua langkah. Anda tidak dapat menggunakan tee untuk mendapatkan salinan paket DAN memotong-motong paket untuk mengubah nomor port secara bersamaan. Anda dapat mencoba ini dalam dua langkah, pertama mengirimkan salinan paket yang duplikat kepada diri Anda, kemudian hanya mencocokkan salinannya dan merusak port tujuan. PERINGATAN: belum diuji, pertimbangkan kode semu ini:
sumber
ROUTE
Target yang digunakan dalam jawaban di atas sudah usang pada tulisan ini dan tidak tersedia di iptables di distro terbaru. Lihat serverfault.com/questions/333155/…Selanjutnya untuk jawaban Caleb , jika Anda bekerja dengan yang lebih baru
iptables
(v1.4.14) yang tidak lagi memilikiROUTE
target, Anda akan memerlukan sesuatu seperti yang berikut, diuji pada Debian Wheezy *:Tes menggunakan "netcat" (
man nc
). Di jendela terminal, ketikkan untuk mengikuti dan tekanEnter
tombol:Perintah akan menunggu input yang akan Anda ketik di jendela terminal kedua.
Di jendela terminal kedua ketik yang berikut ini dan tekan
Enter
tombol:Perintah akan menunggu input lebih lanjut. Ketikkan apa saja dan tekan
Enter
tombol. Setelah Anda menekanEnter
tombol di jendela terminal kedua, teks yang Anda ketik di jendela terminal kedua akan muncul di jendela terminal pertama. TekanCtrl
-c di jendela kedua untuk mengakhiri sesi.* Sintaks ini tidak didukung di RHEL / Centos (6.5 atau lebih awal) :-( jadi Anda perlu menggunakan
socat
untuk tee dan meneruskan paket masuk pada port asli ke dua port baru. Jika Anda memiliki proses mendengarkan pada port penerima asli maka Anda perlu mengkonfigurasi ulang mereka untuk mendengarkan pada salah satu port tee'd sepertisocat
sekarang pendengar pada port asli. Lihat posting SE ini misalnyasocat
sintaks untuk kloning port.sumber
nc -l -p 8002