Pelayar meminta https://203.0.113.10:8443, proksi menerima sambungan, dan perkhidmatan pada peer WireGuard tidak pernah membalas. Peraturan DNAT melakukan tugasnya; balasan ialah bahagian yang gagal. Ikuti paket melalui kedua-dua terjemahan dan peraturan yang hilang menjadi jelas. Pembaikan ialah satu lagi pernyataan NAT dalam hook yang betul, bukan terowong baharu.

Ikuti satu permintaan dari awal hingga akhir

Permintaan tiba pada antara muka awam proksi, dengan alamat awam klien sebagai sumber dan alamat proksi sebagai destinasi. Dalam nat PREROUTING peraturan DNAT menulis semula destinasi kepada alamat terowong peer, 10.90.0.2. Keputusan penghalaan kemudian menghantar paket keluar melalui wg0, dan laluan pemajuan lengkap.

Pada peer, paket kini membawa alamat sumber awam asal, kerana tiada apa-apa yang menulis semula alamat itu. Perkhidmatan menerima sambungan dan menghantar balasannya ke gateway lalai sendiri, iaitu penghala rumah di hadapan peer. Penghala itu tidak mempunyai keadaan untuk aliran yang tidak pernah dilihatnya dan sama ada membuang paket atau menterjemahkannya ke alamat awamnya sendiri, yang tidak akan diterima oleh klien.

Asimetri ialah keseluruhan masalah: permintaan melalui proksi, dan balasan cuba pergi terus. Penjejakan sambungan proksi hanya membantu jika balasan kembali melalui proksi, dan ia tidak boleh kembali ke sana selagi alamat sumber masih menunjuk kepada klien asal.

Tambah terjemahan balik

Tulis semula sumber aliran yang dimajukan ke alamat terowong proksi sebelum ia bertolak ke peer. Perkhidmatan kemudian membalas ke 10.90.0.1, proksi menerimanya, dan penjejakan sambungan membalikkan kedua-dua terjemahan sebelum paket kembali kepada klien.

iptables -t nat -A PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
iptables -t nat -A POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1

Peraturan POSTROUTING sengaja sempit: ia sepadan dengan destinasi yang diterjemah dan antara muka terowong, jadi ia tidak menulis semula trafik tidak berkaitan yang kebetulan keluar melalui wg0. Peraturan masquerade yang luas juga akan menyembunyikan alamat klien, tetapi ia akan melakukannya untuk setiap aliran dan menjadikan jadual NAT lebih sukar diaudit.

Letakkan peraturan di tempat terowong wujud

Peraturan yang merujuk alamat atau antara muka terowong mesti berjalan selepas wg-quick mengkonfigurasikannya. Antara muka dicipta sebelum PreUp, tetapi alamat, MTU, DNS dan laluan digunakan selepas itu, dan PostUp berjalan apabila semuanya berada di tempatnya. Letakkan penambahan dalam PostUp dan pemadaman dalam PreDown.

PostUp = iptables -t nat -A PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
PostUp = iptables -t nat -A POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1
PreDown = iptables -t nat -D PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
PreDown = iptables -t nat -D POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1

Pemadaman mesti sepadan dengan penambahan token demi token, termasuk padanan multiport dan antara muka. Pemadaman yang berbeza pada satu padanan tidak memadam apa-apa, dan sambungan semula seterusnya menambah salinan kedua peraturan itu. Selepas beberapa sambungan semula, jadual mengandungi pertindihan yang sukar dikaitkan dengan baris konfigurasi.

Semak hasilnya dengan iptables -t nat -S selepas sambungan semula. Jika peraturan yang sama muncul dua kali, baris PreDown tidak sepadan dan pembersihan gagal secara senyap.

Pemajuan, penapisan dan NAT yang lain

Dayakan pemajuan IPv4 secara kekal, kemudian benarkan aliran yang dimajukan dalam jadual penapis. DNAT berlaku sebelum rantaian FORWARD, jadi peraturan penapis sepadan dengan destinasi yang diterjemah dan bukan alamat awam. Jika UFW menguruskan tembok api, nyatakan kebenaran sebagai peraturan laluan; peraturan hos biasa tidak meliputi trafik yang dimajukan.

Dua lapisan NAT lain masih boleh memutuskan laluan walaupun peraturan proksi betul. Pada sambungan rumah, alamat awam milik penghala, dan membuka port dalam tembok apinya bukan sama dengan mencipta entri pemajuan port yang menghantar port itu kepada proksi. Port yang kelihatan terbuka dari luar sementara tiada apa-apa yang membalas selalunya kekurangan pemetaan itu.

Pada VPS NAT, penyedia memetakan port awam kepada alamat peribadi. Pemetaan mesti sepadan dengan port yang anda iklankan, dan ketidakpadanan kelihatan sama seperti terowong yang rosak. Sahkan pemetaan penyedia sebelum menukar konfigurasi WireGuard.

Sahkan laluan balik dan terima kosnya

Sambung dari rangkaian yang bukan LAN proksi, kemudian periksa pasangan terjemahan semasa sambungan terbuka:

conntrack -L -p tcp --dport 8080
tcpdump -ni any tcp port 8080

Entri conntrack sepatutnya menunjukkan tuple asal, tuple yang diterjemah dan arah balasan. Jika balasan tiada, peer tidak menghantar melalui terowong, yang biasanya bermakna peraturan SNAT tidak digunakan atau tembok api peer sendiri membuang aliran itu.

Mulakan semula sekali untuk membuktikan PostUp menggunakan semula peraturan, kemudian hentikan terowong dan sahkan PreDown telah membuangnya. Peraturan mati yang bertahan selepas pemutusan sambungan menjadi sebab perubahan kemudian berkelakuan tidak dijangka.

Akhirnya, terima kos SNAT. Perkhidmatan melihat setiap permintaan sebagai datang dari proksi, jadi log akses, had kadar setiap klien dan senarai alamat yang dibenarkan tidak lagi membezakan pengguna. Kes hairpin memerlukan terjemahan sumbernya sendiri untuk klien pada LAN proksi. Jika peer memerlukan alamat klien sebenar, alternatifnya ialah laluan balik ke rangkaian klien, yang lebih banyak kerja tetapi mengekalkan maklumat.

Artikel berkaitan