mirror of
https://github.com/Control-D-Inc/ctrld.git
synced 2026-02-03 22:18:39 +00:00
The bootstrap process has two issues that can make ctrld stop resolving after restarting machine host. ctrld uses bootstrap DNS and os nameservers for resolving upstream. On unix, /etc/resolv.conf content is used to get available nameservers. This works well when installing ctrld. However, after being installed, ctrld may modify the content of /etc/resolv.conf itself, to make other apps use its listener as DNS resolver. So when ctrld starts after OS restart, it ends up using [bootstrap DNS + ctrld's listener], for resolving upstream. At this moment, if ctrld could not contact bootstrap DNS for any reason, upstream domain will not be resolved. For above reason, an upstream may not have bootstrap IPs after ctrld starts. When re-bootstrapping, if there's no bootstrap IPs, ctrld should call the setup bootstrap process again. Currently, it does not, causing all queries failed. This commit fixes above issue by adding mechanism for retrieving OS nameservers properly, by querying routing table information: - Parsing /proc/net subsystem on Linux. - For BSD variants, just fetching routing information base from OS. - On Windows, just include the gateway information when reading iface. The fixing for second issue is trivial, just kickoff a bootstrap process if there's no bootstrap IPs when re-boostrapping. While at it, also ensure that fetching resolver information from ControlD API is also used the same approach. Fixes #34
78 lines
3.3 KiB
Modula-2
78 lines
3.3 KiB
Modula-2
module github.com/Control-D-Inc/ctrld
|
|
|
|
go 1.19
|
|
|
|
require (
|
|
github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534
|
|
github.com/cuonglm/osinfo v0.0.0-20230329055532-c513f836da19
|
|
github.com/frankban/quicktest v1.14.3
|
|
github.com/fsnotify/fsnotify v1.6.0
|
|
github.com/go-playground/validator/v10 v10.11.1
|
|
github.com/godbus/dbus/v5 v5.0.6
|
|
github.com/hashicorp/golang-lru/v2 v2.0.1
|
|
github.com/illarion/gonotify v1.0.1
|
|
github.com/insomniacslk/dhcp v0.0.0-20211209223715-7d93572ebe8e
|
|
github.com/kardianos/service v1.2.1
|
|
github.com/miekg/dns v1.1.50
|
|
github.com/pelletier/go-toml/v2 v2.0.6
|
|
github.com/quic-go/quic-go v0.32.0
|
|
github.com/rs/zerolog v1.28.0
|
|
github.com/spf13/cobra v1.4.0
|
|
github.com/spf13/viper v1.14.0
|
|
github.com/stretchr/testify v1.8.1
|
|
golang.org/x/net v0.7.0
|
|
golang.org/x/sync v0.1.0
|
|
golang.org/x/sys v0.5.0
|
|
golang.zx2c4.com/wireguard/windows v0.5.3
|
|
tailscale.com v1.34.1
|
|
)
|
|
|
|
require (
|
|
github.com/alexbrainman/sspi v0.0.0-20210105120005-909beea2cc74 // indirect
|
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
|
github.com/go-playground/locales v0.14.0 // indirect
|
|
github.com/go-playground/universal-translator v0.18.0 // indirect
|
|
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect
|
|
github.com/golang/mock v1.6.0 // indirect
|
|
github.com/google/go-cmp v0.5.9 // indirect
|
|
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect
|
|
github.com/hashicorp/hcl v1.0.0 // indirect
|
|
github.com/inconshreveable/mousetrap v1.0.0 // indirect
|
|
github.com/josharian/native v1.0.0 // indirect
|
|
github.com/jsimonetti/rtnetlink v1.1.2-0.20220408201609-d380b505068b // indirect
|
|
github.com/kr/pretty v0.3.0 // indirect
|
|
github.com/kr/text v0.2.0 // indirect
|
|
github.com/leodido/go-urn v1.2.1 // indirect
|
|
github.com/magiconair/properties v1.8.7 // indirect
|
|
github.com/mattn/go-colorable v0.1.12 // indirect
|
|
github.com/mattn/go-isatty v0.0.14 // indirect
|
|
github.com/mdlayher/ethernet v0.0.0-20190606142754-0394541c37b7 // indirect
|
|
github.com/mdlayher/netlink v1.6.0 // indirect
|
|
github.com/mdlayher/raw v0.0.0-20191009151244-50f2db8cc065 // indirect
|
|
github.com/mdlayher/socket v0.2.3 // indirect
|
|
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
|
github.com/onsi/ginkgo/v2 v2.2.0 // indirect
|
|
github.com/pelletier/go-toml v1.9.5 // indirect
|
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
|
github.com/quic-go/qpack v0.4.0 // indirect
|
|
github.com/quic-go/qtls-go1-18 v0.2.0 // indirect
|
|
github.com/quic-go/qtls-go1-19 v0.2.0 // indirect
|
|
github.com/quic-go/qtls-go1-20 v0.1.0 // indirect
|
|
github.com/rogpeppe/go-internal v1.8.1-0.20211023094830-115ce09fd6b4 // indirect
|
|
github.com/spf13/afero v1.9.3 // indirect
|
|
github.com/spf13/cast v1.5.0 // indirect
|
|
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
|
github.com/spf13/pflag v1.0.5 // indirect
|
|
github.com/subosito/gotenv v1.4.1 // indirect
|
|
github.com/u-root/uio v0.0.0-20220204230159-dac05f7d2cb4 // indirect
|
|
go4.org/mem v0.0.0-20210711025021-927187094b94 // indirect
|
|
golang.org/x/crypto v0.4.0 // indirect
|
|
golang.org/x/exp v0.0.0-20221205204356-47842c84f3db // indirect
|
|
golang.org/x/mod v0.6.0 // indirect
|
|
golang.org/x/text v0.7.0 // indirect
|
|
golang.org/x/tools v0.2.0 // indirect
|
|
gopkg.in/ini.v1 v1.67.0 // indirect
|
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
|
)
|