Цепочка (C2–B–A–C1)
Эта цепочка отправляет трафик из C2 через B и A, чтобы достичь C1.
Схема
flowchart TB
C1["C1 (гость)<br/>10.0.101.0/24 за NAT на A"] -->|"default gw"| A["A (server router)<br/>xp2ps"]
A <-->|"xp2p TUN поверх Xray"| B["B (client router)<br/>xp2pc"]
B -->|"default gw"| C2["C2 (гость)<br/>10.0.102.0/24 за NAT на B"]
Предпосылки
- A = роутер с
xp2p server, B = роутер сxp2p client. - C1 находится за A (
10.0.101.0/24), C2 находится за B (10.0.102.0/24). - Туннель A–B уже работает, и обе стороны запущены в режиме TUN.
- C1 использует A как default gateway, а C2 использует B как default gateway.
Редиректы (маршруты ставятся на A и B)
Когда включён TUN, xp2p {client,server} redirect add --cidr ... компилируется в маршруты ОС на роутерах (A/B) во время apply. Ручные маршруты на C1/C2 добавлять не нужно.
xp2p client redirect add --cidr 10.0.101.0/24
xp2p server redirect add --cidr 10.0.102.0/24
Примени изменения перезапуском сервисов через service manager (например service xp2p-client restart / service xp2p-server restart на OpenWrt или systemctl restart xp2p-client xp2p-server на системах с systemd).
OpenWrt firewall
Привяжи TUN-интерфейс xp2p к firewall zone и разреши LAN <-> tunnel forwarding.
На B (client, xp2pc):
uci -q delete firewall.xp2ptun
uci set firewall.xp2ptun='zone'
uci set firewall.xp2ptun.name='xp2ptun'
uci set firewall.xp2ptun.network='xp2pc'
uci set firewall.xp2ptun.input='ACCEPT'
uci set firewall.xp2ptun.output='ACCEPT'
uci set firewall.xp2ptun.forward='ACCEPT'
uci add firewall forwarding
uci set firewall.@forwarding[-1].src='lan'
uci set firewall.@forwarding[-1].dest='xp2ptun'
uci add firewall forwarding
uci set firewall.@forwarding[-1].src='xp2ptun'
uci set firewall.@forwarding[-1].dest='lan'
uci commit firewall
/etc/init.d/firewall restart
На A (server, xp2ps) сделай то же самое, но поставь firewall.xp2ptun.network='xp2ps'.
Проверка
На B (client router) проверь, что C1 доступен через туннель с помощью xp2p ping. Выбери порт, который точно открыт на C1 (например 22/tcp для SSH):
xp2p ping 10.0.101.1 --tunnel --proto tcp --port 22