인스턴스 설치
라이브러리 파일
메뉴 만들기
- 텍스트
echo -e "\t관리자메뉴"
- GUI
dialog -> CLI 환경에서도 사용가능
완벽하게 GUI 기반의 메뉴를 만들고 싶다면?
zenity(리눅스의 그래픽 환경은 두가지 1. GNOME, 2. KDE)
ESC -> 255
YES -> 0
NO -> 1
#!/bin/bash
dialog --title "경고 : 파일 삭제" --backtitle "파일 관리 프로그램" --yesno "삭제하시겠습니까?" 0 0
sel=$?
case $sel in
0)
echo "삭제 ㅇㅇ";;
1)
echo "삭제 ㄴㄴ";;
255)
echo "삭제 취소";;
esac
inputbox는 답을 얻기 위해서는 STDERR을 리다이렉트 해야한다.
radiolist
#!/bin/bash
dialog --title "경고 : " --backtitle "파일 관리 프로그램"
--radiolist "choose the one that you need" 0 0 3 1 "TEST1" "work" 2 "TEST2" "rest" 2> test.txt
위와같이 코드를 짜면 선택결과가 번호로 파일에 들어간다
???
$$ -> 프로세스 ID 알 수 있다. 이걸로 maketmp 없이도 tmp 파일을 만들 수 있다. 사용은 원할때만 하면 된다.
#!/bin/bash
dialog --title "경고 : 파일 삭제" \
--backtitle "웹서버관리 프로그램" \
--msgbox "웹서비스를 관리합니다" 15 35 \
while [ 1 ]
do
dialog --title "웹서비스 시작/중지/재실행" \
--menu "선택하세요" 15 35 4 start "시작하기" \
stop "중지하기" restart "재실행하기" \
status "상태확인" exit "프로그램종료" 2>/tmp/httpd_menu.$$
menuitem=$(cat /tmp/httpd_menu.$$)
case $menuitem in
start)
systemctl start httpd
dialog --backtitle "결과" \
--msgbox "웹서비스가 실행되었습니다" 10 30;;
stop)
systemctl stop httpd
dialog --backtitle "결과" \
--msgbox "웹서비스가 중지되었습니다" 10 30;;
restart)
systemctl restart httpd
dialog --backtitle "결과" \
--msgbox "웹서비스 재실행되었습니다" 10 30;;
status)
systemctl status httpd >tmp.$$
data=$(cat tmp.$$)
dialog --backtitle "결과" \
--msgbox "$data" 0 0;;
exit)
exit;;
esac
done
rm -rf /tmp/httpd_menu.$$
rm -rf tmp.$$
하지만 보면 한번 Enter 치고나면 프로그램이 그냥 종료된다. 그래서 메뉴가 계속 반복되도록 만들어보자
Quiz. HAPROXY의 cfg 파일을 이용해서 LB 를 수정하는 기능을 만들어보자.
sed를 이용하여 [backend] 아래에 192.168.1.101이 작성되도록 해보자
Sed 명령어 특정 라인 위 또는 아래에 Text 추가 하기 - Permaculture Life Style (marindie.github.io)
Sed 명령어 특정 라인 위 또는 아래에 Text 추가 하기
Linux sed 명령어를 사용하여 특정 라인 위 또는 아래에 Text 추가하는 방법을 다뤄 보도록 하겠습니다.
marindie.github.io
Find 와 Sed 를 사용한 문자열 또는 텍스트 검색(search) 치환(replace) 명령어
Sed 를 사용한 문자열 치환 관련 내용
marindie.github.io
이 사람... 확실한 츤데레다
이제 두개의 KVM 서버를 준비할 것이다. 네트워크는 eth0과 vmnet8(NAT)를 연결해서 사용할 것이다.
여기에서 우리는 공인 주소를 받아왔다고 가정한다. ISP가 이 NAT앞에 있는 것이다. 그래서 NAT를 공인 IP 처럼 보이는 대역을 사용할 것이다. (211.183.3.0/24) 그럼 ISP는 .2를 사용하자
그리고 KVM1는 .101 KVM2는 .102
두번째 인터페이스가 필요하다. 이건 뒤의 Backend로 연결한다. 네트워크 장비는 VMNET1(192.168.1.0/24)을 이용하자. 이 라인 끝에는 공유저장소를 연결한다. 공유저장소 내에는 /storage 공간이 있어서 이걸 KVM의 /cloud에 마운트해서 사용하자. 이때 storage의 ip는 .199를 쓰자.
세번째 인터페이스는 eth2로 연결해놓자. 이건 management용이다. 그래서 vm이 이동할때 사용할것이다.
그리고 만약 된다면 DB서버도 따로 두어서 NFS에 연결해놓자 DB 서버는 .200을 이용하고 NFS 라인에 연결하자
관리용 인터페이스 주소는 VMNET2(192.168.2.0/24)을 이용하자.
실재로는 서버를 4개를 쭉 만들자.
이때 storage와 db는 서버에 접속하지 못하게 만들자.
VMnet8은 위와같이 211.183.3.0으로 설정
VMnet1은 192.168.1.0에 DHCP service to distribute 설정
VMnet2는 192.168.2.0을 사용
VMnet3을 만들어서 Host-only에 192.168.3.0으로 설정
KVM1, KVM2, STORAGE, DB 가상머신을 만들자
대충 설정은 위와같이
최종 이렇게 만들어주어라
네트워크
클라우드 네트워크
vlan, VxLAN, GRE tunnel, static route, ACL, NAT
--------------------- ovs(open v switch -----------------------
GRE tunnel
GRE 터널을 만들면 지역적으로 떨어진 서버간의 통신이 가능해진다.
VxLAN
클라우드 데이터 센터를 구축한다면 GRE보다는 VxLAN을 쓸것이다. VxLAN으로 두 VM을 연결하면 상호 통신이 가능해진다.
이때의 L3 스위치를 들어가보면 Data Plane과 Control Plane 부분으로 나뉘어진다. Data Plane에 담당하는 테이블을 CAM Table이라고 부른다. Control Plane은 TCAM Table이라고 부른다.
TCAM Table은 곧 라우팅 테이블, NAT 테이블, ACL, QoS 이다.
CAM Table은 곧 MAC 테이블이다. == LAN카드(FA0/0 같은거)
그래서 처음 패킷이 오면 먼저 CAM Table에서 MAC주소를 검사한다. 일치하지 않으면 TCAM 테이블에서 확인한다. 만약 TCAM에서 문제가 없었다면 Data Plane으로 내려와 밖으로 빠져나간다.
결국 CAM TABLE은 L2용 TCAM은 L3용
그럼 L3 스위치가 지역마다 나뉘어져 있는 상태에서 Data Plane은 각 지역에 놔두고 Control Plane 부분만 한쪽 서버에 다 모아놓는 것이다. 그럼 Control Plane 전체를 관리할 수 있게 된다.
그래서 한쪽 서버에 트래픽이 과다하게 쏠린다면 바로바로 옆으로 넘기는 기술이 필요하다. ??? 이를 SDN(Software Define Network)라고 부른다.
이런 SDN은 SKT, KT, LG (TELCO) 등에서 많이 사용할 수 밖에 없다.
과거에는 broadcast strom(Mac Table Unstable) 문제를 해결하기 위해 STP라는 기술을 썼는데(그냥 선끊어버리기) 이제는 안쓴다.
하지만 지금은 STP를 동작하지 않게 하고 복잡한 네트워크를 단순하게 만들고 fabric 구조로 처리한다. 그 위에 Control Plane을 만들어 처리한다. 이를 VCS라고 부른다.
SDN을 하게 되면 내가 정해진대로만 가게된다. Blocking 된 것이 없이 모든 라인을 쓸 수 있게 된다.
static route
ip route 0.0.0.0 0.0.0.0 1.1.1.1
ip route 1.1.1.0 255.255.255.0 2.2.2.2
--- 목적지 주소 ---- next_hop
과 같이 경로를 우리가 지정해주는 것이다.
ACL
NAT
라우터의 패킷 처리방식(QAAR)
1. FRAME의 이더넷(MAC주소 들어간 L2 헤더) 부분에 제거가 되고 패킷이 라우터에 들어감.
2. Queue들에 패킷이 들어감 (High, Midium, Normal, Low)
- 이 큐들을 처리하는 방식이 다양한데 한방에 다 처리할 수도 있고(RR) 우선순위를 두어서 처리량을 조절할 수 있다
- 어찌되었든 이런건 TCAM에서 Control Plane에 의해 처리된다.
3. ACL에 먼저 패킷들을 보내서 버릴지 말지를 결정한다.
4. NAT에서 패킷을 변환할지를 결정한다.
5. Routing Table로 경로를 설정한다. 경로선택해서 패킷 포워딩한다.
6. 그럼 포트별로 output 큐에 담아서 MAC table에 맥주소 있으면 L2헤더 붙여서 던지고 아니면 ARP 한다음에 던진다.
라우팅
- 알지못하는 네트워크를 라우팅 테이블에 작성하는 것
- 라우터는 기본적으로 자신에게 직접 연결된 네트워크만 이해할 수 있다
- 떨어져 있는 네트워크로 통신이 가능하려면 해당 네트워크 정보가 라우터의 라우팅 테이블에 기록되어 있어야 한다
- 이를 위한 두가지 방법
1) static routing
관리자가 직접 작성, 단방향
ip route 192.168.1.0 255.255.255.0 2.2.2.2
ip route 0.0.0.0 0.0.0.0 3.3.3.3
2) dynamic routing
라우터간 라우팅 프로토콜을 이용하여 서로간에 라우팅 정보를 교환
표준 라우팅 프로토콜 : OSPF(Open Shortest Path First)
OSPF는 멀티캐스트 방식을 이용 (224.0.0.5/224.0.0.6)
동일 라우팅 프로토콜에서 동일 목적지에 대한 여러 경로가 있을 경우에는 Metric을 계산한다 메트릭은 최적경로를 선택하기 위한 계산값으로 OSPF는 기준대역폭(100Mbps)/실제대역폭
따라서 여러 경로중 가장 낮은 대역폭을 최적경로로 선택한다.
만약 서로 다른 라우팅 프로토콜이 동일 목적지에 대하여 도달이 가능하다면 이 경우에는 각 라우팅 프로토콜에 대한 AD를 기준으로 선택하게 됨. 가령 connected interface -> 0, static route -> 1, ospf -> 110, RIP -> 120이고 숫자가 작을 수록 우선 선택됨(255->Unknown)
OSPF 실습
대충 위와같이 해서 WAN 형태의 네트워크를 구성하자
R1, R2만 실행시키자
라우터 1번을 실행시키고
```
conf t
int fa0/0
ip add 211.183.36.3 255.255.255.0
no sh
```
R2
```
int fa0/1
do ping 192.168.1.2 so 192.168.2.2 # 라우터는 192.168.2 네트워크 몰라서 안감
~~~
뭐 암튼 매번 우리가 route 해줄 수 없으니 OSPF로 이걸 할 수 있게 만들어야함
단순한 형태는 static 할 수 있는데 복잡해지면 dynamic 아니면 못한다
다이나믹 라우팅은 각 라우터가 보유하고 있는 네트워크 정보를 서로에게 전달하고 최신의 정보를 유지한다.
라우팅에 참여하는 라우터는 서로간에 health check도 진행한다.
hello message를 주기적으로 상대 라우터에게 전송하여 응답이 돌아온다면 상대방으로부터 전달받은 네트워크 정보를 지속적으로 유지하지만 응답이 돌아오지 않는다면 상대 라우터가 down 되었다는 것으로 간주하고 해당 라우터로 부터 전달받은 네트워크 정보를 모두 삭제
동적 라우팅 구성시에는 자신이 외부에 공개하고자 하는 네트워크를 라우팅 프로토콜을 통해 전파/광고 하는 것이다.
예를들어 R1은 3개의 네트워크를 하니 R2에 3개다 전달하고(실재로는 그냥 테이블 전체를 다 보냄)
R2는 R1에게 2개의 네트워크 정보를 보낸다.
R1
```
conf t
router ospf 1 # ospf 언어사용, 숫자가 반드시 1이 아니여도 됨
network 192.168.1.0 0.0.0.255 area 0 # ACL 스러운 와일드카드(192.168.1.0 ~ 192.168.1.255) 사이에 해당하는 주소가 있다면 그 인터페이스가 포함된 네트워크 192.168.1.0/24를 전달하겠다
# 여기에서 area 0은 내가 가진 네트워크를 전달하는 범위를 area로 지정한다. 그래서 보내는것끼리는 area 번호가 다르면 안된다.
# 내가 가지고 있는 인터페이스들중에 192.168.1.2라는 주소가 있다면 그 주소가 포함된 네트워크정보(192.168.1.0/24)를 전달하겠다
network 172.16.12.0 0.0.0.255 area 0
```
R2
```
conf t
router ospf 1
network 192.168.2.0 0.0.0.255 area 0
network 172.16.12.0 0.0.0.255 area 0
```
네트워크가 추가되었다
두 PC를 모두 켜진 상태로 바꾸자
ip 192.168.1.111/24 192.168.1.2
ping 192.168.2.222
ip 192.168.2.222/24 192.168.2.2
ping 192.168.1.111
상호 통신이 잘되는 것을 확인할 수 있다.
이제 라우터 1번은 NAT가 있어야 인터넷과 통신이 가능하고
라우터 2번은 인터넷으로 갈 Default Route가 필요하다
하지만 이것도 Router1이 Router2에 온 패킷을 받아서 내보내면 되는 일이다.
라우터1에
```
default-information originate
```
를 입력해주고
라우터2에
```
do show ip route
```
해보니까 0.0.0.0/0으로 가는 경로가 생기었다
이제 나가는 패킷을 PAT 방식으로 처리할 수 있게 위와같이 만들어주자.
그럼 PC2번에서도 인터넷과 통신이 가능해진다.
인터넷을 통해서 OSPF 구성하기(중요)
PC는 사설 IP가 들어가 있다 이 두 PC간의 통신이 가능하도록 만들어보자
터널을 뚫고 OSPF로 통신할 수 있게 만들자
INTERNET
```
conf t
int fa0/0
ip add 1.1.1.2 255.255.255.0
no sh
int fa0/1
ip add 2.2.2.2 255.255.255.0
no sh
```
SEOUL
```
conf t
int fa0/0
ip add 1.1.1.1 255.255.255.0
no sh
int fa0/1
ip add 192.168.1.1 255.255.255.0
no sh
ip route 0.0.0.0 0.0.0.0 1.1.1.2
```
JEJU
```
conf t
int fa0/0
ip add 2.2.2.1 255.255.255.0
no sh
int fa0/1
ip add 192.168.2.1 255.255.255.0
no sh
ip route 0.0.0.0 0.0.0.0 2.2.2.2
```
이제 터널을 만들자
대충 위와같은 구성이다
SEOUL
```
int tunnel 0
tunnel so fa0/0
tunnel dest 2.2.2.1
ip add 12.12.12.1 255.255.255.0
```
이러한 터널방식을 GRE Tunnel이라고 부른다. 일반 라우팅 캡슐화 (Generic Routing Encapsulation)
위와같이 헤더에 GRE가 붙는다. 그래서 인터넷 구간에서는 터널 IP를 쓰고 사설망에서는 기존 프레임 그대로 사용한다.
JEJU
```
int tunnel 0
tunnel so fa0/0
tunnel dest 1.1.1.1
tunnel mode gre ip
ip add 12.12.12.2 255.255.255.0
do show ip int br
```
이제 전구간 통신을 위해 ospf구성하자
SEOUL
```
ospf router 1
network 192.168.1.1 0.0.0.0 area 0
network 12.12.12.1 0.0.0.0 area 0
do show ip route ospf
```
JEJU
```
ospf router 1
network 192.168.2.1 0.0.0.0 area 0
network 12.12.12.2 0.0.0.0 area 0
```
[오전]
KVM 실습 환경 만들기
'Development(Web, Server, Cloud) > 22) LINUX - Cloud' 카테고리의 다른 글
클라우드 35일차 : virt, virsh, network, wok (0) | 2022.02.22 |
---|---|
클라우드 34일차(네트워크 부분 다시 봐야함) (0) | 2022.02.18 |
클라우드 32일차 (0) | 2022.02.16 |
클라우드 31일차 (0) | 2022.02.15 |
클라우드 30일차 (0) | 2022.02.14 |