OK, câu hỏi này được hỏi đi hỏi lại qua Internet và hầu hết thời gian có một câu trả lời (bán) không chính xác mà bạn không thể làm những gì được mô tả trong bài viết gốc. Hãy để tôi làm rõ nó một lần và mãi mãi :)
Câu trả lời ngắn gọn là L2TP (và PPTP cho vấn đề đó) không có phương tiện để thực hiện đẩy tuyến trong giao thức, nhưng nó có thể đạt được bên ngoài giao thức.
Vì L2TP là một phát minh của Microsoft, nên nguồn thông tin tốt nhất là tài liệu kỹ thuật của họ (và nhân tiện họ cũng khá giỏi về nó). Mô tả kỹ thuật về những gì tôi sẽ giải thích bên dưới có thể được tìm thấy tại Địa chỉ và định tuyến VPN . Các từ khóa để thiết lập mọi thứ đúng cách (nếu bạn sẽ thực hiện nghiên cứu của riêng mình) là: DHCPINFORM và "các tuyến tĩnh không có lớp".
Trước hết, cách thức hoạt động:
- một máy khách kết nối với máy chủ VPN
- Sau khi xác thực thành công, một đường hầm an toàn được thiết lập
- khách hàng sử dụng thông báo DHCPINFORM sau khi kết nối để yêu cầu tùy chọn DHCP Classless static Routes. Tùy chọn DHCP này chứa một tập hợp các tuyến đường được tự động thêm vào bảng định tuyến của máy khách yêu cầu ( Tôi thường xuyên sao chép và dán dòng này trực tiếp từ tài liệu của Microsoft :))
- máy chủ VPN trả lời tin nhắn đó với bộ tuyến thích hợp
Vâng, có một cảnh báo:
- có RFC-3442 mô tả "Các tuyến tĩnh không có lớp DHCP" và ở đó tuyên bố rằng mã cho tùy chọn này là 121. Microsoft đã quyết định phát minh lại bánh xe (như mọi khi) và sử dụng mã 249 cho tùy chọn này. Do đó, để hỗ trợ nhiều khách hàng hơn, chúng tôi cần phản hồi lại bằng cả hai mã
Tôi sẽ mô tả một cấu hình điển hình sử dụng hộp Linux là máy chủ VPN (bạn có thể định cấu hình máy chủ MS bằng liên kết đến tài liệu của Microsoft).
Để cấu hình các tuyến đường trên máy khách, chúng ta sẽ cần các thành phần sau:
- L2TP / IPSEC (hoặc PPTP) = ví dụ, accel-ppp là một máy chủ L2TP / PPTP mã nguồn mở đẹp
- Máy chủ DHCP = có rất nhiều, nhưng tôi sẽ mô tả cấu hình của dnsmasq
Sau đây là kết xuất của cấu hình accel-ppp đang hoạt động. Tôi đang cung cấp nó toàn bộ, nếu không sẽ khó để giải thích những gì đi đâu. Nếu bạn đã có VPN hoạt động, bạn có thể bỏ qua tệp cấu hình này và tập trung vào cấu hình DHCP được mô tả bên dưới.
[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 ~]#
===
Tại thời điểm này, khách hàng của chúng tôi có thể kết nối qua L2TP (hoặc PPTP) và liên lạc với máy chủ VPN. Vì vậy, phần còn thiếu duy nhất là một máy chủ DHCP đang lắng nghe các đường hầm được tạo và phản hồi lại với các thông tin cần thiết. Dưới đây là một đoạn trích từ tệp cấu hình dnsmasq (Tôi chỉ cung cấp các tùy chọn liên quan đến 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 ~]#
Trong đoạn trích trên, chúng tôi đang đẩy các tuyến 192.168,70.0 / 24, 192.168.75.0/24 và 10.0.0.0/24 qua 192.168.99.254 (máy chủ VPN).
Cuối cùng, nếu bạn đánh hơi lưu lượng mạng (ví dụ: trên máy chủ VPN), bạn sẽ thấy một cái gì đó giống như sau cho phản hồi trên thông báo 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 Tôi gần như đã quên một phần thiết yếu cần thiết để sử dụng thành công cấu hình trên. Vâng, nó đã được mô tả trong các tài liệu Microsoft mà tôi đã đề cập, nhưng ai đọc tài liệu này? :) OK, khách hàng nên được định cấu hình mà không cần 'Sử dụng cổng mặc định' trên kết nối VPN (trên Windows, thuộc tính của kết nối -> Mạng -> Giao thức Internet Phiên bản 4 (TCP / IPv4) -> Thuộc tính -> Nâng cao -> Cài đặt IP ). Trên một số khách hàng cũng có một tùy chọn gọi là 'Vô hiệu hóa bổ sung tuyến đường dựa trên lớp' - nó phải được bỏ đặt vì nó vô hiệu hóa rõ ràng chức năng mà chúng tôi đang cố gắng thực hiện.