32일차) 2025-02-13(VPN+web/was·Reverse proxy/db·NFS, KVM 초기설정)
팀실습)
- web지사
- /tem 라는 경로로 간단한 웹 템플릿 제공
- /test 라는 경로로 3 tier 구조의 tomcat과 db의 연동확인(dbtest.jsp)
- was지사
was(tomcat)
- db지사
db nfs-server
각 지사는 물리적으로 떨어져있으며 팀원 1명당 한개의 지사를 관리한다. 2명인 경우 2개까지 가능. 각 지사는 내부에 1개의 사설네트워크를 가진다. tomcat의 라이브러리 파일을 제외한 웹템플릿 파일, jsp파일들의 원본은 db지사의 nfs-server에만 존재해야한다.
web | vyos-web |
ip) 10.10.3.10/24 | eth0) 192.168.2.73/22 |
gw) 10.10.3.50/24 | eth1) 10.10.3.50/24 |
was | db | VPN for was | VPN for db |
eth0) 192.168.2.234/22 | eth0) 192.168.3.45/22 | head-esp | tail-esp |
eth1) 10.10.1.10/24 | eth1) 10.10.2.10/24 | head-ike | tail-ike |
.8080 | .80 | peer) 192.168.2.234 | peer) 192.168.2.73 |
tomcat | web template | local prefix) 10.10.1.0 | local prefix |
Reverse Proxy | NFS | pre-shared-secret) hoo | pre-shared-secret) seo |
VyOS-web
- eth0에 dhcp 할당
vyos@vyos# set int eth eth0 add dhcp
vyos@vyos# commit
- eth1 어댑터 추가 후 web의 GW 추가
vyos@vyos# set int eth eth1 add 10.10.3.50/24
vyos@vyos# commit
- web의 DNAT
- Site-to-Site VPN
vyos@vyos# sh vpn
ipsec {
esp-group head-esp {
compression disable
lifetime 1800
mode tunnel
pfs enable
proposal 1 {
encryption aes256
hash sha256
}
}
esp-group tail-esp {
compression disable
lifetime 1800
mode tunnel
pfs enable
proposal 1 {
encryption aes256
hash sha256
}
}
ike-group head-ike {
ikev2-reauth no
key-exchange ikev1
lifetime 1800
proposal 1 {
encryption aes256
hash sha256
}
}
ike-group tail-ike {
ikev2-reauth no
key-exchange ikev1
lifetime 1800
proposal 1 {
encryption aes256
hash sha256
}
}
ipsec-interfaces {
interface eth0
}
site-to-site {
peer 192.168.2.234 {
authentication {
mode pre-shared-secret
pre-shared-secret hoo
}
ike-group head-ike
local-address 192.168.3.73
tunnel 0 {
allow-nat-networks disable
esp-group head-esp
local {
prefix 10.10.3.0/24
}
remote {
prefix 10.10.1.0/24
}
}
}
peer 192.168.3.45 {
authentication {
mode pre-shared-secret
pre-shared-secret seo
}
ike-group tail-ike
local-address 192.168.3.73
tunnel 1 {
allow-nat-networks disable
esp-group tail-esp
local {
prefix 10.10.3.0/24
}
remote {
prefix 10.10.2.0/24
}
}
}
}
}
Web
- /test 추가
[root@web ~]# vi /etc/httpd/conf/httpd.conf
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<VirtualHost *:80> # 80번 포트로 들어오는 모든 ip에 대한 설정
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /test http://10.10.1.10:8080
ProxyPassReverse /test http://10.10.1.10:8080
</VirtualHost>
- /tem 추가
[root@web ~]# mkdir /var/www/html/tem
- mount
[root@web ~]# mount -t nfs 10.10.2.10:/var/www/html /var/www/html/tem
- mount 유지
[root@srv2 ~]# vi /etc/fstab
10.10.2.10:/var/www/html /remote nfs defaults 0 0
네트워크 - 서버(physical, Legacy)
클라우드
인터넷으로 필요한 컴퓨팅 자원을 돈내고 자유롭게 사용할 수 있음
가상화
- 서버(Hypervisor) 가상화: VMware vSpere, workstation, KVM(Kernel-Based Virtual Machine)
- 컨테이너(Container) 가상화: Docker, Kubernetes
→ App을 잘 작동시키기 위한 목적으로 사용
서버 가상화(Hypervisor)
1. 하이퍼바이저의 위치가 어디인지
- Type 1: Host OS+Hypervisor(OS 자리), 자원 효율 측면에서 유리함
- Type 2: Host OS, Hypervisor(프로그램 자리), 간단함
2. 어떻게 보내는지
- 전(Full) 가상화: 모든 명령을 Dom0를 통해 처리
= 모두개입 =효율↓ =Guest 스스로 가상임을 인지하지 못함 =Guest Os의 수정이 불필요 - 반(Para) 가상화
=자신이 VM임을 인지 =Guest OS의 수정이 필요 =Host OS와 호환되어야 함
hypercall = Hypervisor를 거치지 않는 명령
KVM(Kernel-based Virtual Machine)
# 노트북 위에 vmware workstation이라는 일종의 하이퍼바이저가 설치되어있고, 이 프로그램을 통해 이미 kvm이라는 이름의 vm을 생성했다. 앞으로 이 kvm이라는 이름의 서버위에 가상화앱을 설치할 예정이다. 결론적으로 가상화 위에 가상화를 하는 느낌이지만, 우리는 kvm이라는 이름의 vm을 ‘물리서버’라고 가정하고, 간주하고 있다.
# kernel = 하드웨어를 제어하기위한 다양한 모듈들의 모임.
# virtual machine manager가 마치 하이퍼바이저처럼 보이지만, kvm을 관리하기 위한 다양한 도구 중 하나일뿐이다.
KVM 구축
2x2core, 8GB, 50GB, IP 211.183.3.50 /24
- KVM 설정 수정
- kvm서버에는 반드시 저게 활성화되어 있는지 확인
- 방화벽과 셀리눅스를 끄고 레포 수정
[root@kvm ~]# systemctl stop firewalld
[root@kvm ~]# systemctl disable firewalld
...
- 네트워크를 수정하는 방법
- 네트워크 스크립트 파일을 수정하는 방법(ifcfg파일)
- nmtui
- NetworkManager
→ 우리는 NetworkManager를 비활성화해야 한다.
- NetworkManager 비활성화
[root@kvm ~]# systemctl stop NetworkManager
[root@kvm ~]# systemctl disable NetworkManager
인터페이스 이름 수정
- NIC의 이름(ens32)을 eth0으로 수정
인터페이스 이름을 통일하고, br0라는 가상의 인터페이스를 만들어서 vmware-workstation 브릿지같은 대역을 만들고싶다.
[root@kvm ~]# cd /etc/sysconfig/network-scripts/
- ifcfg-eth0 파일 구성
[root@kvm network-scripts]# mv ifcfg-ens32 ifcfg-eth0
[root@kvm network-scripts]# vi ifcfg-eth0
1 TYPE=Ethernet
2 BOOTPROTO=none
3 DEFROUTE=yes
4 DEVICE=eth0
5 NAME=eth0
6 ONBOOT=yes
7 IPADDR=211.183.3.50
8 PREFIX=24
9 GATEWAY=211.183.3.2
10 DNS1=8.8.8.8
11 NM_CONTROLLED=no
# NM_CONTROLLED=no , 네트워크매니저의 영향을 받지 않겠다.
- 부트로더(grub)에서 장치 네이밍 방식 변경
[root@kvm network-scripts]# vi /etc/default/grub
- 수정한 내용 반영
[root@kvm network-scripts]# grub2-mkconfig -o /boot/grub2/grub.cfg
[root@kvm network-scripts]# init 0
- KVM 관련 패키지 설치
[root@kvm ~]# yum install -y qemu-kvm libvirt virt-install virt-manager virt-viewer
# KVM 관련 패키지 설치
# qemu = 하드웨어 자원을 에뮬레이션하여 가상화를 지원
# libvirt = kvm앱
# virt-install = VM 설치하는 기능
# virt-manager = VM관리자(프로그램)
# virt-viewer = 콘솔화면제공(vmware workstation에서 vm을 만들면 화면이 보이는것처럼)
[root@kvm ~]# vi /etc/libvirt/qemu.conf
※ set nu한 상태에서 'shift + ; + 이동하고싶은 line number'로 이동 가능
ex. shift;442
- 변경사항 반영
[root@kvm ~]# systemctl restart libvirtd
[root@kvm ~]# systemctl enable libvirtd
- Virtual machine manager 생김
- VM을 생성해보기 위해 상대적으로 가벼운 vyos.iso파일 다운
wget https://ftp.yz.yamagata-u.ac.jp/pub/vyos/iso/release/1.1.7/vyos-1.1.7-amd64.iso
- 설치할 운영체제 설치 파일(iso)의 위치
- 이미지 이름 변경 및 이동
[root@kvm ~]# mv vyos-1.1.7-amd64.iso /var/lib/libvirt/images/vyos.iso
- iso파일의 위치
# vmware workstation은 폴더를 따로 만들어서 그안에 다양한 파일들로 vm을 구성하는데, 그 다양한 파일들을 모아서 qcow2 파일로 압축 해놨다고 생각하면 좋다.
# kvm에서 vm을 생성하면서 대역을 NAT로 두면 그 vm은 192.168.122.0/24 대역의 아이피를 부여받을 것이다.
'AWS Cloud School 8기 > KVM' 카테고리의 다른 글
42일차) 2025-02-27(KVM) (0) | 2025.02.27 |
---|---|
33일차) 2025-02-14(KVM+bridge, Migration) (0) | 2025.02.14 |