mirror of
https://github.com/toreanderson/clatd
synced 2026-09-22 14:41:19 +00:00
Merge dbbcbf8453 into d9f274bbe7
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/clat.8
|
||||||
77
Makefile
77
Makefile
@@ -1,29 +1,66 @@
|
|||||||
|
# clatd Makefile
|
||||||
|
#
|
||||||
|
# Copyright (C) 2025 Daniel Gröber <dxld@debian.org>
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
DESTDIR=
|
DESTDIR=
|
||||||
PREFIX=/usr
|
PREFIX=/usr
|
||||||
SYSCONFDIR=/etc
|
SYSCONFDIR=/etc
|
||||||
|
BINDIR = $(PREFIX)/sbin
|
||||||
|
|
||||||
APT_GET:=$(shell which apt-get)
|
SYSTEMCTL = systemctl
|
||||||
DNF_OR_YUM:=$(shell which dnf || which yum)
|
|
||||||
SYSTEMCTL:=$(shell which systemctl)
|
|
||||||
TAYGA:=$(shell which tayga)
|
|
||||||
|
|
||||||
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:
|
||||||
# Install the main script
|
install -D -m0755 clatd $(CLATD)
|
||||||
install -D -m0755 clatd $(DESTDIR)$(PREFIX)/sbin/clatd
|
install -D -m0644 clatd.8 $(MANPAGE)
|
||||||
# Install manual page if pod2man is installed
|
install -D -m0644 scripts/*.service $(SYSTEMD_SYSSERVICEDIR)/
|
||||||
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 -D -m0755 scripts/clatd.networkmanager $(NM_DISPATCHER)
|
||||||
# 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
|
DEB_PACKAGES = \
|
||||||
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
|
perl libnet-ip-perl libnet-dns-perl libjson-perl \
|
||||||
# Install NetworkManager dispatcher script if applicable
|
iproute2 nftables tayga
|
||||||
if test -d $(DESTDIR)$(SYSCONFDIR)/NetworkManager/dispatcher.d; then install -m0755 scripts/clatd.networkmanager $(DESTDIR)$(SYSCONFDIR)/NetworkManager/dispatcher.d/50-clatd; fi
|
|
||||||
|
RPM_PACKAGES = \
|
||||||
|
perl perl-IPC-Cmd perl-Net-IP perl-Net-DNS perl-File-Temp perl-JSON \
|
||||||
|
iproute nftables
|
||||||
|
|
||||||
installdeps:
|
installdeps:
|
||||||
# .deb/apt-get based distros
|
$(Q)prog_exists () { command -v $$@ >/dev/null 2>&1; }
|
||||||
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
|
{ PKGS='$(DEB_PACKAGES)'; PKG=apt; prog_exists $$PKG; } || \
|
||||||
# .rpm/DNF/YUM-based distros
|
{ PKGS='$(RPM_PACKAGES)'; PKG=dnf; prog_exists $$PKG; } || \
|
||||||
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
|
{ PKGS='$(RPM_PACKAGES)'; PKG=yum; prog_exists $$PKG; } || \
|
||||||
# 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).
|
{ PKG=false; echo 'ERROR: Failed to detect system package manager.'>&2;}
|
||||||
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
|
$(DRY) $$PKG install -y $$PKGS
|
||||||
|
|||||||
84
README.md
Normal file
84
README.md
Normal 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.
|
||||||
@@ -74,25 +74,6 @@ exit gracefully.
|
|||||||
See the I<scripts/> directory in the source distribution for some examples on
|
See the I<scripts/> directory in the source distribution for some examples on
|
||||||
how to invoke it it.
|
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
|
=head1 CONFIGURATION
|
||||||
|
|
||||||
B<clatd> is designed to be able to run without any user-supplied 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
|
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.
|
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
|
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
|
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
|
full debugging output (using I<-d -d> on the command line or B<debug=2> in the
|
||||||
configuration file) when reporting a bug.
|
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
|
SPDX-License-Identifier: MIT
|
||||||
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.
|
|
||||||
|
|
||||||
=head1 SEE ALSO
|
=head1 SEE ALSO
|
||||||
|
|
||||||
Reference in New Issue
Block a user