Некоторые подробности установки jool в качестве NAT64

В статье NAT64, NAT464, DNS64, CLAT, PLAT и другие страшные слова при описании установки и настройки jool в качестве NAT64 был использован очень «наивный» конфиг. В 99.9% случаев он будет работать, но иногда возможны некоторые проблемы. Плюс, там не описана возможность обратного (из clearnet в yggnet) проброса портов. В этой статье мы постараемся исправить этот недостаток.

:!: DISCLAIMER
Еще раз хотелось бы напомниь: без настроек firewall ваша нода доступна из сети Yggdrasil всем и каждому. Если в результате через вашу ноду выйдут в «белый интернет» злые хакеры и взломают Пентагон / разместят на форуме призывы к свержению существующего строя / выложат в сеть детскую порнографию, то в первую очередь прийдут именно к вам. Не забывайте настраивать firewall (это относится не только к этой статье, а и в целом к использованию Yggdrasil). Если что - мы вас предупредили!

Общая настройка системы

Перед использованием nat64 необходимо выполнить следующее:

  1. Посмотреть и запомнить/записать какие есть запущенные сервисы и на каких портах они слушают.
  2. Выполнить команду sysctl net.ipv4.ip_local_port_range и запомнить/записать диапазон портов.

Настройка sysctl.conf

В /etc/sysctl.conf нужно добавить три строчки

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv4.ip_local_port_range=50000 65500

Значения в третьей строчке нужно выбирать из Ваших потребностей. Если на сервере, на котором вы поднимаете NAT64, много локальных сервисов, которые активно ходят в интернет - возможно Вам придётся увеличить этот диапазон. Если при выполнении команды sysctl net.ipv4.ip_local_port_range вы получили диапазон 32768 - 60999 и Вы не планируете большого количества сессий через Ваш NAT64 - вобще не вводите третью строчку. Следующее предупреждение настолько важное, что оно будет написано дважды, в этом разделе и в следующем:

:!: ВАЖНО: Диапазон портов выводимый командой sysctl net.ipv4.ip_local_port_range и список портов, которые «слушают» другие программы никогда не должен пересекаться с диапазоном портов используемых NAT64!!!

Настройка jool.conf

Базово файл /etc/jool/jool.conf должен выглядеть так:

{
        "comment": "Configuration for the systemd NAT64 Jool service for yggdrasil.",

        "instance": "default",
        "framework": "netfilter",

        "global": {
                "comment": "Sample pool6 prefix",
                "pool6": "303:fafa:fefe:dede:ff::/96",
                "lowest-ipv6-mtu": 20000,
                "maximum-simultaneous-opens": 100
        },

        "comment": "Sample pool4 table",
        "pool4": [],

        "bib": []
}

Это - минимально-достаточный конфиг, при котором, скорее всего, обычный NAT64 будет работать без каких либо проблем. Проблемы будут в трёх случаях:

  1. Если диапазон, который вывела команда sysctl net.ipv4.ip_local_port_range пересекается с диапазоном 61001 - 65535, используемый jool по умолчанию (и Вы его не поменяли) или/и в этом диапазоне «слушает» какая либо программа.
  2. Если Вы хотите выпустить в публичную сеть через этот NAT64 много yggdrasil узлов, например офис или домашнюю сетку. Штатного диапазона Вам может просто не хватить.
  3. Если Вы планируете обратный проброc портов, которые не попадают в диапазон 61001 - 65535

:!: ВАЖНО: Диапазон портов выводимый командой sysctl net.ipv4.ip_local_port_range и список портов, которые «слушают» другие программы никогда не должен пересекаться с диапазоном портов используемых NAT64!!!

Если ни один из этих случаев не касается Вас, и вы пришли сюда из статьи NAT64, NAT464, DNS64, CLAT, PLAT и другие страшные слова - можете спокойно вернуться к чтению той статьи. Никаких проблем у Вас не будет.

Решение проблем

И так, Вы прочитали предыдущий раздел и поняли, что у вас какие-то проблемы всё таки есть. Дальше будет написано как их решать.

Проблема: пересекаются диапазоны портов

Если пересекается только вывод net.ipv4.ip_local_port_range, то самый простой способ решения - поменять диапазон портов используемыйх системой.

Внесение в /etc/sysctl.conf строчки net.ipv4.ip_local_port_range = 32768 60999 скорее всего решит Вашу проблему. Это диапазон, используемый, например, в Ubuntu по умолчанию. Хватает им, хватит и Вам. Или назначьте свой диапазон. Главное - он не должен пересекаться с используемым диапазоном NAT64 по умолчанию.

Если-же, пересекается порт, который «слушает» какя либо программа - читайте дальше.

Проблема: диапазон слишком маленький

Придётся внести дополнительные настройки в файл /etc/jool/jool.conf в секцию pool4

        "pool4": [
                {
                        "protocol": "TCP",
                        "prefix": "1.1.1.1/32",
                        "port range": "20000-49999"
                }, {
                        "protocol": "UDP",
                        "prefix": "1.1.1.1/32",
                        "port range": "20000-49999",
                }, {
                        "protocol": "ICMP",
                        "prefix": "1.1.1.1/32",
                        "port range": "1000-2000"
                }

        ],

(вместо 1.1.1.1 Вам нужно указать тот «белый» IPv4, через который вы делаете NAT64) и внести изменения в /etc/sysctl.conf, добавив строчку net.ipv4.ip_local_port_range=50000 65500.

Проблема: я хочу пробрасывать порты

Собственно, вся эта статья затевалась именно для того, что бы написать про эту возможность (кто сказал, что использование данной вики в качестве личной записной книжки - плохая идея? :-) ). Допустим, необходимо все пакеты приходящие на 100-й и 105-й порт «белого» IPv4 адреса пробрасывать на 100-й и 105-й порт какого либо yggdrasil адреса. Нам потребуется внести следующие изменения в файл /etc/jool/jool.conf

        "pool4": [
                {
                        "protocol": "TCP",
                        "prefix": "1.1.1.1/32",
                        "port range": "100"
                },{
                        "protocol": "TCP",
                        "prefix": "1.1.1.1/32",
                        "port range": "105"
                },{
                        "protocol": "TCP",
                        "prefix": "1.1.1.1/32",
                        "port range": "20000-49999",
                }, {
                        "mark": 0,
                        "protocol": "UDP",
                        "prefix": "1.1.1.1/32",
                        "port range": "20000-49999",
                }, {
                        "mark": 0,
                        "protocol": "ICMP",
                        "prefix": "1.1.1.1/32",
                        "port range": "1000-2000"
                }

        ],
        "bib": [
                {
                        "protocol": "TCP",
                        "ipv6 address": "312:f7fc:fafe:d0d5:1::dead#80",
                        "ipv4 address": "1.1.1.1#100"
                },{
                        "protocol": "TCP",
                        "ipv6 address": "312:f7fc:fafe:d0d5:1::dead#443",
                        "ipv4 address": "1.1.1.1#105"
                }

        ]
}

(вместо 1.1.1.1 указываем свой белый адрес, вместо 312:f7fc:fafe:d0d5:1::dead адрес, куда нам нужно пробрасывать порт), и не забываем внести изменения в /etc/sysctl.conf, добавив строчку net.ipv4.ip_local_port_range=50000 65500.

Резюме

Jool - это очень мощное средство, когда Вам необходимо связать между собой IPv6 и IPv4 сети. И тривиальным NAT64 оно не ограничивается. Настоятельно рекомендуется сходить к ним на сайт и почитать документацию.

Только авторизованные участники могут оставлять комментарии.
yggdrasil/tunnels/jool.txt · Последнее изменение: 2024/11/18 21:04 — Fyodor Ustinov
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki