38 lines
1.3 KiB
Bash
Executable File
38 lines
1.3 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
action=${1:?up or down is required}
|
|
bridge=${RUNNER_BRIDGE:-mvrbr0}
|
|
subnet=${RUNNER_SUBNET:-172.30.0.0/24}
|
|
gateway=${RUNNER_GATEWAY:-172.30.0.1}
|
|
dhcp_start=${RUNNER_DHCP_START:-172.30.0.10}
|
|
dhcp_end=${RUNNER_DHCP_END:-172.30.0.200}
|
|
pid_file=${RUNNER_DNSMASQ_PID:-/run/microvm-runner/dnsmasq.pid}
|
|
|
|
case "$action" in
|
|
up)
|
|
mkdir -p "$(dirname "$pid_file")"
|
|
ip link show "$bridge" >/dev/null 2>&1 || ip link add "$bridge" type bridge
|
|
ip address show dev "$bridge" | grep -Fq "$gateway/24" || ip address add "$gateway/24" dev "$bridge"
|
|
ip link set "$bridge" up
|
|
sysctl -q -w net.ipv4.ip_forward=1
|
|
iptables -t nat -C POSTROUTING -s "$subnet" -j MASQUERADE 2>/dev/null || \
|
|
iptables -t nat -A POSTROUTING -s "$subnet" -j MASQUERADE
|
|
dnsmasq --interface="$bridge" --bind-interfaces --except-interface=lo \
|
|
--dhcp-range="$dhcp_start,$dhcp_end,255.255.255.0,1h" \
|
|
--dhcp-option="option:router,$gateway" --pid-file="$pid_file"
|
|
;;
|
|
down)
|
|
if test -r "$pid_file"; then
|
|
kill "$(cat "$pid_file")" 2>/dev/null || true
|
|
rm -f -- "$pid_file"
|
|
fi
|
|
iptables -t nat -D POSTROUTING -s "$subnet" -j MASQUERADE 2>/dev/null || true
|
|
ip link delete "$bridge" 2>/dev/null || true
|
|
;;
|
|
*)
|
|
echo "expected up or down" >&2
|
|
exit 64
|
|
;;
|
|
esac
|