안녕하세요. 

 

오늘은 [2024][Juniper SRX #15] commit and rollback 관련 명령어 대해서 알아보겠습니다. 

 

Juniper 장비는 Cisco랑 다르게 commit 명령어를 실행하지 않으면 설정값 명령어들이 적용이 되지 않습니다.

 

Ex) Cisco Side

en

conf t

int g0/0

ip add 10.1.1.1 255.255.255.0

no sh

 

명령어 입력 할 때마다 곧바로 적용됩니다. 하지만 저장되지는 않습니다. 

저장하기 위해서는 write memory 또는 copy running-config startup-config 저장해야 합니다. 

 

Ex) Juniper 

set interface ge-0/0/0 unit 0 family inet address 10.1.1.1/24

 

입력하면 설정값이 적용되지 않고 저장도 되지 않습니다. 

commit 명령어를 입력해야지 적용됩니다 그리고 commit 동시에 저장도 됩니다. 

 

**********************************

Change Configuration --> Condidate Configuration ----> active configuration

 

Ex) 만약에 설정값을 추가 삭제 변경 했으며 condidate configuration

Ex) 만약에 Commit를 눌렀으면 active configuration 

 

commit check: 설정값에 이상이 있는지 확인

commit: 설정값 적용 및 저장

commit at: 특정 시간에 commit수행

commit confirmed: 설정값을 commit수행하지만 10분 안에 다시 commit를 수행하지 않으면 이전 설정값으로 돌아갑니다. 

commit confirmed 1: 디폴트 값이 10분인데 이 값을 1분으로 변경

 

자세한 내용은 Juniper 공식 사이트 확인 부탁드립니다.

https://www.juniper.net/documentation/us/en/software/junos/cli/topics/topic-map/junos-configuration-commit.html

 

Commit the Configuration | Junos OS | Juniper Networks

The device configuration is saved using a commit model—a candidate configuration is modified as desired and then committed to the system. When a configuration is committed, the device checks the configuration for syntax errors, and if no errors are found

www.juniper.net

 

테스트해 보겠습니다. 

 

토폴로지

ge-0/0/1에 192.168.1.1/24 설정해 보겠습니다.

 

기본 설정 다 지우기

root> configure 
Entering configuration mode

[edit]
root# delete 
This will delete the entire configuration
Delete everything under this level? [yes,no] (no) yes 


[edit]
root# set system or
                 ^
syntax error.
root# set system root-authentication plain-text-password    
New password:
Retype new password:

[edit]
root# commit 
commit complete

[edit]
root# 

 

ge-0/0/0 192.168.1.1/24 설정하기

root# set interfaces ge-0/0/0 unit 0 family inet address 192.168.1.1/24 

root# run show interfaces terse | match ge-0/0 
ge-0/0/0                up    up
ge-0/0/1                up    up
ge-0/0/2                up    up

 

위에 보시면 commit를 누르지 않으면 설정값이 적용되지 않습니다. 

 

현재 어떤 명령어가 commit를 대기 중인지 확인하는 방법

root# show | compare 
[edit]
+  interfaces {
+      ge-0/0/0 {
+          unit 0 {
+              family inet {
+                  address 192.168.1.1/24;
+              }
+          }
+      }
+  }

[edit]
root# 

 

만약에 이 상태에서 exit로 밖으로 나가면 위에 설정값은 사라집니다.

root# exit 
The configuration has been changed but not committed
Exit with uncommitted changes? [yes,no] (yes)

 

no를 선택합니다

commit check은 commit 하기 전에 추가적으로 설정값이 맞는지 확인합니다. 만약에 commit check 없이 바로 commit 했을 때 설정값에 문제가 있다면 error메시지가 출력되면서 commit이 실패합니다. 

root# commit check 
configuration check succeeds

[edit]
root# 

 

commit 실행

root# commit 
commit complete

[edit]
root# exit 
Exiting configuration mode

root> show interfaces terse 
Interface               Admin Link Proto    Local                 Remote
ge-0/0/0                up    up
ge-0/0/0.0              up    up   inet     192.168.1.1/24  
gr-0/0/0                up    up
ip-0/0/0                up    up
lsq-0/0/0               up    up
lt-0/0/0                up    up
mt-0/0/0                up    up
sp-0/0/0                up    up
sp-0/0/0.0              up    up   inet    
                                   inet6   
