Ero sivun ”Virtuaalisen järjestelmän verkkosiltaus” versioiden välillä

Siirry navigaatioon Siirry hakuun
(muotoilu bugaa)
 
 
(25 välissä olevaa versiota 6 käyttäjän tekeminä ei näytetä)
Rivi 1: Rivi 1:
Muistiinpanoja verkkosillan rakentamisesta virtualisoituun asiakkaaseen.
{{jakeluspesifinen}}


Tässä artikkelissa käsitellään verkkosillan luomista [[virtualisointi|virtuaalikoneessa]] pyörivään järjestelmään. Huomaa kuitenkin, että voit päästä helpommalla käyttämällä valmiita ratkaisuja. Esimerkiksi Virtualbox siltaa yhteyden automaattisesti ja helposti, kun valitset virtuaalisen verkkokortin asetuksista "Bridged Network".
== Isäntäkone A ==


== Host A ==
Isäntäkoneen käyttöjärjestelmä on tässä esimerkissä [[Sabayon]] linux 4.0, joka on [[Gentoo]]-pohjainen ja sopii erinomaisesti mm. testailuun.
 
Isäntäkoneen käyttöjärjestelmä on Sabayon linux 4.0. Tämä on gentoo-pohjainen ja sopii erinomaisesti mm. testailuun.


  Linux ariloulaleelay 2.6.27-sabayon #1 SMP Sat Dec 20 16:15:56 UTC 2008 x86_64 Intel(R) Core(TM)2 CPU 4300 @ 1.80GHz GenuineIntel GNU/Linux
  Linux ariloulaleelay 2.6.27-sabayon #1 SMP Sat Dec 20 16:15:56 UTC 2008 x86_64 Intel(R) Core(TM)2 CPU 4300 @ 1.80GHz GenuineIntel GNU/Linux
Rivi 11: Rivi 11:
                   ss ht tm pbe syscall lm constant_tsc arch_perfmon pebs bts rep_good nopl pni monitor ds_cpl est tm2 ssse3 cx16 xtpr lahf_lm
                   ss ht tm pbe syscall lm constant_tsc arch_perfmon pebs bts rep_good nopl pni monitor ds_cpl est tm2 ssse3 cx16 xtpr lahf_lm


Tästä eteenpäin seuraa gentoo-kohtaista testausjärjestelmän pystytystä. Järjestelmän qemu-system -binääri on viallinen. Käännetään qemu, kvm ja libvirt uudelleen. Gentoo-pohjaisessa järjestelmässä tämä käy helposti paketinhallinnan kautta.
=== libvirt + KVM Gentoossa ===
 
Tästä eteenpäin seuraa Gentoo-kohtaista testausjärjestelmän pystytystä. Asennetaan [[qemu]], [[kvm]] ja [[libvirt]].
libvirtError: internal error Cannot determine QEMU argv syntax /usr/bin/qemu-system-x86_64
 
 
System.map pitää linkittää jotta voi kääntää kernel-moduleja (bugi distrossa):


ariloulaleelay ~ # ln -s /boot/System.map-genkernel-x86_64-2.6.27-sabayon /lib/modules/2.6.27-sabayon/build/System.map
Sabayonin <tt>[[System.map]]</tt> pitää linkittää oikeaan paikkaan jotta [[ydin|ytimen]] [[moduuli|moduuleja]] voidaan kääntää:
ariloulaleelay ~ # ln -s /boot/System.map-genkernel-x86_64-2.6.27-sabayon /lib/modules/2.6.27-sabayon/build/System.map


Qemu täytyy kääntää gcc-3:lla!
Qemu täytyy kääntää [[gcc]]-3:lla!
  >>> [[Emerge|Emerging]] (1 of 1) app-emulation/qemu-softmmu-0.9.1-r3
  * qemu-0.9.1.tar.gz RMD160 SHA1 SHA256 size ;-) ...                                                                                                [ ok ]
  * checking ebuild checksums ;-) ...                                                                                                                [ ok ]
  * checking auxfile checksums ;-) ...                                                                                                                [ ok ]
  * checking miscfile checksums ;-) ...                                                                                                              [ ok ]
  * qemu requires gcc-3 in order to build and work correctly
  * please compile it switching to gcc-3.
  * We are aware that qemu can guess a gcc-3 but this feature
  * could be harmful.


>>> Emerging (1 of 1) app-emulation/qemu-softmmu-0.9.1-r3
Qemu käännetään versiolla 3.4.6, muilla kääntäjä on järjestelmän oletus: <tt>gcc-4.3.2</tt>. Tässä asennetut paketit:
* qemu-0.9.1.tar.gz RMD160 SHA1 SHA256 size ;-) ...                                                                                                [ ok ]
* checking ebuild checksums ;-) ...                                                                                                                [ ok ]
* checking auxfile checksums ;-) ...                                                                                                                [ ok ]
* checking miscfile checksums ;-) ...                                                                                                               [ ok ]
* qemu requires gcc-3 in order to build and work correctly
* please compile it switching to gcc-3.
* We are aware that qemu can guess a gcc-3 but this feature
* could be harmful.


  Wed Feb 25 16:46:08 2009 >>> sys-devel/gcc-3.4.6-r2
  Wed Feb 25 16:55:31 2009 >>> app-emulation/qemu-softmmu-0.9.1-r3
  Wed Feb 25 17:05:27 2009 >>> app-emulation/qemu-0.9.1
  Wed Feb 25 17:08:20 2009 >>> app-emulation/libvirt-0.5.1
  Wed Feb 25 17:13:01 2009 >>> app-emulation/kqemu-1.3.0_pre11
  Wed Feb 25 17:19:45 2009 >>> app-emulation/kvm-84
  Wed Feb 25 17:22:20 2009 >>> app-emulation/virtinst-0.400.0
  Wed Feb 25 17:22:45 2009 >>> app-emulation/virt-viewer-0.0.3
  Wed Feb 25 17:23:21 2009 >>> app-emulation/virt-manager-0.6.0-r1


Qemu käännettiin versiolla 3.4.6, muilla kääntäjä on järjestelmän oletus: gcc-4.3.2. Tässä asennetut paketit:
Lopuksi käynnistetään <tt>libvirtd</tt> ja asetetaan se käynnistymään automaattisesti:
 
# /etc/init.d/libvirtd start
Wed Feb 25 16:46:08 2009 >>> sys-devel/gcc-3.4.6-r2
# [[rc-update]] add libvirtd default
Wed Feb 25 16:55:31 2009 >>> app-emulation/qemu-softmmu-0.9.1-r3
Wed Feb 25 17:05:27 2009 >>> app-emulation/qemu-0.9.1
Wed Feb 25 17:08:20 2009 >>> app-emulation/libvirt-0.5.1
Wed Feb 25 17:13:01 2009 >>> app-emulation/kqemu-1.3.0_pre11
Wed Feb 25 17:19:45 2009 >>> app-emulation/kvm-84
Wed Feb 25 17:22:20 2009 >>> app-emulation/virtinst-0.400.0
Wed Feb 25 17:22:45 2009 >>> app-emulation/virt-viewer-0.0.3
Wed Feb 25 17:23:21 2009 >>> app-emulation/virt-manager-0.6.0-r1
 


=== Ytimen moduulit ===
'''Jotta guest voi kytkeytyä siltaan, tarvitaan 'tun'-[[moduuli]]'''. Muutoin näet virheen: ”Failed to add tap interface 'vnet%d' to bridge 'br0' : No such file or directory”. Ladataan myös virtualisointimoduulit, joista ainoastaan toinen riittää. Kvm:ää käytetään mikäli keskusyksikköpiiri tukee virtualisointilaajennoksia ja kqemua käytetään, mikäli kvm:ää ei voi käyttää.


# modprobe tun
# modprobe kqemu
# modprobe kvm


== Verkko ==
== Verkko ==
-------
<tt>eth0</tt> on kytketty reitittimeen NAT1 (192.168.1.0/24), joka on kytketty palomuurin kautta internetiin. Tämä simuloi dmz-aluetta, joka sillataan virtuaalikoneelle. '''Sillattavalla liitännällä ei tule olla omaa ip-osoitetta isäntäjärjestelmässä.'''


eth0 on kytketty reitittimeen NAT1 192.168.1.0/24, joka on kytketty palomuurin kautta internetiin. Tämä simuloi sisäverkkoa, joka sillataan virtuaalikoneelle. Tällä liitännällä ei tule olla omaa ip-osoitetta isäntäjärjestelmässä.
eth0     Link encap:Ethernet  HWaddr 00:18:f3:16:aa:7f


eth0      Link encap:Ethernet  HWaddr 00:18:f3:16:aa:7f
<tt>eth1</tt> on toinen verkkokortti, joka on kytketty reitittimeen NAT2 192.168.0.0/24. Tämä simuloi sisäverkkoa, mutta sen kautta ei ole pääsyä internetiin. Fyysisesti tämä on täysin erillinen verkosta NAT1.


