Satu Peranti Melalui VPN Router Perlukan Tiga Peraturan, Bukan Suis
Satu peranti melalui VPN router ialah penghalaan dasar, bukan kotak semak: jadual bertanda, peraturan NAT berskop, serta laluan DNS, IPv6 dan LAN yang dilangkau panduan.
Tiada suis setiap peranti pada VPN router; suis yang anda cari ialah pintasan yang menulis peraturan penghalaan dasar bagi pihak anda. Sebaik sahaja satu komputer riba, satu julat port, satu senarai alamat atau satu segmen LAN perlu menggunakan terowong manakala yang lain kekal di WAN, anda sedang membina laluan dasar, bukan menghidupkan ciri. Kerja ini mempunyai tiga bahagian bergerak, dan setiap satu gagal dengan cara berbeza: jadual bertanda tanpa laluan kelihatan seperti senyap, tanda yang dikenakan pada rantai salah kelihatan seperti tiada apa berlaku, dan peraturan NAT yang hilang kelihatan seperti terowong yang bersambung tetapi tidak membawa apa-apa. Dua bahagian lagi hilang kerana ia tidak pernah muncul dalam peraturan mangle, iaitu DNS dan IPv6.
Mitos: terowong ialah tetapan klien
Klien VPN di sebelah router melakukan satu perkara kasar dengan baik: ia meletakkan 0.0.0.0/0 dalam jadual penghalaan utama dan menghalakannya ke terowong. WireGuard memperolehnya daripada AllowedIPs, OpenVPN daripada redirect-gateway yang ditolak pelayan, dan kedua-duanya mengubah laluan setiap hos di belakang router. Menyempitkan AllowedIPs atau menambah route-nopull mengubah apa yang klien pasang. Ia tidak mengubah siapa pemasangan itu terpakai, kerana klien tidak pernah melihat peranti. Ia hanya melihat paket.
Pemilihan mengikut sumber atau destinasi ialah keputusan penghalaan, jadi ia tergolong dalam lapisan dasar router: peraturan mangle serta jadual kedua pada RouterOS, MARK serta ip rule pada OpenWrt atau DD-WRT, atau peraturan firewall yang gatewaynya ialah terowong pada pfSense. Resipi klien WireGuard Netgate ialah yang perlu dibaca sebelum meneka, kerana pada platform itu gateway peraturan, penugasan antara muka dan entri NAT keluar semuanya mesti bersetuju sebelum satu klien menggunakan terowong.
Separuh kedua mitos itu ialah router kedua. Membeli kotak lain, atau memindahkan peranti ke SSID tetamu, selalunya berkesan, dan alasannya bukan perkakasan: ia meletakkan peranti pada subnetnya sendiri, yang memberi anda pemilih sumber yang sudah difahami oleh firmware. Jika anda boleh mentakrifkan segmen itu pada router yang anda miliki, kotak tambahan menyelesaikan masalah yang anda tidak ada.
Bahagian satu: terowong yang bukan laluan lalai
Pada RouterOS, tambah klien tanpa laluan lalai dan beri terowong jadualnya sendiri. Laluan pertama ialah lalai bertanda; yang kedua ialah separuh kegagalan.
/ip route add dst-address=0.0.0.0/0 gateway=VPN_GATEWAY_IP routing-mark=vpn distance=1
/ip route add dst-address=0.0.0.0/0 type=unreachable routing-mark=vpn distance=2
Laluan tidak boleh dicapai itulah sebabnya jadual bertanda mengalahkan senarai pengecualian dalam jadual utama. Apabila terowong jatuh, paket bertanda terus menerima tidak boleh dicapai dan bukannya diam-diam kembali ke WAN, jadi kegagalan muncul dalam mesej ralat aplikasi dan bukan pada halaman geolokasi yang anda semak sejam kemudian.
RouterOS 7 memisahkan apa yang 6.x pegang bersama: anda mengisytiharkan jadual dengan /routing table add name=vpn fib, kemudian merujuknya dengan nama pada laluan dan dalam peraturan mangle. Coretan 6.x yang menulis routing-mark tanpa mentakrifkan jadual dimuatkan dengan bersih dan tidak sepadan dengan apa-apa. Klasik yang lain ialah dua separuh 0.0.0.0/1, atau dua lalai pada jarak yang sama dalam satu jadual: kernel memilih satu, dan tingkah laku boleh berubah selepas but semula.
Bahagian dua: tanda sebelum carian laluan
Pemilih menentukan paket mana yang masuk ke jadual itu. RouterOS biasanya bermula dengan senarai alamat untuk dasar destinasi, atau alamat sumber untuk dasar peranti:
/ip firewall mangle add chain=prerouting src-address=192.168.88.50 action=mark-routing new-routing-mark=vpn
/ip firewall mangle add chain=prerouting dst-address-list=via-vpn action=mark-routing new-routing-mark=vpn
/ip firewall address-list add list=via-vpn address=203.0.113.10
Firmware Linux melakukan perkara yang sama dengan tanda netfilter dan peraturan yang menghalakan paket bertanda ke jadual yang anda isi:
iptables -t mangle -A PREROUTING -p tcp --dport 27000:27050 -j MARK --set-mark 0x200
ip route add default dev tun0 table 100
ip rule add fwmark 0x200 table 100
Rantai bukan pilihan gaya. Apabila paket sampai ke FORWARD, carian laluan sudah berlaku, jadi MARK atau DROP di situ hanya boleh menulis semula atau membuang. Tanda mesti mendarat di PREROUTING untuk trafik yang diposkan dan di OUTPUT untuk trafik yang dijana oleh router sendiri, iaitu tempat DNS, NTP dan pemeriksaan kemas kini router tinggal. Laluan output itulah sebab biasa pemasangan yang di terowong sepenuhnya masih menjawab daripada resolver ISP dalam ujian kebocoran.
Dasar peranti memerlukan padanan yang tidak berganjak. Tempah alamat dalam DHCP, atau padankan antara muka untuk segmen khusus; alamat yang kemudian berpindah ke peranti lain secara senyap menggunakan terowong pada klien yang salah. Jambatan setiap SSID dengan subnet sendiri ialah versi idea yang sama yang lebih tahan lama, dan ia memberi peraturan IPv6 tempat tinggal juga.
Bahagian tiga: NAT, DNS dan pengecualian LAN
Trafik yang keluar melalui terowong memerlukan alamat sumber yang akan dijawab oleh sisi jauh. Hadkan terjemahan kepada antara muka terowong: out-interface=VPN_NAME pada RouterOS, -o tun0 pada Linux, entri NAT keluar yang sepadan pada pfSense. Peraturan masquerade tanpa skop itu menulis semula trafik yang anda mahu biarkan, dan gejalanya ialah peranti tanpa terowong kehilangan alamat awamnya.
Pengecualian LAN menyebabkan lebih banyak urutan sokongan daripada terowong itu sendiri. Jika jadual bertanda hanya memegang laluan lalai, destinasi pencetak atau NAS daripada peranti terpilih sepadan dengan lalai itu dan hilang ke dalam terowong. Tambah laluan LAN ke jadual yang sama, atau kecualikan subnet setempat dalam pemilih; kedua-duanya berkesan, dan pengecualian lebih mudah dikekalkan betul apabila anda menambah VLAN kemudian.
DNS mengambil laluan berasingan. Pertanyaan yang diposkan router berasal daripada router dan mengikut OUTPUT, bukan tanda yang diposkan, jadi komputer riba yang di terowong sepenuhnya masih boleh menyelesaikan nama melalui ISP. Halakan klien ke resolver yang boleh dicapai melalui terowong, atau tandakan trafik port-53 router itu sendiri, kemudian periksa alamat yang diselesaikan dan bukannya menganggap jawapan itu bergerak bersama permintaan web.
Apabila peraturan sepadan tetapi aplikasi masih menggunakan WAN
Senarai destinasi cepat menjadi lapuk. Nama diselesaikan ke alamat yang tiada dalam senarai, jadi permintaan mengambil WAN sedangkan setiap ujian yang anda jalankan pada alamat tersenarai berjaya. Segarkan senarai daripada resolver yang sama yang digunakan klien, dan utamakan pemilih berasaskan sumber apabila anda benar-benar mahu semua trafik daripada satu peranti.
IPv6 ialah lencongan senyap. Peranti mempunyai keluarga alamat kedua dengan laluan lalai dan set peraturannya sendiri, dan memadankan hanya alamat IPv4 ialah separuh dasar. Gunakan pemilih yang sama pada ip6tables atau setara nftables, atau nyahdayakan IPv6 pada segmen itu dengan sengaja dan bukan secara tidak sengaja.
Sambungan yang sudah terjalin juga penting. Entri conntrack yang dicipta sebelum perubahan terus mengikut laluan lama sehingga tamat tempoh, jadi pelayar yang kekal terbuka semasa suntingan kelihatan sama seperti peraturan yang tidak pernah dikenakan. Buka sambungan baharu, atau kosongkan keadaan, sebelum anda menilai dasar itu.
Sahkan dengan dua peranti dan satu but semula
Uji peranti yang sepatutnya di terowong dan peranti yang tidak sepatutnya, dan bandingkan hop kedua dan bukannya nombor kelajuan. Traceroute daripada setiap satu menunjukkan sama ada gateway terowong atau gateway ISP pada hop kedua; jika kedua-duanya kelihatan sama, tanda atau jadual tidak melakukan apa yang dikatakan peraturan. Gunakan sambungan baharu untuk ujian itu.
Kemudian but semula. Susunan permulaan ialah tempat dasar yang berfungsi menjadi rosak, kerana klien mesti hidup sebelum laluan tidak boleh dicapai dipasang, dan syot kilat tersimpan yang memulihkan set peraturan lama akan menimpa jadual anda. Periksa bahawa setiap peraturan ada dalam konfigurasi tersimpan dan bahawa lalai bertanda wujud selepas but, bukan hanya selepas anda menaipnya.
Jika sesuatu gagal, tanggalkan tanda dahulu dan lihat sama ada trafik normal kembali, kemudian tanggalkan jadual. Urutan itu memberitahu anda sama ada anda mengejar masalah penghalaan atau masalah firewall, dan ia meninggalkan isi rumah dengan pencetak yang berfungsi sementara anda menyiapkan kerja.