Commit Graph
100 Commits
Author SHA1 Message Date
Michael Stapelberg ee17db29b6 GitHub actions: also exit early if gofmt reports syntax errors 2020-08-01 09:46:19 +02:00
Michael Stapelberg 5573c4dde7 GitHub actions: fix gofmt check 2020-08-01 09:28:02 +02:00
Michael Stapelberg cf1e1dd480 re-generate website to pick up previous commit 2020-07-06 09:50:52 +02:00
Michael Stapelberg f86e20be53 dhcp6: port dhcp4 backoff logic 2020-07-02 22:07:26 +02:00
Michael Stapelberg ae8cfee616 dhcp6: inspect server advertisment IAPD and report error, if any
The fiber7 DHCPv6 servers (sometimes?) use this field for reporting errors.
2020-07-02 22:06:55 +02:00
Michael Stapelberg 281f876834 integration/netconfig: verify wg(8) is available
The kernel used on GitHub actions now allows creating wireguard interfaces
apparently.
2020-07-02 21:14:35 +02:00
Michael Stapelberg 8c1b3676ab gokr-packer invocations: set empty -eeprom_package=
We don’t need Raspberry Pi 4 EEPROM files on router7 on amd64,
and this makes the build easier.

fixes #54
2020-07-02 21:06:22 +02:00
Michael Stapelberg dff392e558 website: bundle assets for faster loading/privacy 2020-06-21 10:06:18 +02:00
Michael Stapelberg 876a3308d2 style tables with bootstrap table styles
as per https://willschenk.com/articles/2020/styling_tables_with_hugo/
2020-06-21 09:52:38 +02:00
Michael Stapelberg cb95bb6df8 move README into (hugo-powered) website router7.org 2020-06-21 09:43:13 +02:00
Michael Stapelberg 1250211381 github actions: try caching the module cache 2020-06-16 23:41:21 +02:00
Michael Stapelberg 9c7e626f7d switch from travis to GitHub actions 2020-06-16 23:22:34 +02:00
Michael Stapelberg b090fa2924 qemu: enable i6300esb watchdog device
For the corresponding kernel change, see:
https://github.com/rtr7/kernel/commit/0f4dcc4a8739bb42448b9876b0fd786db5f66936
2020-06-16 23:09:35 +02:00
Michael Stapelberg 1fd5468bab first start of a qemu target 2020-06-04 09:59:24 +02:00
Michael Stapelberg aa14d119e6 dyndns: add log message when records are updated
Now both cases are covered.
2020-05-28 17:24:51 +02:00
Michael Stapelberg decb0978d7 dyndns: update to newer libdns/cloudflare, remove workaround 2020-05-28 17:22:24 +02:00
Michael Stapelberg f1e4ee0662 dyndns: don’t crashloop when config does not exist
related to #46
2020-05-28 09:46:37 +02:00
Michael Stapelberg 7950291db6 dyndns: tweak up-to-date message output 2020-05-28 09:42:55 +02:00
Michael Stapelberg 4a5f55a5de defense in depth: verify hex.DecodeString length
related to #49
2020-05-27 09:50:04 +02:00
Michael Stapelberg 53c495091e quirk: enforce minimum lease time of 1 hour for Nintendo devices
The Nintendo Switch has been observed to hold on to IP addresses even after
their expiration. My guess is that this is an oversight: likely the device
enters power saving mode with a configured IP address and just sleeps through
the expiration time.

As the device seems to wake up once every hour, we enforce a minimum lease time
of 1 hour, but only for affected devices. The rest of the network gets short
lease times.

https://twitter.com/zekjur/status/1263949112036282374
2020-05-23 09:07:17 +02:00
Michael Stapelberg 9b6271749b fix Makefile/go.mod 2020-05-09 22:40:49 +02:00
Michael Stapelberg 46327c5105 update go.mod 2020-05-09 22:17:10 +02:00
Michael Stapelberg 4e6a7016de commit Makefile 2020-05-09 22:14:37 +02:00
Michael Stapelberg 2b6ab5b2bd dhcp4d: make hostname override settable from status page 2020-04-12 10:33:11 +02:00
Michael Stapelberg e67fb4dd71 diagd: make output look good in a terminal, too
curl diagd.router7/
2020-03-11 22:12:00 +01:00
Michael Stapelberg 989bfadc88 travis: switch to Go 1.14 2020-03-07 08:14:06 +01:00
Michael Stapelberg 5936d954dd go mod tidy 2020-02-16 00:16:10 +01:00
Michael Stapelberg dba1dad718 wireguard: switch to wgctrl package
related to #14
2020-02-16 00:15:23 +01:00
Michael Stapelberg bfba9f17af netconfigd: collect all errors but keep going 2020-02-15 23:38:37 +01:00
Michael Stapelberg 96b626897a netconfigd: work not only with uplink0, but also eth0 and ens3
This makes it possible to use netconfigd on gokrazy Raspberry Pi installations.
2020-02-15 23:37:29 +01:00
Michael Stapelberg ef60a01f3f netconfigd: continue if interfaces.json does not exist 2020-02-15 23:35:51 +01:00
Michael Stapelberg 23961749ef declare go.mod 2020-02-15 20:41:54 +01:00
Michael Stapelberg 3e17ed7697 travis: bump to go 1.13 2020-02-15 09:55:44 +01:00
Michael Stapelberg e34148d4e7 dhcp4d: add some leeway for lease activity 2020-02-06 18:48:19 +01:00
Michael Stapelberg a543cb9a34 dhcp4d: add header describing whether lease is active
Should be interpreted by the DHCP server so that other programs don’t need to
hard-code the lease time.
2020-01-31 19:11:08 +01:00
Michael Stapelberg a2ea8c2f95 cmd/dhcp4d: refactor for testing, add /lease/ test 2020-01-31 19:00:51 +01:00
Michael Stapelberg 4558cb61b4 dhcp4d: serve lease json data at /lease/<hostname> 2020-01-31 18:30:18 +01:00
Michael Stapelberg 3707ba290c dhcp4d: move http.HandleFunc into logic 2020-01-31 18:25:02 +01:00
Michael Stapelberg 41985d6378 dhcp4d: reduce lease period to 20 minutes
This forces devices to renew the lease more often, which is nice when you want
to tie home automation behavior to DHCP lease validity.
2020-01-31 18:23:50 +01:00
Michael Stapelberg e76886dab4 dhcp4d: protect leases with a mutex
The HTTP handler runs in a separate goroutine.
2020-01-31 18:23:19 +01:00
Michael Stapelberg 73bd5c6a50 dhcp6: T1 is now already a time.Duration
see https://github.com/insomniacslk/dhcp/pull/347
2020-01-03 08:06:17 +01:00
Michael Stapelberg 70edcab16b dns: return NXDOMAIN for DHCP leases once they expire 2019-09-07 19:27:12 +02:00
Michael Stapelberg fa82132962 dhcp4d: add HostnameOverride field
This can be used to permanently override a hostname, regardless of whether the
lease is static or not. We use a separate field because we want devices to be
able to change their hostname themselves, until we override it.
2019-08-30 09:06:21 +02:00
Michael Stapelberg 4cde5ec6fc dns: fix resolution of uppercase host names, add test 2019-08-07 18:18:51 +02:00
Michael Stapelberg 9fe38edec0 netconfig_test: force an order for IP address golden output 2019-08-07 18:13:52 +02:00
Michael Stapelberg 8fb81f90b1 dns: make more recent DHCP leases overwrite older ones
fixes #20
2019-07-20 12:23:48 +02:00
Michael Stapelberg 36995097b9 make local name resolution case-insensitive
fixes #34
2019-07-20 12:07:30 +02:00
Michael Stapelberg 975f05d7ac fix dhcp4d_test.go 2019-07-20 11:30:52 +02:00
Michael Stapelberg 323cc42b8e dhcp4d: polish status page, actually update it upon changes 2019-07-20 11:07:11 +02:00
Michael Stapelberg c602f1d6b6 dhcp4d: introduce -interface flag 2019-07-20 10:50:30 +02:00
Michael Stapelberg c211763b5d dhcp4d: indent leases.json for easier human editing 2019-07-20 10:49:53 +02:00
Michael Stapelberg c0067c5aa5 change diff order to -want +got
This is easier to read and consistent with how we do things at work.
2019-07-11 08:42:21 +02:00
Michael Stapelberg 414a7c025b use nft’s --numeric flag for stable output across 0.9.0 and 0.9.1
nftables 0.9.1 started printing e.g. “priority 0” as “priority filter”.
2019-07-11 08:39:08 +02:00
Michael Stapelberg 554d7fa8bf netconfig_test: fix goldens after nftables change
The nftables package started honoring the rule position (insert vs. append), and
it turns out our goldens have been wrong all along. Now the configured order
matches the golden order.
2019-07-11 08:28:33 +02:00
Michael Stapelberg fa91770b09 integration/dns: 8.8.8.8’s RDNS changed to dns.google. 2019-07-01 08:55:10 +02:00
Michael Stapelberg 373c83196d dhcp4: make interface and state directory configurable
This is useful for manual testing on separate interfaces.
2019-06-06 07:52:08 +02:00
Michael Stapelberg 54843950dd dhcp6: allow overriding hardwareaddr in test
This fixes the breakage introduced by commit
https://github.com/insomniacslk/dhcp/commit/8166b9a9db9b180c02622ebf3dcff01ff2b2e0a6
2019-04-29 19:16:19 +02:00
Michael Stapelberg 02741e8d28 travis: remove debugging statements 2019-04-29 19:09:08 +02:00
Michael Stapelberg 4a1d06f5f8 travis: list links/addresses for debugging 2019-04-29 19:02:39 +02:00
Michael Stapelberg ea8efe1978 log hardwareAddr for debugging travis 2019-04-29 19:02:39 +02:00
Michael Stapelberg 82b41d1cc3 travis: switch to go vet 2019-04-29 18:42:29 +02:00
Michael Stapelberg 844f528ed8 travis: enable IPv6 before running tests 2019-04-29 18:42:15 +02:00
Michael Stapelberg 1a65f972c6 dhcp6: only call net.InterfaceByName when client is constructed 2019-04-16 08:36:06 +02:00
Michael Stapelberg 3765287e97 dhcp4: use SetReadDeadline, not SetDeadline
fixes https://github.com/rtr7/router7/issues/25

