FreeBSD, VNC, Jail · 4 min read · Jan 24, 2026
Erstellen eines Jails mit VNC-Server auf FreeBSD
Erstellen eines Jails mit VNC-Server auf FreeBSD
Dieser Artikel erklärt, wie Sie einen VNC-Server innerhalb eines Jails auf FreeBSD ausführen können.
Erstellen eines Jails aus dem Quellcode:
Erstellen Sie ein Verzeichnis, in dem unsere Jails gespeichert werden:
# mkdir -p /home/jailsOder im /usr-Verzeichnis:
# mkdir -p /usr/jails# mkdir /home/jails/testjailGehen Sie zum Verzeichnis /usr/src und überprüfen Sie, ob Sie den FreeBSD-Quellcode haben.
# cd /usr/src# lsSie sollten etwas sehen wie:
COPYRIGHT contrib release
LOCKS crypto rescue
MAINTAINERS etc sbin
Makefile games secure
Makefile.inc1 gnu share
ObsoleteFiles.inc include sys
README kerberos5 tools
UPDATING lib usr.bin
bin libexec usr.sbin
Wenn Sie ein leeres Verzeichnis oder nur ein sys-Verzeichnis haben, müssen Sie den FreeBSD-Quellcode installieren:
Sie können dies tun, indem Sie sysinstall ausführen oder den Quellcode von cvs herunterladen.
# sysinstallGehen Sie zu Konfiguration, dann zu Distributionen und wählen Sie “src” und drücken Sie OK. Danach sollten Sie den gesamten Quellcode im Verzeichnis /usr/src/ haben. Dann sollten Sie Ihren Quellcode mit der neuesten Version von cvs aktualisieren. Sie müssen eine Datei “stable-supfile” in Ihrem Home-Verzeichnis oder an einem anderen Ort erstellen.
# vi ~/stable-supfileUnd fügen Sie einige Zeilen wie diese ein:
# Ihr nächster Mirror des FreeBSD-Quellcodes, für mich ist es aus Polen
*default host=cvsup.pl.FreeBSD.org
*default base=/usr
*default prefix=/usr
# für Version 7.2 von FreeBSD geben Sie RELENG_7_2 7.1 - RELENG_7_1 7.0 - RELENG_7_0 6.4 RELENG_6_4 ein
*default release=cvs tag=RELENG_7_2
*default delete use-rel-suffix
*default compress
src-all
Nachdem Sie die Datei gespeichert haben, können Sie Ihren FreeBSD-Quellcode mit csup aktualisieren:
# csup /root/stable-supfileDanach können Sie Ihr Jail aus dem Quellcode kompilieren:
# cd /usr/src# make world DESTDIR=/home/jails/testjail# make distribution DESTDIR=/home/jails/testjailWenn Sie einmal die Welt kompiliert haben, können Sie neue Jails mit zwei Befehlen erstellen, ohne die Welt erneut zu kompilieren:
# make installworld DESTDIR=/home/jails/otherjail# make distribution DESTDIR=/home/jails/otherjailWenn Ihr Jail vorbereitet ist, müssen Sie einige Änderungen in einigen Konfigurationsdateien vornehmen.
# vi /home/jails/testjail/etc/rc.confUnd Sie fügen dort ein:
sendmail_enable="NONE"
sshd_enable="YES"
# cp /etc/resolv.conf /home/jails/testjail/etc/# touch /home/jails/testjail/etc/fstabJail zum ersten Mal ausführen:
Um das Jail auszuführen, müssen Sie devfs ins Jail einhängen:
# mount -t devfs devfs /home/jails/testjail/devDann müssen Sie ein Alias für Ihre Netzwerkschnittstelle konfigurieren. In meinem FreeBSD habe ich die bge0-Schnittstelle und das Alias erstelle ich so:
# ifconfig bge0 alias 192.168.2.2Jail ausführen:
# jail /home/jails/testjail shell 192.168.2.2 /bin/tcshWenn Sie im Jail sind, können Sie ein Root-Passwort festlegen:
# passwdDann müssen Sie ein nicht-root-Konto hinzufügen, das Ihnen den Zugriff auf das Jail über ssh ermöglicht.
# adduserUm das Jail zu verlassen, müssen Sie den Befehl exit verwenden.
# exitIhr Jail ist fast bereit. Sie müssen einige Zeilen zur Datei /etc/rc.conf hinzufügen, und danach wird Ihr Jail gestartet, wenn Ihr Server startet.
# Alias zu Ihrer Netzwerkschnittstelle
ifconfig_bge0_alias0="192.168.2.2"
# Zeile, die Jails in FreeBSD aktiviert
jail_enable="yes"
# Liste Ihrer Jails z.B. "testjail otherjail httpjail sshjail"
jail_list="testjail"
jail_testjail_rootdir="/home/jails/testjail"
jail_testjail_hostname="testjail"
jail_testjail_ip="192.168.2.2"
jail_testjail_exec_start="/bin/sh /etc/rc"
jail_testjail_exec_stop="/bin/sh /etc/rc.shutdown"
jail_testjail_devfs_enable="YES"
Wenn Sie den Ports-Baum im Jail haben möchten und ihn nicht replizieren möchten, können wir das Verzeichnis /usr/ports/ mit einer Zeile in der Datei /etc/fstab ins Jail einhängen. Zeile wie diese:
/usr/ports /home/jails/testjail/usr/ports/ nullfs rw,auto 0 0
Starten und Stoppen von Jails ohne das System neu zu starten:
# /etc/rc.d/jail start testjail# /etc/rc.d/jail stop testjailWenn Sie eine Liste Ihrer Jails erhalten möchten, können Sie dies mit diesem Befehl tun:
# jlsInstallation von xorg und vnc im Jail aus Paketen:
# pkg_add –r xorg# pkg_add –r vncUm vnc unter einem Benutzerkonto auszuführen, schreiben Sie:
$ vncserverWenn Sie vncserver zum ersten Mal ausführen, müssen Sie ein Passwort für die vnc-Verbindung festlegen.
Standardmäßig wird beim Verbinden mit vnc twm ausgeführt. Sie können dies ändern, indem Sie die Datei ~/.vnc/xstartup bearbeiten. Sie müssen die letzte Zeile von „twm &“ in z.B. „wmaker &“ für die WindowMaker-Umgebung ändern.
Um sich mit dem vnc-Jail zu verbinden, müssen Sie in vncviewer jail_ip_address und vnc port eingeben. Z.B. 192.168.2.2:1
Einige Fehler mit vnc im Jail: Wenn Sie eine Nachricht über nicht erkannte Farben erhalten, müssen Sie die Datei /usr/local/bin/vncserwer bearbeiten und die Zeile ändern:
$cmd .= " -co /usr/X11R6/lib/X11/rgb";
Wenn wir die Nachricht haben
!!!!!!!!!!!!!!!!!!!!!!!!!!
kein freies Display auf jailname
Müssen Sie /usr/local/bin/vncserver bearbeiten und die pack-Funktion in zwei Zeilen in der Funktion CheckDisplayNumber in sockaddr_in ändern:
[…]
pack ---> sockaddr_in(6000 +$n, &INADDR_ANY))) {
[…]
pack ---> sockaddr_in(5900 +$n, &INADDR_ANY))) {
[…]Der Code sollte so aussehen:
sub CheckDisplayNumber
{
local ($n) = @_;
socket(S, $AF_INET, $SOCK_STREAM, 0) || die "$prog: socket failed: $!\n";
eval 'setsockopt(S, &SOL_SOCKET, &SO_REUSEADDR, pack("l", 1))';
if (!bind(S, sockaddr_in(6000 + $n, &INADDR_ANY))) {
close(S);
return 0;
}
close(S);
socket(S, $AF_INET, $SOCK_STREAM, 0) || die "$prog: socket failed: $!\n";
eval 'setsockopt(S, &SOL_SOCKET, &SO_REUSEADDR, pack("l", 1))';
if (!bind(S, sockaddr_in(5900 + $n, &INADDR_ANY))) {
close(S);
return 0;
}
close(S);
Portweiterleitung in IPFW für Jails
Wenn Sie einige Ports an das Jail weiterleiten möchten, müssen Sie einen FreeBSD-Kernel mit aktivierten Optionen kompiliert haben:
options IPFIREWALL
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_VERBOSE
options IPFIREWALL_FORWARD
options IPDIVERT
Portweiterleitungsregel:
ipfw add fwd ip_adres_jail,port_jail tcp from any to adresip_local port_local
z.B.
ipfw add fwd 192.168.2.2,21 tcp from any to me 21
ipfw add fwd 192.168.2.2,21 tcp from any to 72.46.154.23 21
``Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.