Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Wireguard добавить поддержку идентификации по client_id #1052

Open
avengermsoft opened this issue Jan 13, 2025 · 5 comments

Comments

@avengermsoft
Copy link

avengermsoft commented Jan 13, 2025

Добрый день!

Прошу добавить идентификацию протокола Wireguard по client_id (byte[3]), поле reserved протокола.

Тест:
D:\TestWARP\sing-box.exe tools fetch https://1.1.1.1/cdn-cgi/trace -c test1.conf

{ "log": { "level": "debug", "timestamp": true }, "inbounds": [ { "type": "mixed", "tag": "mixed-in", "listen": "127.0.0.1", "listen_port": 1080, "set_system_proxy": false, "sniff": true, "domain_strategy": "prefer_ipv4" } ], "outbounds": [ { "type": "wireguard", "tag": "wireguard-out", "server": "162.159.193.2", "server_port": 2408, "system_interface": false, "gso": false, "interface_name": "wg0", "local_address": [ "172.16.0.2/32" ], "private_key": "GMH1vF0PQLyIMUgYGQM06NgnVviFLyw907eO310DC1o=", "peer_public_key": "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=", "reserved": [ 140, 40, 79 ], "workers": 1, "mtu": 1280, "network": "tcp" } ], "route": { "final": "wireguard-out", "auto_detect_interface": true } }

Для keenetic
interface Wireguard0 wireguard peer bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo= client-id send 9185359

Трафик:
изображение

@bol-van
Copy link
Owner

bol-van commented Jan 13, 2025

Мало что понял.
Сейчас опознается только WG handshake initiation. Только на этот пакет и идет реакция без desync any protocol.
Зачем что-то опознавать по отдельно взятому пакету с данными в середине сеанса, и еще и с каким-то частным особым ID ?

@avengermsoft
Copy link
Author

avengermsoft commented Jan 13, 2025

Мало что понял. Сейчас опознается только WG handshake initiation. Только на этот пакет и идет реакция без desync any protocol. Зачем что-то опознавать по отдельно взятому пакету с данными в середине сеанса, и еще и с каким-то частным особым ID ?

ReservedId идет во всех пакетах WG. И задается в настройках wireguard, либо в виде массива (Sing-Box,XRay,V2Ray и т.д.) [ 140, 40, 79 ], либо в виде числа на Keenetic = 9185359
изображение

В примере 9185359 = 0x8C284F (0x8c=140, 0x28=40, 0x4f=79)

@avengermsoft
Copy link
Author

avengermsoft commented Jan 13, 2025

При обмене data[1..3] необязательно 0 у wireguard.

bool IsWireguardHandshakeInitiation(const uint8_t *data, size_t len) { return len==148 && data[0]==1 && data[1]==0 && data[2]==0 && data[3]==0; }

wg.dmp

@bol-van
Copy link
Owner

bol-van commented Jan 13, 2025

В оригинальном wireguard байты 1-3 значатся как reserved zero. Оригинальный WG шлет там только нули.
Другое шлют только альтернативные имплементации.
Шарк распознает сигнатуру по длине дата пейлоада 148 и первому байту 1.
Нулевой пакет 148 с первым байтом 1 шарк распознает как wireguard.

Ослабил сигнатуру до той, что используется в шарке

@bol-van
Copy link
Owner

bol-van commented Jan 29, 2025

См последний релиз. Должно срабатывать

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants