PPPoE

PPPoE 支持通过以太网链路上的 PPP 和 MLPPP 进行 IPv6 前缀委派,同时支持客户端到服务器和服务器到客户端两种配置。它分发现阶段和会话阶段运行,使用 LCP/CHAP 认证以及 IPCP 进行 IP 地址分配。MTU 方面的考量确保正确封装,而认证方法、按需拨号等客户端属性则增强了灵活性。

PPPoE

本节涵盖 PPPoE 示例。使用它可以配置通过 PPP 的 IPv6 前缀委派以及单条或多条链路上的 MLPPP。

Point-to-Point over Ethernet (PPPoE) 是一种将以太网帧封装 PPP 数据包的方法。PPPoE 是标准 Point to Point Protocol (PPP) 的扩展,也是 PPPoA 的后继者。PPPoE 标准定义于 RFC 2516。PPPoE 客户端和服务器可在路由器上的任何二层以太网接口上工作——例如 Wireless、Ethernet、EoIP 等。PPPoE 用于基于用户名认证(如有需要,还基于工作站认证)向客户端分配 IP 地址,这与仅使用工作站认证而依赖静态 IP 地址或 DHCP 的方式不同。出于安全原因,请勿在运行 PPPoE 的同一接口上使用静态 IP 地址或 DHCP。

简介

PPPoE 能够通过一个简单的桥接接入设备,将一组主机连接到远程 Access Concentrator。

支持的连接:

  • MikroTik RouterOS PPPoE 客户端连接到任意 PPPoE 服务器。
  • MikroTik RouterOS 服务器(access concentrator)连接到多个 PPPoE 客户端(客户端几乎适用于所有操作系统和大多数路由器)。

PPPoE 运行机制

PPPoE 有两个不同的阶段:

  1. 发现阶段。
  2. 会话阶段。

发现阶段

发现阶段有四个步骤。完成后,双方都知晓 PPPoE SESSION_ID 和对端的以太网地址,二者共同唯一定义了该 PPPoE 会话:

  1. PPPoE Active Discovery Initialization (PADI) — PPPoE 客户端向广播地址发送一个 PADI 数据包。如果在 PPPoE 客户端的拨号网络属性中输入了服务名,此数据包也可以填充 "service-name" 字段。如果未输入服务名,则不填充该字段。
  2. PPPoE Active Discovery Offer (PADO) — 如果 Access Concentrator 能够服务于 PADI 数据包中列出的 "service-name" 字段,PPPoE 服务器(即 Access Concentrator)应以 PADO 响应 PADI。如果未列出 "service-name" 字段,Access Concentrator 会回复一个 PADO 数据包,其中 "service-name" 字段填充了其能够服务的服务名。PADO 数据包被发送到 PPPoE 客户端的单播地址。
  3. PPPoE Active Discovery Request (PADR) — 当收到 PADO 数据包时,PPPoE 客户端以 PADR 数据包响应。该数据包被发送到 Access Concentrator 的单播地址。客户端可能收到多个 PADO 数据包,但客户端只对它收到的第一个有效 PADO 进行响应。如果初始 PADI 数据包的 "service-name" 字段为空,则客户端用 PADO 数据包中返回的第一个服务名填充 PADR 数据包的 "service-name" 字段。
  4. PPPoE Active Discovery Session Confirmation (PADS) — 当收到 PADR 时,Access Concentrator 为 Point-to-Point Protocol (PPP) 会话生成一个唯一的会话标识 (ID),并在 PADS 数据包中将此 ID 返回给 PPPoE 客户端。该数据包被发送到客户端的单播地址。

PPPoE 会话终止

  • PPPoE Active Discovery Terminate (PADT) — 可在会话建立后的任意时间发送,用于表示 PPPoE 会话已终止。服务器或客户端均可发送。

会话阶段

发现阶段完成后,双方都知晓 PPPoE Session ID 和另一方的 Ethernet (MAC) 地址,二者共同定义了该 PPPoE 会话。PPP 帧被封装在 PPPoE 会话帧中,其以太网帧类型为 0x8864。 当服务器发送确认且客户端收到后,PPP 会话开始,包含以下阶段:

  1. LCP 协商阶段。
  2. 认证 (CHAP/PAP) 阶段。
  3. IPCP 协商阶段——在此阶段为客户端分配 IP 地址。

警告

如果任何过程失败,LCP 协商建立阶段将重新开始。 PPPoE 服务器向客户端发送 Echo-Request 数据包以确定会话状态。否则,如果客户端在未发送 Terminate-Request 数据包的情况下终止会话,服务器将无法判断会话已终止。

MTU

通常,无需分片即可传输的最大以太网帧为 1500 字节。PPPoE 又增加了 6 字节开销,PPP 字段再增加 2 字节,因此为 IP 数据报留下 1492 字节。因此,PPPoE 的最大 MRU 和 MTU 值不得超过 1492。

TCP 协议栈会尽量避免分片,因此使用 MSS(Maximum Segment Size)。默认情况下,MSS 取外出接口的 MTU 减去 TCP 和 IP 头的常见大小(40 字节),对于以太网接口即为 1460 字节。中间链路 MTU 较低时可能导致分片。在这种情况下,TCP 协议栈会执行路径 MTU 发现。无法在不分片的情况下转发数据报的路由器应当丢弃该数据包,并向源主机发送 ICMP-Fragmentation-Required。当主机收到这样的 ICMP 数据包时,会尝试降低 MTU。这在理想情况下应该有效;然而在现实中,许多路由器不会生成 fragmentation-required 数据报,许多防火墙会丢弃所有 ICMP 数据报。

此问题的变通方法是,如果 MSS 过大,就调整 MSS。

MRRU

指定 MRRU 意味着在单条链路上启用 MP (Multilink PPP)。此协议用于将大数据包拆分为较小的数据包。MRRU 硬编码为 1614。此设置有助于克服 PathMTU 发现失败。MP 设置应在双方对等体上都启用。 在 Windows 上,可以在 Networking 选项卡、Settings 按钮中的 "Negotiate multi-link for single link connections" 启用。

Access concentrator

PPPoE 服务器(access concentrator)支持在每个接口上运行多个服务器——使用不同的服务名。Access concentrator 名称和 PPPoE 服务名被客户端用于识别要注册的 access concentrator。Access concentrator 名称与命令提示符前显示的路由器 identity 相同。identity 在 /system/identity 子菜单中设置。

Access concentrator 在 /interface/pppoe-server/server 菜单中配置。

提示

不要为你接收 PPPoE 请求的接口分配 IP 地址。 警告

默认的 keepalive-timeout 值 10s 在大多数情况下都可以。如果将其设置为 0,路由器在客户端显式注销或路由器重启之前不会断开客户端连接。要解决此问题,可以使用 one-session-per-host 属性。

快速示例

PPPoE 客户端

要将 MikroTik RouterOS 配置为 PPPoE 客户端,请使用以下参数添加一个 PPPoE-client:

[admin@MikroTik] > interface pppoe-client add interface=ether2 password=StrongPass service-name=pppoeservice name=PPPoE-Out disabled=no user=MT-User
[admin@MikroTik] > interface pppoe-client print
Flags: X - disabled, I - invalid, R - running 
 0  R name="PPPoE-Out" max-mtu=auto max-mru=auto mrru=disabled interface=ether2 user="MT-User" 
      password="StrongPass" profile=default keepalive-timeout=10 service-name="pppoeservice" ac-name="" 
      add-default-route=no dial-on-demand=no use-peer-dns=no allow=pap,chap,mschap1,mschap2

PPPoE 服务器

要将 MikroTik RouterOS 配置为 Access Concentrator(PPPoE 服务器):

  • 为客户端添加一个从 10.0.0.2-10.0.0.5 的 IP 地址池。
  • 添加一个 PPP 配置文件。
  • 添加一个 PPP secret(用户名/密码)。
  • 添加 PPPoE 服务器本身。

警告

对于 Windows,某些连接说明可能使用这样的形式:其中指定了诸如 "MikroTik_AC\mt1" 的“电话号码”,以表示 "MikroTik_AC" 是 access concentrator 名称,"mt1" 是服务名。

[admin@MikroTik] > /ip/pool
add name=pppoe-pool ranges=10.0.0.2-10.0.0.5
[admin@MikroTik] > /ppp/profile
add local-address=10.0.0.1 name=for-pppoe remote-address=pppoe-pool
[admin@MikroTik] > /ppp/secret
add name=MT-User password=StrongPass profile=for-pppoe service=pppoe
[admin@MikroTik] > /interface/pppoe-server/server
add default-profile=for-pppoe disabled=no interface=ether3 service-name=pppoeservice

PPPoE Over VLAN Range

避免在接口上配置带有 pppoe-over-vlan-range 的服务器,同时又使用落在该范围内的 VLAN ID 创建 VLAN 接口。 例如:

/interface/vlan
add interface=ether2 name=vlan15 vlan-id=15
/interface/pppoe-server/server
add disabled=no interface=ether2 pppoe-over-vlan-range=10-20

如果你需要这种设置,请从 pppoe-over-vlan-range 中移除重叠的 VLAN ID,并直接在 VLAN 接口上创建一个单独的 PPPoE 服务器实例,如下所示:

/interface/vlan
add interface=ether2 name=vlan15 vlan-id=15
/interface/pppoe-server/server
add disabled=no interface=ether2 pppoe-over-vlan-range=10-14,16-20
add disabled=no interface=vlan15

说明

不要在一台设备上使用大量 PPPoE 客户端。