Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit23bedfa

Browse files
committed
feat: vpn uses WorkspaceHostnameSuffix for DNS names
1 parent6cee450 commit23bedfa

File tree

5 files changed

+215
-153
lines changed

5 files changed

+215
-153
lines changed

‎codersdk/workspacesdk/workspacesdk.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ type AgentConnectionInfo struct {
143143
DERPMap*tailcfg.DERPMap`json:"derp_map"`
144144
DERPForceWebSocketsbool`json:"derp_force_websockets"`
145145
DisableDirectConnectionsbool`json:"disable_direct_connections"`
146-
HostnameSuffixstring`json:"hostname_suffix"`
146+
HostnameSuffixstring`json:"hostname_suffix,omitempty"`
147147
}
148148

149149
func (c*Client)AgentConnectionInfoGeneric(ctx context.Context) (AgentConnectionInfo,error) {

‎tailnet/controllers.go

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -863,11 +863,12 @@ func (r *basicResumeTokenRefresher) refresh() {
863863
}
864864

865865
typeTunnelAllWorkspaceUpdatesControllerstruct {
866-
coordCtrl*TunnelSrcCoordController
867-
dnsHostSetterDNSHostsSetter
868-
updateHandlerUpdatesHandler
869-
ownerUsernamestring
870-
logger slog.Logger
866+
coordCtrl*TunnelSrcCoordController
867+
dnsHostSetterDNSHostsSetter
868+
dnsNameOptionsDNSNameOptions
869+
updateHandlerUpdatesHandler
870+
ownerUsernamestring
871+
logger slog.Logger
871872

872873
mu sync.Mutex
873874
updater*tunnelUpdater
@@ -882,37 +883,39 @@ type Workspace struct {
882883
agentsmap[uuid.UUID]*Agent
883884
}
884885

886+
typeDNSNameOptionsstruct {
887+
Suffixstring
888+
}
889+
885890
// updateDNSNames updates the DNS names for all agents in the workspace.
886891
// DNS hosts must be all lowercase, or the resolver won't be able to find them.
887892
// Usernames are globally unique & case-insensitive.
888893
// Workspace names are unique per-user & case-insensitive.
889894
// Agent names are unique per-workspace & case-insensitive.
890-
func (w*Workspace)updateDNSNames()error {
895+
func (w*Workspace)updateDNSNames(optionsDNSNameOptions)error {
891896
wsName:=strings.ToLower(w.Name)
892897
username:=strings.ToLower(w.ownerUsername)
893898
forid,a:=rangew.agents {
894899
agentName:=strings.ToLower(a.Name)
895900
names:=make(map[dnsname.FQDN][]netip.Addr)
896901
// TODO: technically, DNS labels cannot start with numbers, but the rules are often not
897902
// strictly enforced.
898-
fqdn,err:=dnsname.ToFQDN(fmt.Sprintf("%s.%s.me.coder.",agentName,wsName))
903+
fqdn,err:=dnsname.ToFQDN(fmt.Sprintf("%s.%s.me.%s.",agentName,wsName,options.Suffix))
899904
iferr!=nil {
900905
returnerr
901906
}
902907
names[fqdn]= []netip.Addr{CoderServicePrefix.AddrFromUUID(a.ID)}
903-
fqdn,err=dnsname.ToFQDN(fmt.Sprintf("%s.%s.%s.coder.",agentName,wsName,username))
908+
fqdn,err=dnsname.ToFQDN(fmt.Sprintf("%s.%s.%s.%s.",agentName,wsName,username,options.Suffix))
904909
iferr!=nil {
905910
returnerr
906911
}
907912
names[fqdn]= []netip.Addr{CoderServicePrefix.AddrFromUUID(a.ID)}
908913
iflen(w.agents)==1 {
909-
fqdn,err:=dnsname.ToFQDN(fmt.Sprintf("%s.coder.",wsName))
914+
fqdn,err=dnsname.ToFQDN(fmt.Sprintf("%s.%s.",wsName,options.Suffix))
910915
iferr!=nil {
911916
returnerr
912917
}
913-
for_,a:=rangew.agents {
914-
names[fqdn]= []netip.Addr{CoderServicePrefix.AddrFromUUID(a.ID)}
915-
}
918+
names[fqdn]= []netip.Addr{CoderServicePrefix.AddrFromUUID(a.ID)}
916919
}
917920
a.Hosts=names
918921
w.agents[id]=a
@@ -949,6 +952,7 @@ func (t *TunnelAllWorkspaceUpdatesController) New(client WorkspaceUpdatesClient)
949952
logger:t.logger,
950953
coordCtrl:t.coordCtrl,
951954
dnsHostsSetter:t.dnsHostSetter,
955+
dnsNameOptions:t.dnsNameOptions,
952956
updateHandler:t.updateHandler,
953957
ownerUsername:t.ownerUsername,
954958
recvLoopDone:make(chanstruct{}),
@@ -995,6 +999,7 @@ type tunnelUpdater struct {
995999
updateHandlerUpdatesHandler
9961000
ownerUsernamestring
9971001
recvLoopDonechanstruct{}
1002+
dnsNameOptionsDNSNameOptions
9981003

9991004
sync.Mutex
10001005
workspacesmap[uuid.UUID]*Workspace
@@ -1249,7 +1254,7 @@ func (t *tunnelUpdater) allAgentIDsLocked() []uuid.UUID {
12491254
func (t*tunnelUpdater)updateDNSNamesLocked()map[dnsname.FQDN][]netip.Addr {
12501255
names:=make(map[dnsname.FQDN][]netip.Addr)
12511256
for_,w:=ranget.workspaces {
1252-
err:=w.updateDNSNames()
1257+
err:=w.updateDNSNames(t.dnsNameOptions)
12531258
iferr!=nil {
12541259
// This should never happen in production, because converting the FQDN only fails
12551260
// if names are too long, and we put strict length limits on agent, workspace, and user
@@ -1272,10 +1277,11 @@ type TunnelAllOption func(t *TunnelAllWorkspaceUpdatesController)
12721277

12731278
// WithDNS configures the tunnelAllWorkspaceUpdatesController to set DNS names for all workspaces
12741279
// and agents it learns about.
1275-
funcWithDNS(dDNSHostsSetter,ownerUsernamestring)TunnelAllOption {
1280+
funcWithDNS(dDNSHostsSetter,ownerUsernamestring,optionsDNSNameOptions)TunnelAllOption {
12761281
returnfunc(t*TunnelAllWorkspaceUpdatesController) {
12771282
t.dnsHostSetter=d
12781283
t.ownerUsername=ownerUsername
1284+
t.dnsNameOptions=options
12791285
}
12801286
}
12811287

@@ -1291,7 +1297,11 @@ func WithHandler(h UpdatesHandler) TunnelAllOption {
12911297
funcNewTunnelAllWorkspaceUpdatesController(
12921298
logger slog.Logger,c*TunnelSrcCoordController,opts...TunnelAllOption,
12931299
)*TunnelAllWorkspaceUpdatesController {
1294-
t:=&TunnelAllWorkspaceUpdatesController{logger:logger,coordCtrl:c}
1300+
t:=&TunnelAllWorkspaceUpdatesController{
1301+
logger:logger,
1302+
coordCtrl:c,
1303+
dnsNameOptions:DNSNameOptions{"coder"},
1304+
}
12951305
for_,opt:=rangeopts {
12961306
opt(t)
12971307
}

‎tailnet/controllers_test.go

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1521,7 +1521,7 @@ func TestTunnelAllWorkspaceUpdatesController_Initial(t *testing.T) {
15211521
fUH:=newFakeUpdateHandler(ctx,t)
15221522
fDNS:=newFakeDNSSetter(ctx,t)
15231523
coordC,updateC,updateCtrl:=setupConnectedAllWorkspaceUpdatesController(ctx,t,logger,
1524-
tailnet.WithDNS(fDNS,"testy"),
1524+
tailnet.WithDNS(fDNS,"testy", tailnet.DNSNameOptions{Suffix:"mctest"}),
15251525
tailnet.WithHandler(fUH),
15261526
)
15271527

@@ -1563,13 +1563,13 @@ func TestTunnelAllWorkspaceUpdatesController_Initial(t *testing.T) {
15631563

15641564
// Also triggers setting DNS hosts
15651565
expectedDNS:=map[dnsname.FQDN][]netip.Addr{
1566-
"w1a1.w1.me.coder.": {ws1a1IP},
1567-
"w2a1.w2.me.coder.": {w2a1IP},
1568-
"w2a2.w2.me.coder.": {w2a2IP},
1569-
"w1a1.w1.testy.coder.": {ws1a1IP},
1570-
"w2a1.w2.testy.coder.": {w2a1IP},
1571-
"w2a2.w2.testy.coder.": {w2a2IP},
1572-
"w1.coder.": {ws1a1IP},
1566+
"w1a1.w1.me.mctest.": {ws1a1IP},
1567+
"w2a1.w2.me.mctest.": {w2a1IP},
1568+
"w2a2.w2.me.mctest.": {w2a2IP},
1569+
"w1a1.w1.testy.mctest.": {ws1a1IP},
1570+
"w2a1.w2.testy.mctest.": {w2a1IP},
1571+
"w2a2.w2.testy.mctest.": {w2a2IP},
1572+
"w1.mctest.": {ws1a1IP},
15731573
}
15741574
dnsCall:=testutil.RequireRecvCtx(ctx,t,fDNS.calls)
15751575
require.Equal(t,expectedDNS,dnsCall.hosts)
@@ -1584,23 +1584,23 @@ func TestTunnelAllWorkspaceUpdatesController_Initial(t *testing.T) {
15841584
{
15851585
ID:w1a1ID,Name:"w1a1",WorkspaceID:w1ID,
15861586
Hosts:map[dnsname.FQDN][]netip.Addr{
1587-
"w1.coder.": {ws1a1IP},
1588-
"w1a1.w1.me.coder.": {ws1a1IP},
1589-
"w1a1.w1.testy.coder.": {ws1a1IP},
1587+
"w1.mctest.": {ws1a1IP},
1588+
"w1a1.w1.me.mctest.": {ws1a1IP},
1589+
"w1a1.w1.testy.mctest.": {ws1a1IP},
15901590
},
15911591
},
15921592
{
15931593
ID:w2a1ID,Name:"w2a1",WorkspaceID:w2ID,
15941594
Hosts:map[dnsname.FQDN][]netip.Addr{
1595-
"w2a1.w2.me.coder.": {w2a1IP},
1596-
"w2a1.w2.testy.coder.": {w2a1IP},
1595+
"w2a1.w2.me.mctest.": {w2a1IP},
1596+
"w2a1.w2.testy.mctest.": {w2a1IP},
15971597
},
15981598
},
15991599
{
16001600
ID:w2a2ID,Name:"w2a2",WorkspaceID:w2ID,
16011601
Hosts:map[dnsname.FQDN][]netip.Addr{
1602-
"w2a2.w2.me.coder.": {w2a2IP},
1603-
"w2a2.w2.testy.coder.": {w2a2IP},
1602+
"w2a2.w2.me.mctest.": {w2a2IP},
1603+
"w2a2.w2.testy.mctest.": {w2a2IP},
16041604
},
16051605
},
16061606
},
@@ -1632,7 +1632,7 @@ func TestTunnelAllWorkspaceUpdatesController_DeleteAgent(t *testing.T) {
16321632
fUH:=newFakeUpdateHandler(ctx,t)
16331633
fDNS:=newFakeDNSSetter(ctx,t)
16341634
coordC,updateC,updateCtrl:=setupConnectedAllWorkspaceUpdatesController(ctx,t,logger,
1635-
tailnet.WithDNS(fDNS,"testy"),
1635+
tailnet.WithDNS(fDNS,"testy", tailnet.DNSNameOptions{Suffix:"coder"}),
16361636
tailnet.WithHandler(fUH),
16371637
)
16381638

@@ -1775,7 +1775,7 @@ func TestTunnelAllWorkspaceUpdatesController_DNSError(t *testing.T) {
17751775
fConn:=&fakeCoordinatee{}
17761776
tsc:=tailnet.NewTunnelSrcCoordController(logger,fConn)
17771777
uut:=tailnet.NewTunnelAllWorkspaceUpdatesController(logger,tsc,
1778-
tailnet.WithDNS(fDNS,"testy"),
1778+
tailnet.WithDNS(fDNS,"testy", tailnet.DNSNameOptions{Suffix:"coder"}),
17791779
)
17801780

17811781
updateC:=newFakeWorkspaceUpdateClient(ctx,t)

‎vpn/client.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,11 @@ func (*client) NewConn(initCtx context.Context, serverURL *url.URL, token string
107107
iferr!=nil {
108108
returnnil,xerrors.Errorf("get connection info: %w",err)
109109
}
110+
// default to DNS suffix of "coder" if the server hasn't set it (might be too old).
111+
dnsNameOptions:= tailnet.DNSNameOptions{Suffix:"coder"}
112+
ifconnInfo.HostnameSuffix!="" {
113+
dnsNameOptions.Suffix=connInfo.HostnameSuffix
114+
}
110115

111116
headers.Set(codersdk.SessionTokenHeader,token)
112117
dialer:=workspacesdk.NewWebsocketDialer(options.Logger,rpcURL,&websocket.DialOptions{
@@ -148,7 +153,7 @@ func (*client) NewConn(initCtx context.Context, serverURL *url.URL, token string
148153
updatesCtrl:=tailnet.NewTunnelAllWorkspaceUpdatesController(
149154
options.Logger,
150155
coordCtrl,
151-
tailnet.WithDNS(conn,me.Username),
156+
tailnet.WithDNS(conn,me.Username,dnsNameOptions),
152157
tailnet.WithHandler(options.UpdateHandler),
153158
)
154159
controller.WorkspaceUpdatesCtrl=updatesCtrl

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp