Спостерігати за розвитком файлообмінної мережі цікаво, але ще цікавіше брати участь у ньому.
На сьогоднішній день, встановлюючи та запускаючи сучасний NMDC хаб, новоспечений адміністратор отримує доступ практично до всіх напрацювань і накопиченого у цій галузі досвіду його попередників. Він має систему, готову до розширення та кастомізації у тому числі за допомогою численних скриптів.
С ADC хабами інакше. Структура цього протоколу передбачає розширюваність. Хочеш нову фічу? Ну що ж – пропонуй, просуй, реалізуй, впроваджуй, користуйся.
Як наслідок, "з коробки" можна, звичайно, отримати готовий хаб, але просто запустити і забути про нього буде погано. Розширюваність в історичному контексті передбачає навіть наявність різної кількості різних функцій клієнтського і серверного софту в залежності від версії. І те, що працюватиме без проблем в одного користувача, може виявитися несумісним із клієнтом іншого, і це потрібно враховувати.
Так сталося і з IPv6. Дідок NMDC не вміє його в принципі, а ось ADC сам по собі до нього готовий. Однак не все так просто.
Зовсім небагато теорії
"Активний" користувач може приймати вхідні з'єднання. Власне, вихідний від нього запит на з'єднання насправді є запрошенням.
«Пасивний» користувач може використовувати лише вихідні запити. За допомогою хаба він просить активного користувача надіслати запрошення – і з'єднання виходить.
І так, цей механізм не залежить від версії протоколу IP.
Лебідь, рак та щука
Поговоримо про клієнтський софт.
Підтримка IPv6 в DC + + носить експериментальний характер. Окремих налаштувань для нього немає, і тим дивовижнішим для мене було побачити різні режими роботи для різних версій IP, причому пасивний якраз для шостої, але це неточно.
Отримати активний режим при ручному налаштуванні не вдалося навіть при явному використанні як WAN IP домену з AAAA-записом, а ось в автоматичному режимі з використанням UPnP все запрацювало як обов'язково.
AirDC ++ також має підтримку IPv6-з'єднань, і вона реалізована зовсім окремо від IPv4. Більш того, цей клієнт модифікує теги користувачів таким чином, щоб відображати режими роботи для обох протоколів IP одночасно. Самі хаби робити цього (поки що) не вміють, а шкода.
Відразу маємо обмовитися: AirDC++ робить так один і для себе. Надалі для зручності я використовуватиму поєднання начебто AP або AA як вказівку на активний чи пасивний режими роботи для IPv4 і IPv6 відповідно, а чи не їх відображення у тезі реального клієнта на реальному хабі. Це важливо.
У нашому експерименті ми будемо використовувати FlylinkDC++ як клієнт, зовсім не знайомий з IPv6. Слід також зазначити, що підтримка NATT йому на час написання статті була реалізована ніде.
Початок
Насамперед ми розглянемо свідомо неможливі з'єднання між користувачами різних версій протоколу IP. Для тесту використовуватиметься IPv6 ready хаб з ресурсними A- і AAAA-записами для доменного імені, що виступає як його адреса.
Зверніть увагу, тут при (фактичній) спробі звернення до користувача з IP-адресою шостої версії виводиться помилка.
Що важливо, так це режим з'єднання, що відображається на хабі.
Клієнти без підтримки IPv6 повинні будуть бачити підключених через нього користувачів як пасивних просто тому, що для них хаб не заповнює I4 або I6 поле відповідно.
FlylinkDC++ vs. IPv6
Насправді ситуація простіше і складніше одночасно.
AirDC++ vs. IPv6
Найпростіше, тому що IPv6 має пріоритет над IPv4, і це зрозуміло. Саме через нього (хоча за допомогою відповідної опції є перевизначення) буде встановлено з'єднання з хабом, і його ж активний клієнт пропонуватиме для з'єднання пасивному.
Складніше, тому що якщо на хабі присутні користувачі з підтримкою IPv6, але під'єднані вони через IPv4-адресу, то…
… то з ними можна з'єднатися (на думку) взагалі не маючи IPv4.
Зверніть увагу, віддалений клієнт позначив себе як актив, але обробляється як пасив. Чому?
Туди його в гойдалку
Тепер спробуємо з'єднувати один з одним клієнти з різними, але загальними у IPv4 наборами підтримки протоколу IP.
Так, шкода, що пасивним користувачам доводиться курити осторонь. Але допомогти цьому не можна, оскільки їхня видима IP-адреса не має особливого значення – на те вони й пасиви.
Ба! Активний клієнт відправляє пасивну команду?.. Логічно було б очікувати «завислого» з'єднання, але ні, воно виходить на умовах A4.
Чому так? Звертаємось до розробника та отримуємо відповідь:
CTM isn't good if the other user doesn't support IPv6
І не посперечаєшся! Але це вимагає вже внутрішньої, незалежної від хаба логіки (див. код тут и тут). А пасивам, як і раніше, допомогти не можна, тому що
Спроби з'єднання між клієнтами із загальними в частині IPv6 наборами підтримки протоколу IP виглядають наступним чином. Нагадаю, домогтися PA для DC++ мені вдалося.
І знову сюрприз. Виходить, пасивний режим IPv6, який демонструє DC++, є або навмисний фейк, або баг.
Що далі?
В даний час існує рівно два способи вирішення всіх можливих проблем з'єднання користувачів у різних режимах та з різними наборами підтримки протоколу IP.
Перший – приглушити IPv6 або, навпаки, створити хаб для роботи тільки через нього.
Другий – ось це розширення, яке тільки-но підходить до стадії тестування.
Ну і, лінуючись налаштовувати активний режим для роботи в DC, пам'ятайте:
Хто має, тому дано буде, а хто не має, у того забереться і те, що він думає мати. Лк. 8:18