summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2010-10-01README: remove the note about MacOS not working. It works now!sshuttle-0.40Avery Pennarun
2010-10-01BSD: sysctl net.inet.ip.forwarding=1 is not necessary.Avery Pennarun
If your machine is a firewall/router, it affects whether people behind the router can use your sshuttle connection - in the same way that it affects whether they can route *anything* through you. And thus, it should be set by the admin, not by sshuttle. sshuttle works fine for the local user either way. (This also affects MacOS since it's a BSD variant.)
2010-10-01BSD ipfw: switch from 'established' to 'keep-state/check-state'.Avery Pennarun
It turns out 'established' doesn't work the way I expected it to from iptables; it's not stateful. It just checks the TCP flags to see if the connection *thinks* it's already established, and follows the rule if so. That caused the first packet of each new connection to set sent to our transproxy, but not the subsequent ones, so weird stuff happened. With this change, any (matching) connection created *after* starting sshuttle will get forwarded, but pre-existing ones - most importantly, sshuttle's own ssh connection - will not. And with this (plus the previous commit), sshuttle works on MacOS, including 10.6!
2010-10-01ssnet: recover slightly more gracefully from an infinite forwarding loop.Avery Pennarun
If you 'telnet localhost 12300' weird things happen; someday we should probably auto-detect and avoid that altogether. But meanwhile, catch EPIPE if it happens (it's irrelevant) and don't barf with a %d data type for a value that can apparently sometimes be None.
2010-10-01Magic incantation to mostly fix MacOS 10.6.Avery Pennarun
It comes down to this: sysctl_set('net.inet.ip.scopedroute', 0) I say "mostly" because actually it doesn't fix it; sshuttle doesn't know what to do with the received connection, so there must be a minor bug remaining somewhere. I'll fix that next. Thanks to dkf <dfortunato@gmail.com> on the sshuttle mailing list for suggesting the magic fix. He points at this post in particular: http://discussions.apple.com/thread.jspa?messageID=11558355&#11558355 that gave him the necessary clue.
2010-09-21latest options.py from bup, now with tty-width guessing.Avery Pennarun
as of bup commit bup-0.19-2-gce2ace5.
2010-09-21hostwatch: add missing errno importFrederik Deweerdt
If the ~/.sshuttle.hosts file does not exist, it triggers the following error: Traceback (most recent call last): File "./sshuttle", line 80, in <module> sys.exit(hostwatch.hw_main(extra)) File "/home/def/p/sshuttle/hostwatch.py", line 246, in hw_main read_host_cache() File "/home/def/p/sshuttle/hostwatch.py", line 41, in read_host_cache if e.errno == errno.ENOENT: NameError: global name 'errno' is not defined (This only happened if you run 'sshuttle --hostwatch' from the command line directly, without passing it through assembler.py.)
2010-09-04If netstat -rn returns an error, make that non-fatal.Avery Pennarun
That only really stops --auto-nets from working; it's mostly harmless otherwise. And apparently some locked-down shared hosts don't let you get the list of routes.
2010-09-03add option to allow the remote python binary's name/path to be specifiedchocolateboy
2010-09-03Import latest options.py from bup-0.17.Avery Pennarun
This has new support for default values in square brackets, so let's use that.
2010-07-25README: fix some out-of-date system requirements stuff.Avery Pennarun
Reported by Jason Axelson.
2010-07-15Add a --exclude option for excluding subnets from routing.sshuttle-0.31Avery Pennarun
Also, add 127.0.0.0/8 to the default list of excludes. If you want to route 0/0, you almost certainly *don't* want to route localhost to the remote ssh server's localhost! Thanks to Edward for the suggestion.
2010-05-16log(): don't abort if we fail to write to stderr.Avery Pennarun
Failing to write to the log sucks, but not as much as failing to clean up just because stderr disappeared. So let's catch any IOError exception from log() and just ignore it. This should fix a problem reported by Camille Moncelier, which is that sshuttle firewall entries stick around if your tty dies strangely (eg. your X server aborts for some reason).
2010-05-12ssh.py: try harder to find required *.py files.Avery Pennarun
Search the entire python sys.path, not just the directory that argv[0] is in. That way if you symlink the sshuttle binary into (for example) ~/bin, it'll be able to work correctly.
2010-05-11client: add a debug1() message for connecting/connected.Avery Pennarun
If the server is going to delay us, we'd at least like to know that.
2010-05-11Created a googlegroups.com mailing list for sshuttle.Avery Pennarun
2010-05-10Don't use try/except/finally so that python 2.4 works.Avery Pennarun
Use try/(try/except)/finally instead. There was only once case of this. Thanks to Wayne Scott and nisc for pointing this out.
2010-05-09firewall: preserve permissions on /etc/hostssshuttle-0.30Avery Pennarun
Pointed out by nisc on github. If people use an unusual umask or have funny permissions on /etc/hosts, sshuttle would screw it up. We also use hardlinks to atomically backup the original /etc/hosts to /etc/hosts.sbak the first time, rather than manually copying it. Not sure why I didn't think of that before.
2010-05-08hostwatch: watch "netstat -n" for IP addresses.Avery Pennarun
The list of active sessions might tell us about some hostnames on the local networks, which we can then add to our subnet list.
2010-05-08Oops, previous change to ipfw settings prevented cleanup from working.Avery Pennarun
2010-05-08Added new --auto-hosts and --seed-hosts options to the client.Avery Pennarun
Now if you use --auto-hosts (-H), the client will ask the server to spawn a hostwatcher to add names. That, in turn, will send names back to the server, which sends them back to the client, which sends them to the firewall subprocess, which will write them to /etc/hosts. Whew! Only the firewall process can write to /etc/hosts, of course, because only he's running as root. Since the name discovery process is kind of slow, we cache the names in ~/.sshuttle.hosts on the remote server. Right now, most of the names are discovered using nmblookup and smbclient, as well as by reading the existing entries in /etc/hosts. What would really be nice would be to query active directory or mdns somehow... but I don't really know how those work, so this is what you get for now :) It's pretty neat, at least.
2010-05-08Add 'sshuttle --hostwatch' subcommand.Avery Pennarun
This tries to discover local hostnames and prints them to stdout. Will be used by the server for auto-hostname tracking.
2010-05-07BSD: "ipfw add %d accept ip from any to any established"Avery Pennarun
With this rule, we don't interfere with already-established (or incoming) connections to routes that we're about to take over. This is what happens by default in Linux/iptables.
2010-05-07Add -N (--auto-nets) option for auto-discovering subnets.Avery Pennarun
Now if you do ./sshuttle -Nr username@myservername It'll automatically route the "local" subnets (ie., stuff in the routing table) from myservername. This is (hopefully a reasonable default setting for most people.
2010-05-07ssnet: EHOSTUNREACH and ENETUNREACH are non-fatal errors.Avery Pennarun
Reported by Wayne Scott.
2010-05-04Don't require the remote server to have sshuttle installed.sshuttle-0.20Avery Pennarun
Instead, grab our source code, send it over the link, and have python eval it and then start the server.py main() function. Strangely, there's now *less* horrible stuff in ssh.py, because we no longer have to munge around with the PATH environment variable. And this significantly reduces the setup required to get sshuttle going. Based on a suggestion from Wayne Scott.
2010-05-04Rename iptables->firewall.Avery Pennarun
Since we "almost" support ipfw on MacOS (which I guess might mean FreeBSD too), the name should be a bit more generic.
2010-05-04Client "almost" works on MacOS and maybe FreeBSD.Avery Pennarun
Basic forwarding now works on MacOS, assuming you set up ipfw correctly (ha ha). I wasted a few hours today trying to figure this out, and I'm *so very close*, but unfortunately it just didn't work. Think you can figure it out? Related changes: - don't die if iptables is unavailable - BSD uses getsockname() instead of SO_ORIGINAL_DST - non-blocking connect() returns EISCONN once it's connected - you can't setsockopt IP_TTL more than once
2010-05-04Oops, broke --noserver mode at some point.sshuttle-0.11Avery Pennarun
2010-05-04ssh.py: allow hostnames of the form hostname:portAvery Pennarun
Feature requested by Wayne Scott and Ed Maste.
2010-05-03README: clarify that the server doesn't need Linux or iptables.Avery Pennarun
2010-05-03README: add information about which iptables modules are needed.Avery Pennarun
As requested by a user.
2010-05-03README: fix some formatting for easier text-mode readability.Avery Pennarun
It looked okay in markdown, but some of the text lines were a bit too long.
2010-05-02README: update to use real markdown-style headings.Avery Pennarun
Oops, got those mixed up with some random other markup format.
2010-05-02ssh.py: support finding sshuttle in "$HOME/.../sshuttle"Avery Pennarun
If you ran sshuttle from /home/apenwarr/sshuttle/sshuttle, we would automatically add /home/apenwarr/sshuttle to the PATH before trying to execute sshuttle on the remote machine. That way, if you install it in the same place on two computers, the client would still be able to start the server. Someone reported, though, that if they installed the client in /home/apenwarr/sshuttle/shuttle, and the server in /root/sshuttle/sshuttle, then used "-r root@servername", it wasn't able to find the program. Similar problems would happen if you're apenwarr at home and averyp at work. So what we now do is add *two* directories to the PATH: /home/apenwarr/sshuttle and $HOME/sshuttle, where $HOME is the value of $HOME on the *server*, not the client. So it'll find it in either place.
2010-05-02iptables: if client dies before sending GO, just quit.Avery Pennarun
If the server was having trouble starting, we would print a lot of unnecessary stuff from iptables. We shouldn't even have bothered *starting* iptables if the server was dead anyway.
2010-05-02iptables: die quietly if parent process dies.Avery Pennarun
If we can't communicate with the parent process, he's probably died unexpectedly; just shut down and don't bother people about it.
2010-05-02iptables: try launching with sudo, then su, then directly.Avery Pennarun
Previous versions depended on having 'sudo' in your PATH. Now that we can feel safe that --iptables will clean up properly when you exit, and it doesn't need to authenticate twice, the advantages of sudo aren't strictly needed. Good old 'su' is a reasonable fallback - and everybody has it, which is nice. Unfortunately su doesn't let you redirect stdin, so I had to play a stupid fd trick to make it work.
2010-05-02ssnet: throw a nicer-looking Fatal when the mux connection dies.Avery Pennarun
When it happens, it's probably because the client died and the server hasn't noticed yet.
2010-05-02iptables: more resilient startup/cleanup.Avery Pennarun
Now the sudo iptables subprocess persists for the entire life of sshuttle. The benefits of this are: - no need to authenticate again at shutdown (failure of which could cause us to not clean up iptables) - if the main process dies unexpectedly, iptables still gets cleaned up - the password prompt can happen *before* starting the ssh/server process, which means it'll stand out and the password prompt won't be overwritten.
2010-05-02Whoops, we were spinning in the server when the mux outbuf was full.Avery Pennarun
Once again, the buffering gets mixed up with the selecting. Seems to be the story of my life.
2010-05-02More latency fixes: use a PING/PONG pair to limit queue length.Avery Pennarun
It seems ssh is kind of stupid and uses a really big SO_SNDBUF (hundreds of kbytes). Thus, we can't depend on the socket's output buffer to limit our latency down to something reasonable. Instead, limit the amount of data we can send in a single round trip.
2010-05-02Don't overfill the mux's output buffer.Avery Pennarun
Otherwise a single busy stream can ruin it for everybody.
2010-05-02ssnet: when a connection error occurs, stop trying to connect.Avery Pennarun
2010-05-02Add a README file based on my blog entry.Avery Pennarun
2010-05-02Do non-blocking connect().sshuttle-0.10Avery Pennarun
This way we don't freeze the entire proxy when someone tries to connect to a nonexistent IP address (oops).
2010-05-02Don't bother with a backtrace when we produce certain fatal errors.Avery Pennarun
We'll introduce a new "Fatal" exception for this purpose, and throw it when we just want to print a user message and abort immediately.
2010-05-02Add a -v (and -vv) flag and decrease default message verbosity.Avery Pennarun
2010-05-02iptables: add a PREROUTING rule so we can proxy for other machines too.Avery Pennarun
If you run sshuttle on a router, it can handle vpn'ing for all the boxes on your network.
2010-05-02Clean up SockWrapper.peername stuff.Avery Pennarun
Some fds don't have peernames, and sometimes the peername isn't very helpful, so let's fill it in by hand when appropriate.