Dua jurutera dengan gateway OpenBSD yang sama selalunya memberi anda dua set peraturan berbeza untuk mencapai rangkaian jauh, dan kedua-duanya boleh dipertahankan. Pilihan antara terjemahan sumber dan laluan balik sama sekali bukan soal sintaks. Semuanya bergantung pada apa yang sisi jauh sudah tahu tentang 192.168.88.0/24 dan apa yang perlu anda simpan dalam log. Jika silap di sini, baris nat-to akan kelihatan sempurna sementara balasan hilang ke gateway lalai jauh.

Penghalaan dan penulisan semula menjawab soalan berbeza

Jadual penghalaan memutuskan bahawa 172.20.0.0/16 boleh dicapai melalui tun0, dan keputusan itu dibuat sebelum sebarang terjemahan pf dirujuk. Terjemahan sumber kemudian mengubah pengepala paket supaya hujung jauh melihat alamat terowong gateway dan bukan hos LAN. Tiada mekanisme menggantikan yang lain: peraturan nat tidak boleh mencipta laluan, dan laluan tidak boleh meyakinkan penghala jauh yang tidak pernah mendengar tentang subnet peribadi anda. Apabila sisi jauh tiada laluan balik, balasan digugurkan atau dihantar ke gateway lalainya, dan tiada pelarasan peraturan dapat membaikinya.

Secara mudah, penghantaran menjawab ke mana trafik pergi dan terjemahan menjawab dari mana ia kelihatan datang. Simpan kedua-duanya dalam kotak mental yang berasingan semasa anda mereka bentuk set peraturan.

Tiga syarat yang menentukan

Tanya tiga soalan mengikut urutan dan reka bentuk biasanya memilih dirinya sendiri. Adakah rangkaian jauh mempunyai laluan statik yang menunjuk ke alamat terowong untuk 192.168.88.0/24, atau pentadbirnya mengawal penghala pada laluan itu? Jika ya, biarkan alamat LAN bergerak tanpa diubah dan langkau terjemahan sepenuhnya. Adakah anda memerlukan keterlihatan setiap klien di sisi jauh, sama ada untuk dasar akses atau jejak audit? Jika ya, memelihara sumber itu berbaloi dengan kerja penghalaan. Adakah alamat terowong cukup stabil untuk ditulis dalam laluan jauh, atau ia berubah antara sambungan semula?

Jika mana-mana jawapan ialah tidak atau tidak diketahui, nat-to ialah pilihan pragmatik, dan ia juga boleh diterbalikkan. Peraturan terjemahan keluar dalam satu baris sebaik sisi jauh menambah laluan yang wajar. Laluan balik yang tidak pernah dipasang menyebabkan anda mengurus satu bebenang sokongan setiap kali seseorang bertanya mengapa terowong hanya berfungsi satu arah.

Letakkan fragmen supaya pf benar-benar menilainya

Fragmen di bawah menganggap LAN ialah 192.168.88.0/24, rangkaian jauh ialah 172.20.0.0/16, dan antara muka terowong ialah tun0. Tiada apa-apa di dalamnya memilih hop seterusnya. Ia hanya menulis semula sumber pada paket yang sudah keluar melalui terowong.

match out on tun0 inet from 192.168.88.0/24 to 172.20.0.0/16 nat-to (tun0)
pass in on em0 inet from 192.168.88.0/24 to any keep state

Dua butiran dalam baris pertama itu membawa sebahagian besar beban. Tanda kurung di sekeliling tun0 memberitahu pf untuk membaca alamat antara muka setiap kali ia membina entri keadaan, yang penting apabila terowong dinomborkan semula selepas sambungan semula. Perkataan match bermaksud peraturan itu menulis semula dan kemudian jatuh ke bawah, jadi peraturan pass berasingan masih perlu menerima aliran. Antara muka yang dinamakan dalam baris match juga mesti yang dipilih oleh jadual penghalaan, jika tidak pf menilai peraturan pada laluan keluar yang berbeza daripada yang paket benar-benar lalui.

Jangan lupa sisi kernel. Penghantaran IPv4 mesti diaktifkan, dan peraturan pass stateful untuk terowong dan LAN mesti wujud sebelum semua ini bermakna. Bahagian PF NAT dalam FAQ OpenBSD ialah rujukan yang betul untuk susunan kata kunci di sini.

Sahkan set peraturan sebelum anda mempercayai trafik

Periksa sintaks dahulu dengan pfctl -nf /etc/pf.conf, yang menghurai fail tanpa memuatkannya. Kemudian muatkan dasar dan baca semula apa yang sebenarnya dipegang kernel, kerana peraturan yang dihurai bersih masih boleh dilindungi atau dilekatkan pada antara muka yang salah. pfctl -sn mencetak peraturan terjemahan dalam bentuk dimuatkan, dan pfctl -sr mencetak peraturan penapis mengikut urutan penilaian.

Seterusnya perhatikan wayar. Pada gateway, tcpdump -ni tun0 'host 172.20.0.10' menunjukkan sama ada alamat sumber yang keluar dari terowong ialah alamat terowong atau hos LAN. netstat -rn -f inet yang pantas mengesahkan antara muka mana destinasi diselesaikan. Sebaik trafik mengalir, pfctl -ss menyenaraikan entri keadaan; jika aliran tidak menghasilkan keadaan, paket itu tidak pernah sepadan dengan peraturan yang menciptanya.

Jika sisi terowong kelihatan betul dan balasan masih tidak tiba, berhenti menyunting pf. Kegagalan yang tinggal terletak pada penghala jauh, di mana balasan dihantar ke alamat peribadi yang tidak dapat dicapai oleh sisi itu.

Apabila terjemahan lebih mahal daripada penjimatannya

Terjemahan menyembunyikan klien, dan kadang-kadang itulah pertukaran yang salah. Subnet bertindih ialah satu kes: jika sisi jauh juga menggunakan 192.168.88.0/24 secara dalaman, memaparkan hos LAN sebagai gateway menjadikan perlanggaran lebih buruk dan bukan lebih baik. Dasar IPsec yang memilih trafik mengikut pasangan alamat ialah satu lagi kes, kerana pangkalan data dasar keselamatan dipadankan sebelum terjemahan dan tidak pernah melihat paket yang anda tulis semula. Mana-mana penggunaan yang mengenakan bayaran, mengehadkan atau mengaudit setiap pengguna juga kehilangan identiti yang diperlukannya pada saat sumber runtuh menjadi satu alamat.

Terbitan pf mudah alih ialah perangkap berasingan. Produk yang menjana fail peraturan sendiri menjangkakan NAT dikonfigurasikan melalui antara muka mereka, dan fragmen yang disunting tangan akan ditimpa pada muat semula seterusnya. Set peraturan yang disalin daripada panduan yang ditulis sebelum kata kunci match wujud tidak akan dimuatkan pada kernel semasa, jadi port sintaksnya dan baca ralat dan bukan meneka.

Peraturan keputusan yang bertahan dalam berhadapan dengan rangkaian sebenar adalah pendek: pasang laluan balik apabila anda boleh, terjemahkan apabila anda tidak boleh, dan catat syarat mana antara tiga yang membuat anda memilih. Nota itu menjimatkan satu petang bagi orang seterusnya.

Artikel berkaitan