こんにちは。クレスコ・デジタルテクノロジーズのR.B.B.M.です。
近年、テレワークの普及等によりネットワークトラフィックが急増し、ネットワークへの影響でお困りではないでしょうか?
そんな課題への対策としてLBO(Local Break Out:ローカルブレイクアウト)という選択肢がありますが、今回はジュニパーネットワークス社のSRXシリーズでLBOの実装についてご紹介します。
■あわせて読まれている資料:
CROSS for Juniper Mist(ネットワークマネージドサービス)
Advanced Policy-Based Routing(APBR)とは
ジュニパーネットワークス社のSRXシリーズのAdvanced Policy-Based Routing(APBR)は、4,000種類以上のアプリケーションをL7シグネチャで識別し、アプリケーションの属性に基づいてフローを分類し、これらの属性に基づいたフィルターを適用してトラフィックを転送する機能です。
つまり、SRXでAPBRを使うことで、特定のアプリケーショントラフィックと、その他トラフィックを分離でき、トラフィックごとに回線を振り分ける、LBOすることができるようになります。通信を振り分けることにより、パフォーマンスの改善、回線の逼迫回避やレイテンシ減少といったメリットを享受できます。
他社のIPベースの方法では、IPアドレスやポート番号に基づいてトラフィックを制御する為、高速な処理を期待できる反面、アプリケーションの細かい特性を考慮出来ないといったデメリットがあるので、シグネチャ方式と比べ、一長一短となります。
検証構成
本検証は、SRX1500(Junos 23.2R1.13)、Advanced-1(A1)ライセンス適用の環境にて実施しています。
ゾーン定義は、ge-0/0/0側を「LAN」、ge-0/0/2側を「WAN1」としています。実際の設定内容は、導入する環境や構成によって異なります。
導入前ネットワーク構成とコンフィグ
root@SRX1500TEST> show configuration
version 23.2R1.13;
system {
host-name SRX1500TEST;
root-authentication {
encrypted-password "************"; ## SECRET-DATA
}
name-server {
8.8.8.8;
}
}
services {
application-identification;
}
security {
policies {
from-zone LAN to-zone WAN1 {
policy LAN_to_WAN1 {
match {
source-address any;
destination-address any;
application any;
}
then {
permit;
}
}
}
}
zones {
security-zone WAN1 {
interfaces {
ge-0/0/2.0;
}
}
security-zone LAN {
host-inbound-traffic {
system-services {
all;
}
protocols {
all;
}
}
interfaces {
ge-0/0/0.0;
}
}
}
}
interfaces {
ge-0/0/0 {
unit 0 {
family inet {
address 192.168.100.254/24;
}
}
}
ge-0/0/2 {
unit 0 {
family inet {
address 192.168.202.100/24;
}
}
}
}
routing-options {
static {
route 0.0.0.0/0 next-hop 192.168.202.254;
}
}
root@SRX1500TEST> show route
inet.0: 5 destinations, 5 routes (5 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
0.0.0.0/0 *[Static/5] 01:31:14
> to 192.168.202.254 via ge-0/0/2.0
192.168.100.0/24 *[Direct/0] 01:31:30
> via ge-0/0/0.0
192.168.100.254/32 *[Local/0] 01:31:30
Local via ge-0/0/0.0
192.168.202.0/24 *[Direct/0] 01:31:14
> via ge-0/0/2.0
192.168.202.100/32 *[Local/0] 01:31:14
Local via ge-0/0/2.0
inet6.0: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
ff02::2/128 *[INET6/0] 01:47:49
MultiRecv
PCからインターネット接続が可能なことを確認します。
接続元のグローバルIPを調べる方法はいくつかありますが、今回はAWSが提供するサービスで確認をしています。以下URLにアクセスすると、接続元のIPアドレスが表示されます。
http://checkip.amazonaws.com
クラウド側で送信元のIPを確認するのは、Microsoft 365であれば以下URLか、「マイ アカウント」→「自分のサインイン」→「最近のアクティビティ」より確認可能です。
https://mysignins.microsoft.com/
APBRの設定
APBRを利用するには、機器でAppSecure(A1ライセンス以上必須)が有効となっている必要があります。
SRX300シリーズで、MistのWAN Assurance(S-SRX-S-C-)を購入している場合、AppSecureがバンドルされるので、APBRでLBOさせることが可能です。SRX1500以上のモデルは、AppSecureバンドルのMistライセンスが無いので、メーカーの充実(やる気)を期待します。
今回機器には、application identificationのシグネチャがインストールされている前提とします。
機器にインストールされているシグネチャのバージョンは、以下コマンドで確認可能です。
root@SRX1500TEST> show services application-identification version
Application package version: 3646
Release date: Thu Oct 26 14:06:26 2023 UTC
①LBO用回線の接続させる為のインターフェイスを作成します。
ge-0/0/3に192.168.203.100のIPを設定します。
root@SRX1500TEST# set interfaces ge-0/0/3 unit 0 family inet address 192.168.203.100/24
作成したge-0/0/3.0のゾーンをWAN2として定義します。
root@SRX1500TEST# set security zones security-zone WAN2 interfaces ge-0/0/3.0
今回はインターネットへ抜ける時、ge-0/0/3(192.168.203.100)のIPでSource NATさせたいので、NATのルールを追加します。
root@SRX1500TEST# set security nat source rule-set LAN_to_WAN2 from zone LAN
root@SRX1500TEST# set security nat source rule-set LAN_to_WAN2 to zone WAN2
root@SRX1500TEST# set security nat source rule-set LAN_to_WAN2 rule source-nat-rule match source-address 0.0.0.0/0
root@SRX1500TEST# set security nat source rule-set LAN_to_WAN2 rule source-nat-rule then source-nat interface
②routing-instanceの作成とルーティング、APBR対象(LBO)とするプロファイルとポリシーの作成、FWポリシーを設定します。
routing-instanceの作成と、そのrouting-instanceに対するデフォルトルートを定義します。
root@SRX1500TEST# set routing-instances LBO_RI instance-type forwarding
root@SRX1500TEST# set routing-instances LBO_RI routing-options static route 0.0.0.0/0 next-hop 192.168.203.254
APBRのプロファイルを作成し、routing-instanceへ割り当てます。
今回はMicrosoft 365とGoogle WorkspaceをLBO対象とさせてみたいと思います。
root@SRX1500TEST# set security advance-policy-based-routing profile LBO_PROFILE rule M365 match dynamic-application junos:OFFICE365-CREATE-CONVERSATION
root@SRX1500TEST# set security advance-policy-based-routing profile LBO_PROFILE rule M365 match dynamic-application junos:MS-TEAMS
root@SRX1500TEST# set security advance-policy-based-routing profile LBO_PROFILE rule M365 then routing-instance LBO_RI
root@SRX1500TEST# set security advance-policy-based-routing profile LBO_PROFILE rule GWS match dynamic-application junos:GSUITE
root@SRX1500TEST# set security advance-policy-based-routing profile LBO_PROFILE rule GWS match dynamic-application junos:GMAIL
root@SRX1500TEST# set security advance-policy-based-routing profile LBO_PROFILE rule GWS then routing-instance LBO_RI
AppSecureで識別可能なアプリケーション一覧や名称は、以下ジュニパーネットワークス社のWebページで確認可能です。
https://threatlabs.juniper.net/home/search/#/list/app
APBRのポリシーを作成し、上記で作成したAPBRのプロファイル(LBO_PROFILE)を紐づけます。
root@SRX1500TEST# set security advance-policy-based-routing from-zone LAN policy APBR_POLICY match source-address any
root@SRX1500TEST# set security advance-policy-based-routing from-zone LAN policy APBR_POLICY match destination-address any
root@SRX1500TEST# set security advance-policy-based-routing from-zone LAN policy APBR_POLICY match application any
root@SRX1500TEST# set security advance-policy-based-routing from-zone LAN policy APBR_POLICY then application-services advance-policy-based-routing-profile LBO_PROFILE
LANからWAN2へ通信を許可させる為、FWポリシーを設定します。
root@SRX1500TEST# set security policies from-zone LAN to-zone WAN2 policy LAN_to_WAN2 match source-address any
root@SRX1500TEST# set security policies from-zone LAN to-zone WAN2 policy LAN_to_WAN2 match destination-address any
root@SRX1500TEST# set security policies from-zone LAN to-zone WAN2 policy LAN_to_WAN2 match application any
root@SRX1500TEST# set security policies from-zone LAN to-zone WAN2 policy LAN_to_WAN2 then permit
デフォルトのルート情報を routing-instanceのルーティングテーブルにインポートさせます。
root@SRX1500TEST# set routing-options interface-routes rib-group inet APBR_RIGRP
root@SRX1500TEST# set routing-options rib-groups APBR_RIGRP import-rib inet.0
root@SRX1500TEST# set routing-options rib-groups APBR_RIGRP import-rib LBO_RI.inet.0
APBR設定追加後の検証構成
APBR設定追加後ネットワーク構成とコンフィグ
root@SRX1500TEST> show configuration
version 23.2R1.13;
system {
host-name SRX1500TEST;
root-authentication {
encrypted-password "************"; ## SECRET-DATA
}
name-server {
8.8.8.8;
}
}
services {
application-identification;
}
security {
nat {
source {
rule-set LAN_to_WAN2 {
from zone LAN;
to zone WAN2;
rule source-nat-rule {
match {
source-address 0.0.0.0/0;
}
then {
source-nat {
interface;
}
}
}
}
}
}
policies {
from-zone LAN to-zone WAN1 {
policy LAN_to_WAN1 {
match {
source-address any;
destination-address any;
application any;
}
then {
permit;
}
}
}
from-zone LAN to-zone WAN2 {
policy LAN_to_WAN2 {
match {
source-address any;
destination-address any;
application any;
}
then {
permit;
}
}
}
}
zones {
security-zone WAN1 {
interfaces {
ge-0/0/2.0;
}
}
security-zone LAN {
host-inbound-traffic {
system-services {
all;
}
protocols {
all;
}
}
interfaces {
ge-0/0/0.0;
}
}
security-zone WAN2 {
interfaces {
ge-0/0/3.0;
}
}
}
advance-policy-based-routing {
profile LBO_PROFILE {
rule M365 {
match {
dynamic-application [ junos:OFFICE365-CREATE-CONVERSATION junos:MS-TEAMS ];
}
then {
routing-instance LBO_RI;
}
}
rule GWS {
match {
dynamic-application [ junos:GSUITE junos:GMAIL ];
}
then {
routing-instance LBO_RI;
}
}
}
from-zone LAN {
policy APBR_POLICY {
match {
source-address any;
destination-address any;
application any;
}
then {
application-services {
advance-policy-based-routing-profile LBO_PROFILE;
}
}
}
}
}
}
interfaces {
ge-0/0/0 {
unit 0 {
family inet {
address 192.168.100.254/24;
}
}
}
ge-0/0/2 {
unit 0 {
family inet {
address 192.168.202.100/24;
}
}
}
ge-0/0/3 {
unit 0 {
family inet {
address 192.168.203.100/24;
}
}
}
}
routing-instances {
LBO_RI {
instance-type forwarding;
routing-options {
static {
route 0.0.0.0/0 next-hop 192.168.203.254;
}
}
}
}
routing-options {
interface-routes {
rib-group inet APBR_RIGRP;
}
static {
route 0.0.0.0/0 next-hop 192.168.202.254;
}
rib-groups {
APBR_RIGRP {
import-rib [ inet.0 LBO_RI.inet.0 ];
}
}
}
root@SRX1500TEST> show route
inet.0: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
0.0.0.0/0 *[Static/5] 05:27:14
> to 192.168.202.254 via ge-0/0/2.0
192.168.100.0/24 *[Direct/0] 05:27:30
> via ge-0/0/0.0
192.168.100.254/32 *[Local/0] 05:27:30
Local via ge-0/0/0.0
192.168.202.0/24 *[Direct/0] 05:27:14
> via ge-0/0/2.0
192.168.202.100/32 *[Local/0] 05:27:14
Local via ge-0/0/2.0
192.168.203.0/24 *[Direct/0] 01:08:01
> via ge-0/0/3.0
192.168.203.100/32 *[Local/0] 01:08:01
Local via ge-0/0/3.0
LBO_RI.inet.0: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
0.0.0.0/0 *[Static/5] 01:08:01
> to 192.168.203.254 via ge-0/0/3.0
192.168.100.0/24 *[Direct/0] 01:09:08
> via ge-0/0/0.0
192.168.100.254/32 *[Local/0] 01:09:08
Local via ge-0/0/0.0
192.168.202.0/24 *[Direct/0] 01:09:08
> via ge-0/0/2.0
192.168.202.100/32 *[Local/0] 01:09:08
Local via ge-0/0/2.0
192.168.203.0/24 *[Direct/0] 01:08:01
> via ge-0/0/3.0
192.168.203.100/32 *[Local/0] 01:08:01
Local via ge-0/0/3.0
inet6.0: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
ff02::2/128 *[INET6/0] 05:43:49
MultiRecv
LBO_RI.inet6.0: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
ff02::2/128 *[INET6/0] 01:09:08
MultiRecv
動作確認
APBRの動作確認として、SRXのカウンターやキャッシュ状態より確認ができます。
LBOの対象の通信を発生させて、App rule hit on cache hitとRoute changed on cache hitsのカウンタが上昇していれば、APBRが行われています。
root@SRX1500TEST> show security advance-policy-based-routing statistics
Advance Profile Based Routing statistics:
Sessions Processed 2234
App rule hit on cache hit 225
App rule hit by first packet classification 103
App rule hit on HTTP Proxy/ALG 0
Midstream disabled rule hit on cache hit 0
URL cat rule hit on cache hit 0
DSCP rule hit on first packet 0
App and DSCP hit on first packet 0
App rule hit midstream 63
Default rule match 0
Midstream disabled rule hit midstream 0
URL cat rule hit midstream 0
App and DSCP rule hit midstream 0
DSCP rule hit midstream 0
Route changed on cache hits 225
Route changed by first packet classification 103
Route changed on HTTP Proxy/ALG 0
Route changed midstream 0
Default rule applied 0
Zone mismatch 62
Drop on zone mismatch 0
Next hop not found 0
Application services bypass 0
また、対象アプリケーションのシグネチャがキャッシュされているかも確認観点の一つです。
root@SRX1500TEST> show services application-identification application-system-cache
Application System Cache Configurations:
application-cache: on
Cache lookup for security-services: off
Cache lookup for miscellaneous-services: on
cache-entry-timeout: 3600 seconds
pic: 0/0
Logical system name: root-logical-system
IP address: 23.194.98.11 Port: 443 Protocol: TCP
Application: SSL:MICROSOFT Encrypted: Yes
Classification Path: IP:TCP:SSL:MICROSOFT
Logical system name: root-logical-system
IP address: 216.58.220.106 Port: 443 Protocol: UDP
Application: QUIC:GOOGLE-GEN Encrypted: No
Classification Path: IP:UDP:QUIC:GOOGLE-GEN
Logical system name: root-logical-system
IP address: 20.190.141.15 Port: 443 Protocol: TCP
Application: SSL:OFFICE365-CREATE-CONVERSATION Encrypted: Yes
Classification Path: IP:TCP:SSL:MICROSOFT:OFFICE365-CREATE-CONVERSATION
Logical system name: root-logical-system
IP address: 23.195.88.75 Port: 443 Protocol: UDP
Application: QUIC:SSL Encrypted: No
Classification Path: IP:UDP:QUIC:SSL
Logical system name: root-logical-system
IP address: 172.217.174.98 Port: 443 Protocol: TCP
Application: SSL:GOOGLE-GEN Encrypted: Yes
Classification Path: IP:TCP:SSL:GOOGLE-GEN
:
:
:
PC側を確認すると、通常の通信は ***.***.60.69 からで、Microsoft 365の通信は ***.***.107.117 から来ており、通信が正しく分離され、LBOされていることが確認できます。
まとめ
SRXのAPBRを利用すると、アプリケーション毎にトラフィックを識別することができ、特定のトラフィックを別回線からインターネットへ振り分けることができます。この機能を活用することにより、ネットワーク負荷を効率的に分散させることができると期待します。
ジュニパーネットワークス社のSRXには、Proxyサーバを利用している環境でもLBOさせることができる、Secure Web Proxyという機能もあります。こちらにつきましては、別途紹介したいと思います。
更新:2024年4月2日
■関連記事:
「ジュニパーネットワークス社 SRXシリーズのAPBR活用法~Secure Web Proxy編~」
また、初期のJunosバージョンには、Deep Packet Inspection(DPI)のエンジンを使い、アプリケーションを認識している関係で、仕組み上、最初のパケットでアプリケーションを認識することができない、ファーストパケット問題がありました。しかし、Junos OS 21.3R1以降でのAPBRは、一部アプリケーションにおいて本問題も改善され、ファーストパケットから処理できるようになりました。実装する場合は要確認ですが、こちらの紹介も別の機会にしたいと思います。
※文中の会社名、商品名、ロゴは各社の商標および登録商標です。