VPN dan LAN rumah guna subnet yang sama: ikut laluan dahulu
Kedua-dua penyesuai menuntut 192.168.1.0/24 dan hanya satu laluan menang. Ikut senarai penyesuai, laluan pemenang dan laluan balik sebelum menomborkan semula atau menyalahkan DNS.
Anda bersambung ke VPN pejabat, ikon dalam dul menjadi hijau, intranet dimuatkan, dan pencetak dua meter jauhnya berhenti menjawab. Kongsi yang berfungsi pagi tadi tamat masa pada mesin yang sama, dan tiada log menyebut pencetak. Refleks pertama ialah DNS, kerana nama yang tidak diselesaikan kelihatan seperti nama yang tidak wujud, tetapi masalahnya pada alamat: dua penyesuai kini menuntut 192.168.1.0/24 dan hanya satu laluan boleh memenangi awalan itu. Ikut urutan ini dan anda akan nampak penyesuai mana yang mengambilnya sebelum mengubah apa-apa.
Mulakan dengan gejala, bukan terowong
Petunjuknya ialah skop. Jika intranet berfungsi dan setiap peranti setempat gagal, terowong sihat dan laluan setempat tidak. Jika peranti setempat berfungsi dan intranet gagal, sebaliknya. Jika semuanya berfungsi kecuali satu hos, anda melihat satu alamat yang wujud di kedua-dua belah.
Catat satu alamat setempat dan satu alamat jauh sebelum menyentuh sebarang tetapan. “Pencetak” tidak boleh diuji; 192.168.1.40 boleh. Satu langkah itu menghalang sejam yang paling biasa terbuang pada masalah ini, iaitu menulis semula tetapan DNS kerana keputusan penghalaan.
Langkah 1: lihat kedua-dua penyesuai menuntut awalan itu
Buka Sambungan Rangkaian (ncpa.cpl) dan baca kedua-dua penyesuai sebelah menyebelah. Penyesuai Ethernet menunjukkan 192.168.1.50/24 dengan gerbang 192.168.1.1. Penyesuai VPN menunjukkan 192.168.1.201/24, dihantar oleh pelayan. Kedua-duanya sah, kedua-duanya percaya awalan itu on-link, dan tindanan akan menyimpan satu laluan untuknya.
Get-NetIPAddress -AddressFamily IPv4 menyenaraikan alamat, dan Get-NetIPInterface | Sort-Object InterfaceMetric menunjukkan susunan tindanan akan menggunakannya. Lajur metrik itulah keputusan yang anda akan baca, jadi catat nombornya daripada cuba mengingatinya.
Sangkal teori DNS dengan murah: Resolve-DnsName printer.office.lan mengembalikan alamat yang sama seperti semalam. Nama itu diselesaikan; kemudian paket keluar melalui penyesuai yang salah. Dua minit di sini menjimatkan satu petang dalam tetapan penyelesai.
Langkah 2: baca laluan yang benar-benar menang
Find-NetRoute -RemoteIPAddress 192.168.1.40 mencetak antara muka, hop seterusnya dan sumber yang akan digunakan oleh tindanan untuk alamat itu. Anggap keluaran itu sebagai jawapan, bukan petunjuk. route print -4 memberikan seluruh jadual apabila anda mahu melihat entri mana yang kalah dan berapa banyak.
Kekhususan mengalahkan niat. 192.168.0.0/25 yang dihantar mengalahkan 192.168.0.0/24 setempat kerana awalannya lebih panjang, jadi 192.168.0.0 hingga 192.168.0.127 keluar melalui terowong manakala separuh atas kekal setempat. Hilangnya separuh LAN tanpa mesej ralat ialah tingkah laku yang betul untuk jadual itu.
tracert -d 192.168.1.40 mengesahkannya dari luar jadual: jika hop pertama ialah alamat terowong dan bukan penghala anda sendiri, laluan itulah seluruh cerita. Dalam Linux soalan yang sama ialah ip route get 192.168.1.40, yang mencetak alamat sumber dan peranti dalam satu baris. Apabila jawapan menyebut tun0, berhenti melihat pelayar.
Langkah 3: periksa laluan balik sebelum menyalahkan klien
Laluan hadapan yang betul tetap gagal jika pihak jauh tidak dapat menjawab. Apabila LAN klien dicapai melalui terowong, gerbang LAN itu mesti tahu di mana terletaknya kumpulan terowong: ip route add 10.8.0.0/24 via 192.168.1.12 pada penghala itu, dan push “route 192.168.1.0 255.255.255.0” dari pelayan supaya klien tahu laluan balik.
Tanpa entri pertama, balasan meninggalkan sasaran menuju gerbang lalainya, yang memajukan alamat persendirian kepada penyedia dan menggugurkannya. Gejalanya sehala dan mudah disalahtafsir: permintaan muncul pada tun0, balasan tidak pernah.
Peraturan masquerade pada hos VPN menghapuskan keperluan laluan statik itu: iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE. Ia juga menyembunyikan alamat sumber sebenar, yang menjadikan setiap soalan log kemudian lebih sukar. Hos sasaran dengan gerbang lalai yang salah menghasilkan kesenyapan yang sama, dengan ubah hala ICMP sebagai kes terbaik dan lubang hitam sebagai kes biasa, sebab itu tangkapan perlu di kedua-dua hujung.
Langkah 4: pilih pembaikan yang anda mampu hidup dengannya
Terdapat lima pembaikan digunakan untuk ini, dan semuanya tidak boleh saling menggantikan. Pilih berdasarkan apa yang mesti kekal boleh dicapai serentak, bukan berdasarkan perintah mana yang paling pendek.
| Repair | What it fixes | What it costs |
|---|---|---|
| Flip interface metrics | Alternating access: office now, home later, never both | Get-NetAdapter -Name "Ethernet 2" | Set-NetIPInterface -InterfaceMetric 21; set the VPN adapter back to 5000. A client that rewrites metrics on connect defeats it |
| Renumber one side | Every host reachable in both directions | DHCP reservations, printer queues, firewall rules and hard-coded addresses all move |
| Narrow the advertised prefix | Remote hosts really live in the upper half | Breaks the day someone adds a host below the cut |
| Translate with client-nat | Both address plans stay untouched | Stateless per-client mapping, unreadable logs, anything embedding addresses breaks |
| Publish one service with DNAT | One service on the VPN host reachable from the LAN | Both address plans stay; source addresses and reverse lookups stop being meaningful |
Metrik ialah pilihan murah dan yang pertama dicapai orang. Perubahan itu terpakai pada antara muka, jadi ia berfungsi selagi terowong naik, dan tempatnya dalam skrip di sebelah klien bukan dalam shell yang anda akan lupa. Ia tidak boleh memberi akses serentak ke alamat yang sama pada dua rangkaian, dan itulah had yang menghantar semua orang lain ke bawah jadual.
Menomborkan semula LAN rumah ke 10.10.0.0/24 ialah pembaikan bersih: satu pembaharuan pajakan DHCP serta tempahan, baris pencetak dan alamat berkod keras yang menyebut julat lama. Menomborkan semula bahagian pejabat biasanya bukan keputusan anda. IPv6 menghapuskan pertembungan sepenuhnya apabila kedua-dua rangkaian menyokongnya, menggunakan awalan setempat unik dari fd00::/8 dan bukan sesuatu yang mudah diingat, tetapi uji aplikasi melalui TCP, bukan ping, kerana ICMP boleh berfungsi sedangkan perkhidmatan tidak.
Pilihan terjemahan OpenVPN sendiri ialah jalan terakhir, dihantar dari pelayan ke entri direktori khusus klien. Ia mengambil empat parameter selepas nama pilihan — arah, rangkaian, netmask dan alias — dan alias itu bukan pilihan: push "route 192.168.2.0 255.255.255.0" dan push "client-nat dnat 192.168.2.0 255.255.255.0 192.168.1.0". Rangkaian dan netmask ialah julat yang dilihat klien (192.168.2.0/24), alias ialah julat pejabat sebenar di sebelah pelayan (192.168.1.0/24), dan laluan yang dihantar itulah yang menjadikan julat kelihatan itu boleh dicapai. Pejabat kemudian muncul kepada klien itu di bawah 192.168.2.x. Dokumentasikan pemetaan dalam profil, jika tidak orang seterusnya akan menyahpepijatnya sebagai kerosakan penghalaan.
Menerbitkan satu perkhidmatan ialah versi sempit terjemahan, dan ia sama sekali tidak memerlukan pilihan OpenVPN. Peraturan DNAT pada hos VPN menerbitkan semula satu port, jadi LAN mengekalkan alamatnya dan mencapai perkhidmatan pada alamat hos yang sudah dikenali. Kosnya biasa: perkhidmatan melihat hos VPN sebagai sumber, jadi log bagi setiap klien dan carian songsang tidak lagi bermakna apa-apa. Itu meliputi satu baris pencetak atau satu halaman pentadbir, bukan hos di kedua-dua belah yang saling mencapai.
Apa yang masih tidak akan berfungsi, dan apa yang perlu dicatat
Siaran tidak melintasi terowong yang dihalakan. DLNA, UPnP, pelayaran NetBIOS dan Wake-on-LAN bergantung pada siaran atau multicast yang tidak dibawa peranti tun, jadi tiada laluan membaiki penemuan. Jambatan dengan dev tap memanjangkan segmen, dan bersamanya siaran DHCP, ARP dan setiap paket penemuan lain; utamakan laluan hos unicast seperti route 192.168.2.1 255.255.255.255 untuk alamat sebelah LAN penghala jauh.
Dua penghala yang kedua-duanya menggunakan 192.168.1.1 pada laluan yang sama tergolong dalam keluarga masalah yang sama: alamat setempat sentiasa menang, jadi halaman penghala jauh kekal tidak dapat dicapai sehingga satu LAN berpindah. Menambah penyesuai kedua tidak mengubah apa-apa dalam kedua-dua kes.
Catat bukti sebelum mengedit apa-apa: ip route get atau Find-NetRoute, ping -c 3 ke alamat berkenaan, traceroute, dan tcpdump -ni tun0 icmp pada klien, kemudian jadual penghalaan dan pembilang NAT pada pelayan. Ping yang berfungsi satu arah dan mati arah lain menunjuk kepada laluan balik, bukan terowong, dan perbezaan tunggal itulah yang menentukan pembaikan mana di atas yang benar-benar anda perlukan.