What are FUSE and TUN?

Posted on

These both are kernel modules, required for some kinds of software to work.

TUN module

TUN is kernel module, required to make a virtual network devices, which are required for VPN software to work.
Examples of such software: OpenVPN, Wireguard, IPSec and other VPN solutions.
But don’t mismatch VPN with proxy – that’s different kind of software, and proxy software doesn’t require TUN.
Examples of proxies: any SOCKS servers, Shadowsocks, V2Ray, Xray, Trojan and etc.

The difference between VPN and proxy is:

  • Proxy is just one more step for your network request. It’s actually designed to forward your request further
  • VPN creates virtual network on your device and it’s designed to connect devices into virtual network to let them reach each other. Ability to pass your traffic over VPN is just one of features of VPN (however it’s most common usage, that’s why people often mismatch these terms)

All KVM servers have own kernel and this module available by default.
All OpenVZ servers have shared kernel and this module is disabled by default. For OpenVZ there is “Enable TUN” button on website in “Poweroff & Restart VPS” section.

Usage scenarios: obviously, TUN required if you running VPN server and/or client at your VPS.

Please notice: when you configuring WARP on your vps, you’re actually launching Wireguard client (VPN). So in this case, if you’re using OpenVZ VPS, you need to enable TUN on website, in order to make it work.

FUSE module

FUSE is kernel module, which allow you to mount filesystems.

All KVM servers have own kernel and this module available for them by default
All OpenVZ servers have shared kernel and by default this module is disabled for VPS. At Woiden you will see button “Enable FUSE” when your VPS will be 2 months old.

Usage scenarios:

  • Make a folder with limited size (actually make a filesystem and mount it)
  • Mount remote storage via tools like: curlftpfs, sshfs, rclone and others

Some examples

сurlftpfs – mounting of FTP storage to folder /media/ftp/

apt update -y
apt install curlftpfs -y
mkdir /media/ftp
curlftpfs user:pass@ftp-server /media/ftp/

sshfs – mounting home folder of any linux system (using SSH access) to folder /media/sftp/

apt update -y
apt install sshfs -y
mkdir /media/sftp
sshfs user@server:~/ /media/sftp

rclone – mounting cloud storages to /media/my-cloud

mkdir /media/my-cloud
curl https://rclone.org/install.sh | bash
rclone config
# In this step you will need to pick a storage provider 
# and set credentials by following rclone questions
# At configuration step you will be asked to name configured connection
# assuming it to be "MyGoogle" mount command will be:
rclone mount MyGoogle:/ /media/my-cloud

Additional notes

Please notice, that listed examples are explained basic usage.

Any software which you will use, most likely will have support for set of arguments, which you will need to set, and then it will affect the way tool works. In example sshfs has support for some SFTP options, rclone has support of caching options and etc.

Also notice, that all listed examples works in foreground – you need to open separate terminal session in order to run anything else. As well, if you will close session where mount was done, your remote storage will be unmounted. To let it work in background you need to use any multiplexer (like screen, tmux) or systemd unit.