Dot1X

本页介绍 MikroTik RouterOS 的 Dot1X 实现,涵盖使用 TLS、TTLS 和 PEAP 等 EAP 方法进行基于 IEEE 802.1X 端口的网络访问控制的客户端和服务器配置。

Dot1X

Dot1X 是 RouterOS 中 IEEE 802.1X 标准的一种实现。其主要目的是使用基于局域网的 EAP(也称为 EAPOL)提供基于端口的网络访问控制。802.1X 由请求者(客户端)、认证器(服务器)和认证服务器(RADIUS 服务器)组成。RouterOS 同时支持认证器端和请求者端,并且当安装了 User Manager 包时也支持认证服务器端。请求者支持的 EAP 方法有 EAP-TLS、EAP-TTLS、EAP-MSCHAPv2 和 PEAPv0/EAP-MSCHAPv2。

警告

SMIPS 设备(hAP lite、hAP lite TC 和 hAP mini)不支持此功能。

客户端

请求者(supplicant)配置设置。

子菜单: /interface/dot1x/client

PropertyDescription
anon-identity (string; Default: )用于外层 EAP 认证的身份。仅与 eap-ttls 和 eap-peap 方法一起使用。如果未设置,则将使用 identity 参数的值进行外层 EAP 认证。
client-certificate (string; Default: )System/Certificates 中列出的证书名称。使用 eap-tls 方法时必需。
comment (string; Default: )条目的简短描述。
disabled (yes | no; Default: no)客户端是否启用。
eap-methods (eap-tls | eap-ttls | eap-peap | eap-mschapv2; Default: )用于认证的 EAP 方法的有序列表。
identity (string; Default: )用于 EAP 认证的请求者身份。
interface (string; Default: )客户端将运行的接口名称。
password (string; Default: ) sensitive请求者的明文密码。

只读属性

PropertyDescription
status (authenticated | authenticating | disabled)可能的状态:authenticated - 客户端已成功认证。authenticating - 已到达服务器且认证过程正在进行。disabled - 客户端已禁用。error - 发生了内部错误。interface is down - 父接口未运行。rejected - 服务器拒绝了认证。

服务器


RouterOS dot1x 服务器充当认证器。启用 dot1x 服务器的接口将阻止除用于认证的 EAPOL 数据包之外的所有流量。客户端成功认证后,接口将接受端口上收到的所有流量。如果接口连接到具有多个主机的共享介质,则当至少一个客户端成功认证时,将接受来自所有主机的流量。但是,可以配置动态交换机规则以仅接受已认证用户的源 MAC 地址并丢弃所有其他源 MAC 地址。在认证失败的情况下,可以使用专用端口 VLAN ID 接受流量。

警告

在网桥端口上创建 dot1x 服务器时,网桥应运行 (R/M)STP,否则来自客户端的 EAP 数据包将无法被正确接受。默认情况下,网桥接口以 protocol-mode=rstp 创建。如果网桥端口不应发送任何 BPDU,或应忽略任何收到的 BPDU,请在网桥端口上使用 edge=yes 配置。

子菜单: /interface/dot1x/server

PropertyDescription
accounting (yes | no; Default: yes)是否向认证服务器发送 RADIUS 计费请求。
auth-timeout (time; Default: 1m)EAP 认证可用的总时间。
auth-types (dot1x | mac-auth; Default: dot1x)服务器接口上使用的认证类型。当同时选择两个选项时,服务器将优先使用 dot1x 认证类型,只有在 3 个 retrans-timeout 周期后,认证类型才会回退到 mac-auth。为了使 mac-auth 认证类型正常工作,服务器接口应至少接收一个包含客户端设备源 MAC 地址的帧。
comment (string; Default: )条目的简短描述。
disabled (yes | no; Default: no)服务器配置是否启用。
guest-vlan-id (integer: 1..4094; Default: !guest-vlan-id)当终端设备不支持 dot1x 认证且未配置 mac-auth 回退时分配的 VLAN。该设置将在 3 个 retrans-timeout 周期后应用。一旦创建了启用 dot1x 的客户端并成功进行了重新认证,该端口将从 guest VLAN 中移除。此设置自 RouterOS 7.2 版本起可用,并且在启用网桥 vlan-filtering 时生效。默认情况下,guest VLAN 处于禁用状态。
interface (string; Default: )服务器将运行的接口或接口列表名称。
interim-update (time; Default: 0s)计划发送的 RADIUS Interim-Update 消息之间的间隔。
mac-auth-mode (mac-as-username | mac-as-username-and-password; Default: mac-as-username)使用 MAC 认证时,允许控制 User-Name 和 User-Password RADIUS 属性。
radius-mac-format (XX-XX-XX-XX-XX-XX | XX:XX:XX:XX:XX:XX | XXXXXXXXXXXX | xx-xx-xx-xx-xx-xx | xx:xx:xx:xx:xx:xx | xxxxxxxxxxxx; Default: XX:XX:XX:XX:XX:XX)使用 MAC 认证时,控制客户端的 MAC 地址在 User-Name 和 User-Password 属性中的编码方式。
reauth-period(time; Default: !reauth-period)启用服务器端口重新认证。与 dot1x 认证类型一起启用时,服务器将通过向客户端发送 EAP-Request Identity 来尝试重新认证客户端。与 mac-auth 认证类型一起启用时,服务器将使用最后看到的 MAC 地址,尝试通过 RADIUS 服务器重新认证客户端。此设置自 RouterOS 7.2 版本起可用。默认情况下,重新认证处于禁用状态。
reject-vlan-id (integer: 1..4094; Default: !reject-vlan-id)当认证失败且 RADIUS 服务器响应 Access-Reject 消息时分配的 VLAN。如果 RADIUS 服务器完全没有响应,则此属性将不适用,客户端认证将直接超时且服务将不可用。此属性仅在启用网桥 vlan-filtering 时生效。默认情况下,reject VLAN 处于禁用状态。
retrans-timeout (time; Default: 30s)如果未收到来自请求者的响应,则消息重新传输之间的时间间隔。
server-fail-vlan-id (integer: 1..4094; Default: !server-fail-vlan-id)当 RADIUS 服务器未响应且请求超时已过时分配的 VLAN。此设置自 RouterOS 7.2 版本起可用,并且在启用网桥 vlan-filtering 时生效。默认情况下,server-fail VLAN 处于禁用状态。

当前已认证的客户端列在活动菜单中(只读属性)。

子菜单: /interface/dot1x/server/active

PropertyDescription
auth-info (string)认证信息:dot1xdot1x (guest vlan)dot1x (reject vlan)dot1x (server fail vlan)mac-authmac-auth (reject vlan)mac-auth (server fail vlan)
client-mac (mac-address)请求者的 MAC 地址。
interface (string)接口名称。
session-id (string)唯一的会话标识符。
username (string)请求者的身份。
vlan-id (string)分配给接口的未标记 VLAN ID。必须在网桥上启用 VLAN ID 过滤。

所有活动 dot1x 服务器接口的状态列在状态菜单中(只读属性)。

子菜单: /interface/dot1x/server/state

PropertyDescription
interface (string)接口名称。
status (string)可能的接口状态:authorized - 已授予对接口的访问权限;iface-down - 接口未运行;rejected-holding - 访问被 RADIUS 服务器拒绝;un-authorized - 未授予对接口的访问权限。

示例

下面介绍 dot1x 服务器和客户端最常见的配置示例。

RouterOS 认证器配置

首先添加一个新的 RADIUS 客户端。认证服务器(RADIUS)不必与认证器位于同一 LAN 中,但必须可从认证器访问,因此必须考虑任何防火墙限制。

/radius 
add address=10.1.2.3 secret=radiussecret service=dot1x

警告

如果 RADIUS 通信通过公共网络进行,建议对 RADIUS 通信使用 RadSec。更多信息:RADIUS

添加新的 dot1x 服务器实例。

/interface/dot1x/server
add interface=ether2 interim-update=30s comment=accounted
add interface=ether12 accounting=no comment=notaccounted

基于端口的 VLAN ID 分配

可以使用网桥 VLAN 过滤将已认证的接口分配给特定的 VLAN ID。这可以通过 RADIUS 的 Tunnel-Type、Tunnel-Medium-Type 和 Tunnel-Private-Group-ID 属性来完成。请注意,只有具有硬件卸载 VLAN 过滤功能的设备才能在交换机芯片中执行此操作。

首先,确保将接口添加到已启用 VLAN 过滤的网桥中。

/interface/bridge
add name=bridge1 vlan-filtering=yes
/interface/bridge/port
add bridge=bridge1 interface=ether1
add bridge=bridge1 interface=ether2
add bridge=bridge1 interface=ether12

必须添加静态 VLAN 配置,以便通过 ether1 接口发送带标记的 VLAN 流量。

/interface/bridge/vlan
add bridge=bridge1 tagged=ether1 vlan-ids=2
add bridge=bridge1 tagged=ether1 vlan-ids=12

启用 RADIUS 调试日志后,可以看到包含所有属性的完整 RADIUS 消息数据包。在我们的示例中,Tunnel 属性在来自 RADIUS 服务器的 Access-Accept 消息中收到:

09:51:45 radius,debug,packet received Access-Accept with id 64 from 10.1.2.3:1812
09:51:45 radius,debug,packet     Tunnel-Type = 13 
09:51:45 radius,debug,packet     Tunnel-Medium-Type = 6 
09:51:45 radius,debug,packet     Tunnel-Private-Group-ID = "12" 
(..)
09:51:45 radius,debug,packet     User-Name = "dot1x-user" 

现在 VLAN ID 出现在活动会话列表中,未标记端口被添加到先前创建的静态 VLAN 配置中。

/interface/dot1x/server/active/print 
  0 interface=ether12 username="dot1x-user" client-mac=00:0C:42:EB:71:F6 session-id="86b00006" vlan-id=12
/interface/bridge/vlan/print detail 
Flags: X - disabled, D - dynamic 
 0 D bridge=bridge1 vlan-ids=1 tagged="" untagged="" current-tagged="" current-untagged=bridge1,ether3 

 1   bridge=bridge1 vlan-ids=2 tagged=ether1 untagged="" current-tagged=ether1 current-untagged=ether2 

 2   bridge=bridge1 vlan-ids=12 tagged=ether1 untagged="" current-tagged=ether1 current-untagged=ether12 

动态交换机规则配置

在某些网络配置中,需要为特定请求者添加额外的访问规则,以限制或允许某些网络服务。这可以使用 Mikrotik-Switching-Filter 属性来完成,请参阅 RADIUS 厂商字典。当客户端由认证服务器成功认证后,服务器可以回传 Mikrotik-Switching-Filter 属性。根据收到的信息,认证器将在客户端所在的交换机端口上创建动态访问规则。只要客户端会话处于活动状态且接口正在运行,这些规则就会保持有效。关于正确的交换机规则实现,存在某些顺序和限制:

  • 支持 mac-protocol、src-mac-address(仅自 RouterOS 7.2 版本起可用)、src-address(IPv4/mask,仅自 RouterOS 7.2 版本起可用)、dst-address(IPv4/mask)、protocol(IPv4)src-port(L4,仅自 RouterOS 7.2 版本起可用)、dst-port(L4)条件参数。
  • mac-protocol 和 protocol 参数可以使用十六进制或十进制表示(例如 protocol 17 或 protocol 0x11)。
  • src-port 和 dst-port 支持单个值或范围值(例如 src-port 10 或 src-port 10-20)。
  • src-mac-address 支持 "xx:xx:xx:xx:xx:xx" 或 "xxxxxxxxxxxx" 格式,不带任何源 MAC 地址的交换机规则可以使用 "none" 关键字设置(例如 src-mac-address none)。
  • src-mac-address(如果尚未由属性设置)、switch和ports` 条件参数会为每条规则自动设置
  • 每条规则应以 action 属性结尾,支持的值为 drop 或 allow。如果未设置 action 属性,将使用默认的 allow 值。
  • 单个请求者支持多条规则,并且必须用逗号 "," 分隔。

以下是一些 Mikrotik-Switching-Filter 属性及其创建的动态交换机规则示例:

# Drop ARP frames (EtherType: 0x0806 or 2054)
Mikrotik-Switching-Filter = "mac-protocol 2054 action drop"

/interface/ethernet/switch/rule/print
Flags: X - disabled, I - invalid, D - dynamic 
 0  D ;;; dot1x dynamic
      switch=switch1 ports=ether1 src-mac-address=CC:2D:E0:11:22:33/FF:FF:FF:FF:FF:FF mac-protocol=arp copy-to-cpu=no redirect-to-cpu=no mirror=no new-dst-ports=""

# Allow UDP (IP protocol: 0x11 or 17) destination port 100 and drop all other packets
Mikrotik-Switching-Filter = "protocol 17 dst-port 100 action allow, action drop"

/interface/ethernet/switch/rule/print
Flags: X - disabled, I - invalid, D - dynamic 
 0  D ;;; dot1x dynamic
      switch=switch1 ports=ether1 src-mac-address=CC:2D:E0:11:22:33/FF:FF:FF:FF:FF:FF protocol=udp dst-port=100 copy-to-cpu=no redirect-to-cpu=no mirror=no 

 1  D ;;; dot1x dynamic
      switch=switch1 ports=ether1 src-mac-address=CC:2D:E0:11:22:33/FF:FF:FF:FF:FF:FF copy-to-cpu=no redirect-to-cpu=no mirror=no new-dst-ports=""

# Allow only authenticated source MAC address, drop all other packets
Mikrotik-Switching-Filter = "action allow, src-mac-address none action drop"

/interface/ethernet/switch/rule/print 
Flags: X - disabled, I - invalid; D - dynamic 
 0  D ;;; dot1x dynamic
      switch=switch1 ports=ether1 src-mac-address=CC:2D:E0:01:6D:EB/FF:FF:FF:FF:FF:FF copy-to-cpu=no redirect-to-cpu=no mirror=no 

 1  D ;;; dot1x dynamic
      switch=switch1 ports=ether1 copy-to-cpu=no redirect-to-cpu=no mirror=no new-dst-ports="" 

在我们的示例中,ether2 上的 Supplicant2 仅允许使用 UDP 目标端口 50 访问 192.168.50.0/24 网络;所有其他流量都应被丢弃。首先,确保硬件卸载在网桥端口上正常工作,否则交换机规则可能无法正常工作。

/interface/bridge/port/print
Flags: X - disabled, I - inactive, D - dynamic, H - hw-offload 
 #     INTERFACE                   BRIDGE                   HW  PVID PRIORITY  PATH-COST INTERNAL-PATH-COST    HORIZON
 0   H ether1                      bridge1                  yes    1     0x80         10                 10       none
 1   H ether2                      bridge1                  yes    1     0x80         10                 10       none
 2   H ether12                     bridge1                  yes    1     0x80         10                 10       none

启用 RADIUS 调试日志后,可以看到包含所有属性的完整 RADIUS 消息数据包。在我们的示例中,Mikrotik-Switching-Filter 属性在来自 Radius 服务器的 Access-Accept 消息中收到:

02:35:38 radius,debug,packet received Access-Accept with id 121 from 10.1.2.3:1812 
(..)
02:35:38 radius,debug,packet     MT-Switching-Filter = "mac-protocol 2048 dst-address 192.168.50.0/24 dst-port 50 protocol 17 action allow,action drop"

动态交换机规则现在出现在交换机菜单下:

/interface/ethernet/switch/rule/print 
Flags: X - disabled, I - invalid; D - dynamic 
 0  D ;;; dot1x dynamic
      switch=switch1 ports=ether2 src-mac-address=CC:2D:E0:11:22:33/FF:FF:FF:FF:FF:FF mac-protocol=ip dst-address=192.168.50.0/24 protocol=udp dst-port=50 copy-to-cpu=no redirect-to-cpu=no mirror=no 

 1  D ;;; dot1x dynamic
      switch=switch1 ports=ether2 src-mac-address=CC:2D:E0:11:22:33/FF:FF:FF:FF:FF:FF copy-to-cpu=no redirect-to-cpu=no mirror=no new-dst-ports="" 

警告

动态交换机规则仅适用于支持交换机规则的 RouterBoard - 配备 Marvell Prestera 交换机的 MikroTik 设备以及配备 QCA8337、Atheros8327 和 Atheros8316 交换机芯片的设备。CRS1xx/2xx 系列交换机不支持此功能。请考虑每台设备的最大规则数,请参阅 配备 Marvell Prestera 交换机的 MikroTik 设备 和 基本交换机芯片表

RouterOS 请求者(Supplicant)配置

eap-tls、eap-ttls 和 eap-peap 认证方法需要 CA 证书。此外,eap-tls 方法还需要客户端证书。对于此示例,我们已经导入了一个包含自签名客户端证书和 CA 证书的 P12 证书包。有关如何在 RouterOS 中导入证书的更多信息,请访问 System/Certificates。

/certificate/print 
Flags: K - private-key, L - crl, C - smart-card-key, A - authority, I - issued, R - revoked, E - expired, T - trusted 
 #         NAME                                            COMMON-NAME                                         SUBJECT-ALT-NAME                             FINGERPRINT                                        
 0 K  A  T dot1x-client                                    ez_dot1x-client                                     IP:10.1.2.34
 1  L A  T dot1x CA                                        ca            

只需添加一个新的 dot1x 客户端实例,它将启动认证过程。

/interface/dot1x/client
add anon-identity=anonymous client-certificate=dot1x-client eap-methods=eap-tls identity=dot1x-user interface=ether1 password=dot1xtest

如果认证成功,接口应具有 status authenticated。

/interface/dot1x/client/print 
Flags: I - inactive, X - disabled 
  0   interface=ether1 eap-methods=eap-tls identity="dot1x-user" password="dot1xtest" anon-identity="anonymous" client-certificate=dot1x-client status="authenticated"