This commit is contained in:
Daniel Gröber (dxld) 2025-04-06 22:34:53 +02:00 committed by GitHub
commit bb08e8edc9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 146 additions and 59 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/clat.8

View File

@ -1,29 +1,66 @@
# clatd Makefile
#
# Copyright (C) 2025 Daniel Gröber <dxld@debian.org>
#
# SPDX-License-Identifier: MIT
DESTDIR=
PREFIX=/usr
SYSCONFDIR=/etc
BINDIR = $(PREFIX)/sbin
APT_GET:=$(shell which apt-get)
DNF_OR_YUM:=$(shell which dnf || which yum)
SYSTEMCTL:=$(shell which systemctl)
TAYGA:=$(shell which tayga)
SYSTEMCTL = systemctl
all:
CLATD = $(DESTDIR)$(BINDIR)/clatd
MANPAGE = $(DESTDIR)$(PREFIX)/share/man/man8/clatd.8
SYSTEMD_SYSSERVICEDIR = $(DESTDIR)$(SYSCONFDIR)/systemd/system
NM_DISPATCHER = $(DESTDIR)$(SYSCONFDIR)/NetworkManager/dispatcher.d/50-clatd
Q = @
all: clatd.8
.ONESHELL:
clatd.8: clatd.pod
pod2man \
--name clatd \
--center "clatd - CLAT, SIIT-DC and IPv6-only with many XLAT engines" \
--section 8 \
$< $@
clean:
-rm clatd.8
start: install
$(SYSTEMCTL) --system daemon-reload
$(SYSTEMCTL) --system -f --now enable clatd.service
stop:
$(SYSTEMCTL) --system disable --now clatd.service
uninstall: stop
-rm $(SYSTEMD_SYSSERVICE)/clatd.service \
$(SYSTEMD_SYSSERVICE)/clatd@.service \
$(NM_DISPATCHER)
install:
# Install the main script
install -D -m0755 clatd $(DESTDIR)$(PREFIX)/sbin/clatd
# Install manual page if pod2man is installed
pod2man --name clatd --center "clatd - a CLAT implementation for Linux" --section 8 README.pod $(DESTDIR)$(PREFIX)/share/man/man8/clatd.8 && gzip -f9 $(DESTDIR)$(PREFIX)/share/man/man8/clatd.8 || echo "pod2man is required to generate manual page"
# Install systemd service file if applicable for this system
if test -x "$(SYSTEMCTL)" && test -d "$(DESTDIR)$(SYSCONFDIR)/systemd/system"; then install -m0644 scripts/clatd.systemd $(DESTDIR)$(SYSCONFDIR)/systemd/system/clatd.service && $(SYSTEMCTL) daemon-reload; fi
if test -e "$(DESTDIR)$(SYSCONFDIR)/systemd/system/clatd.service" && test ! -e "$(DESTDIR)$(SYSCONFDIR)/systemd/system/multi-user.target.wants/clatd.service"; then $(SYSTEMCTL) enable clatd.service; fi
# Install NetworkManager dispatcher script if applicable
if test -d $(DESTDIR)$(SYSCONFDIR)/NetworkManager/dispatcher.d; then install -m0755 scripts/clatd.networkmanager $(DESTDIR)$(SYSCONFDIR)/NetworkManager/dispatcher.d/50-clatd; fi
install -D -m0755 clatd $(CLATD)
install -D -m0644 clatd.8 $(MANPAGE)
install -D -m0644 scripts/*.service $(SYSTEMD_SYSSERVICEDIR)/
install -D -m0755 scripts/clatd.networkmanager $(NM_DISPATCHER)
DEB_PACKAGES = \
perl libnet-ip-perl libnet-dns-perl libjson-perl \
iproute2 nftables tayga
RPM_PACKAGES = \
perl perl-IPC-Cmd perl-Net-IP perl-Net-DNS perl-File-Temp perl-JSON \
iproute nftables
installdeps:
# .deb/apt-get based distros
if test -x "$(APT_GET)"; then $(APT_GET) -y install perl-base perl-modules libnet-ip-perl libnet-dns-perl libjson-perl iproute2 nftables tayga; fi
# .rpm/DNF/YUM-based distros
if test -x "$(DNF_OR_YUM)"; then $(DNF_OR_YUM) -y install perl perl-IPC-Cmd perl-Net-IP perl-Net-DNS perl-File-Temp perl-JSON iproute nftables; fi
# If necessary, try to install the TAYGA .rpm using dnf/yum. It is unfortunately not available in all .rpm based distros (in particular CentOS/RHEL).
if test -x "$(DNF_OR_YUM)" && test ! -x "$(TAYGA)"; then $(DNF_OR_YUM) -y install tayga || echo "ERROR: Failed to install TAYGA using dnf/yum, the package is probably not included in your distro. Try enabling the EPEL repo <URL: https://fedoraproject.org/wiki/EPEL> and try again, or install TAYGA <URL: http://www.litech.org/tayga> directly from source."; exit 1; fi
$(Q)prog_exists () { command -v $$@ >/dev/null 2>&1; }
{ PKGS='$(DEB_PACKAGES)'; PKG=apt; prog_exists $$PKG; } || \
{ PKGS='$(RPM_PACKAGES)'; PKG=dnf; prog_exists $$PKG; } || \
{ PKGS='$(RPM_PACKAGES)'; PKG=yum; prog_exists $$PKG; } || \
{ PKG=false; echo 'ERROR: Failed to detect system package manager.'>&2;}
$(DRY) $$PKG install -y $$PKGS

84
README.md Normal file
View File

@ -0,0 +1,84 @@
# clatd - CLAT and SIIT-DC Edge Relay for Linux
**clatd** implements the CLAT component of the 464XLAT network architecture
specified in *RFC 6877*. It allows an IPv6-only host to have IPv4 connectivity
that is translated to IPv6 before being routed to an upstream PLAT (which is
typically a Stateful NAT64 operated by the ISP) and there translated back to
IPv4 before being routed to the IPv4 internet. This is especially useful when
local applications on the host requires actual IPv4 connectivity or cannot
make use of DNS64 (for example because they use legacy AF_INET socket calls,
or if they are simply not using DNS64).
**clatd** may also be used to implement an SIIT-DC Edge Relay as described in
*RFC 7756*. In this scenario, the PLAT is in reality a SIIT-DC Border Relay
(see *RFC 7755*) instead of a Stateful NAT64 (see *RFC 6146*). When used as a
SIIT-DC Edge Relay, you will probably want to manually configure the settings
`clat-v4-addr`, `clat-v6-addr`, and `plat-prefix` to mirror the SIIT-DC
Border Relay's configuration.
It relies either on the software package TAYGA by Nathan Lutchansky or on the
kernel module nat46 by Andrew Yourtchenko for the actual translation of packets
between IPv4 and IPv6 (*RFC 6145*) TAYGA may be downloaded from its home page
at <http://www.litech.org/tayga/>, nat46 from its repository at
<https://github.com/ayourtch/nat46>.
## Installing
clatd is available in the following distributions:
- [Arch (AUR)](https://aur.archlinux.org/packages/clatd-git)
- [Debian (sid)](https://packages.debian.org/search?keywords=clatd)
- [Fedora](https://packages.fedoraproject.org/pkgs/clatd/)
- [Nix](https://search.nixos.org/packages?show=clatd&type=packages&query=clatd)
- [OpenSUSE](https://software.opensuse.org/package/clatd)
Probably others also. If clatd is not available from your distribution or
you would like to test the bleeding-edge version of **clatd** from git use
the following commands:
$ git clone https://github.com/toreanderson/clatd
$ sudo make -C clatd installdeps start
This will install **clatd**, dependencies, systemd services, NetworkManager
dispatcher integration scripts on your system, enable and start the
clatd.service. Really only recommended for testing.
Beware that TAYGA isn't available in all RPM-based distros (in particular
RHEL and its clones). It is however available in EPEL (see
<https://fedoraproject.org/wiki/EPEL>).
## Using
For extensive usage instruction please refer to the [clatd(8)](./clatd.pod)
manpage.
## Bugs
If you are experiencing any bugs or have any feature requests, head over to
<https://github.com/toreanderson/clatd/issues> and submit a new issue (if
someone else hasn't already done so). Please make sure to include logs with
full debugging output (using `-d -d` on the command line or `debug=2` in
the configuration file) when reporting a bug.
## License
Copyright (c) 2014-2025 Tore Anderson <tore@fud.no>
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -74,25 +74,6 @@ exit gracefully.
See the I<scripts/> directory in the source distribution for some examples on
how to invoke it it.
=head1 INSTALLATION
The following commands will quickly download and install the latest version
of B<clatd> and its dependencies:
=over
=item git clone https://github.com/toreanderson/clatd
=item sudo make -C clatd install installdeps
=back
This will install B<clatd> to /usr/sbin, plus install systemd, and/or
NetworkManager scripts if your distribution appears to be using them, and
install all the dependencies. Note that TAYGA isn't available in all RPM-based
distros (in particular RHEL and its clones). It is however available in EPEL
(see L<https://fedoraproject.org/wiki/EPEL>).
=head1 CONFIGURATION
B<clatd> is designed to be able to run without any user-supplied configuration
@ -476,7 +457,7 @@ not carry a prefix length.
B<clatd> will not attempt to perform a connectivity check to a discovered PLAT
prefix before setting up the CLAT, as I<RFC 7050> suggest it should.
=head1 BUGS
=head1 REPORTING BUGS
If you are experiencing any bugs or have any feature requests, head over to
L<https://github.com/toreanderson/clatd/issues> and submit a new issue (if
@ -484,27 +465,11 @@ someone else hasn't already done so). Please make sure to include logs with
full debugging output (using I<-d -d> on the command line or B<debug=2> in the
configuration file) when reporting a bug.
=head1 LICENCE
=head1 COPYRIGHT
Copyright (c) 2014-2025 Tore Anderson <tore@fud.no>
Copyright (c) 2014-2025 Tore Anderson <tore@fud.no>.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
SPDX-License-Identifier: MIT
=head1 SEE ALSO