Skip to content

Instantly share code, notes, and snippets.

@sfan5
Last active August 29, 2015 14:05
Show Gist options
  • Save sfan5/524cebd0d9fed9614a21 to your computer and use it in GitHub Desktop.
Save sfan5/524cebd0d9fed9614a21 to your computer and use it in GitHub Desktop.
Allows you to easily share your internet connection with a machine connected via LAN (act as a router)
#!/bin/bash -e
if [ $# -ne 2 ]; then
echo "Usage: share-network.sh <internal interface> <external interface>"
exit 1
fi
sudo whoami >/dev/null # Make sudo cache the password
mkdir share-network$$
cd share-network$$
cat >dnsmasq.conf <<HEREDOC
no-hosts
dhcp-range=192.168.77.100, 192.168.77.200, 255.255.255.0, 24h
dhcp-range=fd10:cafe::100, fd10:cafe::500, 64, 24h
enable-ra
HEREDOC
echo "interface=$1" >> dnsmasq.conf
echo -e "\033[32m:: Enabling interface"
sudo ip link set dev $1 up
echo -e "\033[32m:: Adding IP addresses"
sudo ip addr add 192.168.77.1/32 scope link dev $1
sleep 0.1 # wat
sudo ip addr add fd10:cafe::1/64 scope link dev $1
echo -e "\033[32m:: Adding routes"
sudo ip route add 192.168.77.0/24 dev $1 scope link src 192.168.77.1
echo -e "\033[32m:: Adding NAT rules"
sudo sysctl net.ipv4.ip_forward=1 &>/dev/null
sudo iptables -t nat -A POSTROUTING -o $2 -j MASQUERADE
sudo iptables -A FORWARD -i $2 -o $1 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i $1 -o $2 -j ACCEPT
echo -e "\033[32m:: Starting dnsmasq"
echo -e "\033[33m!! Press ^C to stop the interface sharing"
sudo dnsmasq -k -x dnsmasq.pid -C dnsmasq.conf -l dnsmasq.leases || true
echo
echo -e "\033[32m:: Removing NAT rules"
sudo iptables -t nat -D POSTROUTING -o $2 -j MASQUERADE
sudo iptables -D FORWARD -i $2 -o $1 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -D FORWARD -i $1 -o $2 -j ACCEPT
echo -e "\033[32m:: Removing routes"
sudo ip route del 192.168.77.0/24 dev $1 scope link src 192.168.77.1
echo -e "\033[32m:: Removing IP addresses"
sudo ip addr del 192.168.77.1/32 scope link dev $1
sudo ip addr del fd10:cafe::1/64 scope link dev $1
echo -e "\033[32m:: Disabling interface"
sudo ip link set dev $1 down
rm -f dnsmasq.conf dnsmasq.pid dnsmasq.leases
cd ..
rmdir share-network$$
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment