Cuong Manh Le
71f26a6d81
Add prometheus exporter
...
Updates #6
2024-01-22 23:12:17 +07:00
Cuong Manh Le
b82ad3720c
cmd/cli: guard against nil client info
...
Though it's only possible raised in testing, still better to be safe.
2023-12-19 01:48:07 +07:00
Cuong Manh Le
8d2cb6091e
cmd/cli: add QUERY/REPLY prefix to proxying log
...
So the log in INFO log is aligned, making it easier for human to
monitoring the log, either via console or running "tail" command.
2023-12-19 01:31:30 +07:00
Cuong Manh Le
8db28cb76e
cmd/cli: improving logging of proxying action
...
INFO level becomes a sensible setting for normal operation that does not
overwhelm. Adding some small details to make DEBUG level more useful.
2023-12-18 21:31:08 +07:00
Cuong Manh Le
41846b6d4c
all: add config to enable/disable answering WAN clients
2023-12-13 14:53:29 +07:00
Cuong Manh Le
684019c2e3
all: force re-bootstrapping with timeout error
2023-12-11 22:55:16 +07:00
Cuong Manh Le
0bb51aa71d
cmd/cli: add loop guard for LAN/PTR queries
2023-12-06 15:33:05 +07:00
Cuong Manh Le
af2c1c87e0
cmd/cli: improve logging for new LAN/PTR flow
2023-12-06 15:33:05 +07:00
Cuong Manh Le
7591a0ccc6
all: add client id preference config param
...
So client can chose how client id is generated.
2023-12-06 15:33:05 +07:00
Cuong Manh Le
c3ff8182af
all: ignoring local interfaces RFC1918 IP for private resolver
...
Otherwises, the discovery may make a looping with new PTR query flow.
2023-12-06 15:33:05 +07:00
Cuong Manh Le
5897c174d3
all: fix LAN hostname checking condition
...
The LAN hostname in question is FQDN, "." suffix must be trimmed before
checking.
While at it, also add tests for LAN/PTR query checking functions.
2023-12-06 15:33:05 +07:00
Cuong Manh Le
f9a3f4c045
Implement new flow for LAN and private PTR resolution
...
- Use client info table.
- If no sufficient data, use gateway/os/defined local upstreams.
- If no data is returned, use remote upstream
2023-11-30 18:28:51 +07:00
Cuong Manh Le
9e6e647ff8
Use discover_ptr_endpoints for PTR resolver
2023-11-27 22:19:16 +07:00
Cuong Manh Le
a2116e5eb5
cmd/cli: do not substitute MAC if empty
...
Using IPv4 as hostname is enough to distinguish clients.
2023-11-27 22:19:16 +07:00
Cuong Manh Le
564c9ef712
cmd/cli: use IP as hostname for ipv4 clients only
...
For Android devices, when it joins the network, it uses ctrld to resolve
its private DNS once and never reaches ctrld again. For each time, it uses
a different IPv6 address, which causes hundreds/thousands different client
IDs created for the same device, which is pointless.
2023-11-27 22:19:16 +07:00
Cuong Manh Le
91d319804b
cmd/cli: only use failover rcodes if defined
2023-11-16 20:58:10 +07:00
Cuong Manh Le
d01f5c2777
cmd/cli: do not stop listener when reloading
...
We could not do a reload if the listener config changes, so do not turn
them off to try updating new listener config.
2023-11-16 20:56:57 +07:00
Cuong Manh Le
990bc620f7
cmd/cli: strip EDNS0_SUBNET for RFC 1918 and loopback address
...
Since passing them to upstream is pointless, these cannot be used by
anything on the WAN.
2023-11-09 00:23:38 +07:00
Cuong Manh Le
4816a09e3a
all: use private resolver for private IP address
...
These queries could not be resolved by Control D upstreams, so it's
useless and less performance to send them to servers.
2023-11-08 23:51:18 +07:00
Cuong Manh Le
63f959c951
all: spoof loopback ranges in client info
...
Sending them are useless, so using RFC1918 address instead.
2023-11-06 20:01:57 +07:00
Cuong Manh Le
58a00ea24a
all: implement reload command
...
This commit adds reload command to ctrld for re-fetch new config from
ContorlD API or re-read the current config on disk.
2023-11-06 20:01:03 +07:00
Cuong Manh Le
2440d922c6
all: add MAC address base policy
...
While at it, also update the config doc to clarify the order of matching
preference, and the matter of rules order within each policy.
2023-11-06 19:57:50 +07:00
Cuong Manh Le
34758f6205
Sending OS information in DoH header
2023-09-22 18:47:14 +07:00
Cuong Manh Le
a9959a6f3d
all: guarding against DNS forwarding loop
...
Based on how dnsmasq "--dns-loop-detect" mechanism.
See: https://thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html
2023-09-22 18:46:43 +07:00
Cuong Manh Le
511c4e696f
cmd/cli: add upstream monitor
...
Some users mentioned that when there is an Internet outage, ctrld fails
to recover, crashing or locks up the router. When requests start
failing, this results in the clients emitting more queries, creating a
resource spiral of death that can brick the device entirely.
To guard against this case, this commit implement an upstream monitor
approach:
- Marking upstream as down after 100 consecutive failed queries.
- Start a goroutine to check when the upstream is back again.
- When upstream is down, answer all queries with SERVFAIL.
- The checking process uses backoff retry to reduce high requests rate.
- As long as the query succeeded, marking the upstream as alive then
start operate normally.
2023-09-22 18:45:59 +07:00
Ginder Singh
507c1afd59
cmd: allow import/running ctrld as library
2023-09-22 18:44:24 +07:00
Cuong Manh Le
0f3e8c7ada
all: include client IP if ctrld is dnsmasq upstream
...
So ctrld can record the raw/original client IP instead of looking up
from MAC to IP, which may not the right choice in some network setup
like using wireguard/vpn on Merlin router.
2023-09-22 18:40:25 +07:00
Cuong Manh Le
13391fd469
Generating working default config in non-cd mode
...
Using the same approach as in cd mode, but do it only once when running
ctrld the first time, then the config will be re-used then.
While at it, also adding Dockerfile.debug for better troubleshooting
with alpine base image.
2023-09-22 18:34:46 +07:00
Cuong Manh Le
829e93c079
cmd: allow import/running ctrld as library
2023-08-15 18:22:38 +07:00