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:
- klien terhubung ke server VPN
- setelah otentikasi berhasil, sebuah terowongan aman dibuat
- 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 :))
- 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.