eth1      Link encap:Ethernet  HWaddr 00:20:18:8e:43:32
inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0


eth1 on toinen verkko, joka on kytketty reittimeen NAT2 192.168.0.0/24. Tämä simuloi sisäverkkoa, mutta sen kautta ei ole pääsyä internetiin. Fyysisesti tämä on täysin erillinen verkosta NAT1.
Reititykset ovat vielä asetettu siten, että isäntäkone on kytketty <tt>eth0</tt>:n kautta verkkoon NAT1, johon tullaan kytkemään verkkosilta:
  $ [[route]]
  Kernel IP routing table
  Destination    Gateway        Genmask        Flags Metric Ref    Use Iface
  192.168.1.0    *              255.255.255.0  U    0      0        0 eth0
  192.168.0.0    *              255.255.255.0  U    0      0        0 eth1
  192.168.122.0   *              255.255.255.0   U    0      0        0 virbr0
  loopback        ariloulaleelay  255.0.0.0      UG    0      0        0 lo
  default        192.168.1.1    0.0.0.0        UG    0      0        0 eth0


eth1      Link encap:Ethernet  HWaddr 00:20:18:8e:43:32
=== Luodaan uusi verkkoyhteys ”Bridge to LAN” ===
inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0
Lainaukset <tt>brctl</tt>-manuaalista. Ks. myös [http://libvirt.org/formatdomain.html#elementsNICSBridge]


Routet ovat vielä asetettu siten, että host on kytketty eth0:n kautta verkkoon NAT1, johon tullaan kytkemään bridge.
”This is the recommended config for general guest connectivity on hosts with static wired networking configs. Provides a bridge from the VM directly onto the LAN. This assumes there is a bridge device on the host which has one or more of the hosts physical NICs enslaved.


$ route
Silta on br0, jolla on ”hallussaan” (enslaves) eth0.
Kernel IP routing table
Destination    Gateway        Genmask        Flags Metric Ref    Use Iface
192.168.1.0    *              255.255.255.0  U    0      0        0 eth0
192.168.0.0    *              255.255.255.0  U    0      0        0 eth1
192.168.122.0  *              255.255.255.0  U    0      0        0 virbr0
loopback        ariloulaleelay  255.0.0.0      UG    0      0        0 lo
default        192.168.1.1    0.0.0.0        UG    0      0        0 eth0


”The guest VM will have an associated tun device created with a name of vnetN, which can also be overridden with the <target> element. The tun device will be enslaved to the bridge. The IP range / network configuration is whatever is used on the LAN. This provides the guest VM full incoming & outgoing net access just like a physical machine.”


=== Luodaan uusi verkkoyhteys ”Bridge to to LAN” ===
<tt>bridge.xml</tt>: määritellään silta br0 ja yhdistetään liikenne eth0 -> vnet0. UUID on luotu <tt>uuidgen</tt>:llä.
Ks. myös [http://libvirt.org/formatdomain.html#elementsNICSBridge]


”This is the recommended config for general guest connectivity on hosts with static wired networking configs. Provides a bridge from the VM directly onto the LAN. This assumes there is a bridge device on the host which has one or more of the hosts physical NICs enslaved.
  <network>
    <name>bridge</name>
    <uuid>4aa7bd44-302e-4bcd-896b-34c83be1dec0</uuid>
    <bridge name='br0' stp='on' forwardDelay='0' />
    <interface type='bridge'>
    <!-- tässä määritellään laite joka on kytketty haluttuun ulkoverkkoon -->
      &lt;source bridge='eth0'/>
      <target dev='vnet0'/>
    </interface>
    <!-- tämä on ip jonka eth0 saa -->
    <ip address='192.168.1.100' netmask='255.255.255.0'>
    <!-- virtuaalikoneiden ip-määritykset, näitä ei käytetä mikäli verkossa on dhcp -->
      <dhcp>
        <range start='192.168.1.101' end='192.168.1.254' />
      </dhcp>
    </ip>
  </network>


Tämä on br0, jolla on hallussa eth0.
Ladataan määritykset libvirtiin. Tämä luo automaattisesti sillan br0.


The guest VM will have an associated tun device created with a name of vnetN, which can also be overridden with the <target> element. The tun device will be enslaved to the bridge. The IP range / network configuration is whatever is used on the LAN. This provides the guest VM full incoming & outgoing net access just like a physical machine.
  $ virsh net-define bridge.xml
  Verkko bridge määritetty tiedostosta bridge.xml


Luotu bridge.xml ja sille UUID uuidgen:llä.
  $ virsh net-start bridge
  Verkko bridge käynnistetty


Ladataan määritykset
  $ virsh net-list
 
  Nimi                Tila      Automaattikäynnistys
$ virsh net-define bridge.xml
  -----------------------------------------
Verkko bridge määritetty tiedostosta bridge.xml
  bridge              aktiivinen no
$ virsh net-start bridge
Verkko bridge käynnistetty
$ virsh net-list
Nimi                Tila      Automaattikäynnistys
-----------------------------------------
bridge              aktiivinen no
default              aktiivinen yes
 
Tämä luo automaattisesti sillan "br0".


”An ethernet bridge is a device commonly used to connect different networks of ethernets together, so that these ethernets will appear as one ethernet to the participants. Each of the ethernets being connected corresponds to one physical interface in the bridge.”
”An ethernet bridge is a device commonly used to connect different networks of ethernets together, so that these ethernets will appear as one ethernet to the participants. Each of the ethernets being connected corresponds to one physical interface in the bridge.”
Rivi 104: Rivi 117:
br0:aan yhdistetään eth0. libvirt yhdistää itse luomansa laitteen ”vnet0”.
br0:aan yhdistetään eth0. libvirt yhdistää itse luomansa laitteen ”vnet0”.


# brctl addif br0 eth0
# brctl addif br0 eth0
 


Määritetään sillan route:
# route add -net 192.168.1.0 netmask 255.255.255.0 dev br0


Määritetään sillan route:
Muut routet korjataan aiemmasta konfiguraatiosta. Ip 192.168.1.1 on sillan käyttämä gateway-osoite, ja tästä tehdään myös oletusgateway.
# route add -net 192.168.1.0 netmask 255.255.255.0 dev br0
  # route del -net 192.168.1.0 netmask 255.255.255.0 dev eth0
  # route del default gw 192.168.1.1


Muut routet korjataan aiemmasta konfiguraatiosta, tässä niiden määritykset:
Ohjataan 192.168.0.x-verkkoon (NAT2) menevät pyynnöt kulkemaan eth1:n kautta:
# route del -net 192.168.1.0 netmask 255.255.255 dev eth0
  # route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1
# route del default gw 192.168.1.1


# route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1
Oletusreitti voi kulkea vain sisäverkkoon, (NAT2) tai dmz-verkkoon (NAT1). '''Oletusreittejä voi olla vain yksi!!'''
# route add default gw 192.168.0.1 netmask 255.255.255.0 dev eth1
  # route add default gw 192.168.1.1 br0 # NAT1, netti toimii
  # route add default gw 192.168.0.1 netmask 255.255.255.0 dev eth1 # NAT2, jutellaan vain suljetun sisäverkon kanssa


# route
Alla on reititystaulu, jossa isäntäkone on yhteydessä NAT1:een ja NAT2:een, pääsee vielä internetiinkin.
Kernel IP routing table
Destination    Gateway        Genmask        Flags Metric Ref    Use Iface
default        192.168.0.1    255.255.255.0  UG    0      0        0 eth1
192.168.1.0    *              255.255.255.0  U    0      0        0 br0
192.168.0.0    *              255.255.255.0  U    0      0        0 eth1
192.168.122.0  *              255.255.255.0  U    0      0        0 virbr0
loopback        ariloulaleelay  255.0.0.0      UG    0      0        0 lo


$ route
Kernel IP routing table
Destination    Gateway        Genmask        Flags Metric Ref    Use Iface
192.168.1.0    *              255.255.255.0  U    0      0        0 br0
192.168.0.0    *              255.255.255.0  U    0      0        0 eth1
loopback        ariloulaleelay  255.0.0.0      UG    0      0        0 lo
default        192.168.1.1    0.0.0.0        UG    0      0        0 br0




Sillä internet kulkee hostilla eth0:sta, sen ei pitäisi nyt toimia:
Sillä oletusreitti on br0, internet toimii.
ariloulaleelay $ ping google.fi
ariloulaleelay $ ping linux.fi
connect: Network is unreachable
PING linux.fi (82.118.208.5) 56(84) bytes of data.
64 bytes from web.mpoli.fi (82.118.208.5): icmp_seq=1 ttl=55 time=22.9 ms


Kun virtuaalikone on päällä, pingaus sillan kautta pitäisi toimia:
Kun virtuaalikone on päällä, pingaus sillan kautta NAT1:een pitäisi toimia:


ariloulaleelay $ ping 192.168.1.14
ariloulaleelay $ ping 192.168.1.14
PING 192.168.1.14 (192.168.1.14) 56(84) bytes of data.
PING 192.168.1.14 (192.168.1.14) 56(84) bytes of data.
64 bytes from 192.168.1.14: icmp_seq=1 ttl=64 time=2.67 ms
64 bytes from 192.168.1.14: icmp_seq=1 ttl=64 time=2.67 ms


Samoin kuin ”sisäverkossa” olevien koneiden, joilla on eri route.
Samoin kuin NAT2-”sisäverkossa” olevien koneiden, joilla on eri route.


ariloulaleelay $ ping 192.168.0.101
ariloulaleelay $ ping 192.168.0.101
PING 192.168.0.101 (192.168.0.101) 56(84) bytes of data.
PING 192.168.0.101 (192.168.0.101) 56(84) bytes of data.
64 bytes from 192.168.0.101: icmp_seq=1 ttl=64 time=0.449 ms
64 bytes from 192.168.0.101: icmp_seq=1 ttl=64 time=0.449 ms




Dnsmasq ei ole päällä. Jos se olisi, sen konfiguraation olisi lisättävä
Dnsmasq ei ole päällä. Jos se olisi, sen konfiguraation olisi lisättävä
except-interfaces=br0
except-interfaces=br0


== Virtuaalikone A==
Gentoo 2008.0 x86 [[live-cd]], ei käynnistä X:ää ja on kevyt testaukseen. Live-cd sisältää ssh-palvelimen.


  $ virt-install --connect=qemu:///system \
    --name=gentoo \
    --nodisks \
    --cdrom=var/iso/install-x86-minimal-2008.0.iso \
    --ram=1024 \
    --network bridge:br0


br0:lla on nyt eth0:n MAC-osoite ja siltaan on yhdistetty myös vnet0.
Kun guest on käynnistynyt se hakee ip-osoitteen omaan virtuaaliliitäntäänsä eth0, mutta isännän vnet0 ei saa ipv4-osoitetta.


Guest A:
  $ brctl show
--------
  bridge name    bridge id              STP enabled    interfaces
Gentoo 2008.0 x86 livecd, ei käynnistä X:ää ja on kevyt testaukseen. Livecd sisältää ssh-palvelimen.
  br0            8000.0018f316aa7f      yes            eth0
                                                          vnet0
  virbr0          8000.000000000000      yes


Jotta guest voi kytkeytyä siltaan, tarvitaan 'tun'-moduli. Ladataan myös virtualisointimodulit.
Samassa verkossa eth0:n kanssa olevat koneet voivat nyt liikennöidä virtuaalikoneen kanssa NATin/palomuurin sääntöjen mukaan.


modprobe tun
modprobe kqemu
modprobe kvm


Sitten käynnistetään guest:
zapotec $ ifconfig wlan0
wlan0    Link encap:Ethernet  HWaddr 00:1f:3b:xx:xx:xx
          inet addr:192.168.1.11  Bcast:192.168.1.255  Mask:255.255.255.0


$ virt-install --connect=qemu:///system \
Virtuaalikoneen ip:n loppuosaksi arpoutui 14, ja kun ssh-palvelin on käynnissä, voi sinne ottaa toiseen NAT1:een kytketyltä laitteelta yhteyttä.
--name=gentoo \
--nodisks \
--cdrom=var/iso/install-x86-minimal-2008.0.iso \
--ram=1024 \
--network bridge:br0


br0:lla on nyt eth0:n MAC-osoite ja siltaan on yhdistetty myös vnet0.
zapotec $ ssh 192.168.1.14 -l root
Kun guest on käynnistynyt se hakee ip-osoitteen omaan virtuaaliliitäntäänsä eth0, mutta isännän vnet0 ei saa ipv4-osoitetta.
Password:  
Welcome to the Gentoo Linux Minimal Installation CD!
livecd ~ # ifconfig eth0
eth0     Link encap:Ethernet  HWaddr 54:52:00:00:5A:C2 
          inet addr:192.168.1.14  Bcast:192.168.1.255  Mask:255.255.255.0


$ brctl show
[[Luokka:Verkko]]
bridge name    bridge id              STP enabled    interfaces
[[Luokka:Ohjeet]]
br0            8000.0018f316aa7f      yes            eth0
vnet0
virbr0          8000.000000000000      yes
 
 
Samassa verkossa eth0:n kanssa olevat koneet voivat nyt liikennöidä virtuaalikoneen kanssa NATin/palomuurin sääntöjen mukaan.
Rekisteröitymätön käyttäjä

Navigointivalikko