配置基于路由引擎的静态 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
指定匹配流量跳过线卡上的处理。
[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(正常);如果请求被拒绝,则状态代码为 403(禁止访问)。
路由引擎终止与客户端和服务器的 TCP 连接。

标签插入标头的顺序与其配置顺序相同。标记名称区分大小写,因此 tag ABCD
和 tag abcd
将作为不同的名称进行处理。
要配置要插入 GET 标头中的标记,请执行以下操作:
例如,以下配置创建一个服务规则,即插入规则,以匹配输入接口上的流量。术语 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。
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 的围墙花园的 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 和服务过滤器围墙标记将应用于逻辑接口。
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
更改历史记录表
功能支持由您使用的平台和版本决定。使用 功能资源管理器 确定您的平台是否支持某个功能。