${toc}
# Install Tayga
```sh
apt update
apt install -y tayga
```
# Configure sysctl / ensure IPv4 and IPv6 forwarding is enabled
For Tayga to work properly, you must have both IPv4 and IPv6 forwarding enabled.
Since the NAT64 server will also function effectively like a router, the sysctl config that's generated below will:
- Disables most IPv6 router advertisement settings (SLAAC)
- Disables the main `accept_ra` switch
- Disables accepting default route advertisements
- Disables interface IPv6 auto-configuration
- Enables accepting MTU size advertisements, since MTU is very important
- Disables IPv4/v6 redirects
- Adjusts the IPv6 MTU for the primary interface to match the VPN's MTU (1420 for wireguard).
## Manually enable forwarding
```sh
# Not necessary, but you may wish to run the below commands to enable IPv4 / IPv6 forwarding immediately.
sudo sysctl -w net.ipv6.conf.all.forwarding=1
sudo sysctl -w net.ipv4.conf.all.forwarding=1
sudo sysctl -w net.ipv4.ip_forward=1
```
## Generating a sysctl config (`95-privexnet.conf`)
```sh
# DEFAULT_IFACE should be set to the name of your PRIMARY INTERFACE, i.e. the one
# with the server's public IPv4/v6 address(es).
# IFACE_MTU should be set to match your VPN's MTU. For wireguard, this is typically 1420
DEFAULT_IFACE="eth0"
IFACE_MTU="1420"
sudo tee /etc/sysctl.d/95-privexnet.conf <<EOF
#########
# Privex SYSCTL Config Options
#########
# Enable IP forwarding for IPv4 and IPv6
net.ipv6.conf.all.forwarding=1
net.ipv4.conf.all.forwarding=1
net.ipv6.conf.${DEFAULT_IFACE}.forwarding=1
net.ipv4.conf.${DEFAULT_IFACE}.forwarding=1
net.ipv4.ip_forward=1
####
# Disable IPv6 router advertisements that could potentially cause problems
####
# Main "accept router advertisements" flag - affects all other RA settings
net.ipv6.conf.all.accept_ra=0
net.ipv6.conf.${DEFAULT_IFACE}.accept_ra=0
# DO NOT accept advertisements for default router
net.ipv6.conf.all.accept_ra_defrtr=0
net.ipv6.conf.${DEFAULT_IFACE}.accept_ra_defrtr=0
# DO NOT attempt to auto-configure via SLAAC or RA's
net.ipv6.conf.all.autoconf=0
net.ipv6.conf.${DEFAULT_IFACE}.autoconf=0
# ACCEPT MTU advertisements from RA's - since MTU is very important
net.ipv6.conf.all.accept_ra_mtu=1
net.ipv6.conf.${DEFAULT_IFACE}.accept_ra_mtu=1
####
# Misc. Network Settings
####
# do not accept redirects
net.ipv6.conf.all.accept_redirects=0
net.ipv4.conf.all.accept_redirects=0
net.ipv6.conf.eth0.accept_redirects=0
net.ipv4.conf.eth0.accept_redirects=0
# adjust default iface to use same MTU as wireguard for IPv6
net.ipv6.conf.${DEFAULT_IFACE}.mtu=${IFACE_MTU}
EOF
```
## Importing / reloading the sysctl configs
```sh
# Load all sysctl configs
sudo sysctl -p
# Ensure sysctl actually read the privexnet config by specifying it
sudo sysctl -p /etc/sysctl.d/95-privexnet.conf
```
-------------
# Configuration Files
## default/tayga
`/etc/default/tayga`
```sh
# Defaults for tayga initscript
# sourced by /etc/init.d/tayga
# installed at /etc/default/tayga by the maintainer scripts
# Change this to "yes" to enable tayga
RUN="yes"
# Configure interface and set the routes up
CONFIGURE_IFACE="yes"
# Configure NAT44 for the private IPv4 range
CONFIGURE_NAT44="yes"
# Additional options that are passed to the Daemon.
DAEMON_OPTS=""
# IPv4 address to assign to the NAT64 tunnel device
IPV4_TUN_ADDR="192.168.255.1"
# IPv6 address to assign to the NAT64 tunnel device
IPV6_TUN_ADDR="2a07:e01:ffff::2"
```
## tayga.conf
`/etc/tayga.conf`
```c
tun-device nat64
# Tayga's IPv4 address (doesn't really matter)
ipv4-addr 192.168.255.1
# Tayga's IPv6 address (to be routed to)
ipv6-addr 2a07:e01:ffff::2
# V6 Prefix to use for the IPv4 internet
prefix 64:ff9b::/96
dynamic-pool 192.168.0.0/16
data-dir /var/spool/tayga
```
## Networking Config
`/etc/netplan/50-cloud-init.yml`
```yml
network:
version: 2
ethernets:
# eth0 = Public Internet adapter
# Must have IPv4, but doesn't require IPv6
eth0:
addresses:
- 185.130.44.60/27
gateway4: 185.130.44.33
accept-ra: no
match:
macaddress: 1a:76:89:d4:09:b1
nameservers: &id001
addresses:
- 2a07:e00::333
- 8.8.4.4
- 1.1.1.1
search:
- privex.bz
set-name: eth0
# eth1 - NAT64 IPv6 Gateway Adapter
# Should have both a "public" IPv6 address (::1), used for accessing the server
# and the "gateway" IPv6 (::2) used for routing the NAT64 prefix into
eth1:
addresses:
- 2a07:e01:ffff::1/64
- 2a07:e01:ffff::2/64
gateway6: 2a07:e01:ffff::f
match:
macaddress: a6:08:61:c3:e5:e1
nameservers: *id001
set-name: eth1
```
# Enabling and starting Tayga
```sh
systemctl enable tayga
systemctl restart tayga
```
# Adding routes
## Cisco
```sh
ipv6 route 64:FF9B::/96 2A07:E01:FFFF::1 name NAT64
ipv6 route 64:FF9B::/96 2a07:e02:10ff::2 name NAT64-CA
```
## Linux CLI
```sh
ip -6 route add 64:ff9b::/96 via 2a07:e02:10ff::2 dev br0 metric 10 pref high
ip -6 route add 64:FF9B::/96 via 2a07:e00::64:64 dev eth0
```
## Netplan
NOTE: On our Vultr regions, the route should be added to `/etc/netplan/30-bridge.yaml`
```yml
routes:
# 64:ff9b::/96 via 2a07:e02:10ff::2 dev br0 metric 10 pref high
- to: 64:ff9b::/96
via: 2a07:e02:10ff::2
metric: 10
```