Answers:
好的,这个问题是在Internet上一遍又一遍地问的,并且在大多数情况下,答案是(半)错误的,您不能执行原始帖子中描述的操作。让我一劳永逸地阐明它:)
简短的答案是L2TP(和PPTP)没有在协议内部进行路由推送的功能,但是可以在协议外部实现。
由于L2TP是Microsoft的发明,因此最佳的信息来源是其技术文档(顺便说一句,他们非常擅长)。我下面将要解释的技术描述可以在VPN寻址和路由中找到。用于正确设置所有内容的关键字(如果您要进行自己的研究)是:DHCPINFORM和“无类静态路由”。
首先,它是如何工作的:
好了,有一个警告:
我将描述使用Linux盒作为VPN服务器的典型配置(您可以使用指向Microsoft文档的链接来配置MS服务器)。
要在客户端上配置路由,我们将需要以下要素:
以下是有效的accel-ppp配置的转储。我将提供它的全部内容,否则将很难解释结果。如果您已经可以使用VPN,则可以跳过此配置文件,而专注于下面描述的DHCP配置。
[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 ~]#
===
此时,我们的客户端可以通过L2TP(或PPTP)进行连接并与VPN服务器进行通信。因此,唯一缺少的部分是DHCP服务器,该服务器正在侦听所创建的隧道并以必要的信息进行响应。以下是dnsmasq配置文件的摘录(我仅提供与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 ~]#
在上面的摘录中,我们通过192.168.99.254(VPN服务器)推送了192.168.70.0/24、192.168.75.0/24和10.0.0.0/24路由。
最后,如果您嗅探网络流量(例如在VPN服务器上),则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 I几乎忘记了成功使用上述配置所需的必要部分。好吧,我在提到的Microsoft文档中对此进行了描述,但是谁阅读了该文档?:)好的,应该在VPN连接上配置客户端时不使用“使用默认网关”(在Windows中,它位于连接的属性->网络-> Internet协议版本4(TCP / IPv4)->属性->高级-> IP设置中) )。在某些客户端上,还有一个名为“禁用基于类的路由添加”的选项-必须取消设置,因为它显式禁用了我们尝试实现的功能。