Es ist relativ sinnlos fli4l alleine in einer VM laufen zu lassen.
Zur Sicherheit sollten die zusätzlichen VM, die vom Internet zugänglich sind, in einer DMZ laufen.
Ich habe mich für eine zweite Netzwerkkarte entschieden um eventuell externe Server auch anschliessen zu können.
Die DMZ wird in "grüne" und "orange" Netze unterschieden. "rot" ist das ppp0-Interface von fli4l.
In der folgenden Konfiguration wird der IP-Bereich für "grün" 192.168.10.xx und für "orange" 192.168.11.xx sein
Die Adressbereiche sind natürlich frei wählbar.
Die Karte wird in der "dom0" eingebunden. Da die VM's nur über eine intere Bridge kommunizieren können, muss
eine angelegt werden.
Dazu ist es nötig die Datei "/etc/xen/scripts/network" zu bearbeiten:
Zuerst der Name des Device und der Bridge. Wegen der besseren Unterscheidung habe ich hier "xenintbr" gewählt.
Ich habe die Zeilennummern für die Orientierung mitkopiert
51
52 bridge=${bridge:-xen-br0}
53 netdev=${netdev:-eth0}
54 antispoof=${antispoof:-yes}
55
56 #-------------------------
57 # Zweite Netzwerkkarte und Bridge
58 bridge1=xenintbr
59 netdev1=eth1
60 #-------------------------
Nun muss Xen die neue Karte noch einbinden:
226 case ${OP} in
227 start)
228 op_start
229
230 bridge=${bridge1}
231 netdev=${netdev1}
232 op_start
233 ;;
234
235 stop)
236 op_stop
237
238 bridge=${bridge1}
239 netdev=${netdev1}
240 op_stop
241 ;;
243 status)
Nach einen Neustart überprüfen ob die Bridge korrekt eingebunden ist:
xen-dom0:~# brctl show bridge name bridge id STP enabled interfaces xen-br0 8000.0001029b1cd7 no eth0 xenintbr 8000.0001020d0403 no eth1 xen-dom0:~#
Nun muss die Datei "/etc/xen/fli4l" angepasst werden:
#----------------------------------------------------------------------------
# Define network interface
Number of network interfaces. Default is 1.
nics=2
#----------------------------------------------------------------------------
# Optionally define mac and/or bridge for the network interfaces.
# Random MACs are assigned if not given.
vif = [ 'mac=aa:00:00:00:10:11, bridge=xen-br0, vifname=fli4l_green',
'mac=aa:00:00:00:11:11, bridge=xenintbr, vifname=fli4l_orange' ]
pci = [ '00,0c,0' ]
#----------------------------------------------------------------------------
Der Eintrag "mac=" ist hilfreich um in fli4l die richtige Zuordnung zu erkennen.
Der Eintrag "vifname=" ist der Name mit der die Bridge angezeigt wird
Nun die Datei "base.txt" editieren:
# Ether networks used with IP protocol:
#------------------------------------------------------------------------------
IP_NET_N='2'
IP_NET_1_DEV='eth0' # number of IP ethernet networks, usually 1
IP_NET_1='192.168.10.11/24' # IP address of your n'th ethernet card and
IP_NET_1_TYPE='green' # netmask in CIDR (no. of set bits)
# required: device name like ethX
IP_NET_2_DEV='eth1'
IP_NET_2='192.168.11.11/24'
IP_NET_2_TYPE='orange'
Als nächstes die DMZ einrichten:
#------------------------------------------------------------------------------ # Simple DMZ setup for dial-up based routers -- see documentation #------------------------------------------------------------------------------ OPT_DMZ='yes' DMZ_NAT='yes' DMZ_LOG='yes' DMZ_RED_DEV='ppp0' DMZ_ORANGE_RED_N='0' DMZ_ORANGE_ROUTER_N='1' DMZ_ORANGE_ROUTER_1='53 ACCEPT' #------------------------------------------------------------------------------
Wen ein Webserver betrieben werden soll muss noch dafür gesorgt werden, das Anfragen an den Port 80 weitergeleitet werden:
# Optional package: PORTFW #------------------------------------------------------------------------------ PORTFW_N='1' # how many portforwardings to set up PORTFW_1_TARGET='80' # example 1: forward ext. port 8080 PORTFW_1_NEW_TARGET='192.168.11.12:80' # ...to int. host 192.168.6.15 port 80 PORTFW_1_PROTOCOL='tcp' # ...using tcp #--------------------------------------------------
Da sich die devices verschoben haben, muss in der "dsl.txt" der Eintrag geändert werden:
PPPOE_ETH='eth2'
Nachdem die Dateien übertragen und fli4l gestartet wurde, überprüfen ob die Zuordnung korrekt ist:
fli4l-router 3.0.0 # ifconfig
eth0 Link encap:Ethernet HWaddr AA:00:00:00:10:11
inet addr:192.168.10.11 Bcast:192.168.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:12540 errors:0 dropped:0 overruns:0 frame:0
TX packets:11987 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 TX bytes:0
eth1 Link encap:Ethernet HWaddr AA:00:00:00:11:11
inet addr:192.168.11.11 Bcast:192.168.11.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5254131 errors:0 dropped:0 overruns:0 frame:0
TX packets:3864555 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 TX bytes:0
................
Hier kann man anhand der MAC-Adresse leicht erkennen ob alles geklappt hat.
wenn nicht, die Devices in der "base.txt" tauschen.
In der Xen-Domain0 auch noch überprüfen, ob die Bridges richtig zugeordnet sind:
xen-dom0:~# brctl show
bridge name bridge id STP enabled interfaces
xen-br0 8000.0001029b1cd7 no eth0
fli4l_green
xenintbr 8000.0001020d0403 no eth1
fli4l_orange
xen-dom0:~#
Zum Anfang
Wie in der Anleitung von http://www.pug.org
beschrieben mit "debootstrap" ein Image erzeugen.
Diese als Vorlage speichern.
Von dieser Vorlage mit cp eine Kopie anfertigen:
xen-dom0:~# cp /vm_images/vorlagen/basis.img /vm_images/webserver.img xen-dom0:~#
Für weitere VM's diesen Vorgang einfach wiederholen
Nicht vergessen das Image für die swap-Partition.
Da die DMZ keine Zugriffe auf das Internet zulässt, muss diese VM zuerst im "grünen" Netz gestartet werden.
Dazu eine Kopie der Datei "/etc/xen/xmexample1" anfertigen:
xen-dom0:~# cp /etc/xen/xmexample1 /etc/xen/webserver xen-dom0:~#
Diese Datei nun anpassen:
Zuerst Speicher und Name
# Initial memory allocation (in megabytes) for the new domain. memory = 70 # A name for your domain. All domains must have different names. name = "webserver"
Wieviel Speicher einer Domain man noch zuordnen kann erfährt mit den Befehl
xen-dom0:~# xm info
Als nächstes das Netzwerk zuordnen:
#---------------------------------------------------------------------------- # Define network interfaces. # Number of network interfaces. Default is 1. nics=1 # Optionally define mac and/or bridge for the network interfaces. # Random MACs are assigned if not given. vif = [ 'mac=aa:00:00:00:10:12, bridge=xen-br0, vifname=webserv_green' ] dhcp="off" ip="192.168.10.12" netmask="255.255.255.0" gateway="192.168.10.11" hostname="webserver"
Noch die Zuordnung der Laufwerke:
#---------------------------------------------------------------------------- # Define the disk devices you want the domain to have access to, and # what you want them accessible as. # Each disk entry is of the form phy:UNAME,DEV,MODE # where UNAME is the device, DEV is the device name the domain will see, # and MODE is r for read-only, w for read-write. disk = [ 'file:/vm_images/webserver.img,sda1,w','file:/vm_images/swap1.img,sda2,w', ]
Zum Schluss noch root und Runlevel eintragen:
# Set root device. root = "/dev/sda1" # Sets runlevel extra = "2"
Zugriff auf die Imagedatei erhält man indem man es als loop-Device mountet
xen-dom0:~# mount -o loop /vm_images/webserver.img /mnt
Im Verzeichnis "/mnt" kann nun auf das Image zugegriffen werden und z.B. die Datei
"fstab" editiert werden. Darauf achten, immer von "/mnt" ausgehen!
Für unerfahrene Anwender empfiehlt es sich mit chroot zu arbeiten.
xen-dom0:~# chroot /mnt
Nach Abschluss der Arbeiten die chroot-umgebung mit "exit" verlassen und
die Imagedatei unmounten
xen-dom0:~# umount /mnt
Die Datei "/etc/fstab" in der VM muss dementsprechend angepasst werden:
/dev/sda1 / ext3 defaults 1 2 /dev/sda2 none swap sw 0 0
Nach dem starten und konfigurieren bzw installieren von Apache die VM in die DMZ verschieben.
Dazu in "/etc/xen/webserver" die Netzwerkeinträge ändern:
Vorher natürlich die VM stoppen.
# Optionally define mac and/or bridge for the network interfaces. # Random MACs are assigned if not given. vif = [ 'mac=aa:00:00:00:11:12, bridge=xenintbr, vifname=webservint' ] dhcp="off" ip="192.168.11.12" netmask="255.255.255.0" gateway="192.168.11.11" hostname="webserver"
Nun wieder starten und überprüfen ob sie in der DMZ ist:
xen-dom0:~# brctl show
bridge name bridge id STP enabled interfaces
xen-br0 8000.0001029b1cd7 no eth0
fli4l_green
xenintbr 8000.0001020d0403 no eth1
fli4l_orange
webservint
xen-dom0:~#