logo_fb.jpg

0x00 前言

搭建 VPN 最简单的方式无非就是 PPTP 服务器了,只需要简单设置一下用户名和路由规则,开启服务端就可以连接使用。

但万恶的苹果在前几年的某一天起突然废除了 iOS/MacOS 上的 PPTP 协议支持,原因简单粗暴:PPTP 不满足安全需求,因此这时候就需要使用 L2TP 来进行替代使用了。

百度上大多的 L2TP 都是纯 L2TP 协议的 VPN 服务,或者带有 IPsec 加密的教程大多数都是 Windows 单平台居多,搭建之后由于与 iOS/MacOS 的加密协议不一致导致无法正常连接,因此本文记载了 iOS+Windows 双平台 IPsec 设置方案,同时兼顾 Win+Apple 产品。

0x01 IPSec

L2TP 和 PPTP 最大的区别是在协议上,PPTP 要求互联网络为 IP 网络。

L2TP 只要求隧道媒介提供面向数据包的点对点的连接。L2TP 可以在 IP(使用 UDP),帧中继永久虚拟电路(PVCs),X.25 虚拟电路(VCs)或 ATM VCs 网络上使用。

与 PPTP 只能点对点建立单一隧道相比,L2TP 支持点对点多隧道进行传输。然而,L2TP 本身是不提供隧道验证的,从 L2TP 的包头可以看出,因此,我们可以使用 IPsec 进行隧道验证。

依次打开 IP——IPSec,进入 IPSec 配置窗口

打开IPSEC设置

  • 下文开始所有未提到的配置均为默认设置,无需改动
  • 文中被 Disable(设置为灰色)的设置是为了防止对读者造成干扰暂时关闭,因此在阅读本文截图时请忽略。

Proposal(提议)设置

IPSec 在第一阶段连接时,双方会约定采用一个大家共有的安全提议进行连接,Proposal 是 IPSec 的一种安全策略,需要客户端和服务端都有一致的提议才可以连接,因此我们需要设置同时支持 Windows+Mac 的安全提议。

IPSEC设置

Profile(配置)设置

在 IPSec 提议阶段通过后,双方会约定一个加密方式来传输 VPN 数据,这时候我们同上,对应设置 Windows+Mac 双方都支持的加密方式。

IPSEC设置

当上述的 Proposal 和 Profile 都正确设置后,至此 IPSec 配置完成。

0x02 配置给 VPN 使用的 IP 池

用户连接上 VPN 后,ROS 需要为用户分配 IP 地址,如果只有自己使用,可以不必分配 IP 地址池,手动指定一个 IP。如果是多机器接入的情况,这时候需要一个对应的 IP 地址池来让 ROS 自行选择分配给客户端的内网 IP 地址(ROS 默认会从地址池的最后一个 IP 地址倒序分配)

图中我划分了两个池,用以区分用户和管理员,本文以 VPN-USER 为例:
用户连接成功后,ROS会在10.0.2.51-10.0.2.99这个IP区间分配一个IP地址给客户端

用户连接成功后,ROS 会在 10.0.2.51-10.0.2.99 这个 IP 区间分配一个 IP 地址给客户端。

至此,IP 地址池配置完成。

0x03 L2TP 用户配置

我们需要为 L2TP 设置好用户配置模板,用户才能根据我们指定的模板来规范行为。

依次点开 PPP——Profile 选项卡,点击+号,添加配置。

IPSEC设置

这方面没有太大的约束性,可以根据自己实际情况进行配置,下面贴出每个参数的详细中文解释,全部参考自文末的官方 WIKI,全凭个人经验+理解,如有错误请指出。

General(通用设置)

  • Name:可以自定义,用来方便在配置其他选项的时候识别
  • Local Address:VPN 的网关地址,你可以理解为 VPN 通道上的路由器地址
  • Remote Address:用户的 IP 地址,一般指定 0x02 提到的 IP 地址池,ROS 会为使用了这个配置模板的用户分配 IP 地址。
  • Bridge:用于 VPN 和内网互通,如果 ROS 采用 Bridge 的方式进行多端口共享上网,这里指定你内网的 Bridge 即可。
  • DNS Server:用来给客户端指定 DNS,如果不填,会默认使用路由器作为 DNS 服务器。
  • 剩余其他选项不建议调整

Protocos(协议设置)

  • Use IPv6: 这个没啥好说的,懂的都懂。
  • Use Compression:是否使用压缩传输,可以减少网络传输量,但对设备 CPU 有要求。
  • Use Encryption:使用加密,无需过多解释,建议开启。

Limits(限速设置)

  • Session Timeout:会话超时时间,限制每个客户端连入后多久会被强制断开连接。
  • Idle Timeout:挂机超时时间,限制用户在多久没有数据交换动作后强制断开连接。
  • Rate Limit:速率限制,限制用户的上下行速率,填写格式 RX(下行)/TX(上行),例如:2000K/2000K 或者 2M/2M
  • Only One:设置为 NO 时可以一号多终端,设置为 YES 时之后只允许一号一终端。

Queue(队列设置,被俗称为 QoS/智能限速)

  • Insert Queue Before:指定优先级,设置为 first 可以理解为 QoS 插队模式,bottom 为默认队列。
  • Parent Queue:指定这个配置继承使用哪个 QoS 规则。
  • Queue Type:决定了 QoS 的运作模式,比如硬件 QoS,软件 QoS(关于 Queue 功能,请参考文末相关文献。)

Scripts(脚本设置)

  • 这方面没什么好介绍的,就是客户端链接进来之后 ROS 执行什么指令,一般的玩法有:

    • 写入特定日志文件
    • 给管理员发送邮件
    • 等等等等....

至此,Profile 配置完成。

0x04 L2TP Server(L2TP 服务端配置)

所有配置均已完成,现在我们来做 L2TP 服务器本体的最终配置。

依次点开 PPP——L2TP Server。

IPSEC设置

依然是可能会用到的参数介绍

  • Enable:不打钩没法使用,这个没啥好说的
  • Max MTU:最大网络传输单元,意思就是数据包超过 1450 后,路由器会将这个数据包分割成 2 个或不等的数据包进行传输。关于更多 MTU 的知识,请参考文末拓展资料。
  • Max MRU:最大网络接收单元,同上。
  • KeepAlive Timeout:决定了客户端心跳包未响应多久后强制断开连接。
  • Default Profile:用户配置模板,选择0x04中配置好的模板即可。
  • Max Sessions:最大会话数量,限制最大多少个客户端同时连接。
  • authentication:验证模式,决定 L2TP 允许多少种验证模式
  • USE IPSec:设置为 YES 将使用 0x01 提到的配置,建议设置 YES
  • IPSec Secret:IPSec 共享密钥,L2TP 客户端连接时会用到。
  • Caller ID Type:决定了路由器使用什么方式来归纳用户。

    • ip address:根据 IP 地址
    • number:根据用户名
  • One Session Per Host:限制一个客户端只能发起一个 L2TP 连接。

0x05 Firewall(防火墙配置)

经过上述4步配置后,我们的VPN就搭建完成了,但是我们这时候直接连接可能会面临两个问题:

  • 连接不上,提示远程服务器没有相应
  • 连接上之后电脑/手机断网了

以上症状都是防火墙未正确设置导致的,接下来将依次解决这两个问题。

连接不上/提示远程服务器没有响应

解决方法:在防火墙放行L2TP/IPSec的通讯端口

需要放行的端口:

  • TCP:1723
  • UDP:500,1701,4500

filewall.png

连接上之后电脑/手机断网了

解决方法:为VPN服务端网段设置IP伪装
下图的src.net填写VPN所在网段,如果网段和内网地址处于16段的话可以参考下方的规则设置。一条规则满足内网+VPN

logo_fb.jpg

至此全部配置已完成,如有其他疑问,欢迎留言

0x16 参考文献

官方 WIki

拓展资料