From d53a4d800b54d73c48c65d87997e2dbf440bf611 Mon Sep 17 00:00:00 2001 From: Ethan Dickson Date: Wed, 29 Jan 2025 12:43:13 +1100 Subject: [PATCH 1/3] fix(vpn): send subnet masks and prefix lengths from router --- vpn/router.go | 33 +++++++++++++++++++++++++-------- vpn/tunnel_internal_test.go | 8 ++------ 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/vpn/router.go b/vpn/router.go index 07cba68d36333..6dfc49b4f2e44 100644 --- a/vpn/router.go +++ b/vpn/router.go @@ -36,12 +36,16 @@ func (*vpnRouter) Close() error { func convertRouterConfig(cfg router.Config) *NetworkSettingsRequest { v4LocalAddrs := make([]string, 0) + v4SubnetMasks := make([]string, 0) v6LocalAddrs := make([]string, 0) + v6PrefixLengths := make([]uint32, 0) for _, addrs := range cfg.LocalAddrs { if addrs.Addr().Is4() { - v4LocalAddrs = append(v4LocalAddrs, addrs.String()) + v4LocalAddrs = append(v4LocalAddrs, addrs.Addr().String()) + v4SubnetMasks = append(v4SubnetMasks, prefixToSubnetMask(addrs)) } else if addrs.Addr().Is6() { - v6LocalAddrs = append(v6LocalAddrs, addrs.String()) + v6LocalAddrs = append(v6LocalAddrs, addrs.Addr().String()) + v6PrefixLengths = append(v6PrefixLengths, uint32(addrs.Bits())) } else { continue } @@ -69,18 +73,31 @@ func convertRouterConfig(cfg router.Config) *NetworkSettingsRequest { } } - return &NetworkSettingsRequest{ - Mtu: uint32(cfg.NewMTU), - Ipv4Settings: &NetworkSettingsRequest_IPv4Settings{ + var v4Settings *NetworkSettingsRequest_IPv4Settings + if len(v4LocalAddrs) > 0 || len(v4Routes) > 0 || len(v4ExcludedRoutes) > 0 { + v4Settings = &NetworkSettingsRequest_IPv4Settings{ Addrs: v4LocalAddrs, + SubnetMasks: v4SubnetMasks, IncludedRoutes: v4Routes, ExcludedRoutes: v4ExcludedRoutes, - }, - Ipv6Settings: &NetworkSettingsRequest_IPv6Settings{ + Router: "", // NA + } + } + + var v6Settings *NetworkSettingsRequest_IPv6Settings + if len(v6LocalAddrs) > 0 || len(v6Routes) > 0 || len(v6ExcludedRoutes) > 0 { + v6Settings = &NetworkSettingsRequest_IPv6Settings{ Addrs: v6LocalAddrs, + PrefixLengths: v6PrefixLengths, IncludedRoutes: v6Routes, ExcludedRoutes: v6ExcludedRoutes, - }, + } + } + + return &NetworkSettingsRequest{ + Mtu: uint32(cfg.NewMTU), + Ipv4Settings: v4Settings, + Ipv6Settings: v6Settings, TunnelOverheadBytes: 0, // N/A TunnelRemoteAddress: "", // N/A } diff --git a/vpn/tunnel_internal_test.go b/vpn/tunnel_internal_test.go index 8a55205605d7d..0110ce58ab195 100644 --- a/vpn/tunnel_internal_test.go +++ b/vpn/tunnel_internal_test.go @@ -317,12 +317,8 @@ func TestUpdater_createPeerUpdate(t *testing.T) { }, }) require.Len(t, update.UpsertedAgents, 1) - slices.SortFunc(update.UpsertedAgents[0].Fqdn, func(a, b string) int { - return strings.Compare(a, b) - }) - slices.SortFunc(update.DeletedAgents[0].Fqdn, func(a, b string) int { - return strings.Compare(a, b) - }) + slices.SortFunc(update.UpsertedAgents[0].Fqdn, strings.Compare) + slices.SortFunc(update.DeletedAgents[0].Fqdn, strings.Compare) require.Equal(t, update, &PeerUpdate{ UpsertedWorkspaces: []*Workspace{ {Id: w1ID[:], Name: "w1", Status: Workspace_Status(proto.Workspace_STARTING)}, From 9d15ec050883be05c943cf286ce9d9b37bdb7075 Mon Sep 17 00:00:00 2001 From: Ethan Dickson Date: Wed, 29 Jan 2025 12:54:19 +1100 Subject: [PATCH 2/3] bump tailscale --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 3268e221a9020..a1f8b6b7a7ac8 100644 --- a/go.mod +++ b/go.mod @@ -36,7 +36,7 @@ replace github.com/tcnksm/go-httpstat => github.com/coder/go-httpstat v0.0.0-202 // There are a few minor changes we make to Tailscale that we're slowly upstreaming. Compare here: // https://github.com/tailscale/tailscale/compare/main...coder:tailscale:main -replace tailscale.com => github.com/coder/tailscale v1.1.1-0.20250121163848-c7962497b482 +replace tailscale.com => github.com/coder/tailscale v1.1.1-0.20250129014916-8086c871eae6 // This is replaced to include // 1. a fix for a data race: c.f. https://github.com/tailscale/wireguard-go/pull/25 diff --git a/go.sum b/go.sum index d0310fee404f3..1737a0ea1e0b1 100644 --- a/go.sum +++ b/go.sum @@ -240,8 +240,8 @@ github.com/coder/serpent v0.10.0 h1:ofVk9FJXSek+SmL3yVE3GoArP83M+1tX+H7S4t8BSuM= github.com/coder/serpent v0.10.0/go.mod h1:cZFW6/fP+kE9nd/oRkEHJpG6sXCtQ+AX7WMMEHv0Y3Q= github.com/coder/ssh v0.0.0-20231128192721-70855dedb788 h1:YoUSJ19E8AtuUFVYBpXuOD6a/zVP3rcxezNsoDseTUw= github.com/coder/ssh v0.0.0-20231128192721-70855dedb788/go.mod h1:aGQbuCLyhRLMzZF067xc84Lh7JDs1FKwCmF1Crl9dxQ= -github.com/coder/tailscale v1.1.1-0.20250121163848-c7962497b482 h1:hCyBW9rsYwBmyAP+jnsmUnYC0dVlyLdOuMvyFpGOiIk= -github.com/coder/tailscale v1.1.1-0.20250121163848-c7962497b482/go.mod h1:1ggFFdHTRjPRu9Yc1yA7nVHBYB50w9Ce7VIXNqcW6Ko= +github.com/coder/tailscale v1.1.1-0.20250129014916-8086c871eae6 h1:prDIwUcsSEKbs1Rc5FfdvtSfz2XGpW3FnJtWR+Mc7MY= +github.com/coder/tailscale v1.1.1-0.20250129014916-8086c871eae6/go.mod h1:1ggFFdHTRjPRu9Yc1yA7nVHBYB50w9Ce7VIXNqcW6Ko= github.com/coder/terraform-config-inspect v0.0.0-20250107175719-6d06d90c630e h1:JNLPDi2P73laR1oAclY6jWzAbucf70ASAvf5mh2cME0= github.com/coder/terraform-config-inspect v0.0.0-20250107175719-6d06d90c630e/go.mod h1:Gz/z9Hbn+4KSp8A2FBtNszfLSdT2Tn/uAKGuVqqWmDI= github.com/coder/terraform-provider-coder v1.0.4 h1:MJldCvykIQzzqBVUDjCJpPyqvKelAAHrtJKfIIx4Qxo= From d79989e6e3213682bb046fe65dc8108519dbce46 Mon Sep 17 00:00:00 2001 From: Ethan Dickson Date: Wed, 29 Jan 2025 02:02:15 +0000 Subject: [PATCH 3/3] test --- vpn/router_internal_test.go | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/vpn/router_internal_test.go b/vpn/router_internal_test.go index 4f7f6d769a79b..d4a3f639677de 100644 --- a/vpn/router_internal_test.go +++ b/vpn/router_internal_test.go @@ -27,7 +27,8 @@ func TestConvertRouterConfig(t *testing.T) { expected: &NetworkSettingsRequest{ Mtu: 1500, Ipv4Settings: &NetworkSettingsRequest_IPv4Settings{ - Addrs: []string{"100.64.0.1/32"}, + Addrs: []string{"100.64.0.1"}, + SubnetMasks: []string{"255.255.255.255"}, IncludedRoutes: []*NetworkSettingsRequest_IPv4Settings_IPv4Route{ {Destination: "192.168.0.0", Mask: "255.255.255.0", Router: ""}, }, @@ -36,7 +37,8 @@ func TestConvertRouterConfig(t *testing.T) { }, }, Ipv6Settings: &NetworkSettingsRequest_IPv6Settings{ - Addrs: []string{"fd7a:115c:a1e0::1/128"}, + Addrs: []string{"fd7a:115c:a1e0::1"}, + PrefixLengths: []uint32{128}, IncludedRoutes: []*NetworkSettingsRequest_IPv6Settings_IPv6Route{ {Destination: "fd00::", PrefixLength: 64, Router: ""}, }, @@ -50,16 +52,8 @@ func TestConvertRouterConfig(t *testing.T) { name: "Empty", cfg: router.Config{}, expected: &NetworkSettingsRequest{ - Ipv4Settings: &NetworkSettingsRequest_IPv4Settings{ - Addrs: []string{}, - IncludedRoutes: []*NetworkSettingsRequest_IPv4Settings_IPv4Route{}, - ExcludedRoutes: []*NetworkSettingsRequest_IPv4Settings_IPv4Route{}, - }, - Ipv6Settings: &NetworkSettingsRequest_IPv6Settings{ - Addrs: []string{}, - IncludedRoutes: []*NetworkSettingsRequest_IPv6Settings_IPv6Route{}, - ExcludedRoutes: []*NetworkSettingsRequest_IPv6Settings_IPv6Route{}, - }, + Ipv4Settings: nil, + Ipv6Settings: nil, }, }, }