Apakah mungkin untuk L2TP VPN untuk melakukan konfigurasi rute otomatis untuk klien selama terhubung?

13

Kami telah menyiapkan server L2TP VPN dengan tutorial ini , semuanya berfungsi seperti pesona.

Satu-satunya masalah adalah

  1. Kami tidak ingin klien merutekan semua lalu lintas menggunakan VPN ini, hanya subnet tertentu, misalnya 10.0.0.0/20

  2. Di Mac, kita perlu mengatur rute secara manual menggunakan perintah, tetapi untuk perangkat seluler, sepertinya tidak ada cara untuk melakukannya?

Jadi, dimungkinkan untuk mengkonfigurasi untuk klien secara otomatis untuk subnet "10.0.0.0/20"?

Howard
sumber
Sudahkah Anda mencoba menonaktifkan opsi 'kirim semua lalu lintas melalui VPN' atau yang serupa pada klien?
Bert

Jawaban:

33

OK, pertanyaan ini ditanyakan berulang kali melalui Internet dan sebagian besar waktu ada jawaban (semi-) yang salah bahwa Anda tidak dapat melakukan apa yang dijelaskan dalam posting asli. Biarkan saya mengklarifikasi itu sekali dan untuk semua :)

Jawaban singkatnya adalah L2TP (dan PPTP dalam hal ini) tidak memiliki fasilitas untuk melakukan rute push di dalam protokol, tetapi dapat dicapai di luar protokol.

Karena L2TP adalah penemuan Microsoft, sumber informasi terbaik adalah dokumentasi teknis mereka (dan omong-omong mereka cukup bagus). Deskripsi teknis tentang apa yang akan saya jelaskan di bawah ini dapat ditemukan di VPN Addressing and Routing . Kata kunci untuk mengatur semuanya dengan benar (jika Anda akan melakukan penelitian sendiri) adalah: DHCPINFORM dan "rute statis tanpa kelas".

Pertama-tama, cara kerjanya:

  1. klien terhubung ke server VPN
  2. setelah otentikasi berhasil, sebuah terowongan aman dibuat
  3. klien menggunakan pesan DHCPINFORM setelah koneksi untuk meminta opsi Rute Statis Tanpa Kelas DHCP. Opsi DHCP ini berisi sekumpulan rute yang secara otomatis ditambahkan ke tabel perutean klien yang meminta ( saya dengan kasar menyalin dan menempelkan baris ini langsung dari dokumentasi Microsoft :))
  4. server VPN membalas pesan itu dengan serangkaian rute yang sesuai

Nah, ada peringatan:

  • ada RFC-3442 yang menggambarkan "Rute Statis Tanpa DHCP Class" dan di sana dinyatakan bahwa kode untuk opsi ini adalah 121. Microsoft memutuskan untuk menemukan kembali roda (seperti biasa) dan menggunakan kode 249 untuk opsi ini. Karenanya, untuk mendukung jajaran klien yang lebih luas, kami perlu merespons kembali dengan kedua kode

Saya akan menggambarkan konfigurasi khas menggunakan kotak Linux sebagai server VPN (Anda dapat mengkonfigurasi server MS menggunakan tautan ke dokumentasi Microsoft).

Untuk mengkonfigurasi rute pada klien kami akan membutuhkan bahan-bahan berikut:

  • L2TP / IPSEC (atau PPTP) = misalnya, accel-ppp adalah server L2TP / PPTP open source yang bagus
  • Server DHCP = ada banyak, tetapi saya akan menjelaskan konfigurasi dnsmasq

Berikut ini adalah dump konfigurasi accel-ppp yang berfungsi. Saya menyediakannya secara keseluruhan, jika tidak akan sulit untuk menjelaskan apa yang terjadi di mana. Jika VPN Anda sudah berfungsi, Anda dapat melewati file konfigurasi ini dan berkonsentrasi pada konfigurasi DHCP yang dijelaskan di bawah ini.

[root@vpn ~]# cat /opt/accel-ppp/config/accel-ppp.conf
[modules]
log_syslog
pptp
l2tp
auth_mschap_v2
ippool
sigchld
chap-secrets
logwtmp

