Anpassen des Images

Angenommen das Image openwrt-x86-64bitxen-combined-ext4.img liegt in /etc/xen/images. Dann zeigt ein fdisk -ul darauf folgendes

 fdisk -u -l openwrt-x86-64bitxen-combined-ext4.img
last_lba(): I don't know how to handle files with mode 81a4
Sie müssen angeben Zylinder.
Sie können dies im Zusatzfunktionsmenü tun.

Platte openwrt-x86-64bitxen-combined-ext4.img: 0 MByte, 0 Byte
16 heads, 63 sectors/track, 0 cylinders, zusammen 0 Sektoren
Einheiten = Sektoren von 1 × 512 = 512 Bytes

                                 Gerät  boot.     Anfang        Ende     Blöcke   Id  System
openwrt-x86-64bitxen-combined-ext4.img1   *          63        9071        4504+  83  Linux
openwrt-x86-64bitxen-combined-ext4.img2            9135      521135      256000+  83  Linux

Mounten

Nun kann das image1 mittels:

losetup /dev/loop1 /etc/xen/images/openwrt-x86-64bitxen-combined-ext4.img -o $(echo 63*512|bc)
mkdir -p /tmp/loop1
mount /dev/loop1 /tmp/loop1

gemountet werden und ggf. nachbearbeitet werden. Gleiches gilt für image2

losetup /dev/loop2 /etc/xen/images/openwrt-x86-64bitxen-combined-ext4.img -o $(echo 9135*512|bc)
mkdir -p /tmp/loop2
mount /dev/loop2  /tmp/loop

So können vor dem ersten Boot, die Netzwerk-Einstellungen unter /tmp/loop2/etc/config/network angepasst werden und man spart sich eine u.U. ungewollte Überraschung.

Reverse Proxies

Reverse Proxies haben oft einen entscheidenden Nachteil. Es müssen auf den Servern auf die Anfragen verteilt werden sollen Anpassungen vorgenommen werden. Das betrifft beispielsweise das Logging. Damit der Webserver die richtige Adresse im Logfile vermerkt muss hier auf X-Forwardedfor umgestellt werden

Schwieriger und vor allem fehleranfälliger sind beliebte IP-Access Rules wie

Order Deny, Allow
Deny from All
Allow 

Da der Reverse Proxy meisst im internen Netzt steht sind plötzlich interne Ressources für alle Internet-Teilnehmer sichtbar.
Die Probleme würde eine transparenter Reverse Proxy lösen. Also ein Proxy bei dem die Clients die IP-Adresse des anfragenden Rechners sehen können.


Die Seagate Dockstar ist eine schönes Spielzeug für einen schmalen Taler Um den Reverse Proxy HAProxy transparent zu konfigurieren sind folgende Schritte notwendig

opkg install iptables-mod-tproxy iptables-mod-ipopt iptables-mod-conntrack-extra iptables-mod-nat-extra
opkg install haproxy

Bei dieser Konfiguration muss darauf geachtet werden, dass Server die gebalanced werden sollen die HAProxy Maschine als Gateway benutzen. Es muss als jedweder Verkehr über diesen fliessen.

Die Netz-Konfig dafür könnte wie folgt aussehen:

config 'interface' 'lan'
        option 'ifname' 'eth0'
        option 'proto' 'static'
        option 'type'   'none'
        option 'ipaddr' '192.168.1.1'
        option 'netmask' '255.255.255.0'
        
config 'interface' 'mgmt'
        option 'ifname' 'eth0.111'
        option 'proto' 'static'
        option 'type'   'bridge'
        option 'ipaddr' '192.168.0.254'
        option 'netmask' '255.255.255.0'
  1. Anfragende Clients befinden sich in lan
  2. Webserver befinden sich in VLAN 111
  3. Webserver haben als Default Gateway die 192.168.0.254 z.b. Webserver server01 192.168.0.82 Port 80

Folgende FW-Regeln sind notwendig:

