iptables target SNAT dan paket TCP ACK

1

Saya perlu membuat koneksi TCP di mana klien spoofing IP-nya untuk semua lalu lintas keluar. Upaya pertama saya adalah menambahkan aturan ke rantai POSTROUTING seperti:

iptables -t nat -A POSTROUTING -p tcp --dport 5555 -j SNAT --to-source 192.168.1.1

Ini berfungsi untuk paket SYN, tetapi tidak menangkap dan menulis ulang ACK yang berasal dari klien. Pemahaman saya adalah ini karena ACK hanya melewati rantai OUTPUT, tidak pernah mengenai POSTROUTING. Upaya saya berikutnya adalah menggunakan xtables-addons dan melakukan SNAT mentah seperti:

iptables -t raw -A OUTPUT -p tcp --dport 5555 -j RAWSNAT --to-source 192.168.1.1

iptables memberi saya kesalahan pada perintah ini berdasarkan target. Saya percaya ini didasarkan pada target karena -J DROP dan -j MENERIMA keduanya bekerja. Halaman manual secara khusus mengatakan bahwa RAWSNAT valid dalam rantai OUTPUT dan saya telah memverifikasi bahwa modul xt_nat.ko dimuat ....

Adakah yang memiliki wawasan tentang apa yang terjadi dengan RAWSNAT atau memiliki cara untuk mendapatkan SEMUA lalu lintas koneksi keluar untuk melewati rantai POSTROUTING di tabel nat? Saya belum dapat mengetahui apakah MARK atau CONNMARK dapat membantu saya di sini berdasarkan dokumentasi yang telah saya baca.

bryophyte
sumber
Tidak yakin apa sebenarnya use case Anda, tetapi "spoofing IPs untuk aplikasi lokal" mungkin tidak bekerja seperti ini. NAT tidak dapat secara sewenang-wenang menulis ulang hal-hal (meskipun saya berharap bisa). Pertimbangkan untuk menggunakan namespace jaringan, baik untuk aplikasi; atau untuk proses penyamaran, dan mengirim semuanya melalui itu. Dan saya juga pernah membaca bahwa SNAT dulu bekerja di rantai OUTPUT, tapi saya merasa tidak lagi.
dirkt

Jawaban: