Я столкнулся с проблемой, которую просто не могу понять. В FreeRadius я использую раздел «post-proxy» для оценки условий. Это всегда хорошо работало для меня. Однако теперь я столкнулся со странной проблемой:
Это Access-Accept, который я получаю:
(11877) Tue Jul 2 10:21:36 2019: Debug: Received Access-Accept Id 198 from xxx.xxx.xxx.xxx:1812 to xxx.xxx.xxx.xxx:53259 length 309
(11877) Tue Jul 2 10:21:36 2019: Debug: Proxy-State = 0x3731
(11877) Tue Jul 2 10:21:36 2019: Debug: Framed-Protocol = PPP
(11877) Tue Jul 2 10:21:36 2019: Debug: Service-Type = Framed-User
(11877) Tue Jul 2 10:21:36 2019: Debug: Tunnel-Medium-Type:0 = IEEE-802
(11877) Tue Jul 2 10:21:36 2019: Debug: Tunnel-Private-Group-Id:0 = "530"
(11877) Tue Jul 2 10:21:36 2019: Debug: Tunnel-Type:0 = VLAN
(11877) Tue Jul 2 10:21:36 2019: Debug: EAP-Message = 0x030c0004
(11877) Tue Jul 2 10:21:36 2019: Debug: Class = 0xXXXXX
(11877) Tue Jul 2 10:21:36 2019: Debug: MS-CHAP-Domain = "XXXXX"
(11877) Tue Jul 2 10:21:36 2019: Debug: MS-CHAP2-Success = 0xXXXXX
(11877) Tue Jul 2 10:21:36 2019: Debug: MS-MPPE-Send-Key = 0xXXXXX
(11877) Tue Jul 2 10:21:36 2019: Debug: MS-MPPE-Recv-Key = 0xXXXXX
(11877) Tue Jul 2 10:21:36 2019: Debug: Message-Authenticator = 0xXXXXX
Когда я пытаюсь оценить идентификатор VLAN/Tunnel-Private-Group-Id, я получаю следующее:
(11877) Tue Jul 2 10:21:36 2019: Debug: if (proxy-reply:Tunnel-Private-Group-ID == "530") {
(11877) Tue Jul 2 10:21:36 2019: ERROR: Failed retrieving values required to evaluate condition
Я упускаю что-то очевидное? И может ли кто-нибудь сказать мне, что означает «: 0» за этими тремя атрибутами:
Tunnel-Medium-Type:0
Tunnel-Private-Group-Id:0
Tunnel-Type:0
Я просмотрел весь Интернет, но не смог найти документацию об этом. Я предполагаю, что это как-то связано с внутренним/внешним туннелем?
:0 — это индикатор тега для атрибута, это означает, что атрибут находится в группе тегов 0. Некоторые атрибуты имеют 1-байтовый префикс тега, который используется для группировки атрибутов, описывающих одну и ту же «вещь».
Вы можете видеть, что теги работают так же, как группирующий TLV, но тегированные атрибуты на самом деле не кодируются в одном атрибуте группировки.
Распространенным вариантом использования тегов является группировка атрибутов, описывающих одну конечную точку VPN вместе, когда указывается несколько конечных точек L2TP (в основном земля интернет-провайдера). Другой вариант использования — сделать что-то подобное для атрибутов, описывающих динамическую маркировку VLAN (как показано в вашем примере пакета).
Оригинальный RFC, описывающий тегирование, называется RFC2868, если вас интересует формат передачи по сети.
В FreeRADIUS, когда вы работаете с помеченными атрибутами, вам обычно необходимо явно указать значение тега, поэтому ваше условие выше не работает.
Пытаться:
if (proxy-reply:Tunnel-Private-Group-ID:0 == "530") {
Или, если это FreeRADIUS 3, вы могли бы использовать индекс массива «все экземпляры», не могу вспомнить точную логику, которую я реализовал для сопоставления, когда писал этот код...
if (proxy-reply:Tunnel-Private-Group-ID[*] == "530") {
Если вы заглянете в словари, вы также увидите тегированные атрибуты, помеченные флагом has_tag, как в атрибутах файл словаря для RFC2868.
Конечно, это должно было быть что-то очевидное, и так оно и было.
Похоже, что был применен фильтр атрибутов, который отфильтровывал атрибут Tunnel-Private-Group-ID во время пост-прокси.
Спасибо за пояснение по тегам. Я забыл упомянуть, что мой коллега попробовал предложенный вами подход:
code
Отладка: if (proxy-reply:Tunnel-Private-Group-ID:0 == "530") { ОШИБКА: не удалось получить значения, необходимые для оценки условия...code