Perangkat yang merutekan untuk LAN sekaligus men-dial VPN berakhir dalam perdebatan yang sama dengan dirinya sendiri: terowongan ingin memiliki rute bawaan, dan LAN membutuhkannya kembali. Saat OpenVPN terhubung, ia bisa memasang rute bawaan lewat terowongan atau sepasang setengah-rute bawaan, yang benar untuk laptop dan salah untuk gateway yang para tetangganya mengharapkan balasan dari alamat LAN-nya. Jawabannya bukan melewati VPN. Jawabannya adalah memberi kedua keputusan tabel yang berbeda.

Satu rute bawaan, dua pemilik

Lalu lintas yang diteruskan dan lalu lintas yang berasal dari lokal tidak harus menempuh jalur yang sama. Klien LAN hanya membutuhkan terowongan untuk tujuan yang Anda pilih, sementara sesi manajemen host itu sendiri dan balasannya kepada klien tersebut membutuhkan rute bawaan LAN. Mencampur keduanya di tabel utama memaksa satu jawaban atas dua pertanyaan yang berbeda.

OpenVPN punya sakelar khusus untuk ini. route-noexec mencegah klien menyentuh tabel utama sama sekali, dan nilai yang seharusnya dipakai diekspor ke skrip route-up sebagai route_vpn_gateway, dev dan alamat antarmuka. Setelah itu Anda yang memutuskan tabel mana menerima rute mana, dalam kode yang bisa Anda baca nanti.

Tabel kebijakan versus menulis ulang tabel 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

Tabel terpisah adalah satu-satunya opsi yang berskala melewati satu subnet. Beri nama sekali, lalu rujuk dengan namanya agar tidak ada yang perlu mengingat angka:

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 adalah placeholder. Ganti prefiks LAN, gateway terowongan, dan nama perangkat dari penerapan Anda sendiri sebelum menjalankan apa pun.

Aturan itu harus cocok dengan host juga

Aturan yang hanya cocok dengan prefiks LAN mencakup paket yang diteruskan. Aturan itu tidak mencakup lalu lintas yang dibuat gateway itu sendiri, dan tidak mencakup balasan yang dikirimnya kembali ke klien LAN, yang membawa alamat LAN gateway sebagai sumbernya. Pencarian itu jatuh ke main dan masih bisa keluar lewat terowongan.

Tambahkan aturan kedua untuk alamat LAN gateway itu sendiri, atau perluas aturan pertama menjadi himpunan yang mencakup keduanya. Urutannya penting: letakkan aturan yang lebih spesifik lebih dulu, dan periksa hasilnya dengan pencarian yang menyebut sumbernya secara eksplisit.

ip route get 203.0.113.9 from 192.168.50.1

Jika itu melaporkan perangkat terowongan untuk tujuan yang seharusnya tetap lokal, himpunan aturannya salah terlepas dari apa pun isi tabelnya.

NAT atau rute di sisi jauh

Server VPN mengenal subnet terowongan dan tidak yang lain. Paket yang datang dengan alamat sumber LAN tidak punya jalur balik kecuali seseorang menyediakannya, dan ada tepat dua cara menyediakannya. Menambahkan rute untuk prefiks LAN di server membuat sumber asli tetap terlihat dari ujung ke ujung, yang biasanya diinginkan desain yang diaudit. Penyamaran di gateway menulis ulang sumber ke alamat terowongan dan tidak membutuhkan kerja sama dari server.

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

Pilih NAT saat Anda tidak mengendalikan server dan tidak bisa menambahkan rute di sana. Pilih rute di sisi server saat log, kontrol akses, atau simetri jalur balik penting, karena penyamaran menghapus alamat asli dari semua yang dicatat sisi jauh.

Apa pun pilihannya, penerusan harus diaktifkan, dan penyaringan jalur balik yang ketat bisa menjatuhkan balasan saat main tidak akan memilih terowongan untuk sumber itu. Periksa nilai efektifnya sebelum menyalahkan terowongan.

Buat pemisahan bertahan setelah sambung ulang

Aturan dan rute yang ditambahkan dengan tangan hilang saat antarmuka dibuat ulang, dan entri tabel yang basi bisa hidup lebih lama daripada sesi yang membenarkannya. Letakkan aturan tabel, rute terowongan, dan entri penyamaran di dalam skrip route-up milik klien, dan kosongkan tabel di awal skrip agar gateway lama tidak bisa bertahan ke sesi baru.

Verifikasi dari kedua ujung: pencarian di gateway dengan sumber LAN, dan permintaan sungguhan dari klien LAN ke tujuan yang harus melewati terowongan. Rute yang ada tetapi tidak pernah dipilih berperilaku persis seperti tidak ada rute sama sekali sampai Anda membaca penghitungnya.

Artikel terkait