1. У нас есть DNS сервер(named), который развернут на raspberry.
```
#define DNS_SERVER_IP "fdaa:bb:1::2" /**< IPv6 of the DNS server (DNS64). */
```
```
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:5353 0.0.0.0:* 245/avahi-daemon: r
udp 0 0 0.0.0.0:43510 0.0.0.0:* 245/avahi-daemon: r
udp 0 0 192.168.255.1:53 0.0.0.0:* 302/named
udp 0 0 10.80.1.72:53 0.0.0.0:* 302/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 302/named
udp 0 0 0.0.0.0:68 0.0.0.0:* 963/dhclient
udp6 0 0 :::5353 :::* 245/avahi-daemon: r
udp6 0 0 :::55549 :::* 245/avahi-daemon: r
udp6 0 0 fe80::8829:79af:2994:53 :::* 302/named
udp6 0 0 fdaa:bb:1::2:53 :::* 302/named
udp6 0 0 fe80::ba27:ebff:fef5:53 :::* 302/named
```
2. Есть nat64 интерфейс
```
3: nat64: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 state UP qlen 500
inet 192.168.255.1/32 scope global nat64
valid_lft forever preferred_lft forever
inet6 fdaa:bb:1::2/128 scope global
valid_lft forever preferred_lft forever
inet6 fe80::8829:79af:2994:f2ea/64 scope link flags 800
valid_lft forever preferred_lft forever
```
3. Есть otbr-nat44 сервис
```
pi@raspberrypi:~ $ sudo systemctl status otbr-nat44.service
● otbr-nat44.service - LSB: iptables NAT44
Loaded: loaded (/etc/init.d/otbr-nat44; generated; vendor preset: enabled)
Active: active (exited) since Mon 2022-06-20 10:28:54 UTC; 2 days ago
Docs: man:systemd-sysv-generator(8)
Process: 509 ExecStart=/etc/init.d/otbr-nat44 start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/otbr-nat44.service
Jun 20 10:28:53 raspberrypi systemd[1]: Starting LSB: iptables NAT44...
Jun 20 10:28:54 raspberrypi systemd[1]: Started LSB: iptables NAT44.
```
Который запускает nat
```
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
```
4. Есть tayga - stateless NAT64 daemon
```
pi@raspberrypi:~ $ whereis tayga
tayga: /usr/sbin/tayga /etc/tayga.conf /usr/share/man/man8/tayga.8.gz
```
Используеь свой ipv6 адрес
```
tun-device nat64 //TUN device that TAYGA will use to exchange IPv4 and IPv6 packets with the kernel
ipv4-addr 192.168.255.1 // TAYGA's IPv4 address.
ipv6-addr fdaa:bb:1::1 // TAYGA's IPv6 address.
prefix 64:ff9b::/96 // The NAT64 prefix.
dynamic-pool 192.168.255.0/24 // Dynamic pool prefix.
data-dir /var/spool/tayga // Persistent data storage directory
```
### Как это работает?
DNS-сервер проверяет, есть ли запись AAAA (IPv6-адрес) для домена, если её нет, но есть запись A (IPv4-адрес), тогда DNS-сервер меняет адреса IPv4 в настроенный префикс IPv6/96 и возвращает его как запись AAAA.
Например, есть домен sinbiot.ru и у него нет АААА записи
```
pi@raspberrypi:~ $ dig sinbiot.ru AAAA @1.1.1.1 +short
pi@raspberrypi:~ $
```
Но если обратиться к DNS64 тогда получим
```
pi@raspberrypi:~ $ dig sinbiot.ru AAAA @fdaa:bb:1::2 +short
64:ff9b::c302:4aef
```
Мы используем зарезервированный префикс 64:ff9b::/96 в конфиге /etc/tayga.conf
Префикс /96 направляется на шлюз NAT64 tayga, который выполняет преобразование между IPv6 и IPv4. DNS64 поддерживается последними версиями bind, а tayga является одной из реализаций шлюза NAT64 для Linux.
```
pi@raspberrypi:~ $ cat /var/spool/tayga/dynamic.map
###
###
### TAYGA dynamic map database
192.168.255.4 fd11:22::8457:967d:fb13:f9d9 1656049374
192.168.255.103 fdaa:bb:1::2 1656049331
```
5.DNS64
```
pi@raspberrypi:~ $ cat /etc/bind/named.conf.options
acl thread {
fe80::/16;
fc00::/7;
127.0.0.1;
};
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
// forwarders {
// 0.0.0.0;
// };
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { thread; };
allow-query { any; };
allow-recursion { thread; };
forwarders { 8.8.8.8; 8.8.8.4; };
forward only;
dns64 64:ff9b::/96 { clients { thread; }; recursive-only yes; };
};
```
BIND версии 9.8.0 и более поздние поддерживают DNS64 с помощью подстановки параметров dns64. dns64 поддерживает конфигурацию префикса IPv6, к которому добавляется встроенный IPv4-адрес, а также необязательный суффикс, который затем добавляется к IPv4-адресу для завершения 128-разрядного адреса. (Длина префикса часто составляет 96 бит, и в этом случае суффикс не требуется или даже возможен.)
6.
```
pi@raspberrypi:~ $ grep -v "#" /etc/sysctl.d/60-otbr-accept-ra.conf
net.ipv6.conf.wlan0.accept_ra = 2
net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen = 64
```
```
pi@raspberrypi:~ $ grep -v "#" /etc/sysctl.d/98-rpi.conf
kernel.printk = 3 4 1 3
vm.min_free_kbytes = 16384
net.ipv4.ping_group_range = 0 2147483647
```
```
pi@raspberrypi:~ $ cat /proc/sys/net/ipv4/ip_forward
1
pi@raspberrypi:~ $ cat /proc/sys/net/ipv6/conf/all/forwarding
1
pi@raspberrypi:~ $ cat /proc/sys/net/ipv6/conf/all/disable_ipv6
0
```