[core]
log-error=/var/log/accel-ppp/core.log
thread-count=4

[ppp]
verbose=1
min-mtu=1280
mtu=1400
mru=1400
check-ip=1
single-session=replace
mppe=require
ipv4=require
ipv6=deny
ipv6-intf-id=0:0:0:1
ipv6-peer-intf-id=0:0:0:2
ipv6-accept-peer-intf-id=1

[lcp]
lcp-echo-interval=30
lcp-echo-failure=3

[auth]
#any-login=0
#noauth=0

[pptp]
echo-interval=30
echo-failure=3
verbose=1

[l2tp]
host-name=access-vpn
verbose=1

[dns]
dns1=192.168.70.251
dns2=192.168.70.252

[client-ip-range]
disable

[ip-pool]
gw-ip-address=192.168.99.254
192.168.99.1-253

[log]
log-file=/var/log/accel-ppp/accel-ppp.log
log-emerg=/var/log/accel-ppp/emerg.log
log-fail-file=/var/log/accel-ppp/auth-fail.log
log-debug=/var/log/accel-ppp/debug.log
copy=1
level=3

[chap-secrets]
gw-ip-address=192.168.99.254
chap-secrets=/etc/ppp/chap-secrets

[cli]
telnet=127.0.0.1:2000
tcp=127.0.0.1:2001

[root@vpn ~]# 
===

Pada titik ini klien kami dapat terhubung melalui L2TP (atau PPTP) dan berkomunikasi dengan server VPN. Jadi, satu-satunya bagian yang hilang adalah server DHCP yang mendengarkan pada terowongan yang dibuat dan merespons kembali dengan informasi yang diperlukan. Di bawah ini adalah kutipan dari file konfigurasi dnsmasq (saya hanya menyediakan opsi terkait DHCP):

[root@vpn ~]# grep -E '^dhcp' /etc/dnsmasq.conf 
dhcp-range=192.168.99.254,static
dhcp-option=option:router
dhcp-option=121,192.168.70.0/24,192.168.99.254,192.168.75.0/24,192.168.99.254,10.0.0.0/24,192.168.99.254
dhcp-option=249,192.168.70.0/24,192.168.99.254,192.168.75.0/24,192.168.99.254,10.0.0.0/24,192.168.99.254
dhcp-option=vendor:MSFT,2,1i
[root@vpn ~]#

Dalam kutipan di atas kami mendorong rute 192.168.70.0/24, 192.168.75.0/24, dan 10.0.0.0/24 melalui 192.168.99.254 (server VPN).

Akhirnya, jika Anda mengendus lalu lintas jaringan (mis. Pada server VPN), Anda akan melihat sesuatu seperti berikut ini untuk respons pada pesan DHCPINFORM:

19:54:46.716113 IP (tos 0x0, ttl 64, id 10142, offset 0, flags [none], proto UDP (17), length 333)
    192.168.99.254.67 > 192.168.99.153.68: BOOTP/DHCP, Reply, length 305, htype 8, hlen 6, xid 0xa27cfc5f, secs 1536, Flags [none]
      Client-IP 192.168.99.153
      Vendor-rfc1048 Extensions
        Magic Cookie 0x63825363
        DHCP-Message Option 53, length 1: ACK
        Server-ID Option 54, length 4: 192.168.99.254
        Domain-Name Option 15, length 18: "vpn.server.tld"
        Classless-Static-Route-Microsoft Option 249, length 24: (192.168.70.0/24:192.168.99.254),(192.168.75.0/24:192.168.99.254),(10.0.0.0/24:192.168.99.254)
        Vendor-Option Option 43, length 7: 2.4.0.0.0.1.255

PS Saya hampir lupa bagian penting yang diperlukan untuk keberhasilan penggunaan konfigurasi di atas. Yah, itu dijelaskan dalam dokumen Microsoft yang saya maksud, tetapi siapa yang membaca dokumentasinya? :) OK, klien harus dikonfigurasikan tanpa 'Gunakan gateway default' pada koneksi VPN (pada Windows itu dalam properti koneksi -> Jaringan -> Internet Protocol Version 4 (TCP / IPv4) -> Properti -> Lanjutan -> Pengaturan IP ). Pada beberapa klien ada juga opsi yang disebut 'Nonaktifkan penambahan rute berbasis kelas' - itu harus tidak disetel karena secara eksplisit menonaktifkan fungsionalitas yang kami coba implementasikan.

