Skip to content

Commit 4c93b19

Browse files
committed
WIP find segfault
Signed-off-by: Spike Curtis <spike@coder.com>
1 parent c820eee commit 4c93b19

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

coderd/devtunnel/tunnel.go

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func NewWithConfig(ctx context.Context, logger slog.Logger, cfg Config) (*Tunnel
6060

6161
tun, tnet, err := netstack.CreateNetTUN(
6262
[]netip.Addr{server.ClientIP},
63-
[]netip.Addr{},
63+
[]netip.Addr{netip.AddrFrom4([4]byte{1, 1, 1, 1})},
6464
1280,
6565
)
6666
if err != nil {
@@ -71,19 +71,27 @@ func NewWithConfig(ctx context.Context, logger slog.Logger, cfg Config) (*Tunnel
7171
if err != nil {
7272
return nil, nil, xerrors.Errorf("resolve endpoint: %w", err)
7373
}
74+
// In IPv6, we need to enclose the address to in [] before passing to wireguard's endpoint key, like
75+
// [2001:abcd::1]:8888. We'll use netip.AddrPort to correctly handle this.
76+
wgAddr, err := netip.ParseAddr(wgip.String())
77+
if err != nil {
78+
return nil, nil, xerrors.Errorf("parse address: %w", err)
79+
}
80+
wgEndpoint := netip.AddrPortFrom(wgAddr, cfg.Tunnel.WireguardPort)
7481

75-
dev := device.NewDevice(tun, conn.NewDefaultBind(), device.NewLogger(device.LogLevelSilent, ""))
76-
err = dev.IpcSet(fmt.Sprintf(`private_key=%s
82+
dev := device.NewDevice(tun, conn.NewDefaultBind(), device.NewLogger(device.LogLevelVerbose, "client "))
83+
setString := fmt.Sprintf(`private_key=%s
7784
public_key=%s
78-
endpoint=[%s]:%d
85+
endpoint=%s
7986
persistent_keepalive_interval=21
8087
allowed_ip=%s/128`,
8188
hex.EncodeToString(cfg.PrivateKey[:]),
8289
server.ServerPublicKey,
83-
wgip.IP.String(),
84-
cfg.Tunnel.WireguardPort,
90+
wgEndpoint.String(),
8591
server.ServerIP.String(),
86-
))
92+
)
93+
logger.Debug(ctx, "IpcSet", slog.F("kv", setString))
94+
err = dev.IpcSet(setString)
8795
if err != nil {
8896
return nil, nil, xerrors.Errorf("configure wireguard ipc: %w", err)
8997
}

coderd/devtunnel/tunnel_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package devtunnel_test
22

33
import (
4+
"cdr.dev/slog"
45
"context"
56
"encoding/hex"
67
"encoding/json"
@@ -51,7 +52,7 @@ func TestTunnel(t *testing.T) {
5152
fTunServer := newFakeTunnelServer(t)
5253
cfg := fTunServer.config()
5354

54-
tun, errCh, err := devtunnel.NewWithConfig(ctx, slogtest.Make(t, nil), cfg)
55+
tun, errCh, err := devtunnel.NewWithConfig(ctx, slogtest.Make(t, nil).Leveled(slog.LevelDebug), cfg)
5556
require.NoError(t, err)
5657
t.Log(tun.URL)
5758

@@ -123,7 +124,7 @@ func newFakeTunnelServer(t *testing.T) *fakeTunnelServer {
123124
1280,
124125
)
125126
require.NoError(t, err)
126-
dev := device.NewDevice(tun, conn.NewDefaultBind(), device.NewLogger(device.LogLevelVerbose, ""))
127+
dev := device.NewDevice(tun, conn.NewDefaultBind(), device.NewLogger(device.LogLevelVerbose, "server "))
127128
err = dev.IpcSet(fmt.Sprintf(`private_key=%s
128129
listen_port=%d`,
129130
hex.EncodeToString(privBytes[:]),
@@ -193,7 +194,7 @@ allowed_ip=%s/128`,
193194
PublicKey: device.NoisePublicKey(pub),
194195
Tunnel: devtunnel.Node{
195196
HostnameHTTPS: strings.TrimPrefix(f.server.URL, "https://"),
196-
HostnameWireguard: "::1",
197+
HostnameWireguard: "127.0.0.1",
197198
WireguardPort: wgPort,
198199
},
199200
HTTPClient: f.server.Client(),

0 commit comments

Comments
 (0)