Juniper SRX210設定ドキュメント

仕事で新拠点と既存拠点をVPNで接続する必要が出てきました。
以前に設定した人は退職し、ドキュメントも一切残っていませんでした。
かろうじてrootのパスワードが判ったので、既存の設定を抜き出して試行錯誤でセットアップしたときの備忘録です。
新拠点は稼働しましたが、まだおかしなところもありそうなので現在進行形の情報です。
具体的な設定内容は差し障りがあるので、操作方法を中心に書いてあります。
 
### 関連情報
[Configuring Network Interfaces（juniper）](https://www.juniper.net/documentation/software/junos/jes103/jweb103-help/configure_interfaces_srx.html)

## 操作手順

### 基本的な操作
3つのモードで操作することができます。
JUNOSコマンドが使用できるモードはオペレーションモードとコンフィグレーションモード。
シェルコマンドモードではUNIXコマンド（FreeBSD）を使用。
Tabキーによるコマンド補完が効きます。

```shell
Thu Jan 20 11:20:39 GMT+9 2022

HakataBranch (ttyu0)

login: root
Password:

--- JUNOS 10.3R2.11 built 2010-11-19 00:48:47 UTC
root@XXXXX%
```


| 操作モード | プロンプト | 説明 |
| -------- | -------- | -------------- |
| シェルコマンド     | %     | FreeBSDのシェルにアクセスできるモード。    |
| オペレーション | > | ソフトウェア、ネットワーク接続性、ハードウェアのステータス確認とモニター |
| コンフィグレーション | # | JUNOSを設定（追加、変更、削除）する時のモード |

オペレーションモードに移行したい場合はcliと入力
コンフィグレーションモードに移行したい場合configureと入力


```plantuml
@startuml
シェルコマンドモード --> オペレーションモード: cli
オペレーションモード --> シェルコマンドモード: exit
コンフィグレーション --> オペレーションモード: exit
オペレーションモード --> コンフィグレーション: configure

state シェルコマンドモード : root@XXXXX%
state オペレーションモード : root@XXXXX>
state コンフィグレーション : root@XXXXX#
@enduml
```


### 起動・停止
JUNOS（Juniper）はFreeBSDがベースのOSであり、通常のPCやLinuxマシンと同じく、シャットダウン処理が必要です。

1. コマンドラインからのシャットダウン
    1. コンソール（TeraTerm等でコンソールケーブル経由）で機器にログインします。
※シリアル接続の Baud rate=9600 を設定してください。
    2. root ユーザでログインし、以下のコマンドを実行します。
    
```shell 
root@XXXXXX% cli
root@XXXXXX> request system power-off
root@XXXXXX> Power Off the system ? [yes,no] (no) yes 
```
↑ Yes を入力します。
(以下のメッセージを出力した後、電源が落ちます。約１分)

```shell
[2022-01-20 17:59:16.664] root@XXXXX> request system power-off 
[2022-01-20 17:59:30.167] Power Off the system ? [yes,no] (no) yes 
[2022-01-20 17:59:32.649] 
[2022-01-20 17:59:32.906] Shutdown NOW!
[2022-01-20 17:59:32.920] [pid 1095]
（省略）
[2022-01-20 18:00:01.094] The operating system has halted.
[2022-01-20 18:00:01.127] Turning the system power off.
```

2. 起動手順
電源ケーブルを挿入した後、電源ボタンを押下します。
![Juniper SRX100](https://i.imgur.com/rrhCX7H.png)

3. 再起動
オペレーションモードで request system reboot コマンド
```shell
root@XXXXXX> request system reboot
```

## 各種設定
### 設定の確認方法
#### 1. 設定の表示（SETモード）
オペレーションモードで show configuration コマンド
```shell
root@XXXXXX> show configuration | display set | no-more
```
SETモードで表示される。「no-more」を付けないと画面毎に表示が止まる。
このまま、コンソールから投入できるので便利。
```shell
set version 10.4R6.5
set system host-name HakataBranch
set system time-zone GMT+9
set system login user qiitaadm uid 2002
set system login user qiitaadm class super-user
```
#### 2. 設定の表示（階層モード）
```shell
root@XXXXXX> show configuration | no-more
```
階層モードで表示される。「no-more」を付けないと画面毎に表示が止まる。
階層で表示されるので見やすい。
```shell
version 12.1X44-D35.5;
system {
    host-name HakataBranch;
    time-zone GMT+9;
    root-authentication {
        encrypted-password "$1$nc9TNPir$TenHOKrjBIjmSQCg7RbN//"; ## SECRET-DATA
    }
```
#### 3. 設定の表示（個別設定値）
```shell
root@XXXXXX> show system services dhcp pool
Pool name           Low address      High address     Excluded addresses
192.168.70.0/24     192.168.70.201   192.168.70.240
#### 3. 設定の表示（個別設定値）
```
#### 4. VPNの接続状態
Stateが「UP」の状態が正常。「DOWN」などは異常であるが、再起動後などセッションが確立すると「UP」に変わる

```shell
root@XXXXXX> show security ike security-associations
Index   Remote Address  State  Initiator cookie  Responder cookie  Mode
3       167.99.234.88   UP     ae464db88ec96517  5cfc1e2ac5d9767b  Aggressive
2       210.8.86.78     UP     c8a4dc4606ce8080  1df0c75de99444b4  Aggressive

root@XXXXXX> show security ike security-associations
Index   Remote Address  State  Initiator cookie  Responder cookie  Mode
3       167.99.234.88   UP     ae464db88ec96517  5cfc1e2ac599957b  Aggressive
4       229.111.251.199 DOWN   78002251992c65ce  0000000000000000  Aggressive
2       210.8.86.78     UP     c8a4dc4606ce8080  1df0c75de99888b4  Aggressive

root@XXXXXX> show security ipsec security-associations     
  Total active tunnels: 3
  ID    Gateway          Port  Algorithm       SPI      Life:sec/kb  Mon vsys
  <131073 222.116.244.185 500  ESP:3des/sha1   d1066db2 590/  unlim   -   root
  >131073 222.116.244.185 500  ESP:3des/sha1   2ea99cb0 590/  unlim   -   root
  <131073 222.116.244.185 500  ESP:3des/sha1   77bdc56c 591/  unlim   -   root
  >131073 222.116.244.185 500  ESP:3des/sha1   6ae7998  591/  unlim   -   root
  <131075 111.9.51.55    500   ESP:3des/sha1   6a87f994 3170/ unlim   -   root
  >131075 111.9.51.55    500   ESP:3des/sha1   2fe99ae0 3170/ unlim   -   root
  <131075 111.9.51.55    500   ESP:3des/sha1   7f26225a 3178/ unlim   -   root
  >131075 111.9.51.55    500   ESP:3des/sha1   f49fbf55 3178/ unlim   -   root
  <131074 165.88.236.90  500   ESP:3des/sha1   babd00f0 2886/ unlim   -   root
  >131074 165.88.236.90  500   ESP:3des/sha1   71b44f03 2886/ unlim   -   root   
```

「DOWN」の状態から回復しないときは、該当のトンネルをdisableにし、再度元に戻す。
余り有効では無いかも。。。
```
root@XXXXXX> set interfaces st0 unit 0 disable 
root@XXXXXX> commit 
root@XXXXXX> set interfaces st0 unit 0 family inet
root@XXXXXX> commit 
root@XXXXXX> show security ike security-associations

```

### 設定の方法
#### 1. コンフィグレーションの設定方法 (setコマンド）

設定するためには、コンフィグレーションモードから set コマンドを使用して設定します。
設定を削除する場合はdeleteコマンドを使用します。
JUNOSでは設定追加や設定削除の際にコマンドをフルパスで設定する方法、
該当する階層で設定する方法の2種類があります。
`show xxxxxxxxx | display set` コマンドでフルパスのset文を取得し、setコマンドを修正し、投入するのが簡単です。

```shell
root@XXXXXX# show system services dhcp router | display set
set system services dhcp router 192.168.1.1                  <--コピーして
```
```shell
root@XXXXXX# set system services dhcp router 192.168.70.1    <--編集してペースト
root@XXXXXX# show system services dhcp
router {
    192.168.70.1;
}
pool 192.168.70.0/24 {
    address-range low 192.168.70.201 high 192.168.70.240;
}
propagate-settings ge-0/0/0.0;
```

#### 2. 設定の初期化（要注意）
1. Active コンフィグを工場出荷状態に初期化する
```shell
root@XXXXXX# load factory-default
```
2. 平文パスワード（plain-text-password）を設定する
commitしないと終われません。
```shell
root@XXXXXX# set system root-authentication plain-text-password
root@XXXXXX# commit
```

## 設定
### 1. Pre-shared Key（事前共有キー）
お互いのルーターを認証するため交換する暗号鍵  
値はhost-nameとする(対向先と同じ値であればなんでも良い)。自動的に暗号化される。

```
set security ike policy ike_pol_Honmachi pre-shared-key ascii-text "Honmachi"
```
~~若しくは以下のページも生成可能。
[強力な事前共有キーの生成](https://cloud.google.com/network-connectivity/docs/vpn/how-to/generating-pre-shared-key)~~

### 2. PPPoE認証パスワードの設定
プロバイダから指示されたパスワードをテキストで設定する。
自動的に暗号化される。

```
set interfaces pp0 unit 0 ppp-options chap default-chap-secret "PPPoE_Password"
set interfaces pp0 unit 0 ppp-options chap local-name "pppoe_user@provider.ne.jp"
set interfaces pp0 unit 0 ppp-options chap passive
set interfaces pp0 unit 0 ppp-options pap local-name "pppoe_user@provider.ne.jp"
set interfaces pp0 unit 0 ppp-options pap local-password "PPPoE_Password"
```

### 3. タイムサーバ
設定時、名前解決が出来ないためエラーとなる。
インターネット接続後に再設定すること。

```
root@HakataBranch# set system ntp server ntp.nict.jp
error: could not resolve name: ntp.nict.jp: ntp.nict.jp

[edit]
root@HakataBranch# commit
commit complete
```
### 4. DHCPサーバの設定
* vlan.0に192.168.10.1/24が割り当てる。
* Winsサーバを２台割り当てる。
* trustゾーンに割り当てられています。
* インターフェースのge-0/0/1とfe-0/0/2〜3をvlan.0に割り当てる。
* dhcpのIPアドレス範囲を192.168.10.201〜192.168.10.240とする。
* trustゾーンでdhcpが利用できるようにする。
セキュリティポリシーを追加していく過程で急に繋がらなくなるので注意が必要。
```
set system services dhcp wins-server 192.168.10.100
set system services dhcp wins-server 192.168.20.100
set system services dhcp router 192.168.10.1
set system services dhcp pool 192.168.10.0/24 address-range low 192.168.10.201
set system services dhcp pool 192.168.10.0/24 address-range high 192.168.10.240
set system services dhcp propagate-settings vlan.0
set security zones security-zone Internal interfaces vlan.0 host-inbound-traffic system-services dhcp
```
#### IPアドレスの設定内容確認
```
root@HakataBranch> show system services dhcp pool
Pool name           Low address      High address     Excluded addresses
192.168.10.0/24     192.168.10.201   192.168.10.240
```
#### IPアドレスの払出状況確認
```
root@HakataBranch> show system services dhcp binding
IP address       Hardware address   Type     Lease expires at
192.168.10.202   38:f3:ab:62:c7:fa  dynamic  2022-02-18 10:31:39 GMT+9
192.168.10.201   8c:8c:aa:e8:a9:80  dynamic  2022-02-18 08:42:12 GMT+9
```


### 5. コミットせずにexitしたら
コミットの確認がされます。[Yes]でキャンセルされます。
```
[edit]
root@HakataBranch# exit
The configuration has been changed but not committed
Exit with uncommitted changes? [yes,no] (yes) no

Exit aborted

[edit]
root@HakataBranch#
```

### 6. root パスワードの設定
root パスワードの設定は、以下のコマンドを実行して対話的に設定します。
```
root@HakataBranch# set system root-authentication plain-text-password
[edit]
root# set system root-authentication plain-text-password
New password:
Retype new password:
```
設定したパスワードはコンフィグ上では暗号化されて表示されます。
```
root@HakataBranch> show configuration | display set | match root
set system root-authentication encrypted-password "$1$xeVYrSDn$r3BMhDVdRuyqb8WEhLEae0"
```

暗号化済みのパスワードを使用して設定する場合は以下の様にコマンド1行で設定可能です。
```
root# set system root-authentication encrypted-password "$1$xeVYrSDn$r3BMhDVdRuyqb8WEhLEae0"
```
## トラブルシューティング
### 起動しないとき
起動が遅いので焦らず起動を待つ。コンソールのメッセージを確認する。
#### 1. 正しく電源断しなかった場合
電源ケーブルが抜けたなど、シャットダウンコマンドに依らず電源が落ちた場合など
以下のメッセージが出た場合はOSにダメージがあり、バックアップから起動しています。
```shell
（起動中）
writing to flash...
Protected 1 sectors

can't load '/kernel'
can't load '/kernel.old'
Press Enter to stop auto bootsequencing and to enter loader prompt.

（この後、かなりの時間でバックアップが起動する）

  --- JUNOS 10.3R2.11 built 2010-11-19 00:48:47 UTC

***********************************************************************
**                                                                   **
**  WARNING: THIS DEVICE HAS BOOTED FROM THE BACKUP JUNOS IMAGE      **
**                                                                   **
**  It is possible that the primary copy of JUNOS failed to boot up  **
**  properly, and so this device has booted from the backup copy.    **
**                                                                   **
**  Please re-install JUNOS to recover the primary copy in case      **
**  it has been corrupted.                                           **
**                                                                   **
***********************************************************************
```
以下の手順で、バックアップをプライマリーにコピーします。
手順は以下を参照しました（その通りには進めなかった）。
[運悪くBACKUP IMAGEで起動してしまったJUNOS BOXを直す方法。](https://cloudpack.media/10682)
```shell
root@HakataBranch% cli
root@HakataBranch> show system storage partitions
Boot Media: internal (da0)
Active Partition: da0s2a
Backup Partition: da0s1a
Currently booted from: backup (da0s1a)

Partitions information:
  Partition  Size   Mountpoint
  s1a        293M   /
  s2a        293M   altroot
  s3e        24M    /config
  s3f        342M   /var
  s4a        30M    recovery
root@HakataBranch> request system snapshot media internal slice alternate
Formatting alternate root (/dev/da0s2a)...
Copying '/dev/da0s1a' to '/dev/da0s2a' .. (this may take a few minutes)
The following filesystems were archived: /
root@HakataBranch> request system reboot slice alternate
                                            ^         <--エラーとなる
invalid numeric value: 'alternate' at 'alternate'
（エラーとなるため以下のコマンドで再起動）
root@HakataBranch> request system reboot 
Reboot the system ? [yes,no] (no) yes 
Shutdown NOW!
[pid 1509]
```

#### 2. ARALMのオレンジ点灯

SRXの工場出荷時の状態では、レスキューコンフィグと呼ばれるコンフィグが設定されていないためフロントパネルのALARMがオレンジ色に点灯しています。このレスキューコンフィグを作成することでアラームランプが点灯しなくなります。レスキューコンフィグとは設定ミス等で通信障害が発生したりアクセスができなくなった場合に備えて、管理者が予め保存して緊急時に読み込ませるコンフィグです。

* アクティブなコンフィグをレスキューコンフィグとして作成
```shell
root@XXXXX> request system configuration rescue save
```

* 現在のレスキューコンフィグを削除するための設定

```shell
root@XXXXX> request system configuration rescue delete
```

* 現在のレスキューコンフィグの内容を確認する

```shell
root@XXXXX> show system configuration rescue
```

* 現在のレスキューコンフィグをロードしActivateする

```shell
root@XXXXX# rollback rescue
root@XXXXX# commit	
```
#### 3．Configファイルの取得
以下のフォルダーに保管されているので、最新のjuniper.conf.gzをSFTPなどで取得する。
取得形式は階層表示となる。
```
root@XXXXX% ls -l /config
total 76
drwxrwxr-x  2 root  wheel   512 Dec  4  2010 .snap
-rw-r-----  1 root  wheel  2467 Mar 10 00:05 juniper.conf.1.gz
-rw-r-----  1 root  wheel  2466 Mar 10 00:04 juniper.conf.2.gz
-rw-r-----  1 root  wheel  2466 Mar 10 00:01 juniper.conf.3.gz
-rw-r-----  1 root  wheel  2466 Mar 10 00:00 juniper.conf.4.gz
-rw-r-----  1 root  wheel  2470 Mar  9 23:59 juniper.conf.5.gz
-rw-r-----  1 root  wheel  2459 Mar 10 00:17 juniper.conf.gz
---x--x---  1 root  wheel    32 Mar 10 00:06 juniper.conf.md5
-rw-r-----  1 root  wheel  2459 Mar 11 02:06 rescue.conf.gz
-rw-r--r--  1 root  wheel   824 Jan 20 10:40 usage.db
-rw-r--r--  1 root  wheel  1376 Apr  1  2012 usage.db.1334134267
-rw-r--r--  1 root  wheel  1376 Apr 10  2012 usage.db.1642707607
root@XXXXX% 
```

#### 4．強制切断回避
sshで接続していても、しばらく操作していないと強制切断されてしまう件について、これに下記の設定を追加することで、強制切断問題が解消する。
version 10.3R2では設定できませんでしたので、未確認です。

```
root@XXXXX> set system services ssh client-alive-interval 120
root@XXXXX> set system services ssh client-alive-count-max 30
root@XXXXX> commit
```

* client-alive-interval　：１２０秒に一回、クライアントへ死活確認パケットを投げる。
* client-alive-count-max：クライアントからの応答が無い場合、３０回までは死活確認パケットを投げる（それでも帰ってこない場合はクライアントは死んだものと判断する）。

---