L2TP VPN是否可以在连接期间为客户端执行自动路由配置?


13

我们已经在本教程中设置了L2TP VPN服务器,所有操作都像一个超级按钮。

唯一的问题是

  1. 我们不希望客户端使用此VPN路由所有流量,而只路由特定的子网,例如10.0.0.0/20

  2. 在Mac上,我们需要使用命令手动设置路由,但是对于移动设备,似乎没有办法?

因此,是否可以为客户端自动配置子网“ 10.0.0.0/20”?


您是否尝试过禁用客户端上的“通过VPN发送所有流量”或类似选项?
Bert 2014年

Answers:


33

好的,这个问题是在Internet上一遍又一遍地问的,并且在大多数情况下,答案是(半)错误的,您不能执行原始帖子中描述的操作。让我一劳永逸地阐明它:)

简短的答案是L2TP(和PPTP)没有在协议内部进行路由推送的功能,但是可以在协议外部实现。

由于L2TP是Microsoft的发明,因此最佳的信息来源是其技术文档(顺便说一句,他们非常擅长)。我下面将要解释的技术描述可以在VPN寻址和路由中找到。用于正确设置所有内容的关键字(如果您要进行自己的研究)是:DHCPINFORM和“无类静态路由”。

首先,它是如何工作的:

  1. 客户端连接到VPN服务器
  2. 成功通过身份验证后,将建立安全隧道
  3. 客户端在连接后使用DHCPINFORM消息来请求DHCP无类静态路由选项。此DHCP选项包含一组路由,这些路由会自动添加到发出请求的客户端的路由表中(我直接从Microsoft文档中直接复制并粘贴了该行:))
  4. VPN服务器使用一组适当的路由回复该消息

好了,有一个警告:

  • RFC-3442描述“DHCP无类别静态路由”,并有它指出,此选项的代码为121微软决定重新发明轮子(一如既往),并使用此选项代码249。因此,为了支持更广泛的客户,我们需要同时回覆两个代码

我将描述使用Linux盒作为VPN服务器的典型配置(您可以使用指向Microsoft文档的链接来配置MS服务器)。

要在客户端上配置路由,我们将需要以下要素:

  • L2TP / IPSEC(或PPTP)=例如,accel-ppp是一个不错的开源L2TP / PPTP服务器
  • DHCP服务器=有很多,但是我将描述dnsmasq的配置

以下是有效的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设置中) )。在某些客户端上,还有一个名为“禁用基于类的路由添加”的选项-必须取消设置,因为它显式禁用了我们尝试实现的功能。


据我了解,经典的L2TP通过UDP封装PPP数据包。我可能是错的,但是我不认为PPP支持DHCP,特别是发送额外的路由。L2TP版本3(在Linux内核领域仍然很新)使您可以封装以太网帧,以便在那里进行封装,但是我很确定,移动设备支持的程度可能会有所不同。
Matthew Ife 2014年

马修,我真的不知道如何正确地解决您的问题,因为您将很多东西混为一句话:)好吧,让我们从以下内容开始:提供的配置正在我所监管的数百名勇士中工作。因此,这是一个可行的示例。您可以通过Google搜索PPP上的DHCP,并阅读有关Cisco,Juniper等如何实现DHCP的大量技术文档。如果您不想深入研究它,请想象一下L2TP封装了UDP上的PPP,PPP是一个重点-可以使用IP的点对点协议,DHCP是基于IP的协议,所以我们在这里很不错:)
galaxy

1
另外,当我包含指向L2TP的Microsoft技术文档的链接时,得到这种评论是很奇怪的,在L2TP中,它们描述了如何使用DHCPINFORM正确地进行设置。由于有人研究,我可以理解人们何时不想阅读答案(尽管它包括来自工作系统的配置文件),但是当有来自以下方面的技术规范时,请说“我不认为PPP支持DHCP”该协议的创建者指出它的设计方式有点奇怪。
星系

很好地阐明我的观点“ PPP不支持DHCP”,我的意思是IP地址分配是通过PPP链路控制协议进行的(点对点没有“广播”地址的概念)。所以我认为您误会了我的意思。现在我明白您的意思是DHCPINFORM在建立连接后出现在隧道内部,与初始连接无关。我现在同意该方案有效,前提是客户端将在建立连接后发送DHCPINFORM消息。
马修·伊夫,2014年

马修,谢谢:)。是的,我们没有使用DHCP进行地址分配,它是由IPCP完成的(不是您所说的LCP,但这无关紧要),但是,Microsoft技术文档指出,有效的客户端应发送DHCPINFORM消息和Option 249以获取路由配置,这正是我在答案中描述的内容。好吧,虽然它是一个有效的有效答案,但有人已经否决了我的答案:)
星系

1

我认为您不能在L2TP / IPSEC VPN中将路由推送到客户端。您将必须直接在客户端上进行配置。

您遇到什么移动客户端?如果我们知道您使用的操作系统和软件,则提供一些输入会更容易。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.