sp-0/0/0.16383          up    up   inet    
ge-0/0/1                up    up
ge-0/0/2                up    up
dsc                     up    up
fti0                    up    up
fxp0                    up    up
gre                     up    up
ipip                    up    up
irb                     up    up
lo0                     up    up
lo0.16384               up    up   inet     127.0.0.1           --> 0/0
lo0.16385               up    up   inet     10.0.0.1            --> 0/0
                                            10.0.0.16           --> 0/0
                                            128.0.0.1           --> 0/0
                                            128.0.0.4           --> 0/0
                                            128.0.1.16          --> 0/0
lo0.32768               up    up  
lsi                     up    up
mtun                    up    up
pimd                    up    up
pime                    up    up
pp0                     up    up
ppd0                    up    up
ppe0                    up    up
st0                     up    up
tap                     up    up
vlan                    up    down

root> 

 

재부팅합니다. juniper는 commit 하면 명령어 적용과 저장이 됩니다.

재부팅해서 설정값이 유지되는지 확인해 보겠습니다. 

request system reboot

 

부팅이 완료될 때까지 기다립니다. 

root> request system reboot 
Reboot the system ? [yes,no] (no) yes 

                                                                               
*** FINAL System shutdown message from root@ ***                             

System going down IMMEDIATELY                                                  

                                                                               
Stopping cron.
.

 

부팅이 완료되면 Interface ge-0/0/0 ip를 확인해 보면 그대로 설정 값이 남아 있습니다. 

login: root
Password:
Last login: Sun Jun 23 09:53:36 on ttyu0

--- JUNOS 21.3R1.9 Kernel 64-bit XEN JNPR-12.1-20210828.6e5b1bf_buil
root@:~ # 
root@:~ # 
root@:~ # cli
root> 

root> show interfaces terse | match ge-0/0    
ge-0/0/0                up    up
ge-0/0/0.0              up    up   inet     192.168.1.1/24  
ge-0/0/1                up    up
ge-0/0/2                up    up

 

commit and-quit  - commit를 수행하고 configuration 모드에서 나갑니다.

root# set system host-name srx 

[edit]
root# commit and-quit 
commit complete
Exiting configuration mode

root@srx> 

 

commit confirmed - hostname firewall 변경하고 commit 수행합니다. 그리고 10분 안에 commit이 다시 한번 없으면 이전 상태로 돌아갑니다.

root@srx# set system host-name firewall 

[edit]
root@srx# commit ?
Possible completions:
  <[Enter]>            Execute this command
  activate             Activate a previously prepared commit
  and-quit             Quit configuration mode if commit succeeds
  at                   Time at which to activate configuration changes
  check                Check correctness of syntax; do not apply changes
  comment              Message to write to commit log
  confirmed            Automatically rollback if not confirmed
  peers-synchronize    Synchronize commit on remote peers
  prepare              Prepare for an upcoming commit activation
  |                    Pipe through a command
[edit]
root@srx# commit confirmed 
commit confirmed will be automatically rolled back in 10 minutes unless confirmed
commit complete

# commit confirmed will be rolled back in 10 minutes
[edit]
root@firewall# 

 

테스트를 위해서 10분을 기다립니다. 10분 안에 commit이 없으면 host-name은 이전 설정값은 srx로 변경됩니다.

 

10분안에 commit을 하지 않았기 때문에 설정값이 이전으로 rollback 되었음

Broadcast Message from root@srx                                                
        (no tty) at 10:25 UTC...                                               
                                                                               
Commit was not confirmed; automatic rollback complete.                                                                               


[edit]
root@srx# 

 

이번에는 테스트를 위해서 commit confirmed 1으로 하고 1분 안에 commit를 수행합니다. 

1분이 지나도 설정값이 rollback 되지 않습니다. 

root@srx# set system host-name firewall 

[edit]
root@srx# commit confirmed 1 
commit confirmed will be automatically rolled back in 1 minutes unless confirmed
commit complete

# commit confirmed will be rolled back in 1 minute
[edit]
root@firewall# commit 
commit complete

[edit]
root@firewall# 

 

commit at를 테스트해 보겠습니다

 

12:00:00에 commit를 수행합니다. 

[edit]
root@firewall# set system host-name srxsrx  

root@firewall# commit at 12:00:00    
configuration check succeeds
commit at will be executed at 2024-06-23 12:00:00 UTC
The configuration has been changed but not committed
Exiting configuration mode

root@firewall> 

 

이번에는 Rollback에 대해서 알아보겠습니다.

설정값 원복(rollback)

설정값을 기존 설정값으로 원복수행(rollback 후 반드시 commit를 수행해야 완료됨)

 

설정값을 commit 할 때마다 rollback이 생성됩니다.

 

rollback 0 - 마지막 commit이후 변경한 설정값을 초기화 

rollback 1 - 마지막 commit이전 설정값을 원복

rollback 2 - 2번째 전 commit이전 설정값으로 원복

 

commit 할 때마다 rollback으로 생성되는데 그 시점을 알고 싶을 때 확인 명령어

 

Possible completions:
  <revision>           Rollback to given configuration revision
  re0-1719138399-8     2024-06-23 10:26:40 UTC by root via cli 
  re0-1719138393-7     2024-06-23 10:26:36 UTC by root via cli commit confirmed, rollback in 1mins
  re0-1719138344-6     2024-06-23 10:25:47 UTC by root via other 
  re0-1719137740-5     2024-06-23 10:15:43 UTC by root via cli commit confirmed, rollback in 10mins
  re0-1719137710-4     2024-06-23 10:15:13 UTC by root via cli 
  re0-1719137288-3     2024-06-23 10:08:11 UTC by root via cli 
  re0-1719136430-2     2024-06-23 09:54:02 UTC by root via cli 
  re0-1719135583-1     2024-06-23 09:41:04 UTC by root via other 
[edit]
root@firewall# rollback revision    

 

rollback에 어떤 명령어가 포함되었는지 확인하는 방법

 

commit at 명령어가 포함되었습니다. 

root@firewall# show | compare rollback 0  
[edit system]
-  host-name firewall;
+  host-name srxsrx;

[edit]
root@firewall# 

 

테스트를 해보겠습니다

interface ge-0/0/0 ip 삭제합니다.

root@firewall# delete interfaces ge-0/0/0 

[edit]
root@firewall# commit 
commit complete

[edit]
root@firewall# exit 
Exiting configuration mode

root@firewall> 

root@firewall> show interfaces terse | match ge-0/0 
ge-0/0/0                up    up
ge-0/0/1                up    up
ge-0/0/2                up    up

 

현재 설정값이랑 commit전에 설정값 비교

root@firewall# show | compare rollback 1    
[edit]
-  interfaces {
-      ge-0/0/0 {
-          unit 0 {
-              family inet {
-                  address 192.168.1.1/24;
-              }
-          }
-      }
-  }

 

Rollback후 interface ge-0/0/0 ip주소 확인

root@firewall# rollback 1          
load complete

[edit]
root@firewall# commit 
commit complete

[edit]
root@firewall# run show interfaces terse | match ge-0/0 
ge-0/0/0                up    up
ge-0/0/0.0              up    up   inet     192.168.1.1/24  
ge-0/0/1                up    up
ge-0/0/2                up    up

[edit]
root@firewall# 

 

rollback 0에 의미

 

추가설정 없이 show | compare rollback 0 아무것도 없음

현재 설정이랑 rollback 0 설정값이 똑같음 

root@firewall# show | compare rollback 0 

[edit]

 

호스트 이름 변경 하지만 commit 하지 않음

 

host-name srx변경했지만 commit 하지 않았음 

현재 condidate-configuration은 hostname srx로 보이고 

현재 active-configuration(rollback 0) hostname firewall이기 때문에 

 

다른 부분을 아래에 표시해 줌. 

설정을 잘못해서 commit 하기 싫을 때 rollback 0를 누릅니다. 

또는 delete system host-name 사용해도 되지만, 명령어가 20줄이라면 rollback 0로 삭제하는 것이 편리합니다. 

root@firewall# set system host-name srx 

root@firewall# show | compare rollback 0 
[edit system]
-  host-name firewall;
+  host-name srx;

[edit]
root@firewall# 

 

rollback 숫자 없음 의미는 rollback 0를 의미

rollback 0은 commit이 필요 없음, 

 

이제 condidate-configuration이랑 active-configuration이랑 똑같아서 아래에 show | compare rollback 0를 입력하면 

아무것도 없음

root@firewall# rollback 
load complete  

[edit]
root@firewall# show | compare rollback 0 

[edit]
root@firewall# 

 

지금까지 [2024][Juniper SRX #15] commit and rollback 글을 읽어주셔서 감사합니다.

 

+ Recent posts