Dua klien VPN dapat keluar melalui dua alamat IPv4 publik yang berbeda, dan aturan yang melakukannya lebih pendek daripada yang diduga kebanyakan orang. Yang membuatnya berhasil bukan sintaks iptables melainkan keadaan paket saat mencapai rantai keluar: alamat sumber di sana masih harus membedakan klien. Jika masquerade sebelumnya sudah menyatukan keduanya ke satu alamat, tidak ada aturan per klien yang dapat memulihkan perbedaan itu. Selesaikan dulu pertanyaan itu, lalu tulis terjemahannya.

Identitas mana yang bertahan sampai gateway

Aturan mencocokkan alamat sumber paket, bukan nama pengguna VPN dan bukan nama yang ditampilkan aplikasi klien. Semua yang menerjemahkan paket lebih awal di jalur menentukan apa yang masih dapat dilihat aturan Anda. Jalankan tabel nat secara berurutan dan temukan titik saat sumber masih per klien.

iptables -t nat -S POSTROUTING

Baca daftar itu dari atas. Aturan masquerade di dekat bagian atas menulis ulang sumber untuk setiap aliran yang cocok, dan entri per klien yang diletakkan setelahnya mencocokkan alamat yang sudah tidak ada. Ketika dua perangkat LAN berbagi satu terowongan dan tiba sebagai satu alamat internal, desainnya harus berubah sebelum firewall: pertahankan rentang sumber mereka tetap terpisah atau beri masing-masing alamat internalnya sendiri.

Ikat penetapan alamat internal ke klien yang terautentikasi. Menyerahkan alamat itu ke perangkat lain berarti menyerahkan kebijakan keluar bersamanya, dan penerjemahan sumber bukan bukti identitas dengan sendirinya.

Penerjemahan tidak dapat mengarang alamat

Setiap alamat publik harus ditetapkan atau dirutekan ke titik keluar ini, dan balasannya harus menemukan jalan kembali ke sana. Aturan yang mengirim lalu lintas dari alamat yang tidak dirutekan balik oleh siapa pun akan dibuang di ujung jauh atau dijawab ke host yang tidak pernah memintanya. Instans penyedia cloud biasanya sudah menerjemahkan alamat publiknya ke alamat antarmuka privat sebelum paket keluar, jadi sumber SNAT harus alamat yang akan diterima penyedia, bukan nilai yang ditampilkan konsol. Baca model alamat penyedia dan ikuti, bukan menyalin nilai publik ke setiap paket.

Dalam praktiknya itu berarti memeriksa prefiks yang dirutekan di konsol penyedia sebelum menyentuh firewall, dan memakai alamat antarmuka privat sebagai sumber penerjemahan ketika pemetaannya satu-ke-satu. Alamat yang dipakai dalam contoh di bawah berasal dari rentang dokumentasi, jadi hal pertama yang harus diganti adalah teks alamatnya sendiri.

Sisipkan sebelum masquerade umum

Konfirmasikan antarmuka keluar dan rantai saat ini sebelum menambahkan apa pun. Yang pertama menentukan paket mana yang dapat dicocokkan aturan, dan yang kedua menunjukkan apa yang sudah berdiri di depannya.

ip -4 route show default
iptables -t nat -L POSTROUTING -n -v --line-numbers

Perintah pertama menyebut antarmuka yang benar-benar dilalui paket menuju internet. Perintah kedua mencetak rantai dengan nomor baris. Entri masquerade umum adalah baris yang harus Anda tetap di atasnya.

iptables -t nat -I POSTROUTING 1 -s 10.88.4.20/32 -o ens3 -j SNAT --to-source 198.51.100.77
iptables -t nat -I POSTROUTING 1 -s 10.88.4.21/32 -o ens3 -j SNAT --to-source 198.51.100.78

Dua aturan di atas masing-masing mencocokkan satu alamat internal, membatasi kecocokan ke antarmuka keluar, dan menetapkan sumber secara eksplisit. Sisipkan, bukan tambahkan: pada posisi 1 keduanya dievaluasi sebelum baris masquerade. Urutan antara keduanya tidak penting karena sumbernya berbeda. Ganti ens3 dengan apa yang dilaporkan perintah rute, dan jauhkan pengelola firewall lain dari kait yang sama, karena dua alat menulis satu tabel adalah alasan biasa aturan yang benar tidak berefek.

Buktikan sumber dengan aliran baru

NAT stateful mengikat penerjemahan saat aliran dimulai dan memakainya lagi untuk paket berikutnya, sehingga sesi yang dibuka sebelum perubahan mempertahankan sumber lamanya setelah perubahan. Hanya koneksi yang baru dimulai yang membuktikan aturan.

conntrack -L -s 10.88.4.20 -p tcp --dport 443

Baca arah balasan entri itu: tujuannya adalah alamat yang dilihat ujung jauh sebagai sumber. Bandingkan dengan alamat publik yang Anda maksudkan, dan perlakukan entri yang membawa alamat lama sebagai bukti aliran yang dimulai terlalu awal, bukan aturan yang rusak. Mintalah klien membuka koneksi baru, lalu ulangi kueri. Mengosongkan seluruh tabel pelacakan untuk memaksa pengujian mengganggu setiap sesi lain di gateway.

Penerjemahan tetap tidak memilih rute, tidak meloloskan aliran melalui filter, dan tidak menerbitkan layanan masuk. Rute yang salah dan aturan izin yang hilang tetap gagal setelah aturan SNAT yang sempurna. Periksa juga IPv6 dan jalur keluar sekunder mana pun, lalu catat pasangan internal-ke-publik di dokumentasi firewall agar perubahan berikutnya mulai dari pemetaan, bukan dari teks aturan.

Artikel terkait