#/etc/firewall.user
iptables -t mangle -N DIVERT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
  • TCP Verbindungen werden in DIVERT geworfen
  • alles was in DIVERT landet wird mit einer 1 markiert
  • Erlaube Verkehr in DIVERT landet

Eingehende Verbindung werden also markiert, dannach an den Reverse Proxy zugestellt und dieser stellt die Anfrage transparent and dien Webserver. Jetzt muss nur noch der Rückweg gesichert werden. Dazu wäre es gut, wenn der Verkehr der mit 1 markiert wurde, wenn er vom Webserver zurückkommt als lokal behandelt werden würde, damit sich der Reverse Proxy dafür zuständig fühlt. Das lässt sich mit:

#/etc/rc.local
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100

erledigen

Zuguterletzt braucht die Konfiguration des HAProxy eine Anpassung. So muss in dem oder den Backend die Option

source 0.0.0.0 usesrc clientip

gesetzt werden.

Der Vollständigkeit halber kommt nun die vollständige Konfiguration:

global
        uid 0
        gid 0
        daemon
 
defaults        
       mode    http
       retries 5
       maxconn         120000
       contimeout      130000
       clitimeout      130000
       srvtimeout      130000
       option  redispatch
       
listen app1
       bind :8080
       mode http
       #transparent do not use transparent until your 100 percent sure
       maxconn 200
       stats enable
       stats uri /
    
frontend  http-port-80
       bind :80
       mode http
       maxconn 5000
       option dontlognull
       default_backend www

backend www
        mode http
        balance roundrobin
        source 0.0.0.0 usesrc clientip
        server server01 192.168.0.82:80 maxconn 200 check

HAProxy kann auch transparent im TCP Modus betrieben werden. Damit lässt sich nicht nur http, sondern auch

  • HTTPS
  • SMTP, IMAP, IMAPS, POP, RDP
  • u.v.a.
  • balancen

Unter http://nd-build-01.linux-appliance.net/fun/3.4.30-r1/x86-64bitxen/ findet Ihr den funktionsfähigen Xen Build vom 04.09.2012. Sollte jemand damit Probleme haben, kann er diese gerne bei mir reporten.

OpenWrt unter Xen, kann Dank seines sehr geringen Speicherverbrauchs, für Spezialaufgaben, wie dedizierte VPNs, Proxies und auch Tunnel eingesetzt werden.

Für eine solche VM (virtuelle Maschine) sind 64MB RAM und 250MB Festplatte vollkommen ausreichend. Damit können Ressourcen optimal verwendet werden

Installation

Zunächst ist eine Konfigurationsdatei unter /etc/xen anzulegen

#/etc/xen/test01.cfg
bootloader="/usr/bin/pygrub"
name = "ha-test"
memory = "256"
disk = ['file:/etc/xen/images/openwrt-x86-64bitxen-combined-ext4.img,xvda,w']
vif = [ 'ip=1.2.3.4,mac=41:22:12:11:34:5B', 'bridge=xenbri,script=vif-bridge,vifname=ha-test,ip=10.30.1.1,mac=00:16:3E:1E:01:01' ]
vcpus=2
on_reboot = 'restart'
on_crash = 'destroy'

Nun das image herunterladen und entpacken:

cd /etc/xen/images
wget http://nd-build-01.linux-appliance.net/fun/3.4.30-r1/x86-64bitxen/openwrt-x86-64bitxen-combined-ext4.img.gz -O openwrt-x86-64bitxen-combined-ext4.img.gz 
gunzip openwrt-x86-64bitxen-combined-ext4.img.gz

Ein anschliessenden xm create -c sollte Gewissheit bringen. In der Datei

/etc/opkg.conf
# sollten folgende Einträge stehen
#src/gz snapshots http://downloads.openwrt.org/snapshots/trunk/x86/packages
src/gz linuxapp http://nd-build-01.linux-appliance.net/fun/3.4.30-r1/x86-64bitxen/packages
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay

Da es sicher um einen 64Bit handelt können keine Pakete auf dem OpenWrt Repository benutzt werden, da diese nicht 64Bit sind.

Blog - Beiträge