Tunnel penuh OpenVPN memutuskan sesi SSH anda: betulkan laluan balasan
Laluan lalai menghantar balasan SSH ke dalam tunnel. Pin peer, tapis redirect-gateway atau halakan mengikut sumber sebelum kehilangan mesin.
Menghidupkan klien OpenVPN tunnel penuh pada mesin yang anda capai melalui SSH boleh memutuskan sesi dalam satu saat, dan mesin itu tidak melakukan apa-apa yang salah. Tunnel tidak mengubah cara paket sampai ke pelayan; ia mengubah cara balasan keluar. Sebaik sahaja laluan lalai menunjuk ke tun0, balasan kepada klien SSH anda masuk ke rangkaian penyedia, yang tidak mempunyai laluan kembali ke alamat anda. Sambungan tergantung, cubaan seterusnya tamat masa, dan daemon terus mendengar pada port 22 sepanjang masa.
Baca jadual penghalaan sebelum anda membaca log VPN. Log akan mengatakan tunnel telah naik, dan ia betul. Persoalannya ialah antara muka mana setiap balasan diserahkan, dan itu ialah carian setiap paket dalam jadual yang baru ditulis semula oleh tunnel.
Mengapa balasan keluar melalui pintu yang salah
Paket masuk masih tiba pada antara muka fizikal, kerana klien VPN tidak boleh mengubah cara internet sampai ke alamat awam pelayan anda. Balasan ialah keputusan berasingan: bagi setiap paket, kernel mencari destinasi, dan selepas --redirect-gateway entri lalai berkata tunnel. Keluar penyedia melihat destinasi yang tidak dilayaninya dan menggugurkan paket itu.
Perlindungan OpenVPN sendiri meliputi tepat satu destinasi. Panduan 2.6 menerangkan --redirect-gateway sebagai urutan: ia menambah laluan hos untuk peer VPN melalui gerbang yang digunakan sebelum tunnel, supaya trafik tersulit tidak boleh berpusing kembali ke dalam dirinya, dan kemudian menggantikan laluan lalai. Laluan hos itu hanya untuk peer. Klien SSH anda hanyalah satu lagi alamat internet dan tidak mendapat sebarang pengecualian.
Satu kesilapan awalan patut diketepikan lebih awal. ip route add -net 0.0.0.0 gw 10.8.0.1 dev tun0 tanpa panjang sepadan dengan alamat tunggal 0.0.0.0, bukan internet; ia mesti 0.0.0.0/0. Dan jika pengambilan laluan lalai memecahkan pengangkutan tunnel itu sendiri, tambah titik akhir sebagai laluan hos melalui antara muka fizikal, menggunakan alamat sebenar penyedia.
Pin alamat klien SSH anda untuk pembaikan segera
Pembaikan terpantas ialah laluan hos untuk alamat klien anda melalui gerbang yang digunakan pelayan sebelum tunnel wujud. Dari pihak anda, cari alamat yang akan dilihat pelayan, kemudian baca jadual pelayan supaya anda tahu gerbang lama:
curl -s https://ifconfig.co
ip route
Pada pelayan, tambah pengecualian sebelum klien bermula. Alamat di sini ialah pemegang tempat; bentuknya yang penting:
sudo ip route add 80.128.240.55 via 192.168.178.1
Ini pembaikan yang digunakan dalam kes yang dilaporkan, dan ia berfungsi serta-merta. Ia juga rapuh dalam dua cara yang boleh dijangka: laluan hilang semasa but semula, dan ia menjadi salah pada saat ISP anda memberikan alamat lain. Anggap ia sebagai langkah kecemasan dan jadikannya tahan lama secara sengaja, melalui unit rangkaian atau cangkuk dispatcher, atau terima bahawa ia sementara dan catat laluan pemulihan.
Halang klien daripada mengambil laluan lalai
Pilihan yang lebih bersih ialah menghalang tunnel daripada menggantikan laluan lalai sama sekali. route-nopull, digunakan dengan --client atau --pull, menerima pilihan yang ditolak kecuali laluan, block-outside-dns dan pilihan gaya DHCP seperti pelayan DNS, jadi anda hanya menambah awalan yang diperlukan. Alat yang lebih sempit ialah penapis tarik, yang membuang satu arahan bermasalah dan mengekalkan selebihnya:
route-nopull
pull-filter ignore "redirect-gateway"
Gunakan salah satu, bukan kedua-duanya, dan jelas tentang apa yang berubah. Tanpa laluan lalai melalui tunnel, pelayan tidak lagi melayari internet melalui penyedia; ia hanya mencapai apa yang anda halakan secara eksplisit. Jika tunnel penuh ialah seluruh tujuan persediaan ini, ini suis yang salah dan laluan hos di atas ialah yang betul.
Bahagikan laluan balik mengikut sumber atau sambungan
Apabila alamat masuk stabil, peraturan sumber menyimpan balasan secara setempat tanpa menyentuh laluan tunnel itu sendiri. Beri alamat antara muka fizikal jadualnya sendiri yang mengandungi awalan LAN dan lalai fizikal, kemudian pilih jadual itu untuk trafik yang datang daripadanya:
ip rule add from 192.168.1.11 table 128
ip route add table 128 to 192.168.1.0/24 dev eth0
ip route add table 128 default via 192.168.1.1
Ini berfungsi kerana balasan kepada sambungan SSH masuk datang daripada alamat yang klien sambungkan. Kes yang dilaporkan di mana setiap perkhidmatan masuk perlu terus berfungsi menggunakan bentuk yang tepat ini. Apabila alamat masuk berubah-ubah atau laluannya dinamik, tandakan sambungan itu: letakkan tanda conntrack pada paket pertama yang tiba dari antara muka fizikal, salin ke paket balasan dalam OUTPUT, dan halakan paket bertanda melalui jadual yang menunjuk ke gerbang fizikal.
iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234
iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321
ip route add default via 192.168.1.1 dev eth0 table 3412
ip rule add fwmark 4321 table 3412
Simpan tanda sambungan, tanda firewall dan nombor jadual berasingan semasa menguji. Menggunakan semula satu nombor untuk dua peranan menghasilkan peraturan yang kelihatan betul dan mengenai paket yang salah. Entri lalai jadual juga memerlukan via dengan gerbang LAN pada pautan Ethernet biasa; dev eth0 telanjang hanya berfungsi apabila antara muka ialah titik-ke-titik atau lompatan seterusnya diselesaikan dengan cara lain. Hos Jessie yang dilaporkan kebetulan berada pada pautan di mana bentuk telanjang berfungsi, dan itu bukan peraturan pengedaran untuk disalin.
Sahkan tanpa mengunci diri anda di luar
Jangan uji dengan memutuskan sambungan. Biarkan sesi pertama terbuka, naikkan tunnel, dan tanya kernel laluan mana yang akan diambil oleh alamat anda sendiri:
ip route get 80.128.240.55
Jawapan harus menyebut antara muka fizikal dan gerbang lama, bukan tunnel. Kemudian buka sambungan SSH kedua; itulah ujian sebenar, kerana sesi lama boleh bertahan pada keadaan yang tidak dapat dihasilkan semula oleh sambungan baharu. Jika yang kedua tergantung sementara yang pertama masih menjawab, peraturan itu tidak pernah sepadan dengan trafik yang penting, dan tanda atau alamat sumber ialah tempat untuk dilihat.
Sediakan konsol luar jalur sepanjang latihan. Pelayan yang satu-satunya laluan akses ialah tunnel yang baru anda rosakkan tidak boleh dibaiki melalui tunnel itu, dan pengunduran lebih mudah apabila anda telah mencatat nombor jadual dan awalan yang anda tambah.