配置基于路由引擎的静态 HTTP 重定向服务
从 Junos OS 19.3R2 版开始,如果在 MX 系列 上启用了下一代服务,则还支持 HTTP 重定向服务。
您可以在路由引擎上配置 HTTP 重定向服务,以替代使用 MS-MPC/MS-MIC 或 MX-SPC3 服务卡。您可以将加墙花园配置为防火墙服务过滤器。围墙花园是一组服务器,它们为订阅者提供对围墙花园内站点的访问权限,而无需通过强制门户重新授权。围墙花园服务过滤器标识发往围墙花园的流量和发往围墙花园外部的流量。只有发往围墙花园之外的 HTTP 流量才会被发送到路由引擎,由 HTTP 重定向服务进行处理。CPCD 服务通过服务集与路由引擎上的服务接口相关联。
路由引擎上的服务接口用 si- 前缀标识(例如,si-1/1/0)。si- 接口可处理路由引擎的所有重定向和重写流量和服务。si-接口必须处于运行状态为up,才能启用和激活强制门户内容交付(CPCD)服务。启用 CPCD 服务后,si- 接口作状态的任何更改都不会影响现有 CPCD 服务。
CPCD 服务将不发往围墙花园的用户 HTTP 请求流量发送到重定向服务器,重定向服务器通过重定向 URL 进行响应。重定向 URL 将流量发送到强制门户,而不是未经授权的外部站点。强制门户在授予重定向订阅者访问围墙花园之外受保护服务器的权限之前,为他们提供身份验证和授权服务。
重定向服务器可以是本地的或远程的:
本地重定向服务器 — 驻留在路由器上,并将订阅者流量重定向到围墙花园内的强制门户。
远程重定向服务器 — 驻留在路由器后面的围墙花园内的设备(例如策略服务器)上。订阅者 HTTP 流量的目标地址将重写为远程重定向服务器的地址。远程服务器将用户流量重定向到该围墙花园内的强制门户。
将加墙花园配置为防火墙服务过滤器
将围墙花园配置为防火墙服务过滤器时,将识别并跳过发往围墙花园内服务器的流量。所有其他 HTTP 流量都发往围墙花园之外的地址。由于此流量与过滤器条件不匹配,因此会流向路由引擎进行处理。
您可以配置服务过滤器,以便加墙花园包含作为强制门户的单个服务器或服务器列表。
-
将加墙花园配置为单个服务器作为强制门户:
创建服务过滤器。
[edit] user@host# edit firewall family address-family service-filter filter-name
定义过滤器术语,用于标识和跳过对强制门户流量的处理。
通过指定强制门户的目的地址和目标端口,指定过滤条件以匹配发往强制门户的流量。
[edit firewall family inet service-filter filter-name] user@host# set term name from destination-address ip-address user@host# set term name from destination-port port-number
指定匹配流量跳过线卡上的处理。
[edit firewall family inet service-filter filter-name] user@host# set term name then skip
定义过滤术语,以从与前一个术语不匹配的所有流量中识别 HTTP 流量,并将其发送以供 CPCD 服务规则处理。
指定一个或多个 HTTP 端口号以匹配跳过的 HTTP 流量。
[edit firewall family inet service-filter filter-name] user@host# set term name from destination-port http-port-number
指定匹配流量由 CPCD 服务处理。
[edit firewall family inet service-filter filter-name] user@host# set term name then service
定义过滤器术语以跳过对任何剩余非 HTTP 流量的进一步作。
[edit firewall family inet service-filter filter-name] user@host# set term name then skip
例如,以下配置使用 192.0.2.0 上的强制门户为 IPv4 HTTP 流量创建过滤器 walled-v4。对于与地址匹配的流量,将跳过处理;流量被发送到强制门户。不匹配的流量进入术语 http,其中 HTTP 流量从所有跳过的流量中挑选出来,并发送以根据 CPCD 服务进行处理。最后,术语跳过会导致跳过所有剩余的非 HTTP 流量。
[edit] user@host# edit firewall family inet service-filter walled-v4 [edit firewall family inet service-filter walled-v4] user@host# set term portal from destination-address 192.0.2.0 user@host# set term portal from destination-port 80 user@host# set term portal then skip user@host# set term http from destination-port 80 user@host# set term http then service user@host# set term skip then skip
-
将加墙花园配置为服务器列表或子网。
创建服务过滤器。
[edit] user@host# edit firewall family address-family service-filter filter-name
定义过滤器术语。
通过指定服务器的目标前缀列表,指定过滤器条件以匹配发往围墙花园中任何服务器的流量。
[edit firewall family inet service-filter filter-name] user@host# set term name from destination-prefix-list list-name user@host# set term name from destination-port port-number
注意:在 Junos OS 演化版上,您可以创建多个前缀列表,每个前缀列表最多可以有三个或四个前缀。指定匹配流量跳过线卡上的处理。
[edit firewall family inet service-filter filter-name] user@host# set term name then skip
定义过滤术语,以从与前一个术语不匹配的所有流量中识别 HTTP 流量,并将其发送以供 CPCD 服务规则处理。
指定一个或多个 HTTP 端口号以匹配跳过的 HTTP 流量。
[edit firewall family inet service-filter filter-name] user@host# set term name from destination-port http-port-number
指定匹配流量由 CPCD 服务处理。
[edit firewall family inet service-filter filter-name] user@host# set term name then service
定义过滤器术语以跳过对任何剩余非 HTTP 流量的进一步作。
[edit firewall family inet service-filter filter-name] user@host# set term name then skip
(选答)定义一个前缀列表,用于指定围墙花园中的服务器。您可以指定一个子网或多个单独的地址。
[edit policy-options] user@host# set prefix-list list- name ip-address/mask user@host# set prefix-list list- name ip-address1 user@host# set prefix-list list- name ip-address2
例如,以下配置为 IPv6 HTTP 流量创建一个过滤器 walled-v6-list,其前缀列表为 wg-list,用于指定围墙花园中的两台服务器。过滤器术语 portal6 标识发往加墙花园的 IPv6 流量。不匹配的流量进入术语 http6,其中 HTTP 流量从所有跳过的流量中挑选出来,并发送以根据 CPCD 服务进行处理。最后,术语 skip6 会导致跳过所有剩余的非 HTTP 流量。
[edit] user@host# edit firewall family inet6 service-filter walled-v6-list user@host# set term portal6 from destination-prefix-list wg-list user@host# set term portal6 then skip user@host# set term http6 from destination-port [80 8080] user@host# set term http6 then service user@host# set term skip6 then skip [edit policy-options] user@host# set prefix-list wg-list 2001:db8::10.10 user@host# set prefix-list wg-list 2001:db8::10.22
为本地和远程重定向服务器配置 HTTP 重定向
当对围墙花园外的站点发出 HTTP 请求时,CPCD 可以将流量重定向到强制门户以进行身份验证和授权。
配置 CPCD 服务规则,指定要对发往围墙花园外的流量执行的作。此流量由围墙花园服务过滤器识别并传递给服务,或者由围墙花园服务规则识别并接受。您配置的作取决于您使用的是本地还是远程 HTTP 重定向服务器:
如果在路由器上使用本地 HTTP 重定向服务器,请指定重定向作。
如果您使用的是位于路由器后面的围墙花园中的远程 HTTP 重定向服务器,则不能简单地指定重定向 URL。在这种情况下,服务规则必须重写流量的 IP 目的地址。新的目标地址是远程 HTTP 重定向服务器的地址。然后,远程服务器提供重定向 URL,以便将流量发送到强制门户。
CPCD 服务通过服务集与服务接口相关联。服务集和加墙花园服务过滤器都应用于静态配置的接口。
例如,在本地服务器的以下配置中,CPCD 服务规则 redir-svc 将流量重定向到强制门户 http://www.portal.example.com。订阅者输入的原始 URL 将附加到重定向 URL 中。
user@host# edit services captive-portal-content-delivery user@host# edit rule redir-svc user@host# set match-direction input user@host# set term redir1 then redirect http://www.portal.example.com/url=%dest-url%
以下远程服务器配置创建 CPCD 服务规则 rewr-svc,该规则将原始目标地址重写为远程服务器的地址 192.0.2.230。
user@host# edit services captive-portal-content-delivery user@host# edit rule rewr-svc user@host# set match-direction input user@host# set term rewr1 then rewrite destination-address 192.0.2.230
配置服务配置文件和服务集,以便将服务配置文件与服务接口相关联
服务集定义要由路由引擎执行的一个或多个服务。对于 HTTP 重定向服务,您可以定义一个包含 CPCD 规则的 CPCD 服务配置文件。服务集将 CPCD 服务配置文件应用于特定的服务接口。
例如,以下配置创建 CPCD 服务配置文件 redir-prof,它引用 CPCD 规则 redir-svc。服务集 ss2 被指定为用于基于路由引擎的 CPCD。该集将 CPCD 服务配置文件 redir-prof 与服务接口 si-4/0/0 相关联。
[edit services captive-portal-content-delivery] user@host# edit profile redir-prof user@host# set cpcd-rules redir-svc [edit services] user@host# edit service-set ss2 user@host# set service-set-options routing-engine-service user@host# set captive-portal-content-delivery-profile redir-prof user@host# set interface-service-service-interface si-4/0/0
将 CPCD 服务集和服务过滤器连接到逻辑接口
要使用 HTTP 重定向服务,您必须将 CPCD 服务集连接到逻辑接口。如果将加墙花园配置为服务过滤器,则必须将其连接到与服务集相同的接口。到达和离开该接口的流量将由服务过滤器过滤。标识为进行服务的流量将发送到应用 CPCD 配置文件的路由引擎服务接口。
例如,以下配置在机箱插槽 4 的线卡和线卡插槽 0 的 MIC 上启用内联服务。它为逻辑接口分配地址。然后,它将服务集 sset2 和服务过滤器 walled-v4 连接到 IPv4 地址族的 ge-2/0/1.0。服务集和过滤器均应用于接口输入和输出。
user@host# edit chassis fpc 4 pic 0 inline-services bandwidth 1g user@host# edit interfaces ge-2/0/1 unit 0 family inet user@host# set address 203.0.113.5 user@host# set service input service-set sset2 service-filter walled-v4 user@host# set service output service-set sset2 service-filter walled-v4
插入 HTTP 服务器可用于控制内容访问的 GET 标头标记
在某些情况下,您可能希望 HTTP 服务器确定是否允许用户访问内容。从 Junos OS 19.1 版开始,您可以配置基于路由引擎的静态 HTTP 重定向服务过滤器,以指定路由引擎为此插入到 HTTP GET 消息的数据包标头中的标记。您可以为路由器主机名或订阅者的 MAC 地址、IPv4 地址或 IPv6 地址插入标记。
以下步骤对应 于图 1。
用户的设备(HTTP 客户端)与 HTTP 服务器执行 TCP 握手序列。
握手成功后,客户端发送包含用户请求的 URL 的 HTTP GET。
路由引擎通过连接用 /$ 和 $/ 括起来的随机字符字符串来修改该 URL。字符串长度与稍后将插入的标记的总长度匹配。当客户端返回时,字符串用作标识符。
假设要插入的标签长度为 30 个字符,并且请求的 URL 为 http://192.51.100.20/test.html。路由引擎返回使用 30 个随机字符字符串修改的 URL,如以下示例所示:
http://192.51.100.20/test.html/$IIGSbVdNDTDvnJFIAyoysXwVJawoYj$/
路由引擎发送状态代码为 302(找到)或 307(临时重定向)的修改后的 URL。发送的代码取决于所使用的 HTTP 版本和 BNG 上的 Junos OS 版本。这两个代码都向客户端指示需要使用修改后的 URL 重新发送访问请求。
路由引擎将重置与客户端和服务器的 TCP 连接。
客户端与 HTTP 服务器对修改后的 URL 执行 TCP 握手。
客户端发送包含修改后的 URL 的 HTTP GET。
路由引擎检查串联字符串的长度是否与发送到客户端的字符串长度相同。
如果长度正确,它会将 URL 剥离回原始请求的 URL,将标记插入 GET 标头,并将 GET 转发到 HTTP 服务器。如果已配置,则可以选择将 GET 转发到重定向 URL,而不是原始请求的服务器。
如果长度不正确,路由引擎将丢弃数据包并递增丢弃计数器。
HTTP 服务器评估 GET 消息,并向客户端发送响应,如果它授予访问权限,则状态代码为 200(OK),如果请求被拒绝,则状态代码为 403(禁止)。
路由引擎终止与客户端和服务器的 TCP 连接。
标记将按照与配置顺序相同的顺序插入标头中。标记名称区分大小写,因此 tag ABCD 和 tag abcd 作为不同的名称进行处理。
要配置要在 GET 标头中插入的标记:
例如,以下配置将创建一个服务规则 insert-rule,用于匹配输入接口上的流量。术语 t1 插入两个标记,x-mac-addr 带有用户的 MAC 地址,x-sub-ip 带有订阅者的 IPv4 地址值。
[edit] user@host# edit services captive-portal-content-delivery rule insert-rule user@host# set match-direction input user@host# set term t1 then insert tag x-mac-addr tag-value subscriber-mac-addr user@host# set term t1 then insert tag x-sub-ip tag-value subscriber-ip
在以下示例规则中,仅标记目标地址与 198.51.100.50 或 198.51.100.75 匹配的流量。系统会为订阅者的 IP 地址和路由器的主机名插入标记。规则中的第二个术语提供重定向 URL,在该 URL 中转发流量,而不是发送到原始请求的 URL。
user@host# edit services captive-portal-content-delivery user@host# set match-direction input user@host# set rule tag-redirect term t1 from destination-address 198.51.100.50 user@host# set rule tag-redirect term t1 from destination-address 198.51.100.75 user@host# set rule tag-redirect term t1 then insert tag x-sub-ip tag-value subscriber-ip user@host# set rule tag-redirect term t1 then insert tag x-hostname tag-value hostname user@host# set rule tag-redirect term t2 then redirect http://www.portal.example.com user@host# set profile http-insert-redirect cpcd-rules tag-redirect
与基于路由引擎的 HTTP 重定向的任何 CPCD 服务规则一样,您必须将这些规则包含在 CPCD 服务配置文件中,然后使用 CPCD 服务集将配置文件与内联服务接口相关联。路由引擎使用规则来处理服务过滤器在与服务集相同的逻辑接口上传递的 HTTP 流量。
考虑以下示例配置。标记重定向规则旨在匹配输入接口上的流量,然后在 GET 报头中插入两个标记,即订阅者的 IP 地址值和路由器的主机名。然后,该规则会为标记的流量提供重定向 URL。CPCD 服务配置文件 http-insert-redirect 定义为包含此规则。
user@host# edit services captive-portal-content-delivery user@host# set match-direction input user@host# set rule tag-redirect term t1 then insert tag x-sub-ip tag-value subscriber-ip user@host# set rule tag-redirect term t1 then insert tag x-hostname tag-value hostname user@host# set rule tag-redirect term t2 then redirect http://www.portal.example.com user@host# set profile http-insert-redirect cpcd-rules tag-redirect
服务集 sset1 定义为用于基于路由引擎的 CPCD。它将 CPCD 服务配置文件应用于内联服务接口。
user@host# edit services service-set sset1 user@host# set service-set-options routing-engine-services user@host# set captive-portal-content-delivery-profile http-insert-redirect user@host# set interface-service service-interface si-1/1/0
服务过滤器 walled-tag 识别并处理三种流量:发送到 192.0.2.100 的 Walled Garden 的 HTTP 流量,发往 198.51.100.50 的 HTTP 流量以进行服务处理,以及要跳过的所有其他流量。这是在服务过滤器中而不是在服务规则中匹配目标地址的示例。
user@host# edit firewall family inet service-filter walled-tag user@host# set term portal from destination-address 192.0.2.100 user@host# set term portal from destination-port 80 user@host# set term portal then skip user@host# set term http-tag from destination-address 198.51.100.50 user@host# set term http-tag from destination-port 80 user@host# set term http-tag then service user@host# set term skip then skip
服务集 sset1 和服务过滤器 walled-tag 应用于逻辑接口。
user@host# edit chassis fpc 4 pic 0 inline-services bandwidth 1g user@host# edit interfaces ge-2/0/1 unit 0 family inet user@host# set address 203.0.113.5 user@host# set service input service-set sset1 service-filter walled-tag user@host# set service output service-set sset1 service-filter walled-tag
变更历史表
是否支持某项功能取决于您使用的平台和版本。使用 功能资源管理器 确定您的平台是否支持某个功能。