Commit Graph

29 Commits

Author SHA1 Message Date
Tore Anderson f91d96b991 Get PLAT prefix from systemd-networkd, if possible
Makes clatd check if systemd-networkd is aware of any PLAT prefix (which
it may have learned from the PREF64 Router Advertisement option, cf. RFC
8781).

If a prefix is obtained from systemd-network, DNS64-based PLAT prefix
discovery is skipped, as mandated by
https://datatracker.ietf.org/doc/draft-ietf-v6ops-prefer8781/.

However, if the dns64-servers config option is set, clatd will use
DNS64-based PLAT prefix discovery towards the specified servers, and it
will not query systemd-networkd at all.

Closes #32
2025-02-22 10:00:45 +01:00
Tore Anderson 1c4ca683b5
Release clatd v2.0.0 and bump copyright year
The default behaviour is significantly changed since the previous
version, so upgrading might require changing the configuration file,
especially if not using it in a fairly standard 464XLAT environment
(e.g., as an SIIT-DC Edge Relay). According to the Semantic Versioning
standard, such changes require the major version to be bumped.
2025-02-09 10:53:17 +01:00
Tore Anderson 92afe35b0b
Ensure CLAT-PLAT traffic is permitted in UFW
UFW is the standard local firewall framework in Debian-based
distributions. If it is installed and active, add rules that permit
routed traffic between the CLAT and the PLAT prefix. This traffic is
dropped by the default UFW ruleset, leading to issues such as #42.
2025-02-09 10:53:17 +01:00
Tore Anderson 33252dcb13
Share IPv6 address with host OS by default
Adds support for clat-v6-addr=shared and make this the default
behaviour. This makes the CLAT function share the address the host OS
uses for direct IPv6 connection towards the PLAT prefix, thus removing
the previous requirement for a secondary IPv6 address dedicated to the
CLAT function.

When using a shared address in this manner, enable connection tracking
marking by default (so that direct IPv6 connections from the host OS to
IPv4 destinations behind the PLAT keeps working) and disable Proxy-ND
(as there is no need for it, as the host OS kernel will handle NDP
interactions all on its own).

To use the previous default behaviour, use clat-v6-addr=derived.

Closes #25
Closes #46
2025-02-09 10:53:16 +01:00
Tore Anderson f0d7c09adf
Use routing policy and ctmark for routing to CLAT
This moves the route for IPv6 traffic from the PLAT to the CLAT into a
separate routing table, and uses the Linux kernel's routing policy
framework to redirect traffic into this routing table.

This makes it possible to set `clat-v6-addr` to an address also used by
the main host OS, removing the requirement for having a dedicated
secondary address assigned to the CLAT.

Additionally, support using nftables to set a connection tracking mark
on outbound connections from the CLAT, and ensuring only return traffic
matching that mark is returned back to the CLAT. This makes it possible
for the CLAT to share an IPv6 address with the main host OS without
breaking connectivity to DNS64-synthesised IPv6 addresses.

The trade-off of using a connection tracking mark is that the CLAT can
not receive unsolicited traffic from the IPv4 Internet via the PLAT.
However in the common case, where the PLAT is Stateful NAT64, that is
the case no matter what.

Closes #25.
2025-02-09 10:53:15 +01:00
Tore Anderson 05728771ca
Update doc regarding limitations on non-SLAAC nets
The LIMITATIONS part of the documentation wasn't updated to take into
account the changes in 81f2c61, fix that.

Closes #24.
2025-02-09 10:53:15 +01:00
Tore Anderson cc64d0c6f3
Remove upstart support
Upstart has been discontinued for more than a decade, and no modern
distributions are using it anymore, so get rid of it.
2025-02-09 10:53:15 +01:00
Tore Anderson 6a582bf1e4
Remove support for ip6tables
The ip6tables frameworks has been deprecated for quite a while now, as
it has been replaced by nftables. On modern distributions, rules added
with ip6tables are just converted to nftables rules and are added to an
ip6tables compatibility table there. This changed the name of the kernel
modules, breaking ip6tables auto-detection (cf. issues #42 and #44).

Unfortunately, due to the way nftables works, these rules can no longer
be relied upon to ensure the CLAT traffic is allowed. This is due to the
fact that in nftables, *all* chains that hook into a packet's path must
return an «accept» verdict in order for the packet to be ultimately
accepted, while it is enough for a single chain to return a «drop»
verdict in order for the packet to be dropped.

That means that the rules that accepts CLAT traffic might be overridden
by a «default drop» rule added to another chain in another table, e.g.,
by firewalld or similar local firewall frameworks. See #23 for an
example of this.

On the other hand, if there is no drop rule anywhere, the rules added by
clatd are superfluous to begin with, as the default kernel behaviour is
to accept the packages.

Therefore just remove support for ip6tables entirely. Users of
firewalld, ufw,  or similar local firewall frameworks will need to make
sure that rules are added in those frameworks that permit the CLAT
traffic, e.g., by using `script-up`, like so for ufw:

```
script-up=ufw route allow in on $clat_dev out on $plat_dev
```

Native support for adding rules to the most common local firewall
frameworks might be added in the future.

Closes #44 (no longer applicable).
2025-02-09 10:53:14 +01:00
Ondřej Caletka 6d2ad96c2f
Add nat46 in-kernel translator support
This allows clatd to use [nat46](https://github.com/ayourtch/nat46)
kernel translator instead of TAYGA. It uses automatic detection - if
`nat46` module is loaded, it will get used, otherwise the application
falls back to using TAYGA.

Signed-off-by: Ondřej Caletka <ondrej@caletka.cz>
2023-11-05 12:32:19 +01:00
satanist 8aa8bfa5d5 add fallback prefix 2023-08-08 08:32:38 +02:00
Tore Anderson ff6aa57c4b Release clatd v1.6
Also update copyright year to 2023.
2023-03-05 11:33:00 +01:00
Tore Anderson 1441a3ff4b
Copyright year update to 2019 2019-05-20 10:18:56 +02:00
Tore Anderson 888e30bd2b
Copyright year update to 2018 2018-12-14 23:59:01 +01:00
Tore Anderson c228c2bb64 Copyright year update to 2017 2017-08-15 18:15:31 +02:00
Tore Anderson ebd8487dd0 README: typofixes 2017-08-15 18:14:37 +02:00
Tore Anderson 1218ca7979 Remove doc saying TAYGA will be auto-built
Now that TAYGA is avaiable in EPEL, it is better to point people at that
instead of building TAYGA from source. In commit 18dca08 the build from source
functionality was removed. Update documentation accordingly.
2017-08-15 18:11:39 +02:00
Tore Anderson 18dca086c2 Update siit-dc/eam I-D references to RFC numbers
The three I-Ds that describe SIIT-DC and SIIT-EAM have been published as
RFCs, so update the references accordingly. Also update once occurrence
of old terminology ("Host Agent") with the new and final one ("Edge
Relay").
2016-03-28 08:38:56 +02:00
Tore Anderson 1abcec1285 Minor documentation fixes 2016-01-28 13:40:05 +01:00
Tore Anderson 9a1a4ae797 2016 licence update
Change "2014-2015" with "2014-2016". Also, I had forgotten to update the
licence comment in the clatd script itself in b5725c0, so fix that too.
Thanks to @ingvarha for noticing!
2016-01-28 11:55:02 +01:00
Tore Anderson 0bc3bbd797 New feature: script-up/down
Adds the possibility of making clatd run a custom script while starting up or
shutting down.
2015-10-23 11:22:00 +02:00
Tore Anderson a80e2f30ab New feature: Set advmss on IPv4 default route
This ensures that TCP connections terminated through the CLAT gets a sensible
TCP MSS value negotiated. By default, the value is set to the MTU of the
defaultroute minus 40. There should be no reason to change this in the vast
majority of cases, but it can be overridden with the "v4-defaultroute-advmss"
setting.
2015-10-22 11:58:19 +02:00
Tore Anderson 9f1789f34d New feature: Replace original IPv4 default route
Adds "v4-defaultroute-replace" config/command-line setting (default disabled).
When enabled, it will unconditionally disable the pre-flight IPv4 connectivity
check, and ensure that any pre-existing IPv4 default routes are removed during
startup (and presumably replaced with the one pointing to the CLAT, unless
"v4-defaultroute-enable" has been disabled). Any IPv4 default routes that were
removed in this manner are restored when clatd is shutting down.
2015-10-22 11:12:34 +02:00
Tore Anderson b5725c093c relicence to MIT to make lrintel happy 2015-07-23 13:38:30 +02:00
Tore Anderson ad114b18cf Update for siit-dc ietf changes
- the siit-dc drafts have been adopted by the v6ops wg
- host agent renamed to edge relay
2015-07-23 13:29:28 +02:00
Tore Anderson 81f2c61364 Generate random IIDs if no EUI-64 address is found
This allows clatd to work correctly on 3GPP mobile networks, where the
IID is assigned from the network, rather than being generated using
EUI-64. We still prefer the old method, though, the random one is only
used if no EUI-64 address exists on the PLAT device. Update docs
accordingly.

Also upgrade docs to better describe usage as a SIIT-DC Host Agent.
2014-10-05 20:14:01 +02:00
Tore Anderson 54dd5ac854 Replace I-D.draft-byrne-v6ops-clatip with RFC 7335
I-D.draft-byrne-v6ops-clatip has been published as RFC 7335, update
documentation and comments accordingly.
2014-10-05 17:14:03 +02:00
Tore Anderson 6f359a8d60 Minor spelling and punctuation fixes 2014-06-29 13:46:09 +02:00
Tore Anderson 2d2cbd8c19 Reflow a couple of lines to fit within 80 chars 2014-06-29 13:38:45 +02:00
Tore Anderson 0b520f5442 Initial commit (clatd v1.0) 2014-03-11 00:59:34 +01:00