virtio_rng

호두·2026년 3월 1일

virtio_rng (반가상화 난수 생성기)

  • OS에서의 Random Number
    • OS에서는 다양한 작업 시 난수를 필요로 하고 안정적인 OS 운영을 위해서는 올바른 난수에 대한 접근 관리가 필요.
      • ssh나 GPG/PGP 키페어 생성
      • 프로세스에 PID 부여
      • TCP seq num 생성
      • UUID 생성 등등..
  • VM에서의 Random Number
    • virtio-rng device는 RHEL 7.0부터 이용 가능.
    • 이 드라이버는 RHEL6의 모든 마이너 버전에서도 사용 가능.
    • 호스트와 VM의 OS 버전이 다르더라도 호스트의 엔트로피 사용이 가능함. (rhel 6 vm 에서 rhel 7 호스트의 엔트로피에 접근 가능)
    • virtio RNG 드라이버는 MS Windows 게스트에서도 또한 사용 가능. (windows 용으로 cerfi된 드라이버가 있음)
    • virtio RNG를 사용하지 않으면 게스트 OS의 /dev/random을 사용하고 있는건가 ?
  • Red Hat Enterprise Linux 7에서는 KVM 가상 시스템이 호스트의 엔트로피에 접근할 수 있도록 virtio RNG(Random Number Generator) 를 도입.
    • Red Hat Enterprise Virtualization 3.5 버전부터 해당 기능이 있었는데, Red Hat Enterprise Linux guests에서 해당 기능을 좀 더 쉽고 간편하게 사용할 수 있도록 개선함.
  • redhat에서는 호스트의 hwrng를 사용할 것을 권장하고, 호스트에서는 모든 게스트에서의 요청과 더불어 호스트의 어플리케이션에서 발생하는 요청을 원활하게 처리할 수 있을 정도의 충분한 엔트로피가 필요.
    • 권장 설정을 사용하면 호스트 Linux 커널( /dev/random을 통해)의 엔트로피는 hwrng에 의해 공급되고, QEMU 는 게스트가 난수 요청 시 엔트로피 소스로 /dev/random 을 사용하게 되는 구조. (이미지 참조)
  • Linux의 /dev/random을 소스로 사용(권장 설정을 사용)하면 두 가지 측면에서 좋음
      1. hwrng의 입력이 다른 엔트로피(호스트 시스템에서 생성되는 다른 엔트로피)와 혼합됨. (기본적으로 /dev/random이 호스트에서 기본 엔트로피 소스로 사용되지만 hwrng이 소스에 추가되는)-> random num의 퀄리티가 좋아진다는 것 같음.
      1. 가상 머신의 라이브 마이그레이션은 물리적 hwrng에 의존하지 않음. 클러스터의 서로 다른 서버는 특정 모델이나 벤더에 종속되지 않고 다양한 공급업체의 hwrng를 사용할 수 있음. -> 결국은 /dev/random을 사용하게 되니까
  • 클라우드 이미지에 어떤 이점이 있는지 ?
    • 클라우드 이미지도 ssh 키페어를 만드는데 랜덤넘버가 필요한데, 이 부분이 완전히 자동화 됨.
    • 이게 자동화되면서 기존에 클라우드 이미지에서 랜덤넘버를 대기하는 시간이 사라지게 되고, 클라우드 이미지 작업 속도가 매우 빨라지게 됨.

적용

  1. nova 설정 변경
[root@test01]# ansible -i hosts.txt all -m shell -a  "sed -i 's/^\(rng_dev_path\).*$/\1 = \/dev\/random/g' /etc/nova/nova.conf" -u testuser -b -k
SSH password:
  1. 설정 확인
[root@test01]# ansible -i hosts.txt all -m shell -a "grep rng_dev_path /etc/nova/nova.conf" -u testuser -b -k
SSH password:
  1. openstack-nova-compute.services 재시작
  2. 특정 이미지에 virtion property 적용
[root@controller1 ~]# openstack image set --property hw_rng_model=virtio de41697d-****-****-b5c1-04b76887267b
  1. 인스턴스 생성 테스트
[root@controller1 ~]# openstack server create --network "int_net2" --flavor a2.4m.small --image "de41697d-****-****-b5c1-04b76887267b"  --os-compute-api-version "2.74"  --key-name testvm01
  1. 인스턴스 내에 virtio_rng 모듈이 로딩 여부 확인
  • 정상 확인
~# lsmod | grep -i virtio
virtio_rng			16384	0
virtio_net			57344	0
net_failover		20480	1	virtio_net
virtio_blk			20480	3
  • 동일 이미지에서 property를 제거하면 rng가 안 뜨는 것 확인.
~# lsmod | grep -i rng
  1. 전체 flavor, image에 virtio property 추가
  • flavor 확인
[root@controller1 ~]# openstack flavor list --long -c ID -c Properties
+--------------------------------------+-------------------------------------------------------------------------------------------------------------------+
| ID                                   | Properties                                                                                                        |
+--------------------------------------+-------------------------------------------------------------------------------------------------------------------+
| 04df5678-****-****-b329-617099a956f4 | hw_rng:allowed='True'                                                                                             |
| 0f79720a-****-****-ac77-b84ab98ec0be | hw_rng:allowed='True', instance_type='*'                                                                          |
(...)
+--------------------------------------+-------------------------------------------------------------------------------------------------------------------+
profile
Whatever you're not changing, you're choosing

0개의 댓글