📄 rfc2868.txt
字号:
如果Tunnel-Medium-Type既不是IPv4,也不是IPv6,该域指出本地RADIUS客户端的关于接口
和媒体特有的地址的配置数据。
3.5. Tunnel-Password
描述
该属性包含一个用于到远端服务器上去认证的密码。它可以被包含在Access-Accept报文中。
该属性的报文结构如下:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length | Tag | Salt
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Salt (cont) | String ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type
69
Length
>=5
Tag
该域长度是一个字节,用于组织属于同一隧道的一组属性。其有效值范围从0x01
到0x0f,包含0x01和0x0F。如果该域的值是0x00到0x0F之间,包含0x0F,它
应该被解释成指示该属性所属的隧道,否则,该域被忽略。
Salt
Salt域是两个字节长度,用于确保在一个Access-Accept报文中用于给Tunnel-Password
加密的密钥的唯一性。该域最重要的一位(最左边的)必需被设置(1)。在一个
Access-Accept报文中,每个salt域的内容必需是唯一的。
String
该明文字符串由三个逻辑子域组成:Data-Length子域、Password子域(这两个是必需的),
以及一个可选的Padding子域。Data-Length子域的长度是一个自己,包含Password
子域的长度。Password子域包含实际的隧道密码。如果Data-Length域和Password域的
总长度不是16的整数倍,就在后面添加Padding子域。该域的长度是可变的,从1到15(字节)。
String必需按照如下方式加密,优先传输:
通过连接Data-Length和Password子域,给String域构造一个明文,如果需要的
话,用填充字符给该明文加长到16的整数倍。推荐用ox00作为填充字符。我们
把该明文叫做P。
报共享密钥叫做S,随机产生的128-bit的Request-Authenticator(在对应的
Access-Request报文中)叫做R,Salt域的内容叫做A。 将P按照16个字节划分
成p(1), p(2), ... p(i)(i= p的长度/16)。把密码块叫做c(1)、c(2)...c(i),
最终的密码叫做C。还需要中间值b(1)、b(2)... c(i)。按照如下方式加密('+'
表示串联)
b(1) = MD5(S + R + A) c(1) = p(1) xor b(1) C = c(1)
b(2) = MD5(S + c(1)) c(2) = p(2) xor b(2) C = C + c(2)
. .
. .
. .
b(i) = MD5(S + c(i-1)) c(i) = p(i) xor b(i) C = C + c(i)
最终的密码包括c(1)+c(2)+...+c(i)。
接收端按照相反的过程处理得到明文。
3.6. Tunnel-Private-Group-ID
描述
该属性指示一个特定的隧道会话的group-ID。如果一个隧道创建者能从一个特定
的连接中确定组的结果(the group resulting),则该属性可以包含在Access-Request报文中,
如果这个将被创建的隧道会话属于一个特定的私有组,则Access-Accept报文中应该包含
该属性。 使用组可以用来将一个隧道会话和一组特定用户相关联。例如,它会用于通过一个特定的
接口路由一个没有注册的IP地址。如果一个Accounting-Request报文包含Acct-Status-Type
属性(该属性的值是Start或者Stop),且属于一个隧道会话,则该报文应该包含
Tunnel-Private-Group-ID属性。
该报文的结果如下:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length | Tag | String ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type
81
Length
3
Tag
该域长度是一个字节,用于组织属于同一隧道的一组属性,如果该域的值大于0x00,
且小于或者等于0x1F,则被解释成指示该属性所属的隧道。如果该域的值大于0x1F,
则被解释成String域的第一个字节。
String
该域是必需的,代表特定的组。关于它的格式没有特定的限制。
3.7. Tunnel-Assignment-ID
描述
该属性用来将一个将被分配会话的特定隧道告诉隧道创建者。一些隧道协议,象L2TP、
PPTP,允许会话通过相同的隧道在两个相同的隧道终端之间被复用。该属性给RADIUS
提供了一种可以用于通知隧道创建者(e.g. PAC、LAC)将会话分配给可复用隧道还是
专用隧道(a separate tunnel)的方法。而且,也允许将共享复用隧道的会话分配
给不同的复用隧道。 一个特定的实现可以将不同的特性分配给特定的隧道。例如,不同
的隧道被赋予不同的 QOS参数。这样的隧道可以用来承载单个或者是多个会话。
Tunnel-Assignment-ID属性还允许RADIUS服务器指示一个特定的会话被分配给一个
提供合适等级服务的隧道。希望将来定义的用于隧道的且与QOS相关的RADIUS属性都能
通过该属性给出的ID相关联。同时,任何有关特定ID串的含义留给隧道创建者的本地
配置处理。
该属性可以被包含在Access-Accept报文中。隧道创建者收到该属性后,可以忽视它,
将会话安排到两者之间的任意一个复用或者是专用隧道。如果一个Accounting-Request
报文包含Acct-Status-Type 属性(该属性的值是Start或者Stop),且属于一个隧道会
话,则该报文应该包含该属性。
如果一个隧道创建者支持Tunnel-Assignment-ID属性,那他需要按照如下的方式将
一个会话分配给隧道:
如果在与一个ID指定的终端之间,该属性和隧道都已经存在,那么这个会话被
分配给该隧道。
如果在与一个ID指定的终端之间,该属性已经存在,但是没有隧道,那么将会为
该会话建立一个隧道,并且一个ID被分配给该隧道。
如果该属性不存在,这该会话被分配到一个未命名的隧道。如果该隧道还没有建立,
那么建立该隧道,并且用于该会话以及后面没有Tunnel-Assignment-ID属性的
会话。一个隧道创建者不能将一个没有Tunnel-Assignment-ID属性的会话分配
给一个命名隧道(例如一个由具有该属性的会话创建的隧道)。
注意不同的终端之间的隧道可能具有相同的ID。
该报文的结构如下:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length | Tag | String ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type
82
Length
>=3
Tag
该域长度是一个字节,用于组织属于同一隧道的一组属性,如果该域的值大于0x00,
且小于或者等于0x1F,则被解释成指示该属性所属的隧道。如果该域的值大于0x1F,
则被解释成String域的第一个字节。
String
该域是必需的,代表隧道ID。对于该ID的格式没有任何限制。
3.8. Tunnel-Preference
描述
如果RADIUS服务器返回多组隧道属性,则应当在每组属性中包含该属性,用于指示
分配给每个隧道的相对参数(relative preference)。例如,假设服务器返回
两条隧道的属性,其中一条隧道是PPTP类型的,另一种是L2TP类型的。如果隧道
创建者只支持其中的一种,那么它就只创建该种类型的隧道。如果这两种类型的隧道
它都支持,那么它根据Tunnel-Preference属性来决定创建哪种类型的隧道。
如果该属性的取值越低,那么其被创建的优先级越高。如果在某个Access-Accept
报文中几个Tunnel-Preference的取值相等,那么隧道的创建者要根据本地的配置
来决定该使用哪组属性来创建隧道。该属性也可以被包含在Access-Request报文中,
用于给服务器一个提示,但是服务器可以忽略这个提示。
该属性的报文结构如下:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length | Tag | Value
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Value (cont) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type
83
Length
6
Tag
该域长度是一个字节,用于组织属于同一隧道的一组属性,其取值范围从0x01
到0x1f,包括0x01和0x1f。如果没有使用该域,则必需填0。
Value
该属性长度是三个字节,用于指示该属性所属的隧道的优先级,优先级越高,
则该属性的取值越低。0x000000具有最高优先级,0xFFFFFF具有最低优先级。
3.9. Tunnel-Client-Auth-ID
描述
建立隧道时,在认证阶段,该属性代表隧道创建者的名字。Tunnel-Client-Auth-ID
可以作为给服务其一个提示而被包含在Access-Request报文中,如果希望得到
一个不同于缺省的认证名,则该属性必需被包含在Access-Accept报文中。如果
一个Accounting-Request报文包含Acct-Status-Type属性(该属性的值是
Start或者Stop),且属于一个隧道会话,则该报文应该包含该属性。
该属性的报文结构如下:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length | Tag | String ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type
90
Length
>=3
Tag
该域长度是一个字节,用于组织属于同一隧道的一组属性,如果该域的值大于0x00,
且小于或者等于0x1F,则被解释成指示该属性所属的隧道。如果该域的值大于0x1F,
则被解释成String域的第一个字节。
String
该域是必需的。它包含了隧道创建者用于认证的认证名。建议该认证名的格式用UTF-8。
3.10. Tunnel-Server-Auth-ID
描述
建立隧道时,在认证阶段,该属性代表隧道终结者的名字。Tunnel-Client-Auth-ID
可以作为给服务其一个提示而被包含在Access-Request报文中,如果希望得到
一个不同于缺省的认证名,则该属性必需被包含在Access-Accept报文中。如果
一个Accounting-Request报文包含Acct-Status-Type属性(该属性的值是
Start或者Stop),且属于一个隧道会话,则该报文应该包含该属性。
该报文的结构如下:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -