Το άρθρο υπάρχει επίσης στο FreeBSD Wiki.
Ρύθμιση
Το VNET ρυθμίζεται χρησιμοποιώντας το
if_epair(4) interface γεφυρομένο με την
πραγματική κάρτα δικτύου, στην δική μου περίπτωση, την re0. Όπως συμβαίνει
και με τα if_tap(4) interfaces, τα epairs μπορούν να χρησιμοποιηθούν μόνο από
ένα jail την φορά, οπότε εάν χρειάζεστε να τρέχετε περισσότερα από ένα jail
ταυτόχρονα, θα πρέπει να φτιάξετε περισσότερα epairs.
Εάν χρησιμοποιείτε tap interfaces για bhyve VMs, μπορείτε απλά να τα προσθέσετε
στην γέφυρα με την επιλογή addm.
Προσθέστε τις παρακάτω γραμμές στο /etc/rc.conf:
if_bridge_load="YES"
if_epair_load="YES"
cloned_interfaces="bridge0"
ifconfig_bridge0="addm re0 up"
Εφαρμόστε τις αλλαγές:
# /etc/netstart
Το jail πρέπει να κληρονομήσει τα /dev/bpf* από τον host προκειμένου να
υπάρχει πρόσβαση στο δίκτυο. Δημιουργήστε έναν νέο κανόνα στο
/dev/devfs.rules:
[devfsrules_jails=5]
add include $devfsrules_hide_all
add include $devfsrules_unhide_basic
add include $devfsrules_unhide_login
add path 'bpf*' unhide
Επανεκκινήστε το devfs(8):
# service devfs restart
Στο /etc/jail.conf, θα ονομάσουμε το jail foo και θα τού δώσουμε το άλλο
άκρο του epair που θα δημιουργήσουμε ως την κάρτα δικτύου του. Η διεύθυνση IP
του θα αποκτηθεί μέσω DHCP. Ο λόγος που καλώ χειροκίνητα το dhclient(8) είναι
επειδή η προσθήκη της γραμμής ifconfig_epair0b="DHCP" στο /etc/rc.conf του
jail δεν δουλεύει. Οι επιλογές αναλύονται στο
jail.conf(5):
path = "/usr/local/jail/$name";
host.hostname="$name";
exec.clean;
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
allow.mount;
allow.raw_sockets = 1;
mount.devfs;
devfs_ruleset="5";
vnet;
sysvmsg=new;
sysvsem=new;
sysvshm=new;
foo {
vnet.interface = "epair0b";
exec.start += "dhclient epair0b";
}
Εγκατάσταση
# mkdir -p /usr/local/jail/foo
# bsdinstall jail /usr/local/jail/foo
...
# ifconfig epair0 create
# ifconfig bridge0 addm epair0a
# ifconfig epair0a up
# service jail onestart foo
Ελέγξτε ότι το jail έχει πρόσβαση στο δίκτυο:
# jexec foo ping google.com
Κατά το κλείσιμο του jail, καταστρέψτε το epair:
# service jail onestop foo
# ifconfig epair0a destroy
Διαγραφή jail
Η διαγραφή των jails δεν είναι εντελώς απλή, οπότε παραθέτω την διαδικασία:
# service jail onestop foo
# chflags -R noschg /usr/local/jail/foo
# rm -rf /usr/local/jail/foo