aboutsummaryrefslogtreecommitdiff
path: root/misc/home_linux_boards/usr/local/bin/homekit_make_netns_per_upstream.sh
diff options
context:
space:
mode:
Diffstat (limited to 'misc/home_linux_boards/usr/local/bin/homekit_make_netns_per_upstream.sh')
-rwxr-xr-xmisc/home_linux_boards/usr/local/bin/homekit_make_netns_per_upstream.sh38
1 files changed, 38 insertions, 0 deletions
diff --git a/misc/home_linux_boards/usr/local/bin/homekit_make_netns_per_upstream.sh b/misc/home_linux_boards/usr/local/bin/homekit_make_netns_per_upstream.sh
new file mode 100755
index 0000000..fb152fa
--- /dev/null
+++ b/misc/home_linux_boards/usr/local/bin/homekit_make_netns_per_upstream.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+set -x
+set -e
+
+get_default_iface() {
+ ip -4 r show default | awk '{print $5}'
+}
+
+declare -A UPSTREAMS=(
+ [mtsil]=102
+ [mtsazov]=100
+ [rtazov]=101
+)
+
+for name in "${!UPSTREAMS[@]}"; do
+ mark=${UPSTREAMS[$name]}
+ veth_addr=10.${mark}.1.1
+ vpeer_addr=10.${mark}.1.2
+ veth_if=veth${name}
+ vpeer_if=vpeer${name}
+
+ ip netns add $name
+ ip link add $veth_if type veth peer name $vpeer_if
+ ip link set $vpeer_if netns $name
+ ip addr add $veth_addr/24 dev $veth_if
+ ip link set $veth_if up
+
+ ip netns exec $name ip addr add $vpeer_addr/24 dev $vpeer_if
+ ip netns exec $name ip link set $vpeer_if up
+ ip netns exec $name ip link set lo up
+ ip netns exec $name ip route add default via $veth_addr
+
+ iptables -t mangle -A PREROUTING -s $vpeer_addr/24 -j MARK --set-mark $mark
+ iptables -t nat -A POSTROUTING -s $vpeer_addr/24 -o "$(get_default_iface)" -j MASQUERADE
+done
+
+sysctl net.ipv4.ip_forward=1