From 22a1a237498264da36d1a92dc8ecae79861f2a86 Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Thu, 20 Feb 2025 13:49:21 +0100 Subject: [PATCH] =?UTF-8?q?ISP=20for=20my=20home=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- machines/hispgw/attach.sh | 6 ++++++ machines/hispgw/opts.shs | 3 +++ machines/hispgw/run-shim.sh | 7 +++++++ machines/hispgw/setup.sh | 27 +++++++++++++++++++++++++++ machines/hispgw/start.sh | 11 +++++++++++ machines/iana/setup.sh | 6 ++++++ machines/iana/start.sh | 2 ++ networks/home_up/up.sh | 5 +++++ networks/homeisp_up/up.sh | 5 +++++ 9 files changed, 72 insertions(+) create mode 100755 machines/hispgw/attach.sh create mode 100644 machines/hispgw/opts.shs create mode 100755 machines/hispgw/run-shim.sh create mode 100755 machines/hispgw/setup.sh create mode 100755 machines/hispgw/start.sh create mode 100755 networks/home_up/up.sh create mode 100755 networks/homeisp_up/up.sh diff --git a/machines/hispgw/attach.sh b/machines/hispgw/attach.sh new file mode 100755 index 0000000..9d0b686 --- /dev/null +++ b/machines/hispgw/attach.sh @@ -0,0 +1,6 @@ +#!/bin/sh +set -eu +. ./lib.shs +. machines/$mach/opts.shs + +nsenter --wdns=$nethorror_root $namespaces "$@" diff --git a/machines/hispgw/opts.shs b/machines/hispgw/opts.shs new file mode 100644 index 0000000..f0998ef --- /dev/null +++ b/machines/hispgw/opts.shs @@ -0,0 +1,3 @@ +#!/bin/false + +namespaces="--net=./state/$mach/netns --mount=./state/$mach/mntns" diff --git a/machines/hispgw/run-shim.sh b/machines/hispgw/run-shim.sh new file mode 100755 index 0000000..2f42dd8 --- /dev/null +++ b/machines/hispgw/run-shim.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +set -eu +. ./lib.shs + +ensure_started +attach machines/$mach/setup.sh diff --git a/machines/hispgw/setup.sh b/machines/hispgw/setup.sh new file mode 100755 index 0000000..aae12f0 --- /dev/null +++ b/machines/hispgw/setup.sh @@ -0,0 +1,27 @@ +#!/bin/sh +set -eu + +# typically: bring up the networks +ip link set dev lo up + +# uplink +# glue networks for both AFs +ip addr add 100.64.224.2/30 dev up_ve +ip addr add 2a01:4f8:c0c:36b8:ffe0::2/126 dev up_ve +# (cg)nat: TODO as we are (1) lazy and (2) wishing for public IPv4 address anyway +#nft add table ip nat +#nft add chain ip nat postrouting type nat hook postrouting priority srcnat +#nft add rule oifname \"up_ve\" ip saddr TODO masquerade +ip link set dev up_ve up +ip route add default via 100.64.224.1 dev up_ve +ip route add default via 2a01:4f8:c0c:36b8:ffe0::1 dev up_ve + +# network to my home +# TODO: make this PPP(oE) in the future? +# It's silly to think that I would be the first customer, but the IP addresses do not care :-P +ip addr add 100.64.225.1/30 dev home_ve +ip addr add 2a01:4f8:c0c:36b8:ffe1::1/126 dev home_ve +ip link set dev home_ve up +# low-key delegated prefix :-P +ip route add 2a01:4f8:c0c:36b8:ffe1::/80 via 2a01:4f8:c0c:36b8:ffe1::2 dev home_ve +# TODO: DHCPv6 or IPv6CP diff --git a/machines/hispgw/start.sh b/machines/hispgw/start.sh new file mode 100755 index 0000000..a307215 --- /dev/null +++ b/machines/hispgw/start.sh @@ -0,0 +1,11 @@ +#!/bin/sh +set -eu +. ./lib.shs +. machines/$mach/opts.shs + +setup_statedir + +unshare $namespaces /bin/true # just create the namespaces + +veth_to_bridge up_ve homeisp_up +veth_to_bridge home_ve home_up diff --git a/machines/iana/setup.sh b/machines/iana/setup.sh index 629e7a3..be946f1 100755 --- a/machines/iana/setup.sh +++ b/machines/iana/setup.sh @@ -16,3 +16,9 @@ ip addr add fe80:ff01::1/64 dev vps_ve scope link ip link set dev vps_ve up ip route add 2a01:4f8:c0c:36b8:ff01::/80 via fe80:ff01::2 dev vps_ve +# Home ISP +ip addr add 100.64.224.1/30 dev homeisp_ve +ip addr add 2a01:4f8:c0c:36b8:ffe0::1/126 dev homeisp_ve +ip link set dev homeisp_ve up +ip route add 100.64.224.0/20 via 100.64.224.2 dev homeisp_ve +ip route add 2a01:4f8:c0c:36b8:ffe0::/76 via 2a01:4f8:c0c:36b8:ffe0::2 dev homeisp_ve diff --git a/machines/iana/start.sh b/machines/iana/start.sh index 0d74b12..ca83210 100755 --- a/machines/iana/start.sh +++ b/machines/iana/start.sh @@ -8,3 +8,5 @@ setup_statedir unshare $namespaces /bin/true # just create the namespaces veth_to_bridge vps_ve vpsuplink + +veth_to_bridge homeisp_ve homeisp_up diff --git a/networks/home_up/up.sh b/networks/home_up/up.sh new file mode 100755 index 0000000..19c7ca2 --- /dev/null +++ b/networks/home_up/up.sh @@ -0,0 +1,5 @@ +#!/bin/sh +set -eu + +. ./lib.shs +make_bridge diff --git a/networks/homeisp_up/up.sh b/networks/homeisp_up/up.sh new file mode 100755 index 0000000..19c7ca2 --- /dev/null +++ b/networks/homeisp_up/up.sh @@ -0,0 +1,5 @@ +#!/bin/sh +set -eu + +. ./lib.shs +make_bridge