Saya ingin menghubungkan beberapa LAN yang terletak di bangunan terpencil.
Situs "pusat" memiliki komputer Linux yang menjalankan OpenVPN. Setiap situs jarak jauh juga menjalankan OpenVPN.
- situs pusat memiliki nomor 192.168.0.0/24 LAN
- beberapa situs jarak jauh juga diberi nomor 192.168.0.0/24
- Saya tidak bisa / tidak mau / tidak mau / apa pun memodifikasi penomoran LAN
- Saya tidak memiliki kontrol pada OpenVPNs paling terpencil
Saya kemudian perlu:
1. mendefinisikan LAN virtual
2. mengkonfigurasi NAT 1: 1 untuk setiap situs
3. NAT 1: 1 harus dikonfigurasi pada router pusat
.
Jadi setiap situs terlihat memiliki LAN 10.10.x.0 / 24.
Ketika sebuah komputer ingin mencapai, katakanlah, 192.168.0.44 di situs 12, ia hanya perlu mengirim paquet ke 10.10.12.44
Mengoperasikan VPN bukan masalah bagi saya. Saat ini saya menghubungkan 60+ situs. Tapi saya tidak menemukan cara sederhana untuk melakukan NAT 1: 1 ini.
Berikut adalah contoh paket yang dikirim dari situs pusat ke situs jarak jauh, dan paket responsnya:
Saya melakukan beberapa tes dengan iptables NETMAP tapi saya tidak bisa membuatnya bekerja karena saya tidak menemukan cara untuk mengubah sumber + tujuan setelah keputusan routing.
Saya lebih suka menghindari fitur --client-nat
OpenVPN yang baru .
Mungkin saya harus memaksa routing ip route
? Atau untuk mengulang dua kali ke tumpukan jaringan dengan veth
?
Catatan: Saya tidak ingin menggunakan topeng. Hanya 1/1 NAT.
EDIT:
Tidak mungkin dengan pengaturan openVPN biasa. Karena paket dari situs jarak jauh tidak dapat dibedakan dari paket dari situs lain: keduanya memiliki sumber dan alamat tujuan yang sama, dan keduanya berasal dari antarmuka tun (atau ketuk) yang sama. Jadi tidak mungkin untuk sumber-NAT itu.
Solusi 1: lakukan NAT di situs remote. Tidak mungkin dalam kasus saya. Saya harus melakukannya hanya di situs pusat.
Solusi 2: siapkan satu VPN untuk setiap situs jarak jauh. Jadi saya akan memiliki satu lagu untuk masing-masing. Saya pikir ini bisa baik-baik saja. Memori tidak terlalu efisien tapi ok.
Solusi 3: mengatur terowongan (tidak terenkripsi) di dalam VPN untuk setiap situs. Ini akan memberikan satu antarmuka untuk masing-masing. Terowongan sederhana bukanlah platform silang (ke knoledge saya). Misalnya GRE atau ipip atau duduk ok untuk Linux, tetapi beberapa situs yang jauh hanya menjalankan satu komputer Windows, jadi openVPN diinstal di dalamnya. Jadi mustahil untuk memasang terowongan sederhana. Pilihan lain adalah menggunakan terowongan yang lebih rumit (yang?) Tetapi overhead pada sistem dan pada sysadmin mungkin lebih besar daripada memiliki beberapa VPN
Solusi 4: kompilasi openVPN terbaru, karena termasuk fitur NAT 1: 1. Saya menguji ini minggu ini.
Jawaban:
Solusi yang sangat mendasar adalah:
1. gunakan OpenVPN 2.3 atau lebih (saat ini, yang terbaru adalah 2.3-alpha) untuk server + klien
2. gunakan opsi konfigurasi OpenVPN di bawah
3. jangan gunakan hal lain (tidak ada ipfilter, tidak ada trik)
Di sisi server, Anda perlu mendistribusikan alamat VPN secara manual (jadi tidak ada
server
pilihan, Anda harus menggunakanifconfig
atauifconfig-push
):The
route
danpush route
danclient-nat
garis diperlukan jika Anda ingin berkomunikasi secara langsung antara router (ping 10.99.99.1
dari sebuah situs yang jauh pikir VPN). Lain Anda bisa membuangnya..
.
Sekarang Anda harus memilih alamat jaringan virtual. Saya tetap sama dengan yang Anda gunakan dalam contoh Anda: 10.10.0.0/16
Anda mengizinkan perutean untuk ini:
.
.
Anda sekarang harus menginstruksikan klien untuk menggunakan NAT 1: 1:
Baris pertama mengatur alamat router jarak jauh. Waspadai driver Windows yang membutuhkan alamat khusus.
Baris kedua dan terakhir memungkinkan router yang jauh untuk berkomunikasi dari antarmuka 10.99.99.x.
Baris ketiga dan keempat melakukan sumber dan tujuan 1: 1 NAT
Baris kelima memberi tahu OpenVPN apa yang harus dilakukan dengan paket yang sesuai.
Metode ini memungkinkan untuk menghubungkan situs dengan alamat LAN yang identik (atau tidak), tanpa host yang dibayangi.
sumber
Saya telah melakukan sesuatu yang mirip dengan antarmuka nyata, tetapi saya tidak bisa melihat mengapa itu tidak bekerja dengan antarmuka VPN.
Idenya adalah bahwa, karena Anda memiliki subnet yang sama tersedia di antarmuka yang berbeda pada router itu, itu mempersulit perutean. Pada dasarnya, ketika sebuah paket untuk 10.10.13.123 memasuki router, itu adalah DNAT sebelum melakukan routing ke 192.168.0.123, jadi Anda harus bisa memberi tahu routing bahwa itu ditujukan untuk 192.168.0.123 pada antarmuka VPN13 .
Itu bisa dilakukan dengan menggunakan tanda firewall dan aturan perutean yang menggunakan tanda itu. SNAT dan DNAT harus dilakukan dengan target firewall NETMAP. Untuk SNAT, itu masalah yang sama, dalam POSTROUTING, Anda telah kehilangan informasi bahwa paket berasal dari antarmuka ini atau itu dan mereka semua mendapatkan alamat sumber 192.168.0.x. Jadi Anda perlu tanda juga untuk membawa informasi itu dari mangle-PREROUTING ke nat-POSTROUTING. Anda dapat menggunakan tanda yang sama, tetapi kemudian itu berarti paket-paket itu akan menggunakan tabel rute alternatif itu, jadi Anda harus menduplikasi tabel routing global pada semua.
Untuk setiap jaringan, Anda akan melakukan:
Di atas, kami menggunakan 4 bit pertama dari tanda tersebut , untuk memungkinkan hingga 7 jaringan untuk dirutekan dengan cara itu.
sumber