galaksi
sumber
Ini adalah pemahaman saya bahwa L2TP klasik mengenkapsulasi paket PPP melalui UDP. Saya bisa saja salah tetapi saya tidak berpikir DHCP didukung lebih dari PPP, terutama mengirim rute tambahan. L2TP versi 3 (masih cukup baru di tanah kernel linux) memungkinkan Anda mengenkapsulasi frame ethernet sehingga mungkin saja ada, namun saya cukup yakin jarak tempuh dapat bervariasi, seberapa baik yang didukung melalui perangkat seluler.
Matthew Ife
Matthew, aku tidak benar-benar tahu bagaimana menjawab pertanyaanmu dengan benar karena kamu mencampur banyak hal menjadi satu kalimat :) Baiklah, mari kita mulai dengan yang berikut: konfigurasi yang disediakan bekerja pada ratusan pejuang jalanan yang aku awasi. Jadi, ini contoh yang bagus. Anda dapat Google untuk DHCP melalui PPP dan membaca banyak dokumentasi teknis tentang bagaimana itu diterapkan oleh Cisco, Juniper, dll. Jika Anda tidak ingin menyelaminya, bayangkan saja L2TP merangkum PPP melalui UDP, PPP adalah titik- protokol to-point di mana Anda dapat menggunakan IP, DHCP adalah protokol lebih dari IP, jadi kami baik-baik saja di sini :)
galaxy
1
Juga, cukup aneh untuk mendapatkan komentar semacam ini ketika saya menyertakan tautan ke dokumentasi teknis Microsoft untuk L2TP di mana mereka menggambarkan cara mengatur semuanya dengan benar menggunakan DHCPINFORM. Saya bisa mengerti ketika orang tidak ingin membaca jawabannya (walaupun itu termasuk file konfigurasi dari sistem kerja) karena itu penelitian seseorang, tetapi mengatakan "Saya tidak berpikir DHCP didukung lebih dari PPP" ketika ada spesifikasi teknis dari pembuat protokol di mana ia menyatakan bahwa ini adalah cara itu dirancang agak aneh.
galaksi
Nah untuk memperjelas poin saya "DHCP tidak didukung melalui PPP", maksud saya bahwa penetapan alamat IP terjadi melalui protokol kontrol tautan PPP (titik ke titik tidak memiliki gagasan tentang alamat 'siaran'). Jadi saya pikir Anda salah mengerti apa yang saya maksudkan. Saya mengerti sekarang apa yang Anda maksudkan adalah bahwa DHCPINFORM Terjadi di dalam terowongan setelah koneksi dibuat dan tidak ada hubungannya dengan koneksi awal. Saya setuju sekarang bahwa skema ini berfungsi, asalkan klien akan mengirim pesan DHCPINFORM setelah koneksi diatur.
Matthew Ife
Mathew, terima kasih :). Ya, kami tidak menggunakan DHCP untuk penetapan alamat, ini dilakukan oleh IPCP (dan bukan LCP seperti yang Anda katakan, tetapi ini tidak relevan), namun, dokumentasi teknis Microsoft menyatakan bahwa klien yang valid harus mengirim pesan DHCPINFORM dengan Opsi 249 untuk mendapatkan konfigurasi rute, dan inilah yang saya jelaskan dalam jawaban saya. Yah, seseorang sudah memilih jawaban saya walaupun itu adalah jawaban yang berfungsi, valid :)
galaxy
1

Saya tidak berpikir Anda bisa mendorong rute ke klien di L2TP / IPSEC VPN. Anda harus melakukan konfigurasi langsung pada klien.

Klien seluler apa yang bermasalah dengan Anda? Lebih mudah untuk memberikan beberapa masukan jika kami mengetahui sistem operasi dan perangkat lunak yang Anda gunakan.

pehrs
sumber