Menghubungkan ke server jauh melalui VPN ketika alamat subnet jaringan lokal bertentangan dengan jaringan jarak jauh

35

Ini adalah Pertanyaan Canonical tentang menyelesaikan konflik subnet IPv4 antara jaringan lokal klien VPN dan satu di seluruh tautan VPN darinya.

Setelah tersambung ke lokasi jarak jauh melalui OpenVPN, klien mencoba mengakses server di jaringan yang ada di subnet seperti 192.0.2.0/24. Namun, kadang-kadang, jaringan pada LAN klien memiliki alamat subnet yang sama: 192.0.2.0/24. Klien tidak dapat terhubung ke server jauh melalui pengetikan IP-nya karena konflik ini. Mereka bahkan tidak dapat mengakses internet publik saat terhubung ke VPN.

Masalahnya adalah bahwa subnet 192.0.2.0/24 ini perlu dirutekan oleh VPN, tetapi juga harus dirutekan sebagai LAN klien.

Adakah yang tahu cara mengurangi masalah ini? Saya memiliki akses ke server OpenVPN.

John Russell
sumber
3
Anda dapat mencoba mengatur rute statis untuk alamat / 32 host yang Anda coba jangkau dan gunakan VPN peer sebagai gateway Anda dan lihat apa yang terjadi.
SpacemanSpiff
jika konsentrator vpn menghormati rute klien, maka keamanan perimeter Anda mungkin perlu bantuan. saya mendapatkan akses ke akuntansi lan, menambahkan rute ke rentang teknik, dan saya kemudian dapat menghubungkan tidak ada masalah. firewall jelek seperti sonicwall melakukan ini
nandoP
@SpacemanSpiff: Walaupun ini dapat menyelesaikan masalah di sisi klien, server masih tidak dapat menjawab, karena akan melihat koneksi berasal dari jaringannya sendiri, bukan dari klien VPN.
Massimo

Jawaban:

18

Dimungkinkan untuk menyelesaikan ini dengan menggunakan NAT; hanya saja tidak terlalu elegan.

Jadi dengan asumsi Anda tidak dapat menyelesaikan ini dengan memiliki jaring internal yang memiliki nomor jaringan yang tidak biasa sehingga tidak pernah benar-benar mengalami konflik, inilah prinsipnya:

Karena subnet lokal dan jarak jauh memiliki nomor jaringan yang sama, lalu lintas dari klien Anda tidak akan pernah menyadari bahwa ia harus melalui gateway terowongan untuk mencapai tujuannya. Dan bahkan jika kita bayangkan itu bisa, situasinya akan sama untuk host jarak jauh karena akan mengirim jawaban.

Jadi tetap dengan saya dan berpura-pura bahwa sampai sekarang, tidak ada masalah samping ketika saya menulis bahwa untuk konektivitas penuh, Anda perlu NAT kedua ujungnya di dalam terowongan untuk membedakan host dan memungkinkan untuk routing.

Membuat beberapa jaring di sini:

  • Jaringan kantor Anda menggunakan 192.0.2.0/24
  • Kantor jarak jauh Anda menggunakan 192.0.2.0/24
  • Gateway VPN jaringan kantor Anda menyembunyikan 192.0.2.0/24 host di belakang nomor jaringan NATed 198.51.100.0/24
  • Gateway VPN jaringan kantor jarak jauh Anda menyembunyikan 192.0.2.0/24 host di belakang nomor jaringan NATed 203.0.113.0/24

Jadi di dalam terowongan VPN, host kantor sekarang 198.51.100.x dan host kantor jarak jauh 203.0.113.x. Lebih jauh lagi kita berpura-pura semua host dipetakan 1: 1 di NAT gateway VPN masing-masing. Sebuah contoh:

  • Tuan rumah jaringan kantor Anda 192.0.2.5/24 secara statis dipetakan sebagai 198.51.100.5/24 di gateway kantor vpn NAT
  • Tuan rumah jaringan kantor jarak jauh Anda 192.0.2.5/24 secara statis dipetakan sebagai 203.0.113.5/24 di gateway kantor vpn terpencil NAT

Jadi ketika host 192.0.2.5/24 di kantor jauh ingin terhubung ke host dengan ip yang sama di jaringan kantor, perlu melakukannya dengan menggunakan alamat 198.51.100.5/24 sebagai tujuan. Berikut ini terjadi:

  • Di kantor jarak jauh, host 198.51.100.5 adalah tujuan jarak jauh yang dicapai melalui VPN dan dialihkan ke sana.
  • Di kantor jarak jauh, host 192.0.2.5 disamarkan sebagai 203.0.113.5 saat paket melewati fungsi NAT.
  • Di kantor, host 198.51.100.5 diterjemahkan ke 192.0.2.5 ketika paket melewati fungsi NAT.
  • Di kantor, kembalikan lalu lintas ke host 203.0.113.5 melewati proses yang sama dengan arah sebaliknya.

