[Awesome Software - Virtual Security Network] sshuttle: where transparent proxy meets VPN meets ssh
sshuttle
As far as I know, sshuttle is the only program that solves the following common case:
-
Your client machine (or router) is Linux, FreeBSD, or MacOS.
-
You have access to a remote network via ssh.
-
You don’t necessarily have admin access on the remote network.
-
The remote network has no VPN, or only stupid/complex VPN protocols (IPsec, PPTP, etc). Or maybe you are the admin and you just got frustrated with the awful state of VPN tools.
-
You don’t want to create an ssh port forward for every single host/port on the remote network.
-
You hate openssh’s port forwarding because it’s randomly slow and/or stupid.
-
You can’t use openssh’s PermitTunnel feature because it’s disabled by default on openssh servers; plus it does TCP-over-TCP, which has terrible performance.
Obtaining sshuttle
Ubuntu 16.04 or later:
1 | apt-get install sshuttle |
Debian stretch or later:
1 | apt-get install sshuttle |
Arch Linux:
1 | pacman -S sshuttle |
Fedora:
1 | dnf install sshuttle |
openSUSE:
1 | zypper in sshuttle |
Gentoo:
1 | emerge -av net-proxy/sshuttle |
NixOS:
1 | nix-env -iA nixos.sshuttle |
From PyPI:
1 | sudo pip install sshuttle |
Clone:
1 | git clone https://github.com/sshuttle/sshuttle.git |
FreeBSD:
1 | ports |
macOS, via MacPorts:
1 | sudo port selfupdate |
It is also possible to install into a virtualenv as a non-root user.
From PyPI:
1 | virtualenv -p python3 /tmp/sshuttle |
Clone:
1 | virtualenv -p python3 /tmp/sshuttle |
Homebrew:
1 | brew install sshuttle |
Nix:
1 | nix-env -iA nixpkgs.sshuttle |
(Optionally) After installation
Add to sudoers file:
1 | sshuttle --sudoers |
Usages
Forward all traffic:
1 | sshuttle -r username@sshserver 0.0.0.0/0 |
Use the sshuttle -r
parameter to specify a remote server.
By default sshuttle will automatically choose a method to use. Override with the sshuttle --method
parameter.
There is a shortcut for 0.0.0.0/0
for those that value their wrists:
1 | sshuttle -r username@sshserver 0/0 |
For ‘My VPN broke and need a temporary solution FAST to access local IPv4 addresses’:
1 | sshuttle --dns -NHr username@sshserver 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 |
If you would also like your DNS queries to be proxied through the DNS server of the server you are connect to:
1 | sshuttle --dns -r username@sshserver 0/0 |
The above is probably what you want to use to prevent local network attacks such as Firesheep and friends. See the documentation for the sshuttle --dns
parameter.
(You may be prompted for one or more passwords; first, the local password to become root using sudo, and then the remote ssh password. Or you might have sudo and ssh set up to not require passwords, in which case you won’t be prompted at all.)