related to https://github.com/mdlayher/raw/issues/42
2019-03-21 09:18:32 +01:00
Michael Stapelberg 7b1fcc9017 travis: use go1.12
https://github.com/mdlayher/raw/pull/40 requires go1.12
2019-03-03 16:36:25 +01:00
Michael Stapelberg 8906854211 fix compilation after https://github.com/mdlayher/netlink/pull/127 2019-03-03 16:09:20 +01:00
Michael Stapelberg 3dad1e9a23 dhcp4: use the configured (not the current) MAC address
This fixes a race where dhcp4 started before netconfigd had a chance to change
the hardware address on the uplink0 interface.

fiber7’s port security feature may result in an about hour-long internet outage
without this commit.
2019-02-19 09:39:16 +01:00
Michael Stapelberg 66942bd4f7 dns: steer traffic toward the most response upstream
There is not much of a difference between IPv4 and IPv6 on my fiber7 link, but
in other networks, there might well be.

For my connection, this commit results in hitting different upstreams all the
time because the list isn’t stable. But, this is the opposite of a problem: we
are spreading the DNS query load over all configured IPs, as good netizen do.
2019-02-19 09:37:38 +01:00
Michael Stapelberg a05f027765 dns: fallback only once, i.e. prefer the working server next time 2019-02-19 08:49:40 +01:00
Michael Stapelberg ccaf6ad452 dns: fallback to next upstream upon failure 2019-02-19 08:38:52 +01:00
Michael Stapelberg abeddabbb7 dhcp4d: restrict lease details page to internal IPs 2019-02-19 07:50:39 +01:00
Michael Stapelberg 13926217d9 oui_test: fix data race when overriding ouiURL 2019-01-06 18:07:59 +01:00
Michael Stapelberg 6320b6c3a7 dhcp4d: display MAC vendor of each lease’s HardwareAddr 2019-01-06 18:02:01 +01:00
Michael Stapelberg 8df6329209 use renameio to write files atomically 2019-01-06 15:25:33 +01:00
Michael Stapelberg f67d4ec93f radvd: load extra prefixes from /perm/radvd/prefixes.json 2019-01-06 15:12:22 +01:00
Michael Stapelberg bd8fc63b0e dns: implement per-DHCP-lease dyndns
The HTTP API is easy to use from the command line or from Go:

% curl --data "host=sub&ip=192.168.33.44" -4 http://router7:8053/dyndns
ok
% host sub.$(hostname)
sub.midna has address 192.168.33.44

