2008-10-20

Server in VMware

Auf meiner Linux-Maschine läuft Debian Etch und Windows ist in einen virtuellen PC via VMware-Player verbannt. Aus mehreren Gründen läuft die virtuelle Netzwerkkarte im NAT-Modus:
Der virtuelle Rechner braucht keine eigene IP aus dem lokalen Netz, da er ja nach aussen die IP des Wirtes benutzt. Somit ist der "Rechner" auch nicht von aussen zu erreichen.
Das war bisher auch so gewollt. Nun will man aber manchmal eben doch einige Dienste von aussen ansprechen können (z.B. um per VNC Hilfe zu bekommen oder den lokalen Apache mit einer Entwicklerversion eines Webservice ansprechbar zu machen)
Dazu muß man entsprechende Einträge in der /etc/vmware/vmnet8/nat/nat.conf vornehmen.
1. VMware-Player beenden
2. Unter [incomingtcp] die Portweiterleitungen eintragen
[incomingtcp]
# Use these with care - anyone can enter into your VM through these...
PPP = xx.xx.xx.xx:PPP
xx.xx.xx.xx ist die private IP-Adresse der virtuellen Maschine
PPP ist der weiterzuleitende Port (z.B. 5900 für VNC oder 8080 für den erwähnten Apache-Dienst)
3. den VMware-Service (und damit die virtuellen Interfaces) beenden
/etc/init.d/vmware stop
/etc/init.d/vmware start

4. VMware-Player starten und die Ports werden vom Wirt zum Host weitergereicht

In meinem Fall ist der Dienst dann natürlich noch nicht aus dem Internet/Intranet erreichbar. Dazu muß auf dem vorgeschalteten Router ebenfalls eine Weiterleitung eingerichtet sein, wobei hier natürlich die IP des Wirts zu verwenden ist.
Beispiel:
[Internet]-->[Router]--NAT-->[Wirt]--NAT-->[VMware]
0.0.0.0:8080-->10.0.0.10:8080-->192.168.0.10:8080
PS: Das Gateway des vmnet-Interface hat die *.*.*.2 und nicht wie üblich *.*.*.1 - aber das sei nur am Rande bemerkt

2008-10-02

VPN-Tunnel mittels VPNC und DD-WRT

Auf der folgenden Seite aus dem offiziellen Wiki zur Open-Source-Firmware DD-WRT wird beschrieben, wie man auf einem mit DD-WRT v24 (oder höher) gepatchten Router einen VPN-Tunnel einrichten kann: http://www.dd-wrt.com/wiki/index.php/VPNC.
Der Clou: Mittels Ping auf zwei unterschiedliche Rechner innerhalb des VPNs wird festgestellt, ob die Verbindung noch aktiv ist und im Fehlerfall wird der Tunnel wieder hergestellt.
Da es ausserdem sinnvoll ist, nicht alles durch den Tunnel zu schicken, sondern nur bestimmte Netze, kann man genau das konfigurieren. Mal abgesehen davon: Die Bandbreite, die durch den Tunnel geht ist auf 200kb/s beschränkt.
Es hat etwas gedauert das zum Laufen zu bringen, weil die Anleitung nur die Bruchstücke hergibt. Darum nun das komplette Skript.
Die fett gedruckten Teile sind natürlich anzupassen und die kursiv gedruckten kann man anpassen, z.B. wenn die Verbindung sehr oft wegbricht, das Gateway ein anderes ist, ...
Das ganze als Startup-Skript über den Administration/Diagnose-Reiter der Web-Oberfläche des Routers einspielen und den Router neu starten.
mkdir /tmp/etc/vpnc
rm -f /tmp/etc/vpnc/vpnc-script
echo '
#!/bin/sh
# This is a wrapper for the vpnc-script overriding some variables needed
# for setting up split-tunneling
# this effectively disables changes to /etc/resolv.conf
INTERNAL_IP4_DNS=

# This sets up split networking regardless of the concentrators specifications.
# You can add as many routes as you want, but you must set the counter
# CISCO_SPLIT_INC accordingly. All requests to IP ranges NOT listed
# in the code below will NOT go though the VPN tunnel.

