• Avery Pennarun's avatar
    firewall.py: MacOS: permanently set the net.inet.ip.scopedroute sysctl. · 4fde980f
    Avery Pennarun authored
    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.
    4fde980f
Name
Last commit
Last update
compat Loading commit data...
ui-macos Loading commit data...
.gitignore Loading commit data...
LICENSE Loading commit data...
Makefile Loading commit data...
README.md Loading commit data...
assembler.py Loading commit data...
client.py Loading commit data...
firewall.py Loading commit data...
helpers.py Loading commit data...
hostwatch.py Loading commit data...
main.py Loading commit data...
options.py Loading commit data...
server.py Loading commit data...
ssh.py Loading commit data...
sshuttle Loading commit data...
sshuttle.md Loading commit data...
ssnet.py Loading commit data...
ssyslog.py Loading commit data...
stresstest.py Loading commit data...