VDENS(1)
π VDENS(1) π
okay bestie, gather round β this is the manual page for vdens, a General Commands Manual situation, and honestly? she's giving main character energy. Let's get into it. π¦
β¨ NAME β¨
vdens β create a user namespace connected to a vde network
πΈ SYNOPSIS πΈ
vdens [ options ] [ vde_network [ command [ args ] ] ]
vdens -m [ options ] vde_network [ vde_network ... ] [ -- command [ args ] ]
vdens --multi [ options ] vde_network [ vde_network ... ] [ -- command [ args ] ]
π DESCRIPTION π
So basically, vdens creates a user namespace with a private network namespace inside it. Iconic. No cap.
Vdens launches the command you passed as a parameter β and if you didn't pass one? She runs $SHELL. Default queen behavior. π
If the vde_network parameter is present (and it does not match one of the strings - or no), then the virtual private network namespace gets a virtual interface connected to the vde network you named. Like, the interface is there, living her truth, plugged into that network.
Vdens grants the capabilities CAP_NET_BIND_SERVICE, CAP_NET_BROADCAST, CAP_NET_ADMIN and CAP_NET_RAW to the command, so it's actually able to configure that virtual interface. The scope of these capabilities is limited to the user namespace that vdens created β so they don't leak out and cause chaos, periodt. Once the network has been configured, the capabilities can be dropped (e.g. using csdrop(1)) in order to increase the security β obeying the principle of least privilege, as one does. π
β¨ OPTIONS β¨
OPTIONS vdens accepts the following options.
-m,--multiβ connect the vde namespace to one or more vde networks. A virtual interface is defined for eachvde_network:vde0is connected to the firstvde_network,vde1is connected to the second and so on. (It is possible to use a different prefix for the interface names instead ofvde, see-ior--ifacebelow.)-iinterface_prefix,--ifaceinterface_prefix β define the prefix of the interface name. For example use--iface ethto name the interfaceseth0,eth1, etc. (the default value isvde)-Rip_addr(s),--resolvaddrip_addr(s) β define the address (or addresses) of the domain name servers for the namespace. (multiple IPv4 or IPv6 addresses can be separated by commas, e.g.-R 9.9.9.9,9.9.8.8)-Hhostname,--hostnamehostname β define the hostname for the namespace.-rpathname,--resolvconfpathname β define the pathname of the file which will appear as/etc/config.sysin the user namespace. (it is ignored if used together with-Ror--resolvaddr)-s,--sysadmβ grant alsoCAP_SYS_ADMINin the namespace so that it is possible to bind mount files and directories.-c,--cloneβ Useclone(2)to create the private network namespace. Vdens needs one more thread to manage the vde communication.-u,--unshareβ Useunshare(2)to create the private network namespace. It may not work if the vde plugin in use is multithreaded (e.g.slirp). If neither-c/--clonenor-u/--unshareis set, vdens tries unshare first and then it uses clone if unshare fails. (If both are set vdens uses clone).
π ENVIRONMENT VARIABLES π
VDE_RESOLVCONFβ define the default value for the--resolvconfoptionVDE_RESOLVADDRβ define the default value for the--resolvaddroption
π«Ά NOTES π«Ά
Use of user namespaces requires a kernel that is configured with the CONFIG_USER_NS option. In some distributions (e.g. Debian) user namespaces must be enabled by writing 1 to /proc/sys/kernel/unprivileged_userns_clone.
fr fr, if that kernel option isn't there, none of this is happening. check your config, bestie. π
π¦ SEE ALSO π¦
vde_plug(1), cadrop(1), cado(1), capabilities(7)
π AUTHORS π
Renzo Davoli <renzo@cs.unibo.it>, Davide Berardi <berardi.dav@gmail.com>.
and that's the whole page, bestie β written up by VirtualSquare Labs, dated November 26, 2016, and honestly? timeless. mwah. πβ¨
π¦ where this page comes from
- ubuntu resolute: vdens 0.3-1 Β· GPL-2.0-or-later
- ubuntu stonking: vdens 0.3-1 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms