Skip to content

Instantly share code, notes, and snippets.

@Caesim404
Created November 17, 2016 17:19
Show Gist options
  • Save Caesim404/e1b57a84601bb30cceb5adc08e87bb84 to your computer and use it in GitHub Desktop.
Save Caesim404/e1b57a84601bb30cceb5adc08e87bb84 to your computer and use it in GitHub Desktop.
Helps run wine steam (or another program) in a network namespace.
#!/bin/bash
ns=${ns:-steamns}
veth0=${veth0:-veth0}
veth1=${veth1:-veth1}
addr0=${addr0:-10.1.1.1/24}
addr1=${addr1:-10.1.1.2/24}
sudo=${sudo:-sudo}
dev=${dev:-`ip route show | awk 'NR==1 { print $5 }'`}
echo "Guessing that your interface is $dev"
if [ "`sysctl -n net.ipv4.ip_forward`" = "0" ]; then
echo "IPv4 forwarding not enabled. Enabling"
$sudo sysctl net.ipv4.ip_forward=1
fi
iptablerules=(
"POSTROUTING -t nat -o $dev -j MASQUERADE"
"FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT"
"FORWARD -i $veth0 -o $dev -j ACCEPT"
)
if [ "$delete" = "1" ]; then
echo "Deleting everything"
for rule in "${iptablerules[@]}"; do
$sudo iptables -D $rule
done
$sudo ip netns del $ns
exit
fi
for rule in "${iptablerules[@]}"; do
$sudo iptables -C $rule > /dev/null 2>&1
if [ "$?" = "1" ]; then
echo "Rule \"$rule\" doesnt exist. Adding it"
$sudo iptables -A $rule
fi
done
ns_exists="0"
for n in `ip netns list`; do
if [ "$n" = "$ns" ]; then
ns_exists="1"
break
fi
done
if [ "$ns_exists" = "0" ]; then
echo "Namespace $ns doesn't exist. Creating it"
$sudo ip link add $veth0 type veth peer name $veth1
$sudo ip netns add $ns
$sudo ip netns exec $ns ip link set dev lo up
$sudo ip link set $veth1 netns $ns
$sudo ip netns exec $ns ip addr add $addr1 dev $veth1
$sudo ip netns exec $ns ip link set up dev $veth1
$sudo ip netns exec $ns ip route add default via `echo $addr0 | cut -d / -f 1` dev $veth1
$sudo ip addr add $addr0 dev $veth0
$sudo ip link set up dev $veth0
fi
$sudo ip netns exec $ns sudo -u $USER "$@"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment