Використання IPv6 в Advanced Direct Connect

Спостерігати за розвитком файлообмінної мережі цікаво, але ще цікавіше брати участь у ньому.

На сьогоднішній день, встановлюючи та запускаючи сучасний NMDC хаб, новоспечений адміністратор отримує доступ практично до всіх напрацювань і накопиченого у цій галузі досвіду його попередників. Він має систему, готову до розширення та кастомізації у тому числі за допомогою численних скриптів.

С ADC хабами інакше. Структура цього протоколу передбачає розширюваність. Хочеш нову фічу? Ну що ж – пропонуй, просуй, реалізуй, впроваджуй, користуйся.

Перекладіть англійською

Як наслідок, "з коробки" можна, звичайно, отримати готовий хаб, але просто запустити і забути про нього буде погано. Розширюваність в історичному контексті передбачає навіть наявність різної кількості різних функцій клієнтського і серверного софту в залежності від версії. І те, що працюватиме без проблем в одного користувача, може виявитися несумісним із клієнтом іншого, і це потрібно враховувати.

Так сталося і з IPv6. Дідок NMDC не вміє його в принципі, а ось ADC сам по собі до нього готовий. Однак не все так просто.

Зовсім небагато теорії

"Активний" користувач може приймати вхідні з'єднання. Власне, вихідний від нього запит на з'єднання насправді є запрошенням.

«Пасивний» користувач може використовувати лише вихідні запити. За допомогою хаба він просить активного користувача надіслати запрошення – і з'єднання виходить.

Використання IPv6 в Advanced Direct Connect

І так, цей механізм не залежить від версії протоколу 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-записами для доменного імені, що виступає як його адреса.

Використання IPv6 в Advanced Direct Connect

Зверніть увагу, тут при (фактичній) спробі звернення до користувача з IP-адресою шостої версії виводиться помилка.

Hub:	[Outgoing][IPv4:412]	 	DRCM AACX AACU ADCS/0.10 337151563
Hub:	[Incoming][IPv4:412]	 	DCTM AACU AACX ADCS/0.10 1988 337151563
Hub:	[Outgoing][IPv4:412]	 	DSTA AACX AACU 240 IPsunknown

У перекладі на людську це звучить як

P4: - Можна я до тебе причеплюсь?
A6: - Чіпляйся!
P4: - Життя біль 0_0

Короткий словничок, якщо що, тут.

А якщо навпаки, і з'єднання ініціює A4, то помилка не виводиться, і з'єднання просто «зависає».

Hub:	[Outgoing][IPv4:412]	 	DCTM AACX AACU ADCS/0.10 1993 3871342713

Бути а не здаватися

Що важливо, так це режим з'єднання, що відображається на хабі.

Клієнти без підтримки IPv6 повинні будуть бачити підключених через нього користувачів як пасивних просто тому, що для них хаб не заповнює I4 або I6 поле відповідно.

Використання IPv6 в Advanced Direct Connect
FlylinkDC++ vs. IPv6

Насправді ситуація простіше і складніше одночасно.

Використання IPv6 в Advanced Direct Connect
AirDC++ vs. IPv6

Найпростіше, тому що IPv6 має пріоритет над IPv4, і це зрозуміло. Саме через нього (хоча за допомогою відповідної опції є перевизначення) буде встановлено з'єднання з хабом, і його ж активний клієнт пропонуватиме для з'єднання пасивному.

Складніше, тому що якщо на хабі присутні користувачі з підтримкою IPv6, але під'єднані вони через IPv4-адресу, то…

Використання IPv6 в Advanced Direct Connect

… то з ними можна з'єднатися (на думку) взагалі не маючи IPv4.

Зверніть увагу, віддалений клієнт позначив себе як актив, але обробляється як пасив. Чому?

Туди його в гойдалку

Тепер спробуємо з'єднувати один з одним клієнти з різними, але загальними у IPv4 наборами підтримки протоколу IP.

Використання IPv6 в Advanced Direct Connect

Так, шкода, що пасивним користувачам доводиться курити осторонь. Але допомогти цьому не можна, оскільки їхня видима IP-адреса не має особливого значення – на те вони й пасиви.

Використання IPv6 в Advanced Direct Connect

Ба! Активний клієнт відправляє пасивну команду?.. Логічно було б очікувати «завислого» з'єднання, але ні, воно виходить на умовах A4.

Чому так? Звертаємось до розробника та отримуємо відповідь:

CTM isn't good if the other user doesn't support IPv6

І не посперечаєшся! Але це вимагає вже внутрішньої, незалежної від хаба логіки (див. код тут и тут). А пасивам, як і раніше, допомогти не можна, тому що

Active mode = TCPx + IPx

Спроби з'єднання між клієнтами із загальними в частині IPv6 наборами підтримки протоколу IP виглядають наступним чином. Нагадаю, домогтися PA для DC++ мені вдалося.

Використання IPv6 в Advanced Direct Connect

І знову сюрприз. Виходить, пасивний режим IPv6, який демонструє DC++, є або навмисний фейк, або баг.

Що далі?

В даний час існує рівно два способи вирішення всіх можливих проблем з'єднання користувачів у різних режимах та з різними наборами підтримки протоколу IP.

Перший – приглушити IPv6 або, навпаки, створити хаб для роботи тільки через нього.

Другий – ось це розширення, яке тільки-но підходить до стадії тестування.

Ну і, лінуючись налаштовувати активний режим для роботи в DC, пам'ятайте:

Хто має, тому дано буде, а хто не має, у того забереться і те, що він думає мати. Лк. 8:18

Джерело: habr.com

Додати коментар або відгук