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 ```