Jadi, sementara ada solusinya, ada sejumlah masalah yang harus diatasi agar ini dapat bekerja dalam praktik:

  • IP yang disamarkan harus digunakan untuk konektivitas jarak jauh; DNS menjadi kompleks. Ini karena titik akhir harus memiliki alamat IP unik, seperti yang dilihat dari host penghubung.
  • Fungsi NAT harus diimplementasikan kedua ujungnya sebagai bagian dari solusi VPN.
  • Memetakan host secara statis adalah suatu keharusan untuk dapat dijangkau dari ujung yang lain.
  • Jika lalu lintas searah, hanya pihak penerima yang membutuhkan pemetaan statis semua host yang terlibat; klien dapat melarikan diri dengan secara dinamis NATed jika diinginkan.
  • Jika lalu lintas dua arah, kedua ujung memerlukan pemetaan statis semua host yang terlibat.
  • Konektivitas internet tidak boleh terganggu terlepas dari VPN split atau non-split.
  • Jika Anda tidak dapat memetakan 1-ke-1, itu menjadi berantakan; pembukuan yang cermat adalah suatu keharusan.
  • Secara alami seseorang berisiko menggunakan alamat NAT yang juga ternyata merupakan duplikat :-)

Jadi pemecahan ini perlu desain yang cermat. Jika kantor jauh Anda benar-benar terdiri dari pejuang jalanan, Anda menambahkan lapisan masalah di dalamnya:

  • mereka tidak pernah tahu sebelumnya ketika mereka berakhir dengan id bersih yang tumpang tindih.
  • gateway kantor jarak jauh NAT perlu diterapkan pada laptop mereka.
  • gateway kantor akan membutuhkan dua VPN, satu bebas-NAT dan satu NATed, untuk mencakup kedua skenario. Jika tidak, jika seseorang memilih salah satu subnet yang Anda pilih untuk metode NAT, semuanya tidak akan berhasil .

Tergantung pada klien VPN Anda, Anda mungkin dapat secara otomatis memilih satu VPN atau yang lain tergantung pada alamat jaringan segmen lokal.

Perhatikan bahwa semua penyebutan NAT dalam konteks ini menunjukkan fungsi NAT yang dapat dikatakan terjadi dalam perspektif terowongan. Secara bertahap, pemetaan NAT statis harus dilakukan sebelum paket "memasuki" terowongan, yaitu sebelum dienkapsulasi dalam paket transportasi yang akan membawanya melintasi internet ke gateway VPN lainnya.

Ini berarti bahwa seseorang tidak boleh membingungkan alamat ip publik gateway VPN (dan yang dalam praktiknya mungkin juga NAT: ed, tetapi kemudian sepenuhnya di luar perspektif transportasi ke situs jarak jauh melalui VPN) dengan alamat pribadi unik yang digunakan sebagai topeng. untuk alamat pribadi duplikat. Jika abstraksi ini sulit untuk digambarkan, ilustrasi tentang bagaimana NAT dapat dipisahkan secara fisik dari gateway VPN untuk tujuan ini dibuat di sini:
Menggunakan NAT dalam Jaringan yang Tumpang Tindih .

Mengondensasi gambar yang sama ke pemisahan logis di dalam satu mesin, yang mampu melakukan fungsi NAT dan gateway VPN, hanya mengambil contoh yang sama satu langkah lebih jauh, tetapi memang lebih menekankan pada kemampuan perangkat lunak yang ada. Meretasnya bersama misalnya dengan OpenVPN dan iptables dan memposting solusinya di sini akan menjadi tantangan yang layak.

Softwarewise tentunya dimungkinkan:
PIX / ASA 7.x dan yang lebih baru: LAN-to-LAN IPsec VPN dengan Contoh Konfigurasi Jaringan yang Tumpang tindih
dan:
Mengkonfigurasi Terowongan IPSec Antar Router dengan Duplikat Subnet LAN

Implementasi yang sebenarnya karena itu tergantung pada banyak faktor, sistem operasi yang terlibat, perangkat lunak terkait dan kemungkinannya tidak sedikit. Tapi itu tentu bisa dilakukan. Anda perlu berpikir dan bereksperimen sedikit.

Saya belajar ini dari Cisco seperti yang terlihat oleh tautan.

ErikE
sumber
Bisakah NAT bekerja juga dengan banyak koneksi VPN dan terjemahannya? Saya tidak sepenuhnya memahami kasus ini di sini. Saya punya utas di sini unix.stackexchange.com/q/284696/16920 tentang Cara Melakukan VPN Site-To-Site dengan Sublihun Tumpang tindih Unix-Way?
Léo Léopold Hertz 준영
17

Jika Anda memerlukan solusi kotor sementara untuk satu atau beberapa ips server yang diketahui, solusi paling sederhana adalah opsi perutean sisi klien statis.

Dalam kasus saya, saya menambahkan server tujuan yang saya inginkan (192.168.1.100) ke tabel routing saya di klien linux saya melalui:

route add 192.168.1.100 dev tun0

Setelah itu, hapus rute statis ini dengan perintah penghapusan rute.

Aydin K.
sumber
2
Ini adalah solusi yang sempurna, dan waktu yang bahkan sempurna! :)
Yuval A
Berapa lama ini bertahan? Sampai Anda memutuskan? Sampai reboot?
carbocation
1
Pada sistem linux saya (xfce dengan ubuntu / mint) pengaturannya "hilang" setelah putuskan vpn dan ya, setelah reboot juga. Anda dapat memverifikasi apakah pengaturan aktif dengan perintah rute (akan ada entri yang memiliki ip dan perangkat tun0 biasanya di bagian bawah)
Aydin K.
Versi OSX dari rute menggunakan antarmuka secara berbeda jadi alih-alih dev tun0Anda perlu-interface tun0
Sirens
5

ya ini yang terburuk. bagi saya itu terjadi sepanjang waktu dari kamar hotel, sebelum admin VPN menyadari bahwa mereka harus menggunakan rentang ip yang lebih tidak jelas. 10.0.0.0/24 dan 10.1.1.1/24 adalah yang terburuk. jika Anda dapat membantu itu jangan ip jaringan nirkabel seperti itu.

jadi jawabannya adalah "memperbaiki" wap untuk menggunakan jaringan internal yang berbeda (yaitu 10.255.255.0/24) dan kemudian memberi Anda sewa berbeda (yaitu ip dalam rentang yang dapat merutekan kembali ke corp vpn), atau jika Anda tidak memiliki Saya tidak bisa mendapatkan admin di wap, cukup buka starbucks. atau 20 menit memimpin :)

jika ini hanya dalam pengaturan lab, cukup gunakan rentang yang berbeda.

nandoP
sumber
Benar-benar sial? Tidak ada opsi yang lebih baik?
John Russell
1
bukan yang saya tahu .... ini selalu menjadi masalah ... sepertinya seseorang memilih saya, tapi sebenarnya tidak menyarankan solusi .... ha bunuh utusan itu!
nandoP
3

Saya menggunakan mac menjalankan El Capitan. Sementara saran di atas tidak bekerja untuk saya, mereka membawa saya ke solusi yang berfungsi:

  1. sebelum memulai VPN, jalankan ifconfig
  2. mulai VPN, lakukan ifconfigdan catat yang merupakan antarmuka baru. Dalam kasus saya itu adalah ppp0 dengan alamat ip 192.168.42.74

    ppp0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280
        inet 192.168.42.74 --> 192.0.2.1 netmask 0xffffff00
    
  3. ketik:

    sudo route add 192.168.1.79  192.168.42.74
    

Saya menguji dulu dengan pingdan kemudian saya membuktikannya bekerja dengan mengakses server git.

Ketika saya mencoba menggunakan dev ppp0 untuk akhir perintah rute seperti yang disebutkan di atas, ia mengeluh.

Robert Chapman III
sumber
2
Apa yang 192.168.1.79datang dari pertukaran ini?
carbocation
Server tujuan yang Anda sambungkan. Server ini berada di jaringan yang sama dengan VPN Anda, bukan koneksi lokal Anda.
Carlo del Mundo
1

Saya punya solusi sederhana yang saya gunakan di ruang kerja bersama yang memiliki rentang IP yang saling bertentangan (10.x)

Saya terhubung ke jaringan dengan ponsel saya, lalu saya berbagi koneksi jaringan via bluetooth dengan laptop saya. Sekarang saya dapat menggunakan VPN untuk perusahaan jarak jauh saya.

Saya yakin ini akan berfungsi sama melalui USB jika Anda membutuhkan koneksi yang lebih cepat.

Aaron Ramirez
sumber
1
Hei, itu sebenarnya solusi yang cukup pintar.
Nathan Osman
1

Jika Anda hanya perlu menekan satu atau dua alamat ip, tambahkan pernyataan rute ke file konfigurasi ovpn Anda seperti ini:

rute 192.168.1.10 255.255.255.255

rute 192.168.1.11 255.255.255.255

Ini akan menambahkan rute hanya untuk Ip itu ketika Anda menghubungkan vpn Anda dan menghapusnya ketika vpn itu terputus.

Tetap bekerja untuk saya di Windows.

Jesse Regier
sumber
1

Jawaban dari Aydin K. adalah untuk linux. Jika Anda menginginkan fungsi yang sama untuk windows, Anda bisa mengetik

route ADD 192.168.1.10 <IP of tunnel adapter>

atau

route ADD 192.168.1.10 IF <interface id>

Anda bisa mendapatkan antarmuka id dengan perintah:

route print
OllowainT
sumber
0

Hanya sebagai pengingat: seluruh masalah ini disebabkan oleh kekurangan alamat IPv4 selama bertahun-tahun, dan penggunaan ekstensif rentang IP pribadi di belakang NAT untuk mengatasi kekurangan ini!

Solusi ideal dan definitif untuk masalah ini cukup mudah (meskipun dapat, dan akan, membutuhkan waktu untuk diluncurkan secara global): IPv6 ...

Di dunia IPv6, tidak ada kekurangan IP publik (dan tidak akan ada, acara dalam beberapa dekade). Jadi tidak ada alasan untuk tidak memiliki IP publik di masing-masing dan setiap perangkat di setiap jaringan. Dan jika Anda membutuhkan isolasi jaringan, teruslah memfilter dengan firewall, tetapi tanpa NAT yang jelek ...

CuriousFab
sumber