Dua klien VPN, dua alamat awam: selaraskan SNAT
SNAT mengikut sumber boleh memilih alamat awam, tetapi hanya selagi gateway masih dapat membezakan klien. Periksa sumber yang tinggal sebelum menulis peraturan.
Dua klien VPN boleh keluar melalui dua alamat IPv4 awam yang berbeza, dan peraturan yang melakukannya lebih pendek daripada yang dijangka kebanyakan orang. Yang membuatnya berkesan bukan sintaks iptables tetapi keadaan paket apabila ia sampai ke rantaian keluar: alamat sumber di situ masih perlu membezakan klien. Jika masquerade terdahulu telah menggabungkan kedua-duanya pada satu alamat, tiada peraturan per klien dapat memulihkan perbezaan itu. Selesaikan dahulu persoalan itu, kemudian tulis terjemahan.
Identiti mana yang bertahan sehingga gateway
Peraturan memadankan alamat sumber paket, bukan nama pengguna VPN dan bukan nama yang dipaparkan aplikasi klien. Semua yang menterjemah paket lebih awal di laluan menentukan apa yang masih boleh dilihat oleh peraturan anda. Jalankan jadual nat mengikut urutan dan cari titik di mana sumber masih per klien.
iptables -t nat -S POSTROUTING
Baca senarai itu dari atas. Peraturan masquerade berhampiran bahagian atas menulis semula sumber bagi setiap aliran yang sepadan, dan entri per klien yang diletakkan selepasnya memadankan alamat yang tidak lagi wujud. Apabila dua peranti LAN berkongsi satu terowong dan tiba sebagai satu alamat dalaman, reka bentuk mesti berubah sebelum firewall: kekalkan julat sumber mereka berasingan atau beri setiap satu alamat dalamannya sendiri.
Ikat penetapan alamat dalaman kepada klien yang disahkan. Menyerahkan alamat itu kepada peranti lain menyerahkan dasar keluar bersamanya, dan terjemahan sumber bukan bukti identiti dengan sendirinya.
Terjemahan tidak boleh mencipta alamat
Setiap alamat awam mesti ditetapkan atau dihalakan ke titik keluar ini, dan balasan mesti menemui jalan kembali ke sana. Peraturan yang menghantar trafik dari alamat yang tiada sesiapa menghalakan balik akan digugurkan di hujung jauh atau dibalas kepada hos yang tidak pernah memintanya. Instans penyedia awan biasanya telah menterjemah alamat awamnya ke alamat antara muka peribadi sebelum paket keluar, jadi sumber SNAT mesti alamat yang akan diterima penyedia, bukan nilai yang ditunjukkan konsol. Baca model alamat penyedia dan ikutinya dan bukannya menyalin nilai awam ke dalam setiap paket.
Dalam amalan ini bermakna memeriksa awalan yang dihalakan dalam konsol penyedia sebelum menyentuh firewall, dan menggunakan alamat antara muka peribadi sebagai sumber terjemahan apabila pemetaan adalah satu-ke-satu. Alamat yang digunakan dalam contoh di bawah datang daripada julat dokumentasi, jadi perkara pertama yang perlu diganti ialah teks alamat itu sendiri.
Sisipkan sebelum masquerade umum
Sahkan antara muka keluar dan rantaian semasa sebelum menambah apa-apa. Yang pertama menentukan paket mana yang boleh dipadankan oleh peraturan, dan yang kedua menunjukkan apa yang sudah berdiri di hadapannya.
ip -4 route show default
iptables -t nat -L POSTROUTING -n -v --line-numbers
Perintah pertama menamakan antara muka yang benar-benar dilalui paket ke internet. Perintah kedua mencetak rantaian dengan nombor baris. Entri masquerade umum ialah baris yang perlu anda kekal 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 peraturan di atas memadankan satu alamat dalaman setiap satu, mengehadkan padanan kepada antara muka keluar dan menetapkan sumber secara eksplisit. Sisipkan dan bukan tambah: pada kedudukan 1 kedua-duanya dinilai sebelum baris masquerade. Urutan antara keduanya tidak penting kerana sumbernya berbeza. Gantikan ens3 dengan apa yang dilaporkan perintah laluan, dan jauhkan pengurus firewall lain daripada cangkuk yang sama, kerana dua alat menulis satu jadual ialah sebab biasa peraturan yang betul tidak berkesan.
Buktikan sumber dengan aliran baharu
NAT stateful mengikat terjemahan apabila aliran bermula dan menggunakannya semula untuk paket kemudian, jadi sesi yang dibuka sebelum perubahan mengekalkan sumber lamanya selepas perubahan. Hanya sambungan yang baru dimulakan membuktikan peraturan itu.
conntrack -L -s 10.88.4.20 -p tcp --dport 443
Baca arah balasan entri itu: destinasinya ialah alamat yang dilihat oleh hujung jauh sebagai sumber. Bandingkan dengan alamat awam yang anda maksudkan, dan anggap entri yang membawa alamat lama sebagai bukti aliran yang bermula terlalu awal, bukan peraturan yang rosak. Minta klien membuka sambungan baharu, kemudian ulangi pertanyaan. Mengosongkan seluruh jadual penjejakan untuk memaksa ujian mengganggu setiap sesi lain pada gateway.
Terjemahan masih tidak memilih laluan, tidak meloloskan aliran melalui penapis dan tidak menerbitkan perkhidmatan masuk. Laluan yang salah dan peraturan kebenaran yang hilang terus gagal selepas peraturan SNAT yang sempurna. Periksa juga IPv6 dan mana-mana laluan keluar sekunder, kemudian catat pasangan dalaman-ke-awam dalam dokumentasi firewall supaya perubahan seterusnya bermula daripada pemetaan dan bukan daripada teks peraturan.