CISCO_SPLIT_INC=2
CISCO_SPLIT_INC_0_ADDR=192.0.0.0 #IP range to go into first tunnel
CISCO_SPLIT_INC_0_MASK=255.0.0.0 #Subnet Mask for first tunnel
CISCO_SPLIT_INC_0_MASKLEN=8 #Mask length
CISCO_SPLIT_INC_0_PROTOCOL=0
CISCO_SPLIT_INC_0_SPORT=0
CISCO_SPLIT_INC_0_DPORT=0
CISCO_SPLIT_INC_1_ADDR=172.0.0.0 #IP range to go into 2nd tunnel
CISCO_SPLIT_INC_1_MASK=255.0.0.0 #Subnet Mask for 2nd tunnel
CISCO_SPLIT_INC_1_MASKLEN=8 #Mask length
CISCO_SPLIT_INC_1_PROTOCOL=0
CISCO_SPLIT_INC_1_SPORT=0
CISCO_SPLIT_INC_1_DPORT=0

# run the original script
. /etc/vpnc/vpnc-script
' >> /tmp/etc/vpnc/vpnc-script
chmod 700 /tmp/etc/vpnc/vpnc-script
rm -f /tmp/etc/vpnc/vpnc.sh
echo '
#!/bin/sh
vpn_concentrator="xxx.xxx.xxx.xxx" ##enter ip or hostname of your Ipsec vpn concentrator
vpn_keepalive_host1="192.168.0.1" ##enter the ip or hostname of a computer that is only reachable if vpn connection is established.
vpn_keepalive_host2="192.168.1.1" ##enter the ip or hostname of a computer that is only reachable if vpn connection is established.
vpn_groupname="xxx" ##enter the group name here
vpn_grouppasswd="xxx" ##enter the group password here
vpn_username="xxx" ##enter your username here
vpn_password="xxx" ##enter your password here

#--do not edit this--
#Written by Alain R. (alainr [AT] gmx.de) 28.Sep.2007
vpnc-disconnect
rm -f /tmp/etc/vpnc/vpn.conf
echo "
IPSec gateway $vpn_concentrator
IPSec ID $vpn_groupname
IPSec secret $vpn_grouppasswd
Xauth username $vpn_username
Xauth password $vpn_password
Script /tmp/etc/vpnc/vpnc-script
" >> /tmp/etc/vpnc/vpn.conf

pingtest1 () {
ping -q -c1 $param1 >> /dev/null
if [ "$?" == "0" ]; then
echo 0 #reachable
else
echo 1 #not reachable
fi
}

pingtest2 () {
ping -q -c2 $param2 >> /dev/null
if [ "$?" == "0" ]; then
echo 0 #reachable
else
echo 1 #not reachable
fi
}

while [ true ]; do
param1=$vpn_concentrator;
if [ "`pingtest1`" == "0" ]; then #Vpn concentrator reachable
doloop=1;
while [ $doloop -gt 0 ]; do
param1=$vpn_keepalive_host1;
if [ "`pingtest1`" == "0" ]; then
sleep 300
else
param2=$vpn_keepalive_host2;
if [ "`pingtest2`" == "0" ]; then
sleep 300
else
doloop=0;
vpnc-disconnect
vpnc /tmp/etc/vpnc/vpn.conf --dpd-idle 0
sleep 1
if [ "`pingtest1`" != "0" ]; then
sleep 10
fi
tundev="`ifconfig |grep tun |cut -b 1-4`"
iptables -A FORWARD -o $tundev -j ACCEPT
iptables -A FORWARD -i $tundev -j ACCEPT
iptables -t nat -A POSTROUTING -o $tundev -j MASQUERADE
sleep 9
fi
fi
done
else
sleep 10;
fi
done

return 0;
' >> /tmp/etc/vpnc/vpnc.sh
chmod 700 /tmp/etc/vpnc/vpnc.sh
/tmp/etc/vpnc/vpnc.sh&

Spekulationen um DoS-Schwachstelle im TCP-Protokoll

Ein möglicher Design-Fehler im TCP-Protokoll soll sich ausnutzen lassen, um beliebige Server im Internet unerreichbar zu machen.
Das ist beunruhigend, basiert doch meine globalisierte kleine Welt genau darauf, daß mittels dieses Protokolls alles was ich brauche vernetzbar ist (oder zumindest die Lieferanten dieser Dinge ein Netzwerk betreiben können, um mich damit zu versorgen).
Passend zu diesem Thema ist das untige Video. Daumen hoch!

PS: Gefunden in den Kommentaren zum gleichnamigen Artikel bei heise.de

Nachtrag: Hier der Link zum Song-Text (man beachte, daß er sich in der RIPE-Datenbank befindet)

2008-07-30

VMware Player: Failed to allocate page for guest RAM!

Nach erfolgreichem Mounten der externen Festplatte, wollte nun der vmplayer die VM nicht starten. Unter Windows und nach dem Kopieren auf eine lokale Platte hingegen schon. Sollte doch noch eine Option beim ntfsmount fehlen?
Nein, jedes Programm will ein bißchen anders gestreichelt werden.
Hier die Fehlermeldung:
VMware Player unrecoverable error: (vcpu-0)
Failed to allocate page for guest RAM!
A log file is available in "/media/ExternePlatte/VM/vmware.log". Please request support and include the contents of the log file.
To collect data to submit to VMware support, run "vm-support".
We will respond on the basis of your support entitlement.

Lösung: In der xxx.vmx-Datei die Option
mainMem.UseNamedFile="FALSE"
eintragen und der vmplayer kann die Speicher-Datei anlegen und die VM startet.

ntfsmount

Eine externe Festplatte mit einem VMware-Image einer Testumgebung ist eine feine Sache. Allein das kopieren der ca 30GB über das Netzwerk wäre sonst schon ziemlich unschön.
Nach dem Auspacken und Anschliessen der heiß ersehnten Fracht, wurde die Platte auch sofort von Debian (Etch) erkannt und ein lesender Zugriff war ohne Probleme möglich.
Aber wie kann man nun auch schreiben? Sonst stünde ja doch eine Kopie an?

Hilfe naht mit dem Tool ntfsmount im Paket ntfsprogs. Dieses via Synaptic Paketmanager oder
apt-get install ntfsprogs
installieren.
Das Tool benötigt noch FUSE, welches aber normalerweise zum Funktionsumfang ab Kernel 2.6.14 gehört (beim aktuellen Patch-Level von Debian Etch ist das der Fall).
Ob das Modul vorhanden ist kann man mit
modprobe -l fuse
feststellen.
Temporär kann man das Kernelmodul mit
modprobe fuse
starten. Permanent macht man das mit dem Eintrag
fuse
als separate Zeile in /etc/modules.
Nun kann man sich an das mounten der Festplatte machen (gilt für interne genauso).
Als erstes mal einen Mount-Punkt anlegen:
mkdir /media/ExternePlatte
Dann manuell mounten:
ntfsmount /dev/sdb1 /media/ExternePlatte

sdb1 ggf. durch den eigenen Plattennamen ersetzen.
Hinweis: Wenn die Platte autmatisch erkannt wurde, kann man mit
mount
alle Platten auflisten und erhält so auch den Device-Namen - hier eben /dev/sdb1
Mit
umount /dev/sdb1
sollte man dann vor erneutem mounten die Platte erstmal wieder trennen


Die Platte ist jetzt verfügbar aber noch nicht wirklich beschreibbar.
Warum?
Obige Schritte sind nur als root durchführbar und man ist ja sinnvollerweise eben nicht als root angemeldet. Die folgenden Optionen dienen der Abhilfe unter der Annahme, daß sich genau ein Benutzer am System angemeldet hat (ansonsten sollte man mit uid,guid und umask feintunen - siehe
man ntsmount
)
Der gesamte Befehl nochmal:
ntfsmount /dev/sdb1 /media/ExternePlatte -o umask=0,allow_others
Um das ganze nicht jedesmal wieder eintippen zu müssen, kann der Eintrag in der /etc/fstab hinterlegt werden (separate Zeile, Spalten getrennt durch [Tab])
/dev/sdb1 /media/ExternePlatte ntfs-fuse umask=0,allow_others 0 0
Hinweis: In der Original-Dokumentation steht fuse.ntfs - das funktioniert nicht
Hier gibt es mehr Informationen (auch für andere Linux-Distributionen): http://www.linux-ntfs.org/doku.php?id=ntfsmount

2008-05-12

Neulich in der U-Bahn


The dynamic link library MSWSOCK.DLL could not be found in the specified path C:\WINNT\system32 ...
Aha und ich dachte auf den Werbemonitoren in der Berliner U-Bahn läuft noch Windows 95 ;) Wie auch immer. Diese Absturzmeldung gab es nicht das erste mal und spricht nicht gerade für das System und deren Käufer. Aber vielleicht hat die BVG ja garnicht so viel Geld für unnötige Windows-NT-Lizenzen ausgegeben, weshalb das nicht registrierte Windows nun den Dienst einstellt.
Für so eine simple Kiosk-Anwendung braucht man im einfachsten Fall ein absolut abgespecktes Linux und von mir aus Java oder Flash oder sonstwas hypertoll Animierfähiges in einem Vollbild-Browser.
Das zur Wartung nötige WLAN (mit Verschlüsselung) wäre auch damit machbar.
Das man hiermit nur die Kosten der Lizenzen und nicht die der Administration spart, ist auch klar. Denn auch hier kann man dann nicht den Müller aus der Buchhaltung ran lassen, der das irgendwie in seiner Freizeit auch mal gemacht hat und weiß wie man Ubuntu installiert (nämlich mit CD einlegen und Knopf drücken).
"Ist doch nur ein Werbefenster, warum regst Du Dich so auf?"
Weil es indirekt mein Geld ist, da alle Kosten auf den Fahrgast umgelegt werden.
Weil es ein potentielles Sicherheitsthema ist. Möchte mal wissen, was passiert, wenn (vermeindlich) die BVG über diese Bildschirme mitteilt, daß der erste Wagen brenne (und der Fahrer deshalb keine Durchsage mehr machen könnne) und die Leute bitte Ruhe bewahren sollen.
Ich wünsche mir ein Schulfach: Medienaufklärung und Sicherheitsethik.

2008-05-08

shutdown.exe

Für folgende Szenarien habe ich drei kleine Batch-Dateien, die mir das Beenden von Windows erleichtern:
  • Benutzung eines Rechners mit mehreren Benutzern und gerade wenn man runterfährt, will der andere auch nochmal schnell ran
  • Ruhezustand mit nur zwei Mausklicks ohne wissen zu müssen, daß man bei der Auswahl von Standby die [Shift]-Taste drücken muß
  • Ausschalten mit zwei Mausklicks ohne lästige Fragen
Shutdown.exe oder wie mir meine Firewall nach der Installation vom XP Service Pack 3 meldete: Windows Remoteherunterfahrprogramm - also wenn, dann doch Fernherunterfahranwendung von den Machern von Gegenklebenbleibbeschichtung.

Zurück zum Thema:
Man lege sich für jede der folgenden Punkte eine Batch-Datei an, erstelle eine Verknüpfung, gehe dort auf Eigenschaften und verwende ein sprechendes Symbol. Schließlich zieht man diese Verknüpfung noch per Drag'n'Drop ins Startmenü.
  • Herunterfahren
    shutdown -t 10 -c "Computer wird ausgeschaltet" -f -s
    -t 10 --> zehn Sekunden runterzählen
    -c "x" --> Kommentar
    -f --> Nicht fragen, sofort beenden!
    -s --> Aus
  • Abbruch
    Nur während des Runterzählens möglich!
    shutdown -a
  • Ruhezustand
    @echo off
    call %windir%\System32\rundll32.exe powrprof.dll,SetSuspendState
Das Startmenü sieht dann in etwa so aus:

