Commit Graph

57 Commits

Author SHA1 Message Date
Cuong Manh Le
b8772d7b4a cmd/ctrld: log fatal if could not start the listener 2023-02-03 02:16:19 +07:00
Cuong Manh Le
eb0dd6235e cmd/ctrld: use NetworkManager to disable DNS manager
Currently, ctrld force NetworkManager ignore auto DNS setup from DHCP
per connection. This does not work well, because an interface can be
attached to many connections. So if `ctrld` started with a connection,
then user connect to new one, the DNS configured by ctrld will be
override.

Instead, we can force NetworkManager not to manage DNS by:

 - Using dns=none
 - Set systemd-resolved=false

So NetworkManager won't attempt to send DNS setup to systemd-resolved,
leaving what ctrld set as-is.
2023-02-02 22:10:06 +07:00
Cuong Manh Le
1c2cd555bd cmd/ctrld: ensure ctrld start after NetworkManager 2023-02-01 23:11:33 +07:00
Cuong Manh Le
8c47ffb5ec cmd/ctrld: make NetworkManger ignore auto dns
So the DNS that set by ctrld won't be override on startup.
2023-02-01 23:11:33 +07:00
Cuong Manh Le
44bd580e48 cmd/ctrld: fix reset DNS when uninstalling
The "--iface" needs to be explicitly passed, otherwise, ctrld does not
know which interface to restore.
2023-02-01 23:11:33 +07:00
Cuong Manh Le
61156453b2 cmd/ctrld: workaround setting DNS issue on Linux
On some Ubuntu systems, we experiment with DNS is not set even though
systemd-resolved log indicates that it set them. To ensure the DNS will
be set, after setting them, double check the current DNS for interface
is actually the value was set, if not, attempting to set again.

While at it, also make sure the DNS is set when ctrld start on Linux.
2023-02-01 23:11:33 +07:00
Cuong Manh Le
37de5441c1 cmd/ctrld: silent DHCPv6 error
It's hard to imagine a system with IPv6 but not IPv4, so silent the
DHCPv6 error if any.
2023-02-01 23:11:33 +07:00
Cuong Manh Le
149941f17f cmd/ctrld: do set/reset DNS only when start/stop/uninstall 2023-02-01 23:11:33 +07:00
Cuong Manh Le
4ea1e64795 all: make cache scope to upstream 2023-02-01 23:11:32 +07:00
Cuong Manh Le
06372031b5 cmd/ctrld: add more logging details 2023-02-01 23:09:01 +07:00
Cuong Manh Le
c82a0e2562 cmd/ctrld: optimizing set/reset DNS
Currently, when reset DNS, ctrld always find the net.Interface by
interface name. This may produce unexpected error because the interface
table may be cleared at the time ctrld is being stopped.

Instead, we can get the net interface only once, and use that interface
for restoring the DNS before shutting down.

While at it, also making logging message clearer.
2023-01-24 16:57:16 +07:00
Cuong Manh Le
b0dc96aa01 cmd/ctrld: use debug level when --log set 2023-01-24 16:57:08 +07:00
Cuong Manh Le
31e4bcb4c3 cmd/ctrld: init logging before processing --cd
So it's easier to debug in case of weird thing happens.
2023-01-24 01:32:51 +07:00
Cuong Manh Le
9fc546443b cmd/ctrld: ignore syscall.EINTR on Linux
Observing while tested on Ubuntu 22.04.1, the request to reset using
systemd resolved via dbus may be interruped.
2023-01-24 01:32:44 +07:00
Cuong Manh Le
8a2c48e996 cmd/ctrld: allow log/cache flags work wit --cd flag 2023-01-23 14:06:51 +07:00
Cuong Manh Le
1186963531 all: use controld dialer for probing network 2023-01-23 14:06:43 +07:00
Cuong Manh Le
837563dcd5 all: wait for network up before running
If ctrld setup the interface correctly, the interface DNS is set to
ctrld listener address. At boot time, the ctrld is not up yet, so it
would break the processing Control D config fetching.

