summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2011-05-12Enhanced DNS support. Initial version.dnsBrian May
2011-04-06DNS: auto-retry if we get an error on send/recv to DNS server.Avery Pennarun
A few people have reported that they have one or more invalid DNS servers in /etc/resolv.conf, which they don't notice because the normal resolver library just skips the broken ones. sshuttle would abort because it got an unexpected socket error, which isn't so good.
2011-03-21On FreeBSD, avoid a crash caused by buggy socket.connect() in python pre-2.5.Avery Pennarun
Bug reported by Ed Maste. The fix in later versions of python is documented here: http://mail.python.org/pipermail/python-bugs-list/2006-August/034667.html We're basically just doing the same thing when we see EINVAL. Note that this doesn't happen on Linux because connect() is more forgiving.
2011-03-21repr(socket.error) is useless in some versions of python.Avery Pennarun
So let's use %s instead of %r to print it, so that log messages can be more useful. This only affects one message at debug3 for now, so it's not too exciting.
2011-03-19server.py: handle (throw away) ECONNREFUSED from the DNS server.sshuttle-0.52Avery Pennarun
This might happen occasionally on a flakey network. Reported by Ed Maste.
2011-03-14hostwatch.py: avoid using /dev/null on the server.Avery Pennarun
According to at least one report, there are some slightly insane servers out there that have /dev/null set to non-user-writable. This is totally broken, but we want sshuttle to work with as many servers as possible, so let's fake it up a bit instead. We don't try to avoid /dev/null on the client; sshuttle needs root access anyway, and if you're root, you can just fix your stupid /dev/null permissions.
2011-02-28ui-macos/clean: fix a GNUism in usage of the 'find' command.Jimmy Tang
2011-02-26all.do: add some hints about how to run sshuttle.Avery Pennarun
This is mostly so that people know how to find the MacOS GUI app, which was previously rather non-obvious.
2011-02-26Replace make-based build with redo-based build.Avery Pennarun
Including a copy of minimal/do as 'do' in the top directory. To build, just run './do' or 'make'. This also builds the ui-macos directory automatically if you're on MacOS.
2011-02-26firewall.py: make it super clear when we apply the MacOS fix.Avery Pennarun
Print a message to stderr, then abort. But only the first time.
2011-02-26README/sshuttle.1: add a note about the MacOS kernel bug.Avery Pennarun
And its side effects. Reported by David Held / Antonio d'Souza.
2011-02-21firewall.py: iptables: failure to delete a rule isn't always fatal.Avery Pennarun
If the previous run of sshuttle didn't manage to clean up after itself, it might have left the sshuttle-12300 chain intact, but the OUTPUT chain might not refer to it anymore. That would cause the *next* run of sshuttle to barf when trying to delete the OUTPUT entry, and then never get to the part where it just tries to delete the old chain so it can continue. Now only the last delete command (the one that actually deletes the chain) is fatal if it fails; the others just print a scary message, but that should only happen once in your life if you're unlucky.
2011-02-07server: workaround for idiotic ArchLinux renaming of python to python2.Avery Pennarun
First try running under python2, then python if that doesn't exist.
2011-02-07client: workaround for idiotic ArchLinux renaming of python to python2.Avery Pennarun
First try running under python2, then python if that doesn't exist.
2011-02-04firewall.py: MacOS: permanently set the net.inet.ip.scopedroute sysctl.sshuttle-0.51Avery Pennarun
If this sysctl isn't set to 0 at the time your network interface is brought up, and we later change it, then the MacOS (10.6.6 at least) ARP table gets totally confused and networking stops working about 15 minutes later, until you down and re-up the interface. The symptom is that pings outside your LAN would give results like this: ping: sendto: no route to host and "arp -a -n" would show *two* entries for your default gateway instead of just one. sshuttle was helpfully putting the sysctl back the way it was when it shuts down, so you would fix your network by downing the interface, so sshuttle would abort and change the sysctl back, then you would re-up the interface, then restart sshuttle, and sshuttle would change the sysctl back and restart the cycle: it would break again a few minutes later. That's annoying, and it gives sshuttle a bad reputation for being the thing that breaks your network. I can't find a *really* good workaround for the bug, so barring that, let's just permanently set the sysctl to 0 and not change it back on exit. That should just leave your computer back how it worked in MacOS 10.5, as far as I know, which seems harmless. At least I've been running my Mac that way for a few days and I haven't seen any weirdness. Now, doing *that* would still mean that the first sshuttle session after a reboot would still break the network, since sysctl changes are lost on reboot. Thus, let's be extra hardcore and write it to /etc/sysctl.conf so that it goes the way we want it after a reboot. Thus, sshuttle should break your network at most once. Which still sucks, but hopefully nobody will notice.
2011-02-04ui-macos: move the noLatencyControl setting to a per-connection setting.Avery Pennarun
I think some connections you'll want to optimize for latency, and others for bandwidth. Probably. Also, use a dropdown box instead of a checkbox; that way we can make it more clear what each of the settings means. While we're here, adjust all the anchor settings for the different display items so that resizing the dialog box works sensibly.
2011-02-04stresstest.py: a program to create lots and lots of TCP connections.Avery Pennarun
This version is a bit limited: it always only connects back to itself, which is always on 127.0.0.1. It also doesn't really find any problems, other than odd behaviour when Linux runs out of available port numbers after a while.
2011-02-02Add --wrap option to force channel number wrapping at a lower number.Avery Pennarun
This makes it easier to actually test what happens when channel numbers wrap around. The good news: it works. However, I did find a bug where sshuttle would die if we completely ran out of available channel numbers because so many of them were open. This would never realistically happen at the default of 65535 channels (we'd run out of file descriptors first), but it's still a bug, so let's handle it by just dropping the connection when it happens.
2011-02-01ui-macos: include routing type in each connection title.Avery Pennarun
This makes it extra clear when a connection is for "all routes" vs. custom vs. auto.
2011-02-01ui-macos: add checkboxes for --no-latency-control and --dns options.Avery Pennarun
2011-01-26Oops, left in a junk option that causes a crash without --dns.sshuttle-0.50aAvery Pennarun
2011-01-26Merge branch 'dns'sshuttle-0.50Avery Pennarun
* dns: dns on MacOS: use divert sockets instead of 'fwd' rules. client.py: do DNS listener on the same port as the TCP listener. Move client._islocal() to helpers.islocal() in preparation for sharing. dns: add support for MacOS (but it doesn't work...) Oops, dns_done() crashed if the request had already been timed out. dns: trim DNS channel handlers after a response, or after a timeout. dns: extract 'nameserver' lines from /etc/resolv.conf Extremely basic, but functional, DNS proxying support (--dns option)
2011-01-26dns on MacOS: use divert sockets instead of 'fwd' rules.Avery Pennarun
It turns out diverting UDP sockets is pretty easy compared to TCP (which makes it all the more embarrassing that they screwed up 'fwd' support for UDP and not TCP, but oh well). So let's use divert sockets instead of transproxy for our DNS packets. This is a little tricky because we have to do it all in firewall.py, since divert sockets require root access, and only firewall.py has root access.
2011-01-26client.py: do DNS listener on the same port as the TCP listener.Avery Pennarun
UDP and TCP have separate port namespaces, so to make it easier to keep track of what's going on, just use the same transproxy port number for both. We still need two sockets, but now tcpdumps are easier to understand.
2011-01-26Move client._islocal() to helpers.islocal() in preparation for sharing.Avery Pennarun
2011-01-26dns: add support for MacOS (but it doesn't work...)Avery Pennarun
...because stupid MacOS ipfw 'fwd' rules don't work quite right with udp. It can intercept packets bound for remote hosts, but it doesn't correctly rewrite the port number from its original to the new socket, so it gets dropped by the local kernel anyway. That is, a packet to 1.2.3.4:53 should be redirected to, say, 127.0.0.1:9999, the local DNS listener socket. But instead, it gets sent to 127.0.0.1:53, which nobody is listening on, so it gets eaten. Sigh.
2011-01-26Oops, dns_done() crashed if the request had already been timed out.Avery Pennarun
2011-01-26dns: trim DNS channel handlers after a response, or after a timeout.Avery Pennarun
This avoids memory/socket leaks.
2011-01-26dns: extract 'nameserver' lines from /etc/resolv.confAvery Pennarun
2011-01-26Extremely basic, but functional, DNS proxying support (--dns option)Avery Pennarun
Limitations: - uses a hardcoded DNS server IP on both client and server - never expires request/response objects, so leaks memory and sockets - works only with iptables, not with ipfw
2011-01-25Merge branch 'fullness'Avery Pennarun
Tests with speedtest.net to a linode.com server: Downstream Upstream No sshuttle 1.25 Mbit/s 0.55 Mbit/s Default 0.75 Mbit/s 0.51 Mbit/s --no-latency-control 1.25 Mbit/s 0.55 Mbit/s * fullness: man page for the --no-latency-control option. options: remove unused 'exe' parameter options.py: generate usage string correctly for no-* options. Implement the optional fullness checking a bit more like I like it. new option to disable fullness checking
2011-01-25man page for the --no-latency-control option.Avery Pennarun
2011-01-25options: remove unused 'exe' parameterAvery Pennarun
The 'exe' parameter was added in the hope of using it for additional contextual information in the help text that Options generates. It was till then abandoned and was judged as superflous information. Remove the 'exe' parameter from Options' constructor. (copied from the 'bup' project) Signed-off-by: Gabriel Filion <lelutin@gmail.com>
2011-01-25options.py: generate usage string correctly for no-* options.Avery Pennarun
Signed-off-by: Avery Pennarun <apenwarr@gmail.com>
2011-01-25Implement the optional fullness checking a bit more like I like it.Avery Pennarun
Looks like it worked before, but personal preference is a killer. The new name is "--no-latency-control".
2011-01-25new option to disable fullness checkingRoger
On high latency links, the PING/PONG round trip triggered by fullness checking could kill the bandwidth. Disabling it could result in >10x bandwidth increase in some setups where the existing latency is already high and the available bandwidth is also high.
2011-01-25Don't die if iptables doesn't have 'ttl match' support.Avery Pennarun
ttl matching is only needed if your server is the same machine as the client, which is kind of useless anyway (other than for testing), so there's no reason for it to be fatal if that doesn't work. Reported by "Alphazo" on the mailing list, who managed to get sshuttle working on his Nokia N900 by removing the ttl stuff.
2011-01-22ui-macos: guess we don't need stupid.py anymore.Avery Pennarun
It was just a test.
2011-01-22Merge branch 'macapp'sshuttle-0.45Avery Pennarun
A cute little GUI for sshuttle on MacOS, written using pyobjc. * macapp: ui-macos: call the main binary MacOS/Sshuttle. ui-macos/git-export.do: write the generated app to a branch. ui-macos/default.app.do: get rid of some duplicated files. ui-macos: Actually prompt for passwords instead of assuming a default. ui-macos: Don't enable connecting for hosts with Custom but zero subnets. ui-macos: Smoother log messages in the log window. ui-macos: Notice when we've connected; make debug logs optional. ui-macos: Much better connection status reporting. ui-macos/run.do: a shortcut for running debug.app. ui-macos/*: "a series of unfortunate events."
2011-01-22ui-macos: call the main binary MacOS/Sshuttle.Avery Pennarun
That way we can 'killall Sshuttle' and so on, and it looks right in the process list.
2011-01-22ui-macos/git-export.do: write the generated app to a branch.Avery Pennarun
2011-01-22ui-macos/default.app.do: get rid of some duplicated files.Avery Pennarun
2011-01-22ui-macos: Actually prompt for passwords instead of assuming a default.Avery Pennarun
2011-01-22ui-macos: Don't enable connecting for hosts with Custom but zero subnets.Avery Pennarun
That would cause the sshuttle client to die.
2011-01-22ui-macos: Smoother log messages in the log window.Avery Pennarun
2011-01-22ui-macos: Notice when we've connected; make debug logs optional.Avery Pennarun
2011-01-22ui-macos: Much better connection status reporting.Avery Pennarun
2011-01-22ui-macos/run.do: a shortcut for running debug.app.Avery Pennarun
2011-01-22ui-macos/*: "a series of unfortunate events."Avery Pennarun
Just kidding. This is a squash of a whole bunch of unlabeled temporary commits that I produced over the last couple of weeks while writing a UI for MacOS while riding on airplanes and sitting in airports. So long, batch of useless commits!
2011-01-22options.py: don't die if tty width is set to 0.Avery Pennarun
This sometimes happens if weird people, such as myself, open a pty without setting the width field correctly.