Jailv2 Virtual Netwrok Stack

arcona

Well-Known Member
Hallo,
ich wollte mal fragen, ob irgendjemand von Euch schonmal mit dem virtual network stack herumgespielt hat, ist noch experimentell, klingt aber gut.

Gefunden auf:
http://www.cyberciti.biz/tips/freebsd-8-0-review-enterprise-ready-server-operating-system.html
Network Stack Virtualization (VIMAGE)

The network stack virtualization project aims at extending the FreeBSD kernel to maintain multiple independent instances of networking state. This will allow for complete networking independence between jails on a system, including giving each jail its own firewall, virtual network interfaces, rate limiting, routing tables, and IPSEC configuration. The vimage is a jail with a virtualized instance of the FreeBSD network stack. It is an experimental feature. To enable VIMAGE, edit your kernel config file and add the following line:
options VIMAGE

Make sure you remove the SCTP option. Save and close the file. Rebuild the kernel:

make buildkernel KERNCONF=NIXCRAFT
make installkernel KERNCONF=NIXCRAFT
reboot
You can easily create the vimage enabled jail using jail, run:
jail -c vjail1 name=vjail1 host.hostname=vjail1.nixcraft.in path=/ persist

You can easily communicate between jails using epair driver interface which is a pair of virtual back-to-back connected Ethernet interfaces:

ifconfig epair0 create
ifconfig epair0a config-options
See jail(8), and epair(4) man page for more details.
Klingt irgendwie cool und ist genau das was ich in den jails vermisse.Komme aus der LInux Ecke und unter OpenVZ ist das eine Kleinigkeit.
Ich traue mich nur nicht wirklich an das Kernel-Bauen aus der obigen Anleitung heran, habe Angst mir mein schönes kleines Testsystem zu zerschießen.

Grüße.
arcona
 
Das Ganze ist inzwischen schon ein wenig weiter und funktioniert auch recht gut. Große Gefahr was zu zerschießen hast du nicht, aber die ganze Geschichte hat noch eine gewisse Panic-Neigung. Das hält sich mit 8.0 im vertretbaren Rahmen, aber dennoch. Produktiv einsetzen würde ich es nicht.
 
Was bedeutet denn, das das ganze unter 8.0 schon etwas weiter ist. Ich habe im Netz nur eine handvoll Seiten zu dem Thema unter 8.0 gefunden.
Muss ich etwas nicht mehr an meinem Kernel herumfrickeln?
Hast Du es selbst schon einmal probiert oder kennst Du eine Seite im Netz, die sich damit etwas ausführlicher beschäftigt?

Produktiv ist so eine Ansichtssache, bislang "spiele" ich mit BSD auf einer kleinen Heimserverkiste. Vielleicht wird ja mal mehr draus...mal sehen.
 
Es bedeutet, dass in 8.0 schon eine ganze Menge Fehlerkorrekturen drin sind, die das ganze grundsätzlich benutzbar machen. In 8-STABLE funktioniert sogar SCTP mit VNet, man muss da also nicht mehr auskommentieren. Einen neuen Kernel bauen muss man aber noch immer, das es nach wie vor ein äußerst experimentelles Feature ist und als solches nicht standardmäßig aktiviert ist.

Im Moment ist das Hauptproblem, dass nicht alles was im Netzwerkstack hängt virtualisiert ist. Nutzt du z.B. pfsync zusammen mit VNet, wird die Kiste dadurch instabil. Sprich, sie wird regelmäßig abstürzen. Auch einige Treiber machen Probleme, recht gutes Beispiel ist das z.B. rum(4). Wenn du damit leben kannst, ist alles okay und probiere es aus. Es sei aber noch gesagt, dass das ganze Projekt nur quälend langsam voran geht. Also solltest du ein wenig Geduld mitbringen. :)

Am besten liest du mal in den Archiven von freebsd-virtualization@: http://lists.freebsd.org/pipermail/freebsd-virtualization/
 
Ich werde das ganze mal in einer VM am WE ausprobieren.
Auf die schnelle habe ich mir schon mal die /usr/scr/sys/i386/conf/GENERIC angeschaut.
Wenn ich einen neuen Kernel mit einer Kopie dieser Datei baue, reicht es wenn ich dort am Ende einfach
Code:
options VIMAGE
einfüge und gleichzeitig
optins SCTP
auskommentiere?
Alles andere kann doch eigentlich so bleiben wie es ist.

Grüße.
craano.
 
Hallo,
ich bin jetzt ein wenig auf der Suche nach ein paar Stichworten oder auch einem Beispiel.
Das Neukompilieren des Kernels war easy und lief völlig ohne Probleme.

Der neue Kernel bootet auch. Ich habe das ganze in einer virtuellen Maschine gemacht, in dieser Maschine laufen auch schon zwei jails. Nur jetzt stocke ich. Wie kann ich denn jetzt diesen Jails virtuelles Netzwerk zuordnen?
Kann ich der Jail eventuell auch eine separate Netzwekkarte zuordnen, die der Host nicht verwendet?

Grüße.
arcona
 
Danke. Den Artikel hatte ich auch schon gefunden. Vielmehr lässt sich im Web auch noch nicht darüber auftreiben. Zumindest nichts ausführliches. Schade eigentlich, ich finde das Thema sehr spannend und mich wundert es ein wenig, dass sich nicht mehr Leute dafür interessieren.
 
So ganz verstehe ich das noch nicht.
Als erstes habe ich folgende Zeile in der /etc/rc.conf hinzugefügt:
jail_jail1__vnet_enable="YES"
Dann die jail neu gestartet. Das läuft ohne Fehler.

Dann möchte ich folgendes machen:
Code:
ifconfig epair create
ifconfig epair0a vnet 1
jexec 1 ifconfig epair0a 192.168.11.2
Mehr muss ich doch für jail1 nicht tun, oder?
Ich habe einen neuen Kernel gebaut und
options VIMAGE
eingefügt und auch
SCTP
mit einem Kommentarzeichen versehen.
Dennoch hab eich bereits beim erstellen des epair Device einen Fehler:
Code:
ifconfig epair create
ifconfig: SIOCIFCREATE2: Invalid argument
Was mache ich falsch?
Brauche ich auch bei nur einer Jail ein Paar eparir Devices?

Grüße.
craano.

EDIT:
In der /etc/rc.conf habe ich natürlich auch das entsprechende Modul geladen:
if_epair_load="YES"
 
Zuletzt bearbeitet:
In der /etc/rc.conf habe ich natürlich auch das entsprechende Modul geladen.
Die Zeile muss in die /boot/loader.conf, nicht in die /etc/rc.conf. Alternativ kannst du das Modul auch manuell per "kldload if_epair" laden. :)
 
Ich fasse noch mal zusammen was ich bislang gemacht habe, denn ich komme nicht weiter.

1. Kernel gebaut mit VIMAGE und epair Modul
2. Auf dem Host:
Code:
# ifconfig create epair
epair0a
#ifconfig epair0a 192.168.0.199
#ifconfig epair0b 192.168.0.200
# ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>    
        ether 08:00:27:e9:34:3a                                          
        inet 192.168.0.123 netmask 0xffffffff broadcast 192.168.0.123    
        inet 192.168.0.124 netmask 0xffffffff broadcast 192.168.0.124    
        inet 192.168.0.122 netmask 0xffffff00 broadcast 192.168.0.255    
        media: Ethernet autoselect (1000baseT <full-duplex>)             
        status: active                                                   
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384        
        options=3<RXCSUM,TXCSUM>                                         
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
        inet6 ::1 prefixlen 128
        inet 127.0.0.1 netmask 0xff000000
epair0a: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 02:c0:e4:00:03:0a
        inet 192.168.0.199 netmask 0xffffff00 broadcast 192.168.0.255
epair0b: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 02:c0:e4:00:04:0b
        inet 192.168.0.200 netmask 0xffffff00 broadcast 192.168.0.255
3. /etc/rc.conf
jail_enable="YES"
jail_list="jail1 jailftp jailvirtnet"
...
#jailvirtnet virtuelle Netzwerkkarte
jail_jailvirtnet_devfs_enable="YES"
jail_jailvirtnet_procfs_enable="YES"
jail_jai1virtnet_fdescfs_enable="NO"
jail_jailvirtnet_mount_enable="NO"
jail_jailvirtnet_rootdir="/usr/home/arcano/jailvirtnet"
jail_jailvirtnet_hostname="jailvirtnet.null"
jail_jailvirtnet_netmask="255.255.255.255"
jail_jailvirtnet_ip="192.168.0.199"
jail_jailvirtnet_exec_start="/bin/sh /etc/rc"
jail_jailvirtnet_exec_stop="/bin/sh /etc/rc.shutdown"
4.
Code:
BSD# /etc/rc.d/jail start jailvirtnet                   
Configuring jails:.                                     
Starting jails: jailvirtnet.null.                       
BSD# jls                                                
   JID  IP Address      Hostname                      Path
     1  192.168.0.123   jail1.null                    /usr/home/craano/jail1
     2  192.168.0.124   jailftp.null                  /usr/home/craano/jailftp
     7  192.168.0.199   jailvirtnet                   /usr/home/craano/jailvirtnet
BSD# jexec 7 ifconfig                                                             
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500         
        options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>             
        ether 08:00:27:e9:34:3a                                                   
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=3<RXCSUM,TXCSUM>
epair0a: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 02:c0:e4:00:03:0a
        inet 192.168.0.199 netmask 0xffffff00 broadcast 192.168.0.255
epair0b: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 02:c0:e4:00:04:0b

Hier komme ich irgendwie nicht weiter. Was nun?

EDIT:
Wenn sich jemand fragt warum der ganze Aufwand. Ich möchte versuchen einen openVPN Server innerhalb einer Jail zu betreiben. Allerdings hat mich auch ein wenig der Ehrgeiz gepackt... Nun ja, einen Schritt nach dem anderen.
Ich habe gerade folgenden Tipp im Wiki gefunden:
security.jail.socket_unixiproute_only (0/1)
Wenn andere Protokolle als IP und Unix Sockets genutzt werden dürfen sollte man dieses Knöpfchen drehen.
security.jail.allow_raw_sockets (0/1)
Wenn man aus einer Jail heraus „ping“ oder „traceroute“ verwenden will braucht man dafür „rohe Sockel“.
Sollte ich diese Schalter auch besser drehen?
 
Zuletzt bearbeitet:
Zurück
Oben