2016-01-17 06:16:36 +01:00
|
|
|
Requirements
|
|
|
|
============
|
|
|
|
|
|
|
|
Client side Requirements
|
|
|
|
------------------------
|
|
|
|
|
|
|
|
- sudo, or root access on your client machine.
|
|
|
|
(The server doesn't need admin access.)
|
2020-05-20 23:18:40 +02:00
|
|
|
- Python 3.5 or greater.
|
2016-01-17 06:16:36 +01:00
|
|
|
|
2016-01-17 08:07:52 +01:00
|
|
|
|
|
|
|
Linux with NAT method
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Supports:
|
|
|
|
|
|
|
|
* IPv4 TCP
|
|
|
|
* IPv4 DNS
|
|
|
|
|
|
|
|
Requires:
|
|
|
|
|
|
|
|
* iptables DNAT, REDIRECT, and ttl modules.
|
|
|
|
|
|
|
|
|
|
|
|
Linux with TPROXY method
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Supports:
|
|
|
|
|
|
|
|
* IPv4 TCP
|
2016-09-04 18:54:12 +02:00
|
|
|
* IPv4 UDP (requires ``recvmsg`` - see below)
|
|
|
|
* IPv6 DNS (requires ``recvmsg`` - see below)
|
2016-01-17 08:07:52 +01:00
|
|
|
* IPv6 TCP
|
2016-09-04 18:54:12 +02:00
|
|
|
* IPv6 UDP (requires ``recvmsg`` - see below)
|
|
|
|
* IPv6 DNS (requires ``recvmsg`` - see below)
|
2016-01-17 06:16:36 +01:00
|
|
|
|
|
|
|
|
Adds support for tunneling specific port ranges (#144)
* Adds support for tunneling specific port ranges
This set of changes implements the ability of specifying a port or port
range for an IP or subnet to only tunnel those ports for that subnet.
Also supports excluding a port or port range for a given IP or subnet.
When, for a given subnet, there are intercepting ranges being added and
excluded, the most specific, i.e., smaller range, takes precedence. In
case of a tie the exclusion wins.
For different subnets, the most specific, i.e., largest swidth, takes
precedence independent of any eventual port ranges.
Examples:
Tunnels all traffic to the 188.0.0.0/8 subnet except those to port 443.
```
sshuttle -r <server> 188.0.0.0/8 -x 188.0.0.0/8:443
```
Only tunnels traffic to port 80 of the 188.0.0.0/8 subnet.
```
sshuttle -r <server> 188.0.0.0/8:80
```
Tunnels traffic to the 188.0.0.0/8 subnet and the port range that goes
from 80 to 89.
```
sshuttle -r <server> 188.0.0.0/8:80-89 -x 188.0.0.0/8:80-90
```
* Allow subnets to be specified with domain names
Simplifies the implementation of address parsing by using
socket.getaddrinfo(), which can handle domain resolution, IPv4 and IPv6
addresses. This was proposed and mostly implemented by @DavidBuchanan314
in #146.
Signed-off-by: David Buchanan <DavidBuchanan314@users.noreply.github.com>
Signed-off-by: João Vieira <vieira@yubo.be>
* Also use getaddrinfo for parsing listen addr:port
* Fixes tests for tunneling a port range
* Updates documentation to include port/port range
Adds some examples with subnet:port and subnet:port-port.
Also clarifies the versions of Python supported on the server while
maintaining the recommendation for Python 2.7, 3.5 or later.
Mentions support for pfSense.
* In Py2 only named arguments may follow *expression
Fixes issue in Python 2.7 where *expression may only be followed by
named arguments.
* Use right regex to extract ip4/6, mask and ports
* Tests for parse_subnetport
2017-05-07 05:18:13 +02:00
|
|
|
MacOS / FreeBSD / OpenBSD / pfSense
|
2017-07-09 01:01:57 +02:00
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
2016-03-03 00:35:45 +01:00
|
|
|
Method: pf
|
|
|
|
|
2016-01-17 08:07:52 +01:00
|
|
|
Supports:
|
|
|
|
|
|
|
|
* IPv4 TCP
|
|
|
|
* IPv4 DNS
|
2016-10-28 01:37:48 +02:00
|
|
|
* IPv6 TCP
|
|
|
|
* IPv6 DNS
|
2016-01-17 08:07:52 +01:00
|
|
|
|
|
|
|
Requires:
|
|
|
|
|
|
|
|
* You need to have the pfctl command.
|
|
|
|
|
2016-01-20 10:55:10 +01:00
|
|
|
Windows
|
|
|
|
~~~~~~~
|
|
|
|
|
|
|
|
Not officially supported, however can be made to work with Vagrant. Requires
|
|
|
|
cmd.exe with Administrator access. See :doc:`windows` for more information.
|
|
|
|
|
2016-01-17 08:07:52 +01:00
|
|
|
|
2016-01-17 06:16:36 +01:00
|
|
|
Server side Requirements
|
|
|
|
------------------------
|
2020-06-11 01:46:10 +02:00
|
|
|
|
|
|
|
- Python 3.5 or greater.
|
2016-01-17 06:16:36 +01:00
|
|
|
|
|
|
|
|
|
|
|
Additional Suggested Software
|
|
|
|
-----------------------------
|
|
|
|
|
2016-10-28 01:37:48 +02:00
|
|
|
- If you are using systemd, sshuttle can notify it when the connection to
|
2016-10-29 15:15:02 +02:00
|
|
|
the remote end is established and the firewall rules are installed. For
|
|
|
|
this feature to work you must configure the process start-up type for the
|
|
|
|
sshuttle service unit to notify, as shown in the example below.
|
2016-10-28 01:37:48 +02:00
|
|
|
|
|
|
|
.. code-block:: ini
|
|
|
|
:emphasize-lines: 6
|
|
|
|
|
|
|
|
[Unit]
|
|
|
|
Description=sshuttle
|
|
|
|
After=network.target
|
|
|
|
|
|
|
|
[Service]
|
|
|
|
Type=notify
|
|
|
|
ExecStart=/usr/bin/sshuttle --dns --remote <user>@<server> <subnets...>
|
|
|
|
|
|
|
|
[Install]
|
|
|
|
WantedBy=multi-user.target
|