ZFS(ZettaByte File System)

2001년에 Sun Micro Systems에서 개발하여 Open Solaris에 적용되었고, 2008년에 FreeBSD와 Linux에 배포되었다.

ZFS 파일 시스템은 파일 시스템 관리의 혁신을 일으킨 파일 시스템으로

풀(Pool)기능, 자체적인 RAID(RAID_Z) 설정, Copy-on-Write 기능, 128bit 파일 시스템으로 

거의 무한대에 준하는 저장용량을 자랑하는 파일 시스템이다.

 

 

● ZPool의 종류

- Stripped : RAID 0와 유사한 그루핑 방식으로 읽기/쓰기 속도의 향상을 위함

- Mirroring : 1개의 Disk Storage  + 1개의 Mirroring Disk = 총 2개의 Disk(디스크 클론)

- RAID-Z1 : 2개의 Disk Storage + 1개의 Parity Disk = 총 3개의 Disk

- RAID-Z2 : 2개의 Disk Storage + 2개의 Parity Disk = 총 4개의 Disk

- RAID-Z3 : 2개의 Disk Storage + 3개의 Parity Disk = 총 5개의 Disk

 

 

● Copy-on-Write

일반적인 파일 시스템에서 데이터가 겹쳐 쓰여지면 이전 데이터는 삭제되지만,

ZFS의 경우 새로운 데이터를 기존 파일과는 다른 블록에 써서 쓰기가 끝나면 파일 시스템의 메타데이터가 업데이트되어

새로운 데이터를 가리키게 되어서 시스템 크래시 시에도 기존 데이터가 자동으로 보존되게 한다.

 

 

● ZFS on Ubuntu 20.04

1GB 용량의 하드 디스크 2개를 가상머신에 추가

ZFS 파일 시스템을 테스트로 적용하기 위한 하드 디스크 2개를 추가

  

 

sudo apt-get install -y zfsutils-linux

우분투의 Repository에는 ZFS 패키지가 준비되어 있기 때문에 별도의 저장소 수정 없이

다운로드 받아 사용가능

(이 외의 OS에서도 레포지토리를 추가하여 패키지 다운로드가 가능하다)

 

 

새롭게 추가된 하드 디스크 두 개의 블록 장치명은 각각 sdb, sdc 이며,

여기서부터 일반적인 파일 시스템과는 차이점이 발생됨

 

기존 fdisk /dev/[Block Device] 방식으로 파티션과 포맷을 진행하는 것과 달리

zpool을 생성하며 파티션, 포맷, 디스크 그루핑(RAID)을 동시에 수행하는 것을 확인할 수 있음

 

 

ls /dev/sd*

sdb, sdc 블록 장치가 ZFS 파일 시스템으로 포맷된 것을 확인할 수 있음

 

 

zfs create -p zfspool/data
zfs create -p zfspool/apps
zfs create -p zfspool/data/charlie
### 생성된 zfs pool에 테스트를 위한 디렉토리를 새롭게 생성

 

 

zfs list

mirroring으로 구성되어 AVAIL(사용 가능한 공간) 819MB로 표기되는 것을 확인할 수 있음

 

 

1GB 용량의 하드 디스크 2개를 가상머신에 한번 더 추가

기존 ZPool의 용량을 증설하기 위해서 같은 크기의 하드 디스크를 추가한다.

 

 

sudo zpool add zfspool mirror /dev/sd[de]

기존에 생성된 ZPool인 zfspool에 같은 mirroring 방식의 디스크를 추가한다.

이 과정에서도 기존에 저장장치를 증설하는 방식과 엄청난 차이점이 존재한다.

마운트 해제, 디스크 파티셔닝, 포맷 ... 등의 과정이 전부 생략되고

명령어 한 줄로 이 모든것을 통제한다.

zfs list

ZPool을 증설한 뒤 해당 명령어로 증설된 용량을 확인해보면,

AVAIL = 1.74GB로 별도의 번잡한 과정없이 같은 속성의 디스크가

추가 되었음을 확인이 가능하다.

 

 

zpool status

해당 명령어로 현재 생성된 혹은 사용중인 zpool의 정보를 트리형식으로 확인이 가능하다.

 

zfspool의 구성으로는 mirror-0과 mirror-1이며,

mirror-0의 경우 sdb, sdc가 결합되어 생성된 mirroring 저장 장치임을 알 수 있고,

mirror-1의 경우 sdd, sde가 결합되어 생성된 mirroring 저장 장치임을 확인 할 수 있다.

 

 

● ZFS  Snapshot

sudo zfs snapshot zfspool/data/charlie@20220116

해당 명령어로 현재 상태에 대한 스냅샷 생성이 가능하다.

현재 'zfspool/data/charlie/' 디렉토리 내에는 test1, test2, test3, test4 

총 4개의 파일만 존재하는 상태이다.

 

 

echo "This is for test" > /zfspool/data/charlie/temporary.txt

해당 디렉토리에 'temporary.txt'라는 이름을 가진 파일을 추가로 생성하였다.

사진에서 보면 알 수 있듯이 기존파일 외에 'temporary.txt' 파일이 추가된 것을 확인할 수 있다.

(허가권 설정을 잘 못 하여 부득이하게 root 에서 작업함)

 

 

zfs rollback zfspool//data/charlie@20220116

위의 명령어로 스냅샷을 찍어둔 시점으로의 복구가 가능하며,

이 전의 상태(temporary.txt 파일이 존재하는 상태)에서 별도의 스냅샷을 생성한 것이 아니라면 해당 상태로 돌아가는 것은 불가능하다.

 

여타 스냅샷 파일과 동일하게 찍은 즉시에는 스냅샷에 대한 데이터 크기의 변경이 발생되지 않지만

"활성 데이터 세트 내의 데이터가 변경되면 스냅샷은 기존 데이터를 계속 참조하기 위해 디스크 공간을 사용한다."

라고 설명되어 있다.

