Диагностика и NAT-хелперы
Общее
- Состояние (heartbeat/state):
xp2p client stateиxp2p server state. - Просмотр pending: добавь
--pending, чтобы увидеть настроенные туннели до того, как сервис применит изменения. - Ответчик диагностики:
xp2p diagзапускает слушатель в foreground дляxp2p ping. - Форвардинг:
xp2p client forward add|list|removeиxp2p server forward add|list|remove. - DNS/DHCP (только Linux/OpenWrt):
xp2p {client,server} dns-forward add|remove|list. - NAT snippets (только Linux/OpenWrt):
xp2p nat-redirect add --cidr 192.168.10.0/24генерирует фрагменты правил для прозрачного перехвата.
Проверки ping
xp2p ping — это проверка связности на уровне протокола для ответчика диагностики.
Она работает, когда на удалённой стороне запущен xp2p (сервис клиента/сервера) или когда ты запускаешь xp2p diag на этой ноде.
Если ты не используешь этот проект end-to-end, xp2p ping всё равно может работать, если на ноде, где развёрнут Xray (или на любой ноде, которую ты хочешь проверять), запущен xp2p diag.
Прямой ping (без туннеля, по умолчанию TCP/62022):
xp2p ping <host>
Пример (проверить ноду по host):
xp2p ping edge.example.com
Reverse/tunnel ping (через SOCKS-туннель xp2p):
xp2p ping <host> --tunnel
Пример (проверить через туннель клиента по host):
xp2p ping edge.example.com --tunnel
Пример (проверить reverse-канал, передав reverse tag как аргумент <host>):
xp2p ping reverse-alpha.rev --tunnel
Также можно выбрать reverse-канал по user id (если он однозначно соответствует одному reverse portal):
xp2p ping deploy-1777353786@local --tunnel
Где смотреть значения host/tag:
- Эндпоинты клиента:
xp2p client listпечатаетhostиtagдля настроенных эндпоинтов. - Reverse-каналы сервера:
xp2p server reverse listпечатает reversetag,hostиuser. - Пользователи сервера:
xp2p server user listвыводит user ids, которые лежат в основе reverse portals (создаются приxp2p server user add, если не отключено). - Таблица heartbeat сервера:
xp2p server stateпечатает колонкуCLIENT_USERдля live туннелей.
Если несколько эндпоинтов используют один и тот же host, используй селектор:
xp2p ping edge.example.com --tunnel --endpoint proxy-edge
xp2p ping edge.example.com --tunnel --index 2
При использовании tunnel mode xp2p может маршрутизировать probe через internal marker target. Для reverse-каналов marker port отличается (62023) и выбирается автоматически.
Расширенные опции / устранение неполадок
- Режим наблюдения: добавь
--watchкxp2p client|server state, чтобы стримить таблицы с TTL filtering. - Наблюдение pending: комбинируй
--watch --pending, чтобы видеть staged туннели в ожидании apply/service start. - Кастомный порт/протокол диагностики:
xp2p diag --listen 0.0.0.0:62025 --proto udp. - Кастомный ping port:
xp2p ping <host> --port 62025. - Переопределение маршрута через туннель:
xp2p ping <host> -T <target>; используй-e <tag>или-i <index>(вместе с-T), когда несколько эндпоинтов используют одинhost. - Контроль доступа: порт диагностики намеренно без аутентификации; ограничь его через firewall/ACL (например разреши только LAN и/или туннельный интерфейс).
- OpenWrt (UCI):
uci add firewall rule; uci set firewall.@rule[-1].name='xp2p-diag'; uci set firewall.@rule[-1].src='lan'; uci set firewall.@rule[-1].proto='tcp'; uci set firewall.@rule[-1].dest_port='62022'; uci set firewall.@rule[-1].target='ACCEPT'; uci commit firewall; /etc/init.d/firewall restart. - Linux (nftables):
nft add rule inet filter input tcp dport 62022 ip saddr { 127.0.0.1, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 } accept. - Windows:
New-NetFirewallRule -DisplayName 'xp2p diagnostics' -Direction Inbound -Protocol TCP -LocalPort 62022 -Action Allow -RemoteAddress LocalSubnet.