---- Warning - the following instructions will ravage your machine and then eat all the food in your refrigerator, and unlike the dwarves, they won't be kidding about breaking your dishes. ---- As of %%FreeBSD%% 12, VIMAGE is turned on by default. This lets jails have private network stacks, which is useful. ---- Here's an example /etc/jail.conf. Previously, the basic assumption here was that you're using vimage, specifying a custom MAC, and using dhclient(8) to pull a dynamic address. Given ordering requirements resulting from [[https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=237656|BZ#237656]], experimentation with dhclient is on hold, so this version uses static addressing. This assumes jail root in ''%%/var/jail/{foo,bar}%%'' and an already-extant ''%%bridge0%%''. exec.prestart = "ifconfig epair${ep} create up"; exec.prestart += "ifconfig $bridge addm epair${ep}a"; exec.start = "/sbin/ifconfig epair${ep}b link $mac"; exec.start += "/sbin/ifconfig epair${ep}b 10.0.0.${ep}/24"; exec.start += "/sbin/route add -net default 10.0.0.1"; exec.start += "/bin/sh /etc/rc"; # positioning of this is up in the air at present - ideally we run # prior to /etc/rc but this needs testing, hence static addressing, # above. #exec.? += "dhclient epair${ep}b"; # We're shutting down this way so that services using the network # conclude before we rip out the network. Once the race condition # bug noted above is resolved, we'll be able to shut down in # exec.stop as normal, and likely ignore the -vnet line entirely. exec.prestop = "/usr/sbin/jexec ${name} /bin/sh /etc/rc.shutdown"; exec.prestop += "/sbin/ifconfig epair${ep}b -vnet ${name}"; exec.poststop = "ifconfig $bridge deletem epair${ep}a"; exec.poststop += "ifconfig epair${ep}a destroy"; exec.clean; mount.devfs; devfs_ruleset = 110; exec.system_user = "root"; exec.jail_user = "root"; vnet; persist; $bridge = "bridge0"; path = "/var/jail/$name"; vnet.interface = "epair${ep}b"; foo { $ep = 2; $mac = "00:00:00:00:00:00"; } bar { $ep = 3; $mac = "00:00:00:00:00:01"; } ---- My ''%%/etc/devfs.rules%%'' turns on bpf, for dhclient - this is based on the jail example in ''%%/etc/defaults/devfs.rules%%'': [jail_devfs=110] add include $devfsrules_hide_all add include $devfsrules_unhide_basic add include $devfsrules_unhide_login #add path fuse unhide #add path zfs unhide add path 'bpf*' unhide ---- The docs don't seem to say how to create a bridge and give it a static address, and - You can't have multiple ifconfig lines. - The order matters - you can't have addm first. So, here's how I'm specifying this in ''%%/etc/rc.conf%%'': cloned_interfaces="bridge0" ifconfig_bridge0="inet 10.0.0.2 netmask 0xffffff00 addm em0" ifconfig_em0="up" In case your system suffers from this, at least Intel NICs can [[https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=221122|experience a delay]] when adding the first epair to a bridge. In this case, attaching a "sacrificial" epair on boot should prevent subsequent impact: cloned_interfaces="bridge0 epair0" ifconfig_bridge0="inet 10.0.0.2 netmask 0xffffff00 addm em0 addm epair0a" ifconfig_em0="up" ---- {{tag>HowTo}}