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 配置窗口
- 下文开始所有未提到的配置均为默认设置,无需改动
- 文中被 Disable(设置为灰色)的设置是为了防止对读者造成干扰暂时关闭,因此在阅读本文截图时请忽略。
Proposal(提议)设置
IPSec 在第一阶段连接时,双方会约定采用一个大家共有的安全提议进行连接,Proposal 是 IPSec 的一种安全策略,需要客户端和服务端都有一致的提议才可以连接,因此我们需要设置同时支持 Windows+Mac 的安全提议。
Profile(配置)设置
在 IPSec 提议阶段通过后,双方会约定一个加密方式来传输 VPN 数据,这时候我们同上,对应设置 Windows+Mac 双方都支持的加密方式。
当上述的 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 地址给客户端。
至此,IP 地址池配置完成。
0x03 L2TP 用户配置
我们需要为 L2TP 设置好用户配置模板,用户才能根据我们指定的模板来规范行为。
依次点开 PPP——Profile 选项卡,点击+号,添加配置。
这方面没有太大的约束性,可以根据自己实际情况进行配置,下面贴出每个参数的详细中文解释,全部参考自文末的官方 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。
依然是可能会用到的参数介绍
- 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
连接上之后电脑/手机断网了
解决方法:为VPN服务端网段设置IP伪装
下图的src.net填写VPN所在网段,如果网段和内网地址处于16段的话可以参考下方的规则设置。一条规则满足内网+VPN
至此全部配置已完成,如有其他疑问,欢迎留言
0x16 参考文献
官方 WIki
拓展资料