Wer genau hingesehen hat, der bemerkt, daß ich die Zeit auf 1 Sekunde verkürzt habe, was eine Reaktion (im Gegensatz zu den völlig ausreichenden 10 Sekunden) und damit das Abbrechen unmöglich macht. Der Screenshot stammt allerdings auch von meinem Laptop, den ich momentan allein Nutze. Und schließlich muß ich nur die Batch-Datei anpassen, wenn sich das mal ändert.

Nachtrag: Der Aufruf inkl. Pfad lautet %windir%\system32\shutdown.exe also bei Standardinstallationen z.B. C:\WINDOWS\System32\shutdown.exe

2008-04-25

Debian meldet: Festplatte voll

Genauer meldete sich der VM-Player, daß es riskant sei ihn weiter zu verwenden, da die Daten auf einem doch sehr vollen Datenträger residieren. Zugegeben: "Es" bemächtigte sich mehr Anglizismen. Ein Blick auf den Systemmonitor zeigte denn auch das das Wurzelverzeichnis zu 99% voll sei. Wie konnte das sein?
Vermutung 1: /tmp ... sah aber nicht nach viel aus
Vermutung 2: /var/log ... auch nicht viel

Völlig unvermutet löste dann ein
apt-get clean
das Problem und reichlich 2,4 Gb waren plötzlich wieder frei.

2008-03-01

Sony Ericsson - PC Synchronisation

Ich kann mir nichts merken, so rein garnichts. Termine behalte ich keine 30 Sekunden. Aber wozu gibt es denn Maschinen!? Eine davon schleppe ich den ganzen Tag mit mir rum, mein Handy (Sony Ericsson K800i). Was liegt also näher, als dieses Instrument auch einzusetzen.
Der Haken: Mit einem Nummernblock mag ich nicht wirklich lange Texte tippen und Outlook verwende ich auch nicht - somit scheidet die mitgelieferte Software aus.

Diese freie Software löst das Problem auf sehr professionelle Weise: MyPhoneExplorer
Via Bluetooth läßt sich so ziemlich alles an Daten auf dem Handy synchronisieren und in einer übersichtlich gestalteten Oberfläche bearbeiten.
Ich hab meine Termine jetzt wieder im Griff.
Witzig ist auch das Feature "Uhr mit dem Internet abgleichen" - die Atomzeit für unterwegs :)

Nachtrag: Größere Displays für Handys wird es bald geben - siehe der Readius von Polymervision.
Jetzt noch eine Touch-Oberfläche (ggf. separat vom aufrollbaren Display) - am liebsten mit Handschriftenerkennung - und ein vernünftiger Preis, dann könnte man das glatt zu hause als Kalender an die Wand hängen. Dank Bistabilem Display bräuchte das so auch keinen Strom (ausser bei manueller Aktualisierung).
Ach wo ich grad dabei bin ein Produkt zu definieren: Termine (und anderes) über einen Push-Dienst aktualisierbar machen ... Wir schreiben den 1.3.2008 - mal sehen wie lange ich darauf warten muß

2008-02-26

Minesweeper - Der Film

Endlich, der Film zum Spiel ...

2008-01-31

... my organisation turned into a hairball ...

Große Firmen, die innovativ sein wollen und an ihren internen Strukturen scheitern. Tja davon können wohl einige ein Lied singen. Der Typ in untigem Video tut das buchstäblich:


Am besten mit Ton, aber die Untertitel (und kurze Einblendungen) helfen beim Verstehen.
Wie krieg ich dieses Video jetzt in die Führungsetage geschmuggelt ;)
PS: Der Originaltitel ist "back to orbit"

2008-01-28

beryl startet nicht nach update des X-Servers

Problem: /usr/lib/xorg/modules/extensions/libglx.so wird ersetzt
Der nvidia-Treiber erwartet hier aber einen symbolischen Link auf seine Spezial-Version (bei mir libglx.so.1.0.9755)
Also ersetze man die vom Update erzeugte Datei durch einen Link
mv libglx.so libglx.so.original
ln -s libglx.so.1.0.9755 libglx.so
Im Zweifel muß der nvidia-Treiber nochmal neu (drüber) installiert werden (siehe dazu hier)