This can be used in combination with https://github.com/gokrazy/gdns
2019-01-06 14:41:26 +01:00
Michael Stapelberg 92d995bf79 dns: return empty reply for non-A queries for DNS hostnames
instead of NXDOMAIN, which is incorrect
2019-01-01 17:21:50 +01:00
Michael Stapelberg c7be96ac2e dhcp4d: fix IP address comparison
AFAICT, this wasn’t actually a bug: canLease performs the correct check.
2019-01-01 10:45:03 +01:00
Michael Stapelberg 0d2e89cebf dhcp4d_test: fix message to match comparison 2019-01-01 10:44:03 +01:00
Michael Stapelberg b923f145a5 dhcp4d: don’t incorrectly _offer_ reused addresses
Turns out a5d9e03dd3 was not entirely sufficient:
even though reused addresses would not be handed out anymore, they would still
be offered, which results in the client not being able to obtain an address.
2019-01-01 10:41:29 +01:00
Michael Stapelberg ddcdd39737 dhcp4: drop last ack to restart with DISCOVER upon receiving NAK
fixes #13
2018-12-25 14:10:21 +01:00
Michael Stapelberg 725262d376 netconfig: use sysctl format for easier copy&paste 2018-12-25 14:08:14 +01:00
Michael Stapelberg 9012520052 diag: more informative error messages 2018-12-15 13:36:21 +01:00
Michael Stapelberg 5eaba2aa4d travis: switch to go 1.11 2018-12-15 12:49:34 +01:00
Michael Stapelberg a5d9e03dd3 dhcp4d: don’t incorrectly hand out reused addresses
fixes #18
2018-12-15 12:44:09 +01:00
Michael Stapelberg badee1eef8 netconfig_test: skip test if WireGuard is unavailable 2018-11-26 18:43:04 +01:00
Michael Stapelberg ec4f1f4dc5 netconfig: implement WireGuard support
To set up a tunnel, create a /perm/wireguard.json as illustrated in
netconfig_test.go, and don’t forget to adjust your /perm/interfaces.json with
the address configuration for the WireGuard tunnel.

Note that static routes cannot currently be configured, so the usefulness is
limited. If you have a use-case you’d like to see covered, please explain it in
https://github.com/rtr7/router7/issues/14
2018-11-26 18:29:03 +01:00
Michael Stapelberg b6a5227d49 netconfig_test: better diffs, refactor for clarity/brevity 2018-11-26 08:46:59 +01:00
Michael Stapelberg 127bdc466e netconfig_test: use ip -netns instead of ip netns exec ip 2018-11-26 08:32:38 +01:00
Michael Stapelberg df9a40557c dhcp4: correctly check errors from c.once 2018-11-21 08:41:24 +01:00
Michael Stapelberg bef7168112 dhcp4: resolve TODOs in comments 2018-11-21 08:41:07 +01:00
Michael Stapelberg 5b34daeb4e no-op cleanup: switch to dhcp4.LeaseFromACK 2018-11-21 08:23:57 +01:00
Michael Stapelberg 8c55c5ba44 dhcp4: switch to github.com/rtr7/dhcp4
All existing DHCPv4 packages I looked at were unappealing for one reason or
another, so we’re now using a little helper to glue github.com/google/gopacket
and github.com/mdlayher/raw together, which suffices for our use-case and gives
us more control.
2018-11-21 08:18:58 +01:00
Michael Stapelberg 30e9a6677b integration/dhcpv4: print unified line-wise diff
This is much more readable than the go-cmp Diff() output when dealing with
[]string lines.
2018-11-18 14:29:30 +01:00
Michael Stapelberg fac1bf231e netconfigd: notify dhcp4d to update its listeners 2018-10-29 18:14:01 +01:00
Michael Stapelberg 7d278289f0 captured: directly call NextPacket() to prevent hanging reads
Using Packets() spawns off a separate goroutine which calls NextPacket in a loop
until io.EOF is returned. This goroutine will stick around after Close()
returned, resulting in only the first wireshark connection working.
2018-10-23 09:56:07 +02:00
Michael Stapelberg d9f5d95812 dhcp4d: export number of non-expired DHCP leases 2018-10-23 08:49:29 +02:00
Michael Stapelberg 4288adec69 dns: don’t let clients override the hostname
fixes #11
2018-10-22 21:43:41 +02:00
Michael Stapelberg 0bbc1d923d refactor replayer code into pcapreplayer package 2018-10-22 21:04:35 +02:00
Michael Stapelberg e01a38ff78 commit debug statements 2018-10-22 18:58:40 +02:00