eth0:0 ialah label, bukan peranti: betulkan padanan SNAT
Pembilang sifar bermakna peraturan menamakan antara muka yang tidak mungkin wujud. Baca peranti sebenar, betulkan padanan -o, kemudian pilih alamat terjemahan dengan sengaja.
Peraturan NAT yang sepatutnya memberi satu kumpulan klien VPN alamat awamnya sendiri masih pada sifar paket, manakala kumpulan yang sama terus keluar dengan sumber yang salah. Peraturan biasanya tidak silap tentang alamat; ia silap tentang antara muka. -o eth0:0 merujuk peranti yang tidak wujud, kerana eth0:0 ialah label yang dilekatkan pada alamat di eth0. Melihat pembilang ialah cara terpantas untuk mengesahkannya, dan pembetulannya lebih kecil daripada yang disyorkan oleh siasatan.
Periksa apa yang kernel panggil peranti itu
Baca kedua-dua paparan secara berasingan sebelum mengubah apa-apa:
ip link show
ip address show dev eth0
ip route get 203.0.113.20
Senarai pautan menunjukkan antara muka. Senarai alamat mungkin menunjukkan alamat IPv4 kedua yang membawa label eth0:0, dan peranti untuk alamat itu masih eth0. Manual alamat iproute2 menganggap label sebagai nama alamat, bukan pautan kedua, dan itulah perbezaan yang menjadi tunjang seluruh masalah.
Sejarah menjelaskan kekeliruan itu. Sintaks lama ifconfig eth0:0 memang kelihatan seperti antara muka baharu, dan skrip dari zaman itu masih merujuk kepadanya. Pada sistem masa kini, alias ialah label pada alamat, dan tiada apa dalam laluan penghalaan atau netfilter menganggapnya sebagai titik keluar berasingan.
Periksa apa yang sebenarnya dipadankan oleh peraturan
Baca pembilang bersama senarai peraturan, bukan dari ingatan:
iptables -t nat -L POSTROUTING -v -n --line-numbers
Peraturan yang pembilang paketnya kekal sifar semasa trafik yang sepadan mengalir tidak dinilai, dan syarat antara muka keluaran yang menamakan eth0:0 ialah punca biasa. Peranti keluaran yang dipilih oleh laluan ialah eth0, jadi syarat yang mencari nama lain tidak pernah menjadi benar, walau apa pun alamat sumber yang dipilih kernel.
Tukar syarat kepada peranti sebenar dan tinggalkan label di luarnya. Jika anda perlu membezakan dua kumpulan klien yang berkongsi peranti itu, bezakan mengikut awalan sumber, bukan mengikut nama antara muka yang tidak mungkin wujud. Dua peraturan dengan padanan -s yang tidak bertindih boleh dibaca dan diuji; satu peraturan dengan peranti rekaan bukan kedua-duanya. Beri setiap peraturan komen yang menamakan kumpulan itu, kerana enam bulan dari sekarang awalan sahaja tidak akan memberitahu sesiapa mengapa ia ada di situ.
Periksa laluan yang memilih peranti itu
NAT postrouting berjalan selepas laluan telah memilih antara muka keluaran, jadi antara muka dalam peraturan mesti yang dipilih oleh laluan. Tanya kernel secara terus dengan ip route get untuk alamat klien yang mewakili dan baca kedua-dua peranti dan sumber yang dilaporkannya.
Jika jawapan menamakan eth0, bahagian antara muka peraturan itu sudah selesai. Jika ia menamakan peranti terowong, paket tidak pernah sampai ke peraturan yang anda sunting, dan carian beralih ke jadual penghalaan serta keutamaannya. Peraturan yang tidak pernah sepadan kerana paket keluar di tempat lain kelihatan sama dalam output pembilang seperti peraturan dengan peranti yang salah eja. Sahkan yang mana antara dua keadaan itu anda hadapi sebelum menyunting apa-apa, kerana yang kedua memerlukan perubahan penghalaan, bukan perubahan teks.
Pilih sumber terjemahan dengan sengaja
Setelah peranti betul, alamat sumber ialah keputusan berasingan. Ini hanyalah kumpulan IPv4 ilustratif dan alamat contoh:
iptables -t nat -A POSTROUTING -s 10.8.1.0/24 -o eth0 \
-j SNAT --to-source 203.0.113.20
Menulis alamat ke dalam --to-source tidak menyebabkan sesiapa menghalakan ia kembali kepada anda. Penyedia huluan atau pemilik alamat mesti menyampaikan balasan untuk alamat itu ke hos ini, dan alamat itu mesti salah satu yang anda dibenarkan gunakan. Jika tidak, peraturan akan sepadan dan menterjemah dan balasan tetap pergi ke tempat lain.
Menukar alamat sumber bukanlah sama dengan menukar pautan huluan. Apabila keperluan sebenar ialah laluan fizikal yang berbeza, dasar penghalaan mesti memilih laluan itu dahulu; SNAT kemudian menulis semula sumber pada peranti yang dipilih oleh dasar itu. Menambah lebih banyak label pada eth0 tidak memberikan laluan mahupun kebenaran.
Sahkan dengan sambungan yang baru anda buka
Buka sambungan klien baharu daripada menggunakan semula yang sedia ada. Penjejakan sambungan menyimpan terjemahan yang direkodkannya semasa aliran bermula, jadi sesi lama boleh terus menggunakan alamat sumber sebelumnya dan membuat peraturan baharu yang betul kelihatan rosak. Perhatikan pembilang meningkat, kemudian perhatikan sumber terjemahan pada wayar atau di hujung jauh.
Untuk beberapa kumpulan yang berkongsi satu antara muka, beri setiap satu padanan sumber yang jelas dan alamat terjemahannya sendiri, simpan dalam konfigurasi terurus tembok api dan catat urutan ia dinilai. Kemudian catat apa yang anda sahkan: peranti daripada ip route get, pembilang yang bergerak, dan sumber yang dilihat oleh sisi jauh. Catatan itu menjawab laporan seterusnya tanpa mengulangi kekeliruan label.