Fixing this by waiting for network up before doing the query.
2023-01-23 00:48:33 +07:00
Cuong Manh Le
cd37d93b06 cmd/ctrld: ensure cleaning up done when self-uninstall
While at it, also making DNS reset always use DHCP.
2023-01-21 13:43:07 +07:00
Cuong Manh Le
f6371360bc all: satisfy staticcheck 2023-01-21 01:14:03 +07:00
Cuong Manh Le
065a391ff4 cmd/ctrld: check elevated privilege for service mode 2023-01-21 01:13:59 +07:00
Cuong Manh Le
d830706692 cmd/ctrld: always process "--cd" in start mode
So if there's any error in fetching configuration, it will be reported
to user and service won't start.
2023-01-21 01:13:54 +07:00
Cuong Manh Le
14ddb1faa0 cmd/ctrld: ensure writing config message is printed on non-Windows 2023-01-21 01:13:49 +07:00
Cuong Manh Le
326d7a43d4 cmd/ctrld: rework reset DNS statically vs DHCP
If the interface was originally configured DNS via DHCP, ctrld should
reset the interface using DHCP, not statically.
2023-01-20 21:43:04 +07:00
Cuong Manh Le
87091f20b0 cmd/ctrld: print writing config file message 2023-01-20 21:43:04 +07:00
Cuong Manh Le
d418e57def cmd/ctrld: workaround ipv6 dns resolver on Windows
On Windows, there's no easy way for disabling/removing IPv6 DNS
resolver, so we check whether we can listen on ::1, then spawn a
listener for receiving DNS requests
2023-01-20 21:43:04 +07:00
Cuong Manh Le
49e9b8b51c cmd/ctrld: do not change DNS for tailscale0
Let user decide which option is prefer.
2023-01-20 21:43:04 +07:00
Cuong Manh Le
dc7d77b22e cmd/ctrld: only add "--iface" if not changed for start/stop aliases 2023-01-20 21:43:04 +07:00
Cuong Manh Le
a9fabd1b79 cmd/ctrld: separate iface variable for start/stop aliases
While at it, also fix a bug in getDNSByResolvectl, which won't return
correct DNS values if there's no "%" symbol in output.
2023-01-20 21:43:04 +07:00
Cuong Manh Le
47c280cf1d cmd/ctrld: use network service on darwin 2023-01-20 21:43:04 +07:00
Cuong Manh Le
05cfb9b661 cmd/ctrld: fix typo in Network name 2023-01-20 21:43:04 +07:00
Cuong Manh Le
99b0cbedc3 cmd/ctrld: include DNS in interface list 2023-01-20 21:43:04 +07:00
Cuong Manh Le
1f2bd90308 cmd/ctrld: fix wrong stop command alias
It's "stopCmd", not "startCmd"
2023-01-20 21:43:04 +07:00
Cuong Manh Le
b00a7c34ee cmd/ctrld: add --iface for setting DNS on specific interface 2023-01-20 21:43:03 +07:00
Cuong Manh Le
d5344aea52 cmd/ctrld: add list interfaces command 2023-01-20 21:37:55 +07:00
Cuong Manh Le
8e164185b9 cmd/ctrld: always pass config file on windows start mode
On windows, the SYSTEM user is used to run ctrld service. This user has
different environment with the user that run the `ctrld` binary via CLI.
That causes the mismatch issue in config file path, log path, or more
generally, everything that involve with home directory.

To circumvent this pain, just always passing the config path and the
original home dir in start mode. So `ctrld run` command can setup things
correctly.
2023-01-20 21:37:50 +07:00
Cuong Manh Le
53306235dc all: uninstall service if got invalid config from API 2023-01-20 21:37:44 +07:00
Cuong Manh Le
3a5c71514c cmd/ctrld: ensure viper is re-new in --cd mode 2023-01-20 21:37:39 +07:00
Cuong Manh Le
279e938b2a cmd/ctrld: make "--cd" always owerwrites the config
While at it, also make the toml encoded config format nicer.
2023-01-20 21:37:34 +07:00
Cuong Manh Le
9f90811567 cmd/ctrld: update config when "--cd" present 2023-01-20 21:37:24 +07:00
Cuong Manh Le
6edd42629e cmd/ctrld: correct write default config condition when start
!76 was merged without rebasing on latest master, so it missed the
condition of "--cd" when checking for writing default config.
2023-01-20 21:37:10 +07:00
Cuong Manh Le
8e91123dbf cmd/ctrld: write default config to home dir when start
This piece was missing in last resolving conflicts.
2023-01-20 21:37:04 +07:00
Cuong Manh Le
3014556f2d cmd/ctrld,internal/controld: do not set bootstrap IP 2023-01-20 21:36:56 +07:00
Cuong Manh Le
b021833ed6 cmd/ctrld: correct the write default config condition
When "--cd" is supplied, we don't want to write default config. This
happens due to faulty in resolving conflicts in !70.
2023-01-20 21:36:52 +07:00
Cuong Manh Le
7b13fd862d cmd/ctrld: fix mis-handling of start alias
For "ctrld start", os.Args length is just 2, so we we could not shorten
it from 3.
2023-01-20 21:36:45 +07:00
Cuong Manh Le
114ef9aad6 all: add starting service with Control D config 2023-01-20 21:33:38 +07:00
Cuong Manh Le
ec72af1916 cmd/ctrld: add commands to control ctrld as a system service
Supported actions:

 - start: install and start ctrld as a system service
 - stop: stop the ctrld service
 - restart: restart ctrld service
 - status: show status of ctrld service
 - uninstall: remove ctrld from system service
2023-01-20 21:33:31 +07:00
Cuong Manh Le
9e7578fb29 cmd/ctrld: use better approach for checking IPv6 available
Some operating systems may throw a confirmation dialog when attempting
to listen on any interface other than loopback. A better approach is
checking for any interface which is up and can be routed IP traffic.
2023-01-20 21:33:25 +07:00
Cuong Manh Le
e331a4113a Rework os resolver
Currently, os resolver not only handle A and AAAA records, but also does
it wrongly, since when it packs AAAA record to a dns.A record.

This commit reworks os resolver to make it works with all supported
record types.
2023-01-20 21:33:17 +07:00
Cuong Manh Le
e6d77e2586 cmd/ctrld: add default value and CLI flag for cache size 2023-01-20 21:33:11 +07:00
Cuong Manh Le
b93970ccfd all: add CLI flags for no config start
This commit adds the ability to start `ctrld` without config file. All
necessary information can be provided via command line flags, either in
base64 encoded config or launch arguments.
2023-01-20 21:33:05 +07:00