0부터 시작하는 KVM 공부 - Bridge 네트워크 활용 & ssh_config 활용

Jaehong Lee·2022년 8월 2일
0
post-thumbnail

1. Bridge 네트워크와 공인 Ip 할당

  • 가상 머신에서 외부로 나가기 위해서는 정적 nat 하는 방법과 직접 공인 주소를 할당하는 방법이 있다. 허나, 현재의 구성에는 공인 주소 할당을 해도 쓸모가 없다. 따라서, 이 eth 0 을 가상의 라우터 역활이 아닌 브릿지로 사용하여 같은 네트워크로 사용하게 하면 가상 머신에 직접 공인 주소 할당이 가능하다
  • eth 0 을 가상의 스위치에 넣어, 가상 머신을 default 를 사용하지 않고, 가상 스위치를 사용하게 하면, 외부와 같은 네트워크에 있게 되므로, 공인 주소 할당이 가능하다
  • 이를 위해서는 아래의 단계를 거친다
      1. 가상 브릿지 생성
      1. 기존 eth 0 에서 Ip 제거
      1. eth 0 을 신규 가상 브릿지에 추가한다
      1. 새로운 VM 을 신규 가상 브릿지에 연결한다

2. Network Functions Virtualization

  • NFV ( Network Functions Virtualization ) : 네트워크 서비스를 가상화하는 방식이다. 네트워크 기능을 추상화하여 표준화된 컴퓨팅 노드에서 실행되는 소프트웨어를 통해 네트워크 기능을 설치, 제어 및 조작하도록 지원한다
    • vyos 는 데미안 linux 로 만들어진 방화벽이다. 이 방화벽에 pool 을 가지고 있으며, NAT 를 해준다

3. Bridge 생성 및 eth0 설정

  • 기존 KVM 에서 활용중인 eth0 는 routed port 이다. 이는 L3 port 라는 의미이며, Ip 가 입력되는 Port 이다. Ip 가 입력되는 Port 는 별도의 네트워크가 구성되며, 네트워크가 구분되게 된다

  • 현재 실습에서 가상 머신은 외부와 직접 통신하지 않으므로, 공인 주소를 할당 받을 수 없다

  • 기존 eth 0 을 ethernet port ( L2 ) 로 변경하게 되면, eth 0 은 스위치의 하나의 Port 로 동작하게 된다

  • 위와 같은 구성을 만들어보자

  • 위 디렉터리로 들어가서, 복사를 통해 스위치를 만들어주자
  • 위와 같이 브릿지 타입으로 바꾸고, 이름을 바꿔주자
  • ifcfg-eth0 을 위와 같이 설정한다. 이 eth0 에는 Ip 가 들어가면 안되므로 다 삭제해준다. 단, 어떤 스위치에 포함될 것인가를 지정 해야 하기에, 연결할 스위치를 지정하자
  • network 를 재시작하면, 스위치에 Ip 가 들어가있는 것을 확인할 수 있다
  • brctl show 는 리눅스에서 제공하는 오픈 소스 스위치인 linux bridge 의 정보를 확인할 수 있다. 확인하면, br0 라는 브릿지가 생성됬고, 여기에 eth0 이 꼽혀있는 것을 확인할 수 있다

4. Bridge Network 에 신규 VM 연결

  • 볼륨을 복사해주자
  • VM 을 생성해주자. 이제 NETWORK 가 아닌 BRIDGE 를 사용하기에, bridge:br0 로 설정한다
  • 생성된 인스턴스의 Ip 를 확인하면, Ip 가 공인 Ip 로 들어온 것 을 확인할 수 있다. 이는 실제 공인 Ip 가 아닌, 실습상 공인 Ip 이다
  • 인터넷과 통신도 원할하게 잘 된다
  • 외부에서 통신도 잘 된다
  • 접속도 잘 된다

KVM 2 도 똑같이 Bridge 로 설정해주자

  • Migration 을 위해 반드시 스위치 이름을 동일한 br0 로 설정하자

  • 위 방식으로 Migration 이 가능하다. persistant 는 migration 을 유지하는 것, verbose 는 error 발생시 출력하게 하는 옵션이다. live 는 동작중인 상태에서 Migration 하게 하는 옵션으로 live Migration 을 하게 해준다

5. Quiz - SSH 연결 ( ssh_config 활용 )

우리는 현재 별도의 컨트롤 노드는 없다. 이를 대신하여 172.16.1.101 을 컨트롤 노드로 활용할 계획이다. 컨트롤 노드에서 관리할 컴퓨트 노드의 주소는 172.16.1.101, 172.16.1.102 두 대 이다

