Типичная задача: есть транзитный сервер с хорошим маршрутом, но «грязным» IP, и есть выходной сервер с чистым IP, до которого напрямую идти далеко. Хочется, чтобы трафик сначала шёл через транзит и выходил на выходном узле. mihomo даёт два способа это записать, и они не взаимозаменяемы.
Способ первый: группа relay
Самый прямолинейный. Создайте в proxy-groups группу типа relay и перечислите узлы по порядку:
proxy-groups:
- name: Chain
type: relay
proxies:
- Transit-HK
- Landing-JP
Трафик идёт в порядке списка: ваша машина, затем Transit-HK, затем Landing-JP, затем сайт. Направьте правило на Chain — больше ничего менять не нужно.
В группу relay кладут конкретные узлы, а не другие группы. Если нужно, чтобы один из хопов оставался переключаемым, используйте dialer-proxy ниже.
Способ второй: dialer-proxy на узле
Более гибкий. Добавьте выходному узлу поле dialer-proxy — оно говорит, через кого сначала идут его исходящие соединения:
proxies:
- name: Landing-JP
type: vless
server: jp.example.com
port: 443
dialer-proxy: Transit
Transit здесь может быть именем узла или именем группы. Укажите группу — и транзитный хоп станет переключаемым: меняете транзит когда угодно, выходной узел остаётся прежним. Группа relay так не умеет.
Сначала посчитайте цену
- Задержка складывается. Два RTT суммируются. Тест задержки показывает всю цепочку целиком, так что сравнивать это число с одиночными узлами бессмысленно.
- Полоса берётся по минимуму. Цепочка работает на скорости самого медленного хопа: транзит с лимитом 20 Мбит/с ограничивает всё.
- Доступность перемножается. Падает любой хоп — падает вся цепочка.
- UDP нужен на каждом хопе. Один хоп без проброса UDP убивает UDP во всей цепочке. Для игр начните со статьи про UDP и оптимизацию для игр.
То есть цепочка — не способ ускориться. Она окупается только когда транзит реально улучшает дальний участок: выделенная линия или хороший BGP-транзит. В остальных случаях лишний хоп — чистый минус.
Убедитесь, что цепочка собралась
- Сначала проверьте хопы по отдельности. Поставьте выходом Transit, проверьте связь; затем то же с Landing. Пропустите этот шаг — и потом не поймёте, какая половина сломалась.
- Собрав цепочку, откройте страницу «Подключения» и разверните любое соединение: в поле цепочки должны по порядку появиться оба имени узлов.
- Выполните
curl ip.sb. Ответ должен содержать адрес выходного узла, а не транзитного.
Чтобы через цепочку шли только отдельные сайты, направьте на группу одно правило; синтаксис — в справочнике по своим правилам. Чем вообще отличаются типы групп — в разборе структуры конфига.