Oke, pertanyaan ini ditanyakan berulang kali melalui Internet dan seringkali ada jawaban (semi-) salah yang tidak dapat Anda lakukan seperti yang dijelaskan di postingan aslinya. Izinkan saya mengklarifikasi sekali dan untuk selamanya :)
Jawaban singkatnya adalah L2TP (dan PPTP dalam hal ini) tidak memiliki fasilitas untuk melakukan push rute 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 ahli dalam hal itu). Deskripsi teknis tentang apa yang akan saya jelaskan di bawah dapat ditemukan di Pengalamatan dan Perutean VPN. Kata kunci untuk mengatur semuanya dengan benar (jika Anda akan melakukan riset sendiri) adalah:DHCPINFORM dan "rute statis tanpa kelas".
Pertama-tama, cara kerjanya:
- klien terhubung ke server VPN
- setelah autentikasi berhasil, terowongan aman dibuat
- klien menggunakan pesan DHCPINFORM setelah koneksi untuk meminta opsi DHCP Classless Static Routes. Opsi DHCP ini berisi serangkaian rute yang ditambahkan secara otomatis 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 menjelaskan "Rute Statis Tanpa Kelas DHCP" dan di sana disebutkan bahwa kode untuk opsi ini adalah 121. Microsoft memutuskan untuk menemukan kembali roda (seperti biasa) dan menggunakan kode 249 untuk opsi ini. Oleh karena itu, untuk mendukung klien yang lebih luas, kami perlu membalas dengan kedua kode
Saya akan menjelaskan konfigurasi tipikal menggunakan kotak Linux sebagai server VPN (Anda dapat mengonfigurasi server MS menggunakan tautan ke dokumentasi Microsoft).
Untuk mengonfigurasi rute pada klien, kami memerlukan bahan-bahan berikut:
- L2TP/IPSEC (atau PPTP) =misalnya, accel-ppp adalah server L2TP/PPTP sumber terbuka yang bagus
- Server DHCP =ada banyak, tapi saya akan menjelaskan konfigurasi dnsmasq
Berikut ini adalah dump dari konfigurasi accel-ppp yang berfungsi. Saya menyediakannya secara keseluruhan, jika tidak, akan sulit untuk menjelaskan apa yang terjadi. Jika VPN Anda sudah berfungsi, Anda dapat melewati file konfigurasi ini dan berkonsentrasi pada konfigurasi DHCP yang dijelaskan di bawah.
[[email protected] ~]# 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
[[email protected] ~]#
===
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 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):
[[email protected] ~]# 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
[[email protected] ~]#
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).
Terakhir, jika Anda mengendus lalu lintas jaringan (mis. di server VPN), Anda akan melihat sesuatu seperti berikut 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
P.S. Saya hampir lupa bagian penting yang diperlukan untuk keberhasilan penggunaan konfigurasi di atas. Yah, itu dijelaskan dalam dokumen Microsoft yang saya rujuk, tetapi siapa yang membaca dokumentasinya? :) Oke, klien harus dikonfigurasikan tanpa 'Gunakan gateway default' pada koneksi VPN (pada Windows ada di properti koneksi -> Jaringan -> Protokol Internet Versi 4 (TCP/IPv4) -> Properti -> Lanjutan -> Pengaturan IP ). Pada beberapa klien ada juga opsi yang disebut 'Nonaktifkan penambahan rute berbasis kelas' - ini harus tidak disetel karena secara eksplisit menonaktifkan fungsionalitas yang kami coba terapkan.