When working with VPN clients like vpnc
and manually modifying routing tables, it's common to encounter situations where network connectivity breaks completely. The classic symptoms include:
ping: sendto: Network is unreachable
traceroute: bind: Can't assign requested address
While rebooting always works to restore default routes, developers need a more surgical approach. Here's how to completely reset your routing table without restarting:
# Step 1: Flush all existing routes
sudo route -n flush
# Step 2: Restore default routes
sudo ifconfig en0 down && sudo ifconfig en0 up
Replace en0
with your active network interface (check with ifconfig
or networksetup -listallhardwareports
).
For more complex scenarios where basic interface reset doesn't work, try this comprehensive approach:
# Disable Wi-Fi (or Ethernet)
sudo networksetup -setairportpower en0 off
# Flush DNS cache
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
# Clear all routes
sudo route -n flush
sudo route -n flush all
# Re-enable interface
sudo networksetup -setairportpower en0 on
For frequent VPN users, create a recovery script (netfix.sh
):
#!/bin/bash
INTERFACE="en0"
echo "[+] Flushing routing tables..."
sudo route -n flush
sudo route -n flush all
echo "[+] Resetting interface $INTERFACE..."
sudo ifconfig $INTERFACE down
sleep 2
sudo ifconfig $INTERFACE up
echo "[+] Restoring default route..."
sleep 5 # Wait for DHCP
route -n get default
echo "[+] Network reset complete"
If problems persist after reset:
- Check for leftover VPN processes:
ps aux | grep vpn
- Verify DNS with:
scutil --dns
- Inspect system logs:
log show --predicate 'process == "configd"' --last 10m
Remember that MacOS (especially newer versions) handles routing differently:
- Service order matters (System Preferences > Network)
- IPv6 can interfere - try disabling temporarily
- VPN clients often create high-priority routes
When working with vpnc
or other VPN clients on macOS, we often need to manipulate routing tables for local network access. But things can go wrong quickly:
$ ping google.com
ping: sendto: Network is unreachable
$ traceroute example.com
traceroute: bind: Can't assign requested address
After a fresh boot, macOS creates these essential routes automatically:
- Default gateway route
- Local network routes
- Loopback interface route
- Multicast/broadcast routes
Here's how to restore routing tables without rebooting:
# Step 1: Flush all existing routes
sudo route -n flush
# Step 2: Bring interfaces down and up (en0 for wired, en1 for wireless)
sudo ifconfig en0 down
sudo ifconfig en0 up
# Alternative: Use networksetup for Wi-Fi
sudo networksetup -setnetworkserviceenabled Wi-Fi off
sudo networksetup -setnetworkserviceenabled Wi-Fi on
For frequent VPN users, create a reset script:
#!/bin/bash
# Reset routing
echo "Flushing routes..."
sudo route -n flush
# Reset primary interface
INTERFACE=$(route -n get default | grep 'interface' | awk '{print $2}')
echo "Resetting interface $INTERFACE..."
sudo ifconfig $INTERFACE down
sudo ifconfig $INTERFACE up
# Verify restoration
echo "New routing table:"
netstat -rn
For complete network stack reset:
# Release and renew DHCP
sudo ipconfig set en0 DHCP
sudo ipconfig set en0 NONE # For some configurations
sudo ipconfig set en0 DHCP
Check these when routes misbehave:
# Show current routing table
netstat -rn
# Verify interface status
ifconfig
# Check DNS resolution
dscacheutil -q host -a name google.com