ssh root@kvm1 virsh list --all
ssh root@kvm2 virsh list --all

  • 단, 패스워드는 묻지 말아야 한다

  • kvm 2 에서 Public Key 를 이용하여 인증하도록 설정하자
  • kvm 2 에서 Password 인증은 꺼둔다
  • kvm 2 에서 Key-Pair 를 생성하자. kvm 1 에 한 것은 실수이다. 코드는 같으니 kvm 2 에서 하자
  • kvm 2 에서 Public key 는 authorized_keys 에 넣어주자
  • kvm1 에 private key 를 복사해서 넣어주자
  • kvm 1 에서 private key 를 .ssh 디렉터리에 옮겨주자
  • kvm 1 에서 ssh_config 에 들어가주자
  • 위 설정을 넣어주자. 여기서 HOST 는 SSH 명령에 사용할 이름, HOSTNAME 은 Host에 지정된 이름이 매핑되는 실제 호스트 명 을 의미한다. 즉, ssh kvm2 를 실행하면 ssh root@172.16.1.102 -i ~/.ssh/0802.pem 으로 변환되어 실행되는 것 이다
    • ssh 명령을 입력하면 ssh 클라이언트가 구성 파일을 읽고 호스트에 대해 지정된 연결 세부 정보를 사용하여 명령을 실행한다

  • private key 의 권한을 600으로 설정해주자
  • 잘 작동한다
  • kvm1 의 .ssh 디렉터리에도 pub 키를 authorized_keys 에 저장해주자
  • kvm1 에 대한 ssh 접속 설정도 설정하자
  • 설정 후에는 kvm1 과 kvm2 의 sshd 를 재실행 하자

ssh 연결에서 client 설정은 ssh_config , server 설정은 sshd_config 이다

  • password 를 통한 인증은 보안상 추천하지 않는다
  • 공개 키는 접속하고자 하는 서버의 ~/.ssh/authorized_keys 에 넣어줘야 한다. 이번에는 서버에서 만들어 배포했지만, 사실 101 에서 101과 102에 접속 해야 하므로 101인 kvm 1 에서 만드는 것이 더 좋다

  • 잘 작동한다. 위에서 root 를 user 로 설정했으므로 root@ 는 생략해도 된다

초반 서버 인증을 위한 각 서버의 public key 를 수집하기 위하여 ssh-keyscan 을 해두는 것이 좋다

  • ssh-keyscan kvm1 >> ~/.ssh/known_hosts
  • 이를 통해 서버 인증을 위한 public key 를 가져와 초반에 yes/no 물어보는 것을 넘어갈 수 있다

6. 차후 구축할 것

  • openswitch 를 이용하여 overlay 네트워크 구축하기
  • cloud volume 을 이용하여 인스턴스 만들기 -> 수정된 인스턴스가 실행되도록 하는 것

해보면 좋은 것

  • zabbix
  • cacti
  • nagios
  • ceph
profile
멋진 엔지니어가 될 때까지

1개의 댓글

comment-user-thumbnail
2022년 9월 23일

안녕하세요 글 잘 봤습니다 다름이아니라 호스트에서(enp0s3- br0 브릿지)연결은 잘 되었는데 후에 게스트 vm을 만들었을때 위와같은 inet이 뜨지가 않습니다 따로 설정을 해야할까요?

[root@localhost ~]# brctl show #호스트 입니다
bridge name bridge id STP enabled interfaces
br0 8000.080027787185 no enp0s3
vnet0
virbr0 8000.525400700ae1 yes virbr0-nic
[root@localhost ~]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.137.34 netmask 255.255.255.0 broadcast 0.0.0.0
inet6 fe80::8887:e6ff:fe4b:a7bc prefixlen 64 scopeid 0x20
ether 08:00:27:78:71:85 txqueuelen 1000 (Ethernet)
RX packets 708237 bytes 6897402140 (6.4 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 551644 bytes 61135815 (58.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 08:00:27:78:71:85 txqueuelen 1000 (Ethernet)
RX packets 5105403 bytes 7211638941 (6.7 GiB)
RX errors 0 dropped 2 overruns 0 frame 0
TX packets 570023 bytes 67257618 (64.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 7986 bytes 4344223 (4.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7986 bytes 4344223 (4.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:70:0a:e1 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::fc54:ff:fe08:d545 prefixlen 64 scopeid 0x20
ether fe:54:00:08:d5:45 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 537 bytes 53346 (52.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#########################################################################
게스트입니다
[root@q ~]# ip addr list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:08:d5:45 brd ff:ff:ff:ff:ff:ff

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens3
UUID=1bae8f03-cea8-4829-8502-53af909bfbdd
DEVICE=ens3
ONBOOT=no
"/etc/sysconfig/network-scripts/ifcfg-ens3" 15L, 277C

꼭 해보고 싶습니다
*kvm에서 Network source는 Bridge br0: Host device vent0으로 되어있으며
Device model은 rtl8139로 되어있습니다

답글 달기