はじめに
近年、テレワークの普及等によりネットワークトラフィックが急増し、ネットワークへの影響でお困りではないでしょうか?
そんな課題への対策としてLBO(Local Break Out:ローカルブレイクアウト)という選択肢がありますが、今回はジュニパーネットワークス社のSRXシリーズでLBOの実装についてご紹介します。
目次
- Advanced Policy-Based Routing(APBR)とは
- 検証構成
- APBRの設定
- APBR設定追加後の検証構成
- 動作確認
- 最後に
1. Advanced Policy-Based Routing(APBR)とは
ジュニパーネットワークス社のSRXシリーズのAdvanced Policy-Based Routing(APBR)は、4,000種類以上のアプリケーションをL7シグネチャで識別し、アプリケーションの属性に基づいてフローを分類し、これらの属性に基づいたフィルターを適用してトラフィックを転送する機能です。


つまり、SRXでAPBRを使うことで、特定のアプリケーショントラフィックと、その他トラフィックを分離でき、トラフィックごとに回線を振り分ける、LBO(Local Break Out:ローカルブレイクアウト)することができるようになります。通信を振り分けることにより、パフォーマンスの改善、回線の逼迫回避やレイテンシ減少といったメリットを享受できます。

他社のIPベースの方法では、IPアドレスやポート番号に基づいてトラフィックを制御する為、高速な処理を期待できる反面、アプリケーションの細かい特性を考慮出来ないといったデメリットがあるので、シグネチャ方式と比べ、一長一短となります。
2. 検証構成
本検証は、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アドレスが表示されます。
https://checkip.amazonaws.com
クラウド側で送信元のIPを確認するのは、Microsoft 365であれば以下URLか、「マイ アカウント」→「自分のサインイン」→「最近のアクティビティ」より確認可能です。
https://mysignins.microsoft.com/

3. 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 |
4. 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という機能もあります。こちらにつきましては、別途紹介したいと思います。
また、初期のJunosバージョンには、Deep Packet Inspection(DPI)のエンジンを使い、アプリケーションを認識している関係で、仕組み上、最初のパケットでアプリケーションを認識することができない、ファーストパケット問題がありました。しかし、Junos OS 21.3R1以降でのAPBRでは、一部アプリケーションにおいて本問題も改善され、ファーストパケットから処理できるようになりました。実装する場合は要確認ですが、こちらの紹介も別の機会にしたいと思います。
※文中の会社名、商品名、ロゴは各社の商標および登録商標です。