Ubuntu'da KVM Kullanarak libvirt 0.8.3 ile Sunucudan Konuğa Bağlantı Noktası İletme


14

Ana bilgisayarın tek bir harici IP'si var, bu yüzden KVM misafirlerimi NAT ile ayarladım.

Bazı talepleri dışarıdan misafirlere iletmek için nasıl bir port yönlendirme ayarlayabilirim?

Bununla ilgili herhangi bir belge bulamadım. En yakın cevap muhtemelen bu cevaptır , ancak daha sonra libvirt 0.8.3'te bunu yapmanın daha kolay bir yolu olduğu belirtilmektedir. Bunu yapmanın daha güncel bir yolunu bilen var mı?


harici - İnternet IP mi demek istiyorsun? veya sadece LAN'ınız (VM'lerin dışında)? Köprülü ağ oluşturmak için bu harici adresleri VM'lerinize tahsis edebilir misiniz?
Art Shayderov

Yalnızca bir İnternet IP adresi alabilirim, bu yüzden köprülü ağ modunu kullanmadım.
wei

Yanıtlar:


13

Burada, bir kanca komut dosyası ( kaynak ) kullanarak bağlantı noktası iletmeyi ayarlamanın daha iyi bir yolu vardır .

İçinde /etc/libvirt/hooks/qemu:

#!/bin/sh

GUEST_NAME=
HOST_PORT=
GUEST_IPADDR=
GUEST_PORT=

if [ "$1" = "$GUEST_NAME" ]; then
  if [ "$2" = start ]; then
    iptables -t nat -A PREROUTING -p tcp --dport "$HOST_PORT" \
         -j DNAT --to "$GUEST_IPADDR:$GUEST_PORT"
    iptables -I FORWARD -d "$GUEST_IPADDR/32" -p tcp -m state \
         --state NEW -m tcp --dport "$GUEST_PORT" -j ACCEPT
  elif [ "$2" = stopped ]; then
    iptables -t nat -D PREROUTING -p tcp --dport "$HOST_PORT" \
         -j DNAT --to "$GUEST_IPADDR:$GUEST_PORT"
    iptables -D FORWARD -d "$GUEST_IPADDR/32" -p tcp -m state \
         --state NEW -m tcp --dport "$GUEST_PORT" -j ACCEPT
  fi
fi

Üstteki dört değişkeni libvirt kurulumunuza uyacak şekilde ayarlamanız gerekir.

Ubuntu'da aşağıdakilerle yapılan libvirt-bin'i yeniden başlatmanız gerekir:

sudo sh -c 'service libvirt-bin stop; service libvirt-bin start'

o zaman konuğu yeniden başlatmanız gerekir. Ubuntu'da, /etc/apparmor.d/usr.sbin.libvirtdkanca komut dosyasının yürütülmesine izin vermek için ayarlamanız gerekir :

Bitişik, yanında

/usr/sbin/* PUx,

ekleme

/etc/libvirt/hooks/* PUx,

Sonra apparmor'u yeniden yükleyin:

sudo service apparmor reload

Muhtemelen $GUEST_IPADDRvirsh / dumpxml / iface-dumpxml kullanarak otomatik yapılandırma yapmanın bir yolu var, ancak bulamadım. Alternatif olarak, IP ağ xml: belgelerinde statik olarak ayarlanabilir .

Anlayabildiğim kadarıyla, ağ filtreleri yalnızca sanal ağda olanları kısıtlamak için kullanılabilir ve bağlantı noktası yönlendirme için yararlı değildir.


1
Trusty, /etc/libvirt/hooks/** rmix,varsayılan olarak apparmor yapılandırma dosyasında bir satıra sahiptir ve aynı etkiye sahiptir. Apparmor yapılandırmasını değiştirmeden betiği çalıştırabilirim.
Amir Ali Akbari

2

Ben de benzer bir durumdayım. Virbr0 arayüzü ile ana bilgisayara bağlı özel NATed ağında KVM çalışan bir Windows Server var. Sanal makineye uzak masaüstü üzerinden erişmek istiyorum. Bu yüzden trafiği 3389 numaralı bağlantı noktasına (RDP) VM bağlantı noktası 3389'a iletmem gerekiyor. Bunu bazı iptable kurallarıyla başardım.

/ sbin / iptables -t nat -A SUNUM -p tcp -d HOST-IP --dport 3389 -j DNAT - hedefe VM-IP: 3389

/ sbin / iptables -I İLERİ -m durum -d VM-NET / 24 - durum YENİ, İLGİLİ, KURULU -j KABUL

HOST-IP, VM-IP ve VM-NET'in elbette kabul edilmesi gerekir. Ancak iptables ve libvirt ile uğraşmak zor. Şu anda iptable kurallarını karıştırmaktan dolayı kaybettiğim VM'imde internet erişimi elde etmek için bir çözüm arıyorum :-(


Birkaç yaşında olduğunu biliyorum ama bu cevap benim için çalıştı. Teşekkürler!
mttdbrd

1

Başvurduğunuz yanıtın hala uygun iptables kurallarını gösterdiğine inanıyorum. Ancak, artık sanal makineler başlatıldığında ve durdurulduğunda kurallar oluşturmak ve yok etmek için bir komut dosyası kancası kullanabilirsiniz . Isaac'ın önceki cevapta söylediği gibi, mevcut libvirt'te de ağ filtreleri var, ancak NATed konuklar için bağlantı noktalarını açmak için nasıl veya hatta kullanılacağından emin değilim.


0

misafir ağı nasıl kurulur? köprülenmişse, yapmanız gereken tek şey bağlantı noktalarını konukların IP'lerine iletmektir. Misafirleriniz başka bir NAT'ın arkasındaysa, bir libvirt kurulur, o zaman karmaşıklaşır

ancak her durumda, burada sanal makinelere fiziksel bir makine gibi davranıyorsunuz


Sanırım bunu açıkça söylemedim. Ana bilgisayar bir NAT içinde değil, harici bir IP adresi var. Ne yazık ki, konuk ağı libvirt tarafından kurulan NAT'ın arkasında.
wei

ah, o zaman bu başka bir mesele. temelde libvirt kendi NAT çözümünü yönetir, ki bu da düzenlenebilir.
dyasny

evet, bana söylendi, düzenlenebilir. Ama ben sadece bu konuda herhangi bir referans bulamıyorum, nwfilter xml yapılandırma dosyaları sadece bana tuhaf gibi görünüyor, libvirt web sitesinde belgeler de çok yararlı değil.
wei

Ağa köprülenmişseniz, varsayılan libvirt NAT'ı terk edip istediğiniz her şeyi ayarlayabilirsiniz. Dyasny'nin dediği gibi VM'ye fiziksel bir makine gibi davranın. KVM ana bilgisayarım var ve harici IP'li arayüz, ağ geçidi olarak yapılandırılmış bir VM'ye atanıyor. Bu size uygunsa konfigürasyonu gönderebilirim (ubuntu tarzı).
Sanat Shayderov
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.