Kotak yang membuat penghalaan untuk LAN dan pada masa sama mendail VPN berakhir dalam hujah yang sama dengan diri sendiri: terowong mahu memiliki laluan lalai, dan LAN memerlukannya kembali. Apabila OpenVPN menyambung, ia mungkin memasang laluan lalai melalui terowong atau sepasang separuh-lalai, yang betul untuk komputer riba dan salah untuk get laluan yang jirannya menjangka balasan daripada alamat LAN-nya. Jawapannya bukan melangkau VPN. Jawapannya ialah memberi kedua-dua keputusan jadual yang berbeza.

Satu laluan lalai, dua pemilik

Trafik yang dimajukan dan trafik yang berasal secara setempat tidak perlu menempuh laluan yang sama. Klien LAN hanya memerlukan terowong untuk destinasi yang anda pilih, manakala sesi pengurusan hos itu sendiri dan balasannya kepada klien tersebut memerlukan laluan lalai LAN. Mencampurkan kedua-duanya dalam jadual utama memaksa satu jawapan ke atas dua soalan yang berbeza.

OpenVPN mempunyai suis khusus untuk ini. route-noexec menghalang klien daripada menyentuh jadual utama sama sekali, dan nilai yang akan digunakannya dieksport ke skrip route-up sebagai route_vpn_gateway, dev dan alamat antara muka. Kemudian anda memutuskan jadual mana menerima laluan mana, dalam kod yang boleh anda baca kemudian.

Jadual dasar berbanding menulis semula jadual utama

ApproachWhat it buysWhat it costs
Separate table plus source ruleLAN traffic and host traffic keep independent defaultsEvery lookup now depends on rule order
Editing the main table onlyFewer moving parts on a single-purpose hostOne mistake takes the gateway offline entirely
Two half-default routesWorks for a full-tunnel clientAmbiguous on a host that must answer on its LAN address

Jadual berasingan ialah satu-satunya pilihan yang berskala melepasi satu subnet. Beri ia nama sekali, kemudian rujuk dengan namanya supaya tiada siapa perlu mengingati nombor:

echo "10 vpn" >> /etc/iproute2/rt_tables
ip rule add from 192.168.50.0/24 table vpn
ip route add default via 10.8.0.1 dev tun0 table vpn

Alamat di sini ialah pemegang tempat. Gantikan awalan LAN, get laluan terowong dan nama peranti daripada penggunaan anda sendiri sebelum menjalankan apa-apa.

Peraturan itu mesti sepadan dengan hos juga

Peraturan yang hanya sepadan dengan awalan LAN meliputi paket yang dimajukan. Ia tidak meliputi trafik yang dihasilkan oleh get laluan itu sendiri, dan tidak meliputi balasan yang dihantar kembali kepada klien LAN, yang membawa alamat LAN get laluan sebagai sumbernya. Carian itu jatuh ke main dan masih boleh keluar melalui terowong.

Tambah peraturan kedua untuk alamat LAN get laluan itu sendiri, atau luaskan peraturan pertama kepada set yang merangkumi kedua-duanya. Urutan penting: letakkan peraturan yang lebih khusus dahulu, dan semak hasilnya dengan carian yang menamakan sumber secara jelas.

ip route get 203.0.113.9 from 192.168.50.1

Jika itu melaporkan peranti terowong untuk destinasi yang sepatutnya kekal setempat, set peraturan itu salah tanpa mengira apa yang terkandung dalam jadual.

NAT atau laluan di sebelah jauh

Pelayan VPN mengetahui subnet terowong dan tiada yang lain. Paket yang tiba dengan alamat sumber LAN tiada laluan balik melainkan seseorang menyediakannya, dan ada tepat dua cara untuk menyediakannya. Menambah laluan untuk awalan LAN pada pelayan mengekalkan sumber asal kelihatan dari hujung ke hujung, yang biasanya dikehendaki oleh reka bentuk yang diaudit. Penyamaran pada get laluan menulis semula sumber kepada alamat terowong dan tidak memerlukan kerjasama daripada pelayan.

iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o tun0 -j MASQUERADE

Pilih NAT apabila anda tidak mengawal pelayan dan tidak boleh menambah laluan di sana. Pilih laluan di sebelah pelayan apabila log, kawalan akses atau simetri laluan balik penting, kerana penyamaran memadam alamat asal daripada semua yang direkodkan oleh sebelah jauh.

Sama ada cara, pemajuan mesti diaktifkan, dan penapisan laluan balik yang ketat boleh menggugurkan balasan apabila main tidak akan memilih terowong untuk sumber itu. Semak nilai berkesan sebelum menyalahkan terowong.

Jadikan pemisahan bertahan selepas sambung semula

Peraturan dan laluan yang ditambah dengan tangan hilang apabila antara muka dicipta semula, dan entri jadual yang lapuk boleh hidup lebih lama daripada sesi yang mewajarkannya. Letakkan peraturan jadual, laluan terowong dan entri penyamaran di dalam skrip route-up klien, dan kosongkan jadual di bahagian atas skrip supaya get laluan lama tidak dapat bertahan ke sesi baharu.

Sahkan dari kedua-dua hujung: carian pada get laluan dengan sumber LAN, dan permintaan sebenar daripada klien LAN ke destinasi yang sepatutnya menyeberangi terowong. Laluan yang wujud tetapi tidak pernah dipilih berkelakuan sama seperti tiada laluan langsung sehingga anda membaca pembilangnya.

Artikel berkaitan