참조 : https://docs.oracle.com/cd/E26925_01/html/E25825/gbciq.html 

 

현재까지는 최신의 파일 시스템으로, 안정성 면에 있어서 미지수라는 글들이

많이 보이는 것 같다.

 

'Linux_System' 카테고리의 다른 글

[Linux]Ansible  (0) 2023.02.04
[Linux]YUM_Priority  (0) 2023.01.18
[Linux]PAM  (0) 2023.01.12
[Linux]Process(2)_top  (0) 2022.11.08
[Linux]Process(1)_ps  (0) 2022.11.05

PAM(Pluggable Authentication Module)

PAM/etc/pam.d에 있는 모듈별 파일로 인증을 관리하는데,

/etc/crond, /etc/ssh/sshd_conf ... 등의 해당 패키지의 기본 설정파일에서 각각 해당 모듈에 대한 사용자 인증을 설정할 수 있지만

PAM을 통하여 접근 인증을 하게되면, 기존의 서비스 마다 인증을 해야하는 방식 보다는

효율적이며 인증요청 시 서비스가 직접 인증을 하는 것이 아닌,

PAM을 통해 인증을 받기 때문에 정책 설정이 용이하며 일관성 있는 인증 관리가 가능하다는 점이 존재한다.

 

 

● PAM의 형태

cat -n /etc/pam.d/

모든 서비스가 PAM 을 사용할 수 있는 것은 아니며,

Linux PAM API로 개발된 라이브러리를 사용하는 서비스여야 PAM 사용이 가능하다.

 

cat -n /etc/ssh/sshd_config

현재 ssh 서비스는 'UsePAM yes' 상태로 인증에 관한 통제를 PAM을 통하여 하고있는 것을 알 수 있다.

 

cat -n /etc/pam.d/sshd

설정파일의 세 가지 항목으로

[auth type] [control flag] [module] 있으며,

 

▶︎ auth type : 사용자 인증, 사용자를 룰에 의해 관리할 때 사용하며

▶︎ control flag : 모듈의 성공 및 실패 시, '최종 성공' '다음 룰 진행' '최종 실패' 여부를 정함

▶︎ module : 룰에서 사용될 모듈을 지정

 

ls /lib64/security OR ls /lib/security

PAM 이 Default로 참조하는 모듈이 있는 장소이다.

참조해야 할 모듈이 해당 경로에 있는 것이 아니라면,

링크를 걸어주거나 절대경로 값을 입력해야한다.

 

 

● wheel 그룹만 su command 사용이 가능하게끔 통제

vim /etc/pam.d/su

주석처리 되어있는 빨간색 박스부분의 룰을 주석 해제하여 활성화 후 저장해준다.

해당 PAM 모듈(pam_wheel.so)의 인자(argument)로는 현재 사용중인 유저의 UID이다.

인증을 시도한 유저의 UID가 wheel 그룹에 포함 되어있지 않으면, 최종실패라는 결과를 도출하는 것

 

grep wheel /etc/group

wheel 그룹에 'fedora', 'park' 유저만 가입되어 있는 것을 확인

 

(좌) User : 'abc' / (우) User : 'park'

그림으로도 확인이 가능하듯, wheel 그룹에 소속되어 있지 않은 abc유저의 경우

기존 root의 패스워드를 알고있다면 사용이 가능했을 'su' 커맨드인데

PAM 모듈을 통한 인증 때문에 접근거부 된 것을 확인

'Linux_System' 카테고리의 다른 글

[Linux]YUM_Priority  (0) 2023.01.18
[Linux]ZFS  (0) 2023.01.16
[Linux]Process(2)_top  (0) 2022.11.08
[Linux]Process(1)_ps  (0) 2022.11.05
[Linux]Software_Compile  (0) 2022.10.31

MAC 주소 기반의 포트 보안(Port-Security)

2계층에서 동작하는 스위치에서 주로 사용되는 기법으로,
스위치가 가지고 있는 MAC Table을 참조하여 프레임을 통제하는 기술을 말한다.

예시로 여러 개의 포트를 가지고 있는 스위치가 있을 때,
각각의 포트마다 인가된 MAC주소의 장치들만 스위치에 연결되어 통신이 가능하게끔 설정하거나

MAC 주소 학습한도(Maiximum)를 지정하고, 지정된 개수보다 학습된 MAC 주소가 많아지면
해당 설정이 적용된 포트가 차단 되도록 하는 설정이 가능하다.

MAC 테이블을 위조된 MAC 주소로 가득 채워, 제 기능을 못 하게 만드는
Swtich Jamming 으로 인한 Sniffing 등의 공격을 방지해줄 수 있는 중요한 보안 기능이다.

 

* Port-Security는 Access, Trunk, Tunnel 포트에서만 설정이 가능하다.

** 실습 시 STP가 적용된 경우 스위치의 기본 동작이 "Blocking -> Listening -> Learning -> Forwarding" 인 점을 감안하여 실습을 진행
*** 수렴시간(Default=300Sec)으로 인해 연결 후 일정시간이 지나게되면 상태 확인이 가능해진다

 

● Port Security의 MAC 주소 학습 방식

Command help(?) 입력 시 출력되는 보기

Port Security에서 MAC 주소를 학습하는 방식으로는 총 세 가지가 있다.

- Static(정적-저장) : 위의 실습처럼 장치의 MAC 주소를 수동으로 직접 지정하여 NVRAM에 저장(재부팅 시에도 정보가 저장되어 있음)

- Dynamic(동적-임시) : MAC Table에 첫 번째로 학습되는 MAC 주소를 자동으로 지정(RAM에 저장되어, 재부팅 시 정보가 소멸)

- Sticky(동적-저장) : 동적으로 MAC 주소를 학습하여, Sticky로 학습된 MAC 주소를 NVRAM에 자동으로 저장

 

● 조건 위반 시 대응 정책(Violaiton)

Command help(?)로 세 가지 정책을 확인

인가되지 않은 MAC 주소 혹은 초과되는 MAC 주소가 감지됐을 때,
수행하는 행위에 대한 세 가지 설정이 존재한다.

- Protect : 위반한 장비에 대해서만 통신이 차단되며, 나머지 설정들은 유지

- Restrict : Protect의 기능에서 log message를 출력해주는 기능을 의미

- Shutdown : 포트 자체를 비활성화 시키는 기능

 

 

● MAC 주소 학습한도 기반

Node 1, Node 2에서 Ser 1으로 통신하기 위해 무조건 거쳐야만 하는

실습을 진행할 가상의 LAN


SW 2의 Fa0/1 포트에 Port Security를 적용하여 1개를 초과하는
MAC 주소 학습 시 포트를 다운 시키는 정책을 설정한 후,
각각의 노드에서 Ser 1을 향해 ping을 보내본다.

 

SW1(config)#int fa0/1
SW1(config-if)#switchport mode access
SW1(config-if)#switchport port-security
SW1(config-if)#switchport port-security maximum 1
SW1(config-if)#switchport port-security violation shutdown
SW1(config-if)#end

SW 2의 설정내용

Violation을 "shutdown" 으로 설정

SW 2의 Fa0/1 인터페이스에 Port Security 적용 후
Node 1과 Node 2에서 Ser 1에 대한 ping을 보내게 되면,
첫 번째 ping에 대해서는 문제 없이 송수신이 가능하지만
두 번째 ping 프레임은 SW 2의 Fa0/1 인터페이스에 이르기 전에
회선이 shutdown 상태로 전환되는 것을 확인해 볼 수 있다.

 

● 인가된 MAC 주소 기반

실습을 진행할 가상의 LAN

SW 1의 Fa0/1 포트에 현재 연결되어 있는 Node 1이 아닌
다른 장치의 MAC 주소가 인식되는 경우에 해당 포트를 Shutdown 시키는 정책을 설정

 

SW1(config)#int fa0/1
SW1(config-if)#switchport mode access
SW1(config-if)#switchport port port-security
SW1(config-if)#switchport port-security mac-address 0060.3ED2.4861
SW1(config-if)#switchport port-security violation shutdown
SW1(config-if)#end

▲ SW 1의 설정내용

Fa0/1 포트에 인가되지 않은 MAC을 가진 "Hacker" 노드를 연결

새로운 노드를 추가하여 다른 노드들과의 통신 요청 시,
즉시 회선이 Shutdown 상태로 전환되는 것을 확인해볼 수 있다.

 

 

인가된 MAC 주소의 머신 재연결

Rule Violation으로 인해서 차단 되었던 이력이 있는 경우

재연결 시에 Shutdown 상태인 포트를 재시작(no shutdown) 해줘야 정상적으로 가동된다.

'Network' 카테고리의 다른 글

[Network]Static_Route  (0) 2023.02.20
[Network]Router_02  (0) 2022.11.22
[Network]Router_01  (0) 2022.11.21
[Network]VLAN  (0) 2022.11.16
[Network]STP_Algorithm  (0) 2022.11.11

라우터(Router)

저번 포스트에서는 라우터의 부팅 및 기본정보에 관한 부분을 다뤄보았다.

이번에는 기본적인 환경설정과 라우팅 작업 시 주로 사용되는 명령어 등을 알아보자

 

 

● 장치명 설정

초기 부팅 시 라우터는 "Router", 스위치는 "Swtich"라는 동일한 이름을 가지고 있기 때문에,

라우터 및 스위치를 관리함에 있어 모든 장치의 이름이 동일하다면

장치를 구별하는데 어려움이 발생할 수 있다.

 

이를 위해서 장치의 이름을 임의적으로 설정할 수 있도록 해주는

명령어 "hostname" 존재한다, 장치명 변경은 전역 설정모드에서 가능하다.

 

기존 "Router"에서 "Cisco_RT"로 장치명을 변경

** 영문(대/소문자), 숫자, 기호가 사용 가능하며 공백은 사용이 불가(63자 까지 설정가능)

 

 

● DNS Lookup

라우터의 CLI 콘솔 창에서 명령어를 잘못 입력(오타)했을 때,

라우터 자체적으로 해결할 수 없는 명령어인 경우 IOS가 DNS 서버를 찾아 해결(Solve)을 시도한다.

이 때 소요되는 시간이 1분 정도로 꽤 오랫동안 소요될 수 있는데,

"no ip domain lookup" 명령어를 이용하여, "오타는 오타로 여길뿐 검색은 해결은 필요없다"에 해당하는 설정을 해줄 수 있다.

 

DNS Lookup을 해제
DNS Lookup 실행화면

만일 위의 그림과 같이 오타 해결을 진행중이라면,

"Ctrl + Shift + 6"을 순서대로 입력하여 강제종료가 가능하다.

 

 

● 암호 설정

스위치/라우터 인증되지 않은 사용자의 접근을 차단하기 위해서 사용되며

라우터 접속부터 모드별 설정, 원격접속에 관한 암호를 설정해줄 수 있다.

 

- Console Password : 사용자 모드에 관한 암호 설정(라우터 접속과 동시에 이뤄짐)

 

- Enable Password : 사용자 모드에서 관리자 모드로 전환 시 요구되는 암호를 설정(평문)

 

- Enable Secret : 사용자 모드에서 관리자 모드로 전환 시 요구되는 암호로, "Enable Password"보다 우선적으로 적용(암호화)

ex) Enable Password = hello / Enable Secret = Korea 일 때, "Korea"를 입력해야 모드 전환이 가능하다.

 

- VTY(Virtual Teletype) Password : 텔넷/SSH 접속 시 사용되는 암호 설정(텔넷은 보안상의 이유로 거의 사용X)

 

 

"Console Password"설정

 

"Console Password" 설정하고 라우터 종료 후, 재접속 시도 시 암호를 요구하는 것을 확인

 

"Enable Password와 Secret"을 동시에 설정

 

암호화 처리되어 보이지는 않지만, "korea"를 입력하여 모드를 전환했음을 확인

 

 

● 설정내용 관련

작업자가 스위치/라우터에서 작업(라우팅 설정, 정책 설정 .. 등)을 하게되면

해당 작업내용은 RAM에 저장되는데, 해당 기억장치는 휘발성(Volatile) 기억장치로

전원이 내려가게 되면 작업내용도 전부 소실된다.

다음 부팅 시 사용하지 않을 설정내용이라면 저장하지 않아도 상관 없지만,

추후에도 사용할 예정이라면 NVRAM(Non-Volatile)에 작업정보를 저장해야한다.

 

작업 내용을 NVRAM에 저장해주는 명령어로는,

"copy running-config startup-config""write memory" 두 가지가 존재한다.

(각각 "copy run start"와 "wr"로 축약하여 사용이 가능)

 

RAM에 있는 작업 내용을 NVRAM에 저장시키는 과정 Enter를 입력하여 넘어갈 수 있다.

 

NVRAM에 저장된 설정내용을 확인

"show startup-config" 명령어를 통해서 NVRAM에 저장된 설정내용을 확인할 수 있고,

"erase startup-config" 명령어를 이용하여 기존에 저장되어 있는 설정내용을 삭제할 수도 있다.

(관리자 모드 이상에서는 명령어 앞쪽에 'do'를 붙여서 명령어 수행이 가능) 

 

RMA에서 작업한 설정내용을 확인

위에서 보았던 "show startup-config"와 전체적인 내용을 보면 

크게 다른점은 느낄 수 없지만, 실제 작업을 한 후에 본다면 차이점을 확연히 알 수 있다.

해당 명령어는 NVRAM에 저장되어 있는 내용을 출력해주는 것으로,

 

"show running-config"의 경우 현재 작업된(혹은 진행) RAM 상에 존재하는 

설정 내용들을 출력해주는 역할을 한다.

("sh run"으로 축약하여 사용이 가능)

'Network' 카테고리의 다른 글

[Network]Static_Route  (0) 2023.02.20
[Network]Port_Security  (0) 2022.11.25
[Network]Router_01  (0) 2022.11.21
[Network]VLAN  (0) 2022.11.16
[Network]STP_Algorithm  (0) 2022.11.11

라우터(Router)

라우터의 대표적인 역할과 특징으로는 상대방에 이르는 경로를 찾아주며
다른 네트워크(VLAN, Subnet 등)를 묶어주는 역할을 한다.

2계층 장비인 스위치와는 달리 브로드캐스트를 통과시키지 않음으로써
브로드캐스트 도메인을 나누어준다는 것이 있고, 상대 노드로 통신하기 위한 경로를
계산하여 데이터를 이동시킨다는 것에 있어서 속도가 빠르지는 않다는 점이 존재한다.

● 라우터의 구조와 부팅순서

라우터에 전원을 올리고 실행하게 되면 POST(Power On Self Test)를 실행하여 장치의 이상 유무를 확인하고
ROM(Read-Only Memory)에 있는 부트스트랩 코드(Bootstrap Code)를 실행시켜 Flash Memory에 있는
IOS(Internetwork Operating System)NVRAM(Non-Volatile RAM)에 있는 설정파일
RAM(Random Access Memory)에 복사하여 라우터를 실행시키게 된다.

NVRAM과 Flash Memory는 비휘발성 기억장치로, 전원이 공급되지 않아도 데이터를 잃지 않는다.

▼ 정리
- ROM : Bootstarp Code(Bootloader), Restore Tools(시스템 복구 : 안전모드)
- Flash Memory : IOS(Internetwork Operating System)
- NVRAM : 설정파일(startup-config)

► 전원 On → POST 실행(장치 이상유무 확인) → 부트 스트랩 코드 실행 → IOS, 설정 파일을 RAM에 올려 라우터를 실행

● IOS의 세 가지 버전

- Base 버전 : 라우터 실행에 필요한 기본기능만 갖춘 것
- Plus 버전 : IBM 메인프레임과 연결하는 기능 등 추가기능을 가지고 있는 것
- Encryption 버전 : 40비트 혹은 56비트 암호화 기능을 가지고 있는 것(56비트 암호화는 미국 외에서 구매불가)

● 라우터와 PC를 연결

라우터에 직접 연결 시, 콘솔 케이블로 라우터와 컴퓨터를 연결하고
PC에서 시작 → 보조 프로그램 → 통신 → 하이퍼터미널 or 터미널 프로그램 순으로
수작업으로 설정을 진행하여 연결이 가능하며, 


Windows7 부터는 putty, XShell 등으로 Serial(COM) 연결을 진행할 수도 있다.

COM Port는 COMumunication Port를 의미하며 COM1-COM3 / COM2-COM4로, 네 개의 가상포트를 가지고 있다.

** 장치 관리자에 진입하여 Port Number를 확인할 수 있다.

 

  

● 라우터 실행

IOS가 없거나 손상되었거나 비밀번호 분실 등으로 진입하는 rommon모드

** 본 그림은 예시를 위해 부팅화면에서 Ctrl+C(Break)를 사용하여 임의로 진입

IOS를 정상적으로 읽어들여 부팅되었을 때 볼 수 있는 화면

제조사, OS의 정보 및 소프트웨어 정보, 리소스의 정보들을 간략하게 출력해준다.

라우터를 처음 설정할 때 대화 모드로 설정할지를 묻는 문구

대부분 사용하지 않는다고 한다.(필요하지 않은 부분이 많기 때문)
"no"를 입력하면 RETURN 키를 눌러 라우터 설정을 시작라는 문구가 나온다.

 

 

● IOS CLI Mode

IOS CLI 모드를 나열

기본적으로 라우터에 처음 접속하게 되면 사용자 모드(User Mode)로 접속되는데,
해당 모드에서는 제한적인 명령어만 사용이 가능하므로 관리자 모드로
전환 해주어야 한다. 사용자 모드의 콘솔 창에 "enable"을 입력하면 전환이 가능하고,
("en"만 입력해도 명령어 인식이 가능하다 혹은 TAB키 사용)

관리자 모드(Privilege Mode)에서는 간단한 설정과 라우터 동작에 관한 설정 내용을 확인할 수 있다.
라우터의 직접적인 동작에 대한 설정은 전역 설정모드(Global Configure Mode)
진입하여 가능하므로  관리자 모드에서 "configure terminal"을 입력하여 해당모드로 전환이 가능하다.
("conf t"만으로도 명령어 인식 가능)


지역(Local)모드 "config-if"의 경우에는 FastEthernet 0/0에 대한 설정을 진행할 수 있는
인터페이스 설정 모드(Interface Configure Mode)로 가장 많이 사용되며
이 외에도 더 다양한 로컬 모드가 존재한다.

마지막으로 RXBoot 모드 "rommon 1>"는 ROM에 들어있으며 IOS를 업그레이드 하거나

관리자 암호를 재설정 및 복구 등을 수행할 때 사용되는 모드로써, 일종의 안전모드에서 IOS를 시작시킬 수 있는 모드이다. 

'Network' 카테고리의 다른 글

[Network]Port_Security  (0) 2022.11.25
[Network]Router_02  (0) 2022.11.22
[Network]VLAN  (0) 2022.11.16
[Network]STP_Algorithm  (0) 2022.11.11
[Network]FDDI  (0) 2022.11.11

VLAN(Virtual LAN)

라우터가 생성하는 LAN과 유사하게 스위치가 생성하는 LAN을 VLAN이라고 한다. 

스위치는 브리지와 마찬가지로 충돌 도메인을 각 포트별로 한정시켜서 포트별로 분리시킬 수는 있지만

브로드캐스트와 멀티캐스트는 여전히 통과시키게 된다. 따라서 스위치에 붙어있는 모든 노드들은

기본적으로 VLAN 1(Default)에 소속되어 있으므로 브로드캐스트를 수신하게 되는데,

 

별도의 가상 네트워크 VLAN 2를 생상하게 되면 그들만의 브로드캐스트가 생성되므로

기존 브로드캐스트(VLAN 1)에서 분리되어 브로드캐스트의 영역이 나뉘어져

네트워크의 효율을 증진시킬 수 있다.

 

하지만 VLAN을 나누게 되면 하나의 스위치 장비에 서로 다른 네트워크로

논리적 분할이 된 상태이므로 ex) VLAN 1과 VLAN 2는 유니 / 브로드캐스트 통신이 불가하게 된다.

그러므로 3계층 장비(라우터)가 필요하다.

 

 

● VLAN의 두 가지 종류

- 포트 기반(Port Based VLAN) : 스위치를 논리적으로 분할하여 스위치의 특정 포트에 VLAN을 할당하는 방식

 

- MAC 기반(MAC Based VLAN) : 스위치에 연결되는 단말의 MAC 주소를 기반으로 해당 포트를 VLAN으로 변경하는 방식

** 동적 VLAN(Dynamic VLAN)이라고 부르기도 한다.

 

 

● VLAN 1과 VLAN 2의 원활한 통신을 위한 작업

1. VLAN들을 묶어주는 VTP(VLAN Trunking Protocol) 설정

2. VLAN 1과 VLAN 2가 혼재하는 회선에 두 VLAN이 통과할 수 있게끔 구별하여 Trunk(or Tag Port) 설정

3. VLAN 1과 VLAN2가 구별될 수 있게 프레임에 캡슐화(802.1Q, ISL .. 등) 설정

4. 관리목적의 IPVLAN 1에 할당

5. 라우터 연결게이트웨이를 지정

 

 

● 트렁크 구간(Trunk)

예를 들어 5개의 VLAN이 설정된 2대의 스위치가 있을 때 

이 2대의 스위치가 상호 통신이 가능해야 한다고 가정하면 

회선이 총 5개가 있어야 할 것이다(논리적으로 브로드캐스트 도메인을 나누었기 때문)

이렇게 되면 스위치의 포트도 낭비가 될 것이고 비용또한 낭비가 될 것이다.

 

이런 문제를 해결하기 위해 사용되는 회선을 트렁크라고 하며,

트렁크 모드를 적용한 회선은 VLAN ID를 구분하지 않고 VLAN Frame을 전송할 수 있다.

* 굳이 VLAN 하나 당 하나의 통신회선을 마련하지 않아도 된다는 것

 

 

● VTP(VLAN Trunking Protocol)

VLAN Trunking Protocol에는 대표적으로

802.1q, Native VLAN, ISL(CISCO 전용 프로토콜), Native(Untagged) 등이 사용되며,

스위치가 여러 개 있을 때 어느 하나가 Server가 되고 나머지는 Client나 Transparent Mode가 되어

스위치끼리 VLAN의 생성과 삭제 및 수정 등을 동기화하여 편리하게 관리하는 프로토콜이다.

* VTP 설정 시, 반드시 Server Mode인 스위치가 존재해야 한다.

 

▼ VTP에서 작동되는 세 가지 작동방식(Mode)

- Server Mode : 다른 스위치에서 받은 VLAN 정보 등을 일치시켜 전파해주는 역할을 하며,

VLAN을 생성하거나 삭제가 가능

 

- Client Mode :  서버로부터 VLAN의 정보를 얻어와 동기화를 진행하며, VLAN의 생성과 삭제 권한이 없음

 

- Transparent Mode : 서버로부터 VLAN의 정보를 얻어오기는 하지만, 자신에게 속한 노드들의 변경 등은 외부에 알리지 않으며,

VLAN 생성과 삭제가 가능

 

 

 

● 실습

간단한 설정을 통해 VLAN의 작동방식을 확인

시나리오는 Node끼리 VLAN 1 소속, Server 끼리 VLAN 2 소속이며,

내부 세그먼트를  VLAN으로 분할 하였고 상호간의 각각의 VLAN을 위한 게이트웨이는 

서브 인터페이스(Sub-Interface)를 사용하여 할당하였고

 

필자가 사용한 패킷 트레이서는 태깅 프로토콜이 기본적으로

802.1Q로 고정되어 있으며 해당 프로토콜로 인캡슐레이션된

프레임을 수신하기 위해서 라우터 각각의 서브 인터페이스에

인캡슐레이션 설정을 진행함

 

결과를 확인해보면 Node 2(.40)에서 같은 VLAN에 소속되어 있는 Node 1(.10)에게

icmp 통신을 요청하면 스위치를 통해서 직접 통신이 가능하지만,

같은 스위치에만 물려있고 VLAN은 다른 소속인 Ser 2(.30)과 통신하려면

라우터를 거쳐야만 통신이 가능한 것을 확인할 수 있음

 

 

● 설정 내용

- SW 1

SW1(config)#vtp domain TEST                      
SW1(config)#vtp password 1234                   

SW1(config)#vlan 2                                        
SW1(config-vlan)#name Server
SW1(config)#int fa1/1
SW1(config-if)#switchport mode access
SW1(config-if)#switchport access vlan 2
SW1(config)#int fa2/1
SW1(config-if)#switchport mode trunk
SW1(config-if)#switchport trunk allowed vlan all
SW1(config)#int fa3/1
SW1(config-if)#switchport mode trunk
SW1(config-if)#switchport trunk allowed vlan all
SW1(config)#int vlan 1
SW1(config-if)#ip address 192.168.100.2 255.255.255.0

 

- SW 2

SW2(config)#vtp domain TEST
SW2(config)#vtp password 1234
SW2(config)#do sh vlan


VLAN Name Status Ports
---- -------------------------------- --------- -------------------------------
1 default active Fa0/1, Fa1/1, Fa3/1, Fa4/1Fa5/1
2 Server active

SW2(config)#int fa0/1
SW2(config-if)#switchport mode access
SW2(config-if)#switchport access vlan 2

 

- RT

RT(config)#int fa0/0
RT(config-if)#no sh
RT(config)#int fa0/0.1
RT(config-subif)#encapsulation dot1Q 1 native
RT(config-subif)#ip address 192.168.100.1 255.255.255.0
RT(config-subif)#int fa0/0.2
RT(config-subif)#encapsulation dot1Q 2
RT(config-subif)#ip address 192.168.200.1 255.255.255.0

 

'Network' 카테고리의 다른 글

[Network]Router_02  (0) 2022.11.22
[Network]Router_01  (0) 2022.11.21
[Network]STP_Algorithm  (0) 2022.11.11
[Network]FDDI  (0) 2022.11.11
[Network]Ethernet  (0) 2022.11.09

STP(Spanning Tree Protocol)

브리지 / 스위치에서 안정된 연결을 위해서 이중화(or 다중) 연결을 해놓으면

브리지 / 스위치 사이의 경로(회선)가 여러 개가 됨으로써 브로드캐스트가 내부에서 순환하며

브로드캐스트 스톰(Broadcast Storm)이 되어 루핑(Looping)이 발생하는데

이를 차단하기 위해서 사용되는 알고리즘이 바로 STP 알고리즘으로

 

Priority(32768) -> MAC 주소 -> 케이블 연결(Path Cost) -> 포트 번호(Port Number) 순으로

브리지 / 스위치 간 2초 간격으로 BPDU(Bridge Protocol Data Unit)를 주고 받아 주(Main) 회선을 판단한 뒤,

주 회선에 문제 발생 시 대체회선 주 회선으로 전환하여 통신이 가능하게 하는 방식이다.

 

STP가 적용된 스위치의 동작 순서는 "Blocking->  Listening -> Learning -> Forwarding" 정도로 구분할 수 있다.

 

 

● 루핑(Looping)이란

Switch 1과 Switch 2 사이의 통신 회선이 두 개인 상황

 

예시로 현재 Switch 1에는 자신에게 연결된 Node 1의 MAC 주소는 알고있지만, 

Switch 2에 연결되어 있는 Node 2의 MAC 주소는 모르고 있다고 가정할 때,

Node 1에서 Node 2로 통신을 하기 위한 ARP 브로드캐스트를 스위치로 올려보낼 것이다.

 

그럼 Switch 1은 회선 1, 2번에 프레임을 Flooding 하게 되는데,

Switch 2에서도 동일한 동작을 수행하기 때문에 회선 Switch 1의 입장에서 봤을 때,

자신이 보낸 프레임을 다시 돌려받는 동작을 끊임없이 수행하게 된다.

이런 현상을 "루핑"이라고 한다. 

 

 

● STP 알고리즘의 작동 방식

(좌)임의의 순서로 스위치를 배치 / (우)STP 알고리즘에 의해 선별된 지정회선과 대체회선

 

내부 LAN에서 스위치를 여러 개 두고 사용할 때,

이 중에서 선별된 주 스위치를 루트 스위치(Root Switch)라고 부르고

Root Switch에서 나머지 다른 스위치로 향하는 포트 지정회선(Designated Port),

나머지 스위치에서 Root Swtich까지의 경로가 가장 짧은 포트루트회선(Root Port),

위의 두 가지에 해당하지 않는 대체되는 포트를 대체회선(Alternative Port)이라고 부르며 차단 상태로 전환된다.

 

** 그림(우) 상에서 실선처리 된 부분 대체회선

 

이해를 돕기 위한 그림

 

● RSTP(Rapid STP)

STP 사용 중 문제 발생 시 대체 경로로의 수정 수렴시간(Convergence Time)을 단축시키기 위해 

보완된 프로토콜로 STP와 동일하게 작동되지만 RSTP를 지원해주는 스위치를 사용해야 하며,

기존 STP의 경우 토폴로지 변경 발생 시 루트 스위치를 통해서만 경로를 수정해야 했지만

RSTP의 경우 토폴로지 변경이 발생 한 스위치에서 직접 네트워크 전체에 변경됨을 알릴 수 있고

기존보다 다양한 BPDU 메시지로 인해서 짧은 시간(약 2초) 내에 복구가 가능하다는 점이 존재한다.

 

 

● 스위칭의 방식

스토어 앤 포워드(Store-and-Forward) : 전체 프레임을 모두 받아서 버퍼에 임시 저장한 뒤 CRC에러 체크

이상이 없을 시에는 포워딩 시키고 이상 식별 뒤에는 프레임을 버리는 방식이다.

프레임에 필터링을 걸 수 있다는 장점도 존재

 

컷 쓰루(Cut-Through) : 프레임 헤더에서 목적지만 보고 포워딩하는 방식이다. 지연은 거의 없지만,

불량 프레임도 포워딩을 할 수 있다는 것필터링을 걸 수 없다는 리스크가 존재

 

프래그먼트 프리(Fragment-Free) : 대부분 손상된 프레임은 64Byte 이내에서 발생한다는 점에서 착안한 기법으로,

처음 64Byte가 도착할 때 까지 버퍼에 저장한 뒤 검사해서 이상이 없으면 포워딩하는 기법이다.

Modified-Cut-Through 라고도 불린다.

 

하이브리드(Hybrid) : 평소에는 Cut Through 방식으로 사용하다가 미리 정해놓은 에러 한계치를 넘으면

자동으로 Store and Forward로 전환하고 또 다른 한계치에 닿았을 때, 

다시 Cut Through로 동작시키는 기법을 의미한다.

일부 스위치에서만 사용하는 방식이다.

'Network' 카테고리의 다른 글

[Network]Router_01  (0) 2022.11.21
[Network]VLAN  (0) 2022.11.16
[Network]FDDI  (0) 2022.11.11
[Network]Ethernet  (0) 2022.11.09
[Network]MAC_Address  (0) 2022.11.09

FDDI(Fiber Distributed Data Interface)

 

내용출처 : https://commons.wikimedia.org/ (FDDI 구조)

 

FDDI는 100Mbps LAN을 위한 사양으로 토큰링과 유사한 토큰패스 형식을 사용하지만,

기존 토큰링에서 발생했던 치명적인 단점을 보완하기 위해 개발된 방식으로

광케이블로 구성되어 매우 빠르고 신뢰도가 높아서 백본(Backbone) 네트워크에서 주로 사용된다.

 

FDDI 링은 서로 반대방향으로 도는 이중 링으로 구성되어져 있어, 1차 링(Primary Ring)에 문제가 발생해도

2차 링(Secondary Ring)을 통해서 즉시 프레임이 반대 방향으로 계속 흐를 수 있게 하는 래핑(Wrapping) 기법이 사용된다.

 

따라서 DAS(Dual Attached Station)장치의 NIC(Network Interface Card)는 4개의 인터페이스가 있어야 한다.

**  IN x 2, OUT x 2 = 4개

 

 

● 참고적으로 알아두면 좋을 광섬유의 데이터 전송 방식 두 가지

- 단일 모드 광섬유(Singlemode Light Propagation) : 광원으로 레이저(Laser)를 사용, 장거리에 적합

- 다중 모드 광섬유(Multimode Light Propagation) : 광원으로 LED(Light Emitting Diode)를 사용, 단거리에 적합

 

 

● FDDI 구성 방식

내용출처 : https://commons.wikimedia.org/

 

FDDI는 SAS(Single Attached Station), DAS(Dual Attached Station), 집중화기(Concentrator) 세 가지 방식으로 연결된다.

SAS는 위의 그림에서 보듯이 집중화기를 통해 네트워크에 연결되므로 SAS를 끄거나 제거해도 문제가 발생되지 않지만,

DAS의 경우 1차 링과 2차 링에 모두 직접 연결 되어있기 때문에 DAS에 문제가 발생 시 네트워크 전체에 영향이 미친다.

'Network' 카테고리의 다른 글

[Network]VLAN  (0) 2022.11.16
[Network]STP_Algorithm  (0) 2022.11.11
[Network]Ethernet  (0) 2022.11.09
[Network]MAC_Address  (0) 2022.11.09
[Network]OSI_7_Layer  (0) 2022.10.29

top(Table Of Process)

저번 포스팅에서는 개별 프로세스 조회 중점의 명령어인 ps에 관해서 알아 봤다.

이번에는 좀 더 구체적으로 어느 프로세스가 리소스의 어느 정도를 점유하며,

전체 프로세스를 실시간으로 확인할 수 있는 명령어인 top에 대해 알아보자

 

● 명령어 'top'의 활용방식

아무런 옵션 없이 'top' 명령어를 실행했을 때의 출력화면

빨간색 실선 안의 정보들은 시스템의 가동시간, 평균 부하값(Load Average), 메모리의 상태 등의

자원에 관한 간략한 정보가 표기되어 있으며, 하단의 노란색  실선 안의 정보들은 프로세스들의 정보

담고있는 것을 확인할 수 있다. 그림의 왼쪽부터 필드의 정보를 서술하면 

 

- PID : 프로세스 ID

- USER : 프로세스의 소유자

- PR : 프로세스의 우선순위

- NI : 작업의 nice값

- VIRT : 프로세스가 사용중인 가상메모리 양

- RES : 물리적인(실제의) 메모리의 양

- SHR : 공유 메모리의 양

- S : 해당 프로세스의 상태 (Status)

- %CPU : CPU 사용량

- %MEM : 현재 사용중인 실제 메모리의 양

- TIME+ : 프로세스가 CPU를 사용한 시간

- COMMAND : 프로세스가 시작되는 데에 사용된 명령어

 

각각 의미하며, 

콘솔창에 'top' 실행 시 사용되는 옵션으로는 'top -d [초(Sec)]'와 'top -b(배치모드)'가 있는데,

'-d' 옵션의 경우 top의 정보 갱신주기를 설정하는 옵션이고

배치모드로 프로세스의 흐름을 확인 하기에는 시인성이 좋지 않아 거의 사용되지 않는다고 한다.

굳이 옵션을 입력하지 않고도 'top' 화면에 진입하여 Space Bar, Enter 키를 입력하면 

그때 그때 갱신되도록 설정되어 있다.

 

 

● 목록별 정렬

'top' 실행화면 중 Shift+p를 입력해 CPU 사용률 기준으로 정렬

- Shift+p : CPU 사용량 기준 정렬

- Shift+t : CPU 사용 시간별 정렬

- Shift+m : 메모리 사용량 기준 정렬

  - Shift+n : PID 기준 정렬

 

등의 명령어로 시인성 좋게 실행중인 프로세스를 확인할 수 있다.

 

 

● 사용자별 정렬

'top' 실행화면 중 Shift+u를 사용하여 'centos' 사용자의 프로세스를 검색

'Shift+u' 입력 후 'Which User (blank for all)' 입력창에 사용자의 ID를 입력하면

해당 사용자가 실행중인 프로세스를 확인할 수 있다.

 

 

● 프로세스 제어

'top' 실행화면 중 'k(시그널)' 키를 입력하여 프로세스를 제어

가장 간단한 예시로 현재 실행중인 임의의 프로세스

'vim /etc/passwd' 종료를 시도, 해당 명령행에 PID(4622)를 입력하면

 

원하는 SIGNAL값을 입력하라는 명령행이 나온다. 여기서 

SIGKILL 의 값인 숫자 9 입력 후 엔터를 치면 해당 프로세스가 

강제로 종료되는 것을 확인할 수 있다.

 

 

 

'Linux_System' 카테고리의 다른 글

[Linux]ZFS  (0) 2023.01.16
[Linux]PAM  (0) 2023.01.12
[Linux]Process(1)_ps  (0) 2022.11.05
[Linux]Software_Compile  (0) 2022.10.31
[Linux]YUM_LocalRepository  (0) 2022.10.26

PS(Process Status)

프로세스는 실행 중인 프로그램을 나타내는 추상적인 개념으로, 

예를 들어 사용자가 HDD(Non-Volatile Memory)와 같은 저장장치에 있는 프로그램을 실행하게 되면

프로그램이 프로세스 상태로 메모리에 적재되어 실행되며, 모든 프로세스는 부모 프로세스, 자식 프로세스로 분류되게 된다. 

리눅스에서는 init(~CentOS6), systemd(CentOS7~)와 같은 시스템 최초의 프로세스로 "시스템 초기화 프로세스"라고 불린다. 

프로세스 상태 조회에 자주 사용되는 명령어 'ps'를 알아보자

 

 

■ 명령어 'ps'의 활용방식

아무런 옵션 없이 사용하게 되면 현재 사용자의 화면에 표기되는 프로세스에 관해서만 보임

 

▼ 주로 사용되는 옵션은 코드블럭을 참조

ps -f '''현재 실행되는 프로세스에 관해 자세히 출력'''
ps -a '''다른 사용자의 프로세스까지 함께 출력'''
ps -u '''해당 프로세스를 실행중인 사용자의 정보와 시간을 함께 출력'''
ps -x '''백그라운드 프로세스까지 출력'''

ps -aux '''리소스 사용률을 기반으로 프로세스의 상태를 확인'''
ps -ef '''실행중인 모든 프로세스의 상속관계를 기반으로 자세히 확인'''

 

명령어 'ps'에 옵션 '-aux'를 함께 사용

해당 출력내용의 상단부를 보면 필드별로 나누어진 모습을 볼 수 있는데,

 

- USER : 프로세스의 소유자

- PID(Process ID) : 프로세스의 번호

- %CPU : 프로세스가 CPU를 차지하는 비율

- %MEM : 프로세스가 메모리를 점유하는 비율

- VSZ(Virtual Set siZe) : 프로세스에 할당된 가상 메모리의 크기

- RSS(Resident Set Size) : 프로세스가 현재 사용하는 메모리 비율

- STAT : 프로세스의 상태

- START : 프로세스가 시작된 시간

- TIME : 프로세스의 총 실행 시간

- COMMAND : 프로세스를 실행시킨 명령

 

 

 ▶ 프로세스의 상태(status)를 알려주는 필드 'STAT' 값의 의미

 

- R(Run/Runable) : 프로세스가 실행중 또는 실행가능

- D(in Disk wait) : 입출력이 완료될 때까지 깨울 수 없는 상태(수면상태)

-  S(Sleeping) : 대기 중, 수면상태(전환 가능한 상태)

- T(sTopped) : 외부 시그널로 인해 일시 정지된 상태

- Z(Zombie) : 부모 프로세스가 종료 시그널을 정상적으로 수신 못해, 수습되지 않고 남은 상태 

- < : 우선순위가 높은 프로세스

- N : 우선순위가 낮은 프로세스

- I(Idle) : 유휴(쉬고있는) 프로세스

 

명령어 'ps'에 옵션 '-ef'를 함께 사용

'-aux' 옵션을 사용했을 때와는 필드에 중복되지 않는 새로운 정보가 표기되는 것을 확인할 수 있다.

 

- PPID(Parent Process ID) : 부모 프로세스의 ID

- C : 프로레스의 CPU 점유 상태

- STIME : 프로세스가 시작된 시간

- TTY(TeleTYpewriter) : 프로세스가 실행되고 있는 콘솔

 

등을 확인할 수 있다.

 

 

'Linux_System' 카테고리의 다른 글

[Linux]PAM  (0) 2023.01.12
[Linux]Process(2)_top  (0) 2022.11.08
[Linux]Software_Compile  (0) 2022.10.31
[Linux]YUM_LocalRepository  (0) 2022.10.26
[Linux]Basic_Command(2)  (0) 2022.10.10

+ Recent posts