[+] KVM - dost

Masz problemy z siecią bądź internetem? Zapytaj tu
pawel.b
Posty: 2
Rejestracja: 10 listopada 2009, 10:22

[+] KVM - dostęp do maszyn wirtualnych z poza hosta

Post autor: pawel.b »

Witam.

Korzystam z dystrybucji: Linux version 2.6.32-5-amd64 (Debian 2.6.32-38). Zainstalowałem KVM na hoście i uruchomiłem kilka maszyn wirtualnych, ale po fakcie uznałem, że chciałbym, aby maszyny były w tej samej podsieci, w której znajduje się host. Dodam, że w domyślnej konfiguracji (NAT) maszyny wirtualne miały dostęp do sieci internet. Wymyśliłem taką konfigurację sieci (/etc/network/interfaces) na poziomie hosta:

Kod: Zaznacz cały

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.10.105
        netmask 255.255.255.0
        gateway 192.168.10.203
        post-up /sbin/sysctl -w net.ipv6.conf.eth0.accept_ra=0
        pre-down /sbin/sysctl -w net.ipv6.conf.eth0.accept_ra=1

# vm_0
auto vbr0
iface vbr0 inet manual
        pre-up /usr/sbin/brctl addbr vbr0
        pre-up /sbin/ifconfig vbr0 up
        post-up /sbin/sysctl -w net.ipv4.conf.vbr0.proxy_arp=1
        post-up /sbin/ip route add 192.168.10.106/32 dev vbr0
        pre-down /sbin/ip route del 192.168.10.106/32 dev vbr0
        post-down /sbin/ifconfig vbr0 down
        post-down /usr/sbin/brctl delbr vbr0

# vm_1
auto vbr1
iface vbr1 inet manual
        pre-up /usr/sbin/brctl addbr vbr1
        pre-up /sbin/ifconfig vbr1 up
        post-up /sbin/sysctl -w net.ipv4.conf.vbr1.proxy_arp=1
        post-up /sbin/ip route add 192.168.10.107/32 dev vbr1
        pre-down /sbin/ip route del 192.168.10.107/32 dev vbr1
        post-down /sbin/ifconfig vbr1 down
        post-down /usr/sbin/brctl delbr vbr1

Tablica routingu wygląda następująco:

Kod: Zaznacz cały

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.10.107  0.0.0.0         255.255.255.255 UH    0      0        0 vbr1
192.168.10.106  0.0.0.0         255.255.255.255 UH    0      0        0 vbr0
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         192.168.10.203  0.0.0.0         UG    0      0        0 eth0

Abym mógł mieć dostęp do sieci z poziomu maszyn wirtualnym musiałem dodać do firewalla następujące reguły:

Kod: Zaznacz cały

iptables -t nat -A POSTROUTING ! -s  192.168.10.106 -d  192.168.10.106 -j MASQUERADE
iptables -t nat -A POSTROUTING ! -d  192.168.10.106 -s 192.168.10.106 -j MASQUERADE
iptables -t nat -A POSTROUTING ! -s  192.168.10.106 -d  192.168.10.106 -j MASQUERADE
iptables -t nat -A POSTROUTING ! -d  192.168.10.106 -s 192.168.10.106 -j MASQUERADE

Mój problem polega na tym, że nie mam możliwości połączenia się z maszynami wirtualnymi z poza hosta. Próbowałem na poziomie iptables z regułami typu:

Kod: Zaznacz cały

iptables -t filer -A PREROUTING  -i eth0 -d  192.168.10.106 -j ACCEPT
iptables -t filer -A PREROUTING  -i eth0 -d  192.168.10.107 -j ACCEPT
ale doszedłem do wniosku, że problem może leżeć gdzieś na poziomie adresów MAC, tylko nie wiem jak to ugyrźć dalej.

Przekierowanie adresów też nie pomogło:

Kod: Zaznacz cały

iptables -t nat -A PREROUTING -d 196.169.169.105 -j DNAT --to-destination 196.169.169.106
 iptables -t nat -A POSTROUTING -s 196.169.169.106 -j SNAT --to-source 196.169.169.105
Byłbym bardzo wdzięczny za pomoc, ewentualnie wskazówki!
Pozdrawiam.
piroaa
Beginner
Posty: 324
Rejestracja: 11 kwietnia 2008, 14:46

Post autor: piroaa »

Robisz tak na hyperwizorze tworzysz sobie interfejs most, na nim ustawiasz sobie konfigurację IP taką jak a ma być, do mostu dodajesz kartę sieciową hyperwizora na karcie ma nie być żadnej konfiguracji IP ma to wyglądać tak:

Kod: Zaznacz cały

# ifconfig 
eth0      Link encap:Ethernet  HWaddr aa:00:04:00:0a:04  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:42 Base address:0x4000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:16 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1048 (1.0 KiB)  TX bytes:1048 (1.0 KiB)

netbr0    Link encap:Ethernet  HWaddr aa:00:04:00:0a:04  
          inet addr:10.0.0.1  Bcast:10.255.255.255  Mask:255.0.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
# brctl show
bridge name    bridge id        STP enabled    interfaces
netbr0        8000.aa0004000a04    no        eth0
I na koniec w konfiguracji maszyn ustawiasz, że karty sieciowe mają być podpięte pod interfejs most: netbr0.
Wszystko.
Pozdrawiam.
pawel.b
Posty: 2
Rejestracja: 10 listopada 2009, 10:22

Post autor: pawel.b »

Dziękuję za pomoc, próbowałem tego rozwiązania zanim tutaj napisałem, na podstawie strony: http://www.linux-kvm.org/page/Networking.
Przekonałeś mnie, żebym spróbował tego jeszcze raz i tym razem działa, diabeł jak zwykle tkwił w szczególe ;) .

Dla tych, którzy ewentualnie chcieliby skorzystać z rozwiązań z tego tematu dodam, że jeśli użyty w maszynach wirtualnych jako interfejs zostanie: netbr0, a dalej nie będzie dostępu do sieci, to należy sprawdzić, co nam wyświetli polecenie:

Kod: Zaznacz cały

brctl show
Jeśli będzie tak jak powyżej to trzeba dodać jeszcze:

Kod: Zaznacz cały

brctl addif netbr0 vnetX
X - oznacza numer każdej kolejne maszyny wirtualnej począwszy od 0.
ODPOWIEDZ