env: create tailscale-proxy for ingress-private IP with new env
diff --git a/core/installer/welcome/env.go b/core/installer/welcome/env.go
index 3d0ed70..4e74181 100644
--- a/core/installer/welcome/env.go
+++ b/core/installer/welcome/env.go
@@ -12,6 +12,7 @@
 	"io/fs"
 	"log"
 	"net/http"
+	"net/netip"
 	"path"
 	"path/filepath"
 	"strings"
@@ -502,15 +503,20 @@
 	r.CommitAndPush("initialize config")
 	nsGen := installer.NewPrefixGenerator(req.Name + "-")
 	emptySuffixGen := installer.NewEmptySuffixGenerator()
+	ingressPrivateIP, err := netip.ParseAddr("10.1.0.1")
+	if err != nil {
+		return err
+	}
 	{
+		headscaleIP := ingressPrivateIP.Next()
 		app, err := appsRepo.Find("metallb-ipaddresspool")
 		if err != nil {
 			return err
 		}
 		if err := appManager.Install(*app, nsGen, installer.NewSuffixGenerator("-ingress-private"), map[string]any{
 			"Name":       fmt.Sprintf("%s-ingress-private", req.Name),
-			"From":       "10.1.0.1",
-			"To":         "10.1.0.1",
+			"From":       ingressPrivateIP.String(),
+			"To":         ingressPrivateIP.String(),
 			"AutoAssign": false,
 			"Namespace":  "metallb-system",
 		}); err != nil {
@@ -518,8 +524,8 @@
 		}
 		if err := appManager.Install(*app, nsGen, installer.NewSuffixGenerator("-headscale"), map[string]any{
 			"Name":       fmt.Sprintf("%s-headscale", req.Name),
-			"From":       "10.1.0.2",
-			"To":         "10.1.0.2",
+			"From":       headscaleIP.String(),
+			"To":         headscaleIP.String(),
 			"AutoAssign": false,
 			"Namespace":  "metallb-system",
 		}); err != nil {
@@ -527,7 +533,7 @@
 		}
 		if err := appManager.Install(*app, nsGen, emptySuffixGen, map[string]any{
 			"Name":       req.Name,
-			"From":       "10.1.0.100",
+			"From":       "10.1.0.100", // TODO(gio): auto-generate
 			"To":         "10.1.0.254",
 			"AutoAssign": false,
 			"Namespace":  "metallb-system",
@@ -545,6 +551,20 @@
 		}
 	}
 	{
+		app, err := appsRepo.Find("tailscale-proxy")
+		if err != nil {
+			return err
+		}
+		if err := appManager.Install(*app, nsGen, emptySuffixGen, map[string]any{
+			"Username":       "private-network-proxy",
+			"IPSubnet":       "10.1.0.0/24",
+			"HostnameSuffix": "private-network-proxy",
+		}); err != nil {
+			return err
+		}
+		// TODO(giolekva): headscale accept routes
+	}
+	{
 		app, err := appsRepo.Find("certificate-issuer-public")
 		if err != nil {
 			return err