|
#!/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$$ |