Skip to content

Commit cc569a7

Browse files
committed
fix(coderd): pass block endpoints into servertailnet
1 parent 1bb4aec commit cc569a7

File tree

8 files changed

+64
-10
lines changed

8 files changed

+64
-10
lines changed

coderd/coderd.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,7 @@ func New(options *Options) *API {
485485
func(context.Context) (tailnet.MultiAgentConn, error) {
486486
return (*api.TailnetCoordinator.Load()).ServeMultiAgent(uuid.New()), nil
487487
},
488+
options.DeploymentValues.DERP.Config.BlockDirect.Value(),
488489
api.TracerProvider,
489490
)
490491
if err != nil {

coderd/tailnet.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ func NewServerTailnet(
4949
derpMapFn func() *tailcfg.DERPMap,
5050
derpForceWebSockets bool,
5151
getMultiAgent func(context.Context) (tailnet.MultiAgentConn, error),
52+
blockEndpoints bool,
5253
traceProvider trace.TracerProvider,
5354
) (*ServerTailnet, error) {
5455
logger = logger.Named("servertailnet")
@@ -58,6 +59,7 @@ func NewServerTailnet(
5859
DERPMap: originalDerpMap,
5960
DERPForceWebSockets: derpForceWebSockets,
6061
Logger: logger,
62+
BlockEndpoints: blockEndpoints,
6163
})
6264
if err != nil {
6365
return nil, xerrors.Errorf("create tailnet conn: %w", err)

coderd/tailnet_test.go

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func TestServerTailnet_AgentConn_OK(t *testing.T) {
4040
defer cancel()
4141

4242
// Connect through the ServerTailnet
43-
agents, serverTailnet := setupServerTailnetAgent(t, 1)
43+
agents, serverTailnet := setupServerTailnetAgent(t, 1, false)
4444
a := agents[0]
4545

4646
conn, release, err := serverTailnet.AgentConn(ctx, a.id)
@@ -59,7 +59,7 @@ func TestServerTailnet_ReverseProxy(t *testing.T) {
5959
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
6060
defer cancel()
6161

62-
agents, serverTailnet := setupServerTailnetAgent(t, 1)
62+
agents, serverTailnet := setupServerTailnetAgent(t, 1, false)
6363
a := agents[0]
6464

6565
u, err := url.Parse(fmt.Sprintf("http://127.0.0.1:%d", codersdk.WorkspaceAgentHTTPAPIServerPort))
@@ -87,7 +87,7 @@ func TestServerTailnet_ReverseProxy(t *testing.T) {
8787
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
8888
defer cancel()
8989

90-
agents, serverTailnet := setupServerTailnetAgent(t, 1)
90+
agents, serverTailnet := setupServerTailnetAgent(t, 1, false)
9191
a := agents[0]
9292

9393
registry := prometheus.NewRegistry()
@@ -124,7 +124,7 @@ func TestServerTailnet_ReverseProxy(t *testing.T) {
124124
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
125125
defer cancel()
126126

127-
agents, serverTailnet := setupServerTailnetAgent(t, 1)
127+
agents, serverTailnet := setupServerTailnetAgent(t, 1, false)
128128
a := agents[0]
129129

130130
u, err := url.Parse(fmt.Sprintf("http://127.0.0.1:%d", codersdk.WorkspaceAgentHTTPAPIServerPort))
@@ -149,7 +149,7 @@ func TestServerTailnet_ReverseProxy(t *testing.T) {
149149
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
150150
defer cancel()
151151

152-
agents, serverTailnet := setupServerTailnetAgent(t, 1)
152+
agents, serverTailnet := setupServerTailnetAgent(t, 1, false)
153153
a := agents[0]
154154
port := ":4444"
155155
ln, err := a.TailnetConn().Listen("tcp", port)
@@ -202,7 +202,7 @@ func TestServerTailnet_ReverseProxy(t *testing.T) {
202202
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
203203
defer cancel()
204204

205-
agents, serverTailnet := setupServerTailnetAgent(t, 2)
205+
agents, serverTailnet := setupServerTailnetAgent(t, 2, false)
206206
port := ":4444"
207207

208208
for i, ag := range agents {
@@ -257,7 +257,7 @@ func TestServerTailnet_ReverseProxy(t *testing.T) {
257257
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
258258
defer cancel()
259259

260-
agents, serverTailnet := setupServerTailnetAgent(t, 1)
260+
agents, serverTailnet := setupServerTailnetAgent(t, 1, false)
261261
a := agents[0]
262262

263263
const expectedResponseCode = 209
@@ -285,6 +285,36 @@ func TestServerTailnet_ReverseProxy(t *testing.T) {
285285

286286
assert.Equal(t, expectedResponseCode, res.StatusCode)
287287
})
288+
289+
t.Run("BlockEndpoints", func(t *testing.T) {
290+
t.Parallel()
291+
292+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
293+
defer cancel()
294+
295+
agents, serverTailnet := setupServerTailnetAgent(t, 1, true)
296+
a := agents[0]
297+
298+
require.True(t, a.TailnetConn().GetBlockEndpoints(), "expected BlockEndpoints to be set")
299+
300+
u, err := url.Parse(fmt.Sprintf("http://127.0.0.1:%d", codersdk.WorkspaceAgentHTTPAPIServerPort))
301+
require.NoError(t, err)
302+
303+
rp := serverTailnet.ReverseProxy(u, u, a.id)
304+
305+
rw := httptest.NewRecorder()
306+
req := httptest.NewRequest(
307+
http.MethodGet,
308+
u.String(),
309+
nil,
310+
).WithContext(ctx)
311+
312+
rp.ServeHTTP(rw, req)
313+
res := rw.Result()
314+
defer res.Body.Close()
315+
316+
assert.Equal(t, http.StatusOK, res.StatusCode)
317+
})
288318
}
289319

290320
type wrappedListener struct {
@@ -311,7 +341,7 @@ type agentWithID struct {
311341
agent.Agent
312342
}
313343

314-
func setupServerTailnetAgent(t *testing.T, agentNum int) ([]agentWithID, *coderd.ServerTailnet) {
344+
func setupServerTailnetAgent(t *testing.T, agentNum int, blockEndpoints bool) ([]agentWithID, *coderd.ServerTailnet) {
315345
logger := slogtest.Make(t, nil).Leveled(slog.LevelDebug)
316346
derpMap, derpServer := tailnettest.RunDERPAndSTUN(t)
317347

@@ -357,6 +387,7 @@ func setupServerTailnetAgent(t *testing.T, agentNum int) ([]agentWithID, *coderd
357387
func() *tailcfg.DERPMap { return derpMap },
358388
false,
359389
func(context.Context) (tailnet.MultiAgentConn, error) { return coord.ServeMultiAgent(uuid.New()), nil },
390+
blockEndpoints,
360391
trace.NewNoopTracerProvider(),
361392
)
362393
require.NoError(t, err)

enterprise/derpmesh/derpmesh.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ import (
1212
"tailscale.com/derp/derphttp"
1313
"tailscale.com/types/key"
1414

15-
"github.com/coder/coder/v2/tailnet"
16-
1715
"cdr.dev/slog"
16+
"github.com/coder/coder/v2/tailnet"
1817
)
1918

2019
// New constructs a new mesh for DERP servers.

enterprise/wsproxy/wsproxy.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ func New(ctx context.Context, opts *Options) (*Server, error) {
250250
},
251251
regResp.DERPForceWebSockets,
252252
s.DialCoordinator,
253+
false, // TODO: this will be covered in a subsequent pr.
253254
s.TracerProvider,
254255
)
255256
if err != nil {

tailnet/configmaps.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,14 @@ func (c *configMaps) setBlockEndpoints(blockEndpoints bool) {
253253
c.Broadcast()
254254
}
255255

256+
// getBlockEndpoints returns the value of the most recent setBlockEndpoints
257+
// call.
258+
func (c *configMaps) getBlockEndpoints() bool {
259+
c.L.Lock()
260+
defer c.L.Unlock()
261+
return c.blockEndpoints
262+
}
263+
256264
// setDERPMap sets the DERP map, triggering a configuration of the engine if it has changed.
257265
// c.L MUST NOT be held.
258266
func (c *configMaps) setDERPMap(derpMap *tailcfg.DERPMap) {

tailnet/conn.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,10 @@ type Conn struct {
311311
trafficStats *connstats.Statistics
312312
}
313313

314+
func (c *Conn) GetBlockEndpoints() bool {
315+
return c.configMaps.getBlockEndpoints() && c.nodeUpdater.getBlockEndpoints()
316+
}
317+
314318
func (c *Conn) InstallCaptureHook(f capture.Callback) {
315319
c.mutex.Lock()
316320
defer c.mutex.Unlock()

tailnet/node.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,3 +228,11 @@ func (u *nodeUpdater) setBlockEndpoints(blockEndpoints bool) {
228228
u.blockEndpoints = blockEndpoints
229229
u.Broadcast()
230230
}
231+
232+
// getBlockEndpoints returns the value of the most recent setBlockEndpoints
233+
// call.
234+
func (u *nodeUpdater) getBlockEndpoints() bool {
235+
u.L.Lock()
236+
defer u.L.Unlock()
237+
return u.blockEndpoints
238+
}

0 commit comments

Comments
 (0)