많은분들이 KVM의 Guest환경을 위해 Host 주 인터페이스를 Bridge로 아에 바꿔버리는 작업을 많이하신다. 근데 그건 옳은 결정이긴 하다. OpenStack등 다양한 IaaS 제품은 모두 Bridge로 그냥 호스트와 Guest를 연결해준다.
하지만 나의 경우는 서버를 쉽게 끄고 킬수없는 제약사항(호스팅 서비스 이용)이 있어서 Bridge로 잘못 잡았다가 Host작업을 못할 수 있으니 NAT로 그 역할을 대신코자 한다.
이전 포스팅에서 Guest Server를 설치한 이후 작업을 진행하겠다.
※ 우선 Guest Server에 OS를 올릴때 반드시! OS패키지를 minimal 그대로 Install하지 말고 기본적인 네트워크 둘 (net-tools)도 같이 올리자. Outbound도 안되는 상황에서 네트워크 잡으려면 괜한 고생을 할 수 도 있다.
1. Guest Server 를 올리자. 이때 나의 경우에는 IOS 이미지를 호스트 서버에 올린뒤 가져다 쓰는 방식을 사용했다.
IOS 이미지는 여기서 받자 https://www.centos.org/download/
Download
Home Download Architectures Packages Others x86_64 RPMs Cloud | Containers | Vagrant ARM64 (aarch64) RPMs Cloud | Containers | Vagrant IBM Power BE (ppc64) RPMs Cloud | Containers | Vagrant IBM Power (ppc64le) RPMs Cloud | Containers | Vagrant ARM32 (armhf
www.centos.org
2. Guest OS에 사설IP를 할당한다.
이 상태에서 yum과 같이 인터넷 구간 Outbound가 필요한 서비스가 정상작동하지는 않는다.
3. Host Server에서 포워딩을 Enable 해준다.
# vi /etc/sysctl.conf
// 마지막줄에 아래를 추가한다.
net.ipv4.ip_forward=1
sysctl -p
4. GuestOS에서 0.0.0.0 route table이 정상적인지 확인한다.
이제 Host Server로 유입된 패킷을 Guest Server로 포워딩할 차례이다.
1. 일단 firewalld 데몬이 기본 방화벽인 OS라면 firewalld 데몬을 죽이고 iptables를 사용한다(firewalld 데몬으로 삽질 해봤는데, 포워딩 잘안됨...)
$ systemctl stop firewalld
$ systemctl disable firewalld
$ systemctl mask firewalld
$ yum install iptables-services
$ systemctl enable iptables
$ systemctl enable ip6tables
그래서 아래 Iptable로 작업하는데도 하루 꼬박 삽질함..
2. cat /etc/sysconfig/iptables 에서 다음과 같이 정의되어야 한다.
- HostServer Public IP : 222.239.193.XX
- GuestServer IP : 192.168.122.11
- virbr0 : 192.168.122.1
※ HostServer(222.239.193.XX)에 80번 포트유입을 GuestServer(192.168.122.11) 80번 포트로 포워딩하는 샘플
# Generated by iptables-save v1.4.21 on Tue Jun 7 16:02:23 2022
*nat
:PREROUTING ACCEPT [21:2104]
:INPUT ACCEPT [1:60]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -d 222.239.193.XX/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.122.11:80
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
COMMIT
# Completed on Tue Jun 7 16:02:23 2022
# Generated by iptables-save v1.4.21 on Tue Jun 7 16:02:23 2022
*filter
:INPUT ACCEPT [3:984]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [9:1736]
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A FORWARD -s 222.239.193.0/24 -d 192.168.122.0/24 -o virbr0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
COMMIT
# Completed on Tue Jun 7 16:02:23 2022
3. iptable 수정사항 반영
$ systemctl restart iptables
$ service iptables save
4. 서비스 체크. 끝.
'IaaS > 프라이빗클라우드' 카테고리의 다른 글
Tanzu의 DBaaS 에 대해서 (0) | 2022.07.01 |
---|---|
VMware TAS (Tanzu Application Service)란? (0) | 2022.06.16 |
KVM 호스트 설치하기(CentOS7) (0) | 2022.06.03 |
(완독정리) Cloud Computing Concepts, Technology & Architecture/ServiceTec (0) | 2021.08.02 |
(하이브리드 클라우드) Nutanix 엔터프라이즈 클라우드 플랫폼 (0) | 2021.07.27 |