Terbitkan port klien VPN dari belakang CGNAT: senarai semak
Peraturan NAT destinasi sahaja memberi sambungan separuh terbuka. Kunci alamat terowong, terjemah dalam kedua-dua arah dan sahkan laluan balasan sebelum menguji.
Letakkan perkhidmatan pada komputer riba di belakang NAT gred pembawa, halakan komputer riba itu ke VPS melalui VPN, dan tiada sesiapa di luar dapat mencapainya. Anda menambah peraturan NAT destinasi pada VPS dan mendapat sesuatu yang lebih buruk daripada senyap: sambungan terbuka, kemudian tersekat. Balasan tidak hilang, ia keluar melalui laluan lalai klien itu sendiri, yang bermaksud pelayan tidak pernah melihatnya. Lakukan kelima-lima pemeriksaan ini mengikut urutan dan berhenti pada yang pertama tidak bertahan.
Sahkan pelayan akan memajukan sama sekali
Tandakan kotak ini sebelum menulis satu terjemahan pun. Peraturan DNAT untuk paket yang enggan dimajukan oleh kernel diterima oleh penghurai peraturan dan kemudian digugurkan oleh laluan pemajuan, yang menghasilkan tamat masa yang kelihatan seperti masalah tembok api.
sysctl net.ipv4.ip_forward
sysctl -w net.ipv4.ip_forward=1
Menetapkannya dalam kernel yang sedang berjalan bukan sama dengan menetapkannya merentas but semula. Tulis net.ipv4.ip_forward=1 ke dalam fail di bawah /etc/sysctl.d/, jalankan sysctl --system, kemudian baca semula nilainya dan bukan mempercayai fail itu telah diambil. Kontena yang menguruskan ruang nama rangkaiannya sendiri memerlukan nilai yang sama di dalam ruang itu, bukan hanya pada hos.
Jika bacaan semula masih sifar, berhenti di sini. Tiada apa-apa di bawah akan berfungsi.
Kunci alamat terowong sebelum mana-mana peraturan merujuknya
Kolam mengagihkan alamat mengikut urutan sambungan, jadi peraturan yang ditulis untuk pajakan hari ini boleh menunjuk secara senyap kepada klien lain minggu depan. Ikat alamat itu kepada identiti sijil dan bukan kepada urutan ketibaan.
client-config-dir /etc/openvpn/ccd
ifconfig-push 10.77.0.14 10.77.0.13
Pasangan itu ialah hujung klien dan hujung rakan bagi terowong titik ke titik, dengan pelayan dikunci pada nama umum sijil. Dalam topologi subrangkaian nilai kedua dibaca sebagai topeng rangkaian, jadi tulis bentuk yang sepadan dengan topologi yang digunakan. Kemudian sambung semula klien dan baca alamat itu pada klien itu sendiri, kerana pandangan pelayan tentang kolam bukan bukti apa yang dikonfigurasikan oleh klien.
Jika alamat berubah selepas sambungan semula, berhenti. Peraturan NAT yang mengikut sasaran bergerak akan gagal secara berkala dan tidak mengajar anda apa-apa.
Terjemah dalam kedua-dua arah
Terjemahan destinasi menghantar paket masuk kepada klien. Terjemahan sumber ialah yang membuat klien menjawab pelayan dan bukan penghantar asal, dan itulah peraturan yang orang terlepas pandang.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 29443 -j DNAT --to-destination 10.77.0.14:29443
iptables -t nat -A POSTROUTING -d 10.77.0.14 -p tcp --dport 29443 -j SNAT --to-source 10.77.0.13
Tanpa peraturan kedua klien menjawab melalui pautan atas ISPnya, jadi rakan jauh melihat alamat sumber yang tidak pernah diajaknya bercakap, manakala pelayan tidak menyimpan sebarang entri penjejakan untuk balasan. Pemerhati luar melihat jabat tangan yang selesai separuh, dan itulah tepatnya simptom yang membuat orang mencari pepijat tembok api yang tidak wujud.
Baca semula kedua-dua peraturan dengan iptables -t nat -S dan sahkan nama antara muka ialah yang membawa alamat awam. Pada hos yang sudah menapis dengan nftables, tulis terjemahan dalam rantai NAT nftables bagi keluarga alamat yang sepadan dan bukan mencampurkan alat.
Biarkan jadual penapis melalui
Jadual NAT menulis semula pengepala; ia tidak memberi kebenaran. Dengan dasar DROP lalai aliran yang dimajukan memerlukan penerimaannya sendiri, tambah arah balik yang sudah diliputi oleh kebanyakan dasar dengan peraturan established,related.
iptables -A FORWARD -i eth0 -o tun0 -p tcp --dport 29443 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Semak dasar rantai FORWARD sebelum menambah apa-apa, kerana urutan DROP awal menentukan sama ada peraturan anda pernah dirujuk. Pada hos yang penapisannya tinggal dalam nftables, tambah peraturan setara pada cangkuk forward jadual inet dan sahkan rantai asas benar-benar melihat trafik yang dimajukan dan bukan hanya input setempat. Jika pembilang paket pada peraturan baharu kekal sifar manakala pembilang NAT naik, paket itu digugurkan sebelum peraturan anda. Itulah isyarat untuk membaca urutan rantai, bukan untuk menambah salinan kedua peraturan yang sama.
Buktikan dari rangkaian luar
Uji dari rangkaian yang tidak berkaitan. Siasatan dari mesin lain pada LAN yang sama boleh melalui sokongan NAT jepit rambut dan tidak pernah menggunakan laluan yang dipakai oleh klien jauh, jadi keputusan hijau di sana membuktikan perkara yang salah.
tcpdump -ni any port 29443
conntrack -L | grep 29443
Jalankan tangkapan pada pelayan dan pada klien serentak. Tangkapan pelayan menunjukkan sama ada paket yang diterjemah keluar menuju terowong; tangkapan klien menunjukkan sama ada permintaan tiba dan ke mana balasan dialamatkan. Entri terjemahan dalam conntrack -L membuktikan peraturan sepadan, dan ketiadaannya membuktikan paket itu tidak pernah sampai ke rantai NAT.
Pengimbas port ialah bukti lemah. Mereka melaporkan port sebagai tertutup sehingga aplikasi terikat dan mendengar, jadi gunakan sambungan sebenar ke perkhidmatan sebenar. Apabila ia akhirnya berfungsi, kekalkan pendedahan pada satu port itu: memajukan SSH atau panel pentadbir kerana peraturan pertama terasa janggal ialah keputusan yang jauh lebih besar daripada menerbitkan perkhidmatan.