Задать вопрос
@Ivan_Google

Wireguard контроль числа подключенных юзеров. Как сделать ограниченное число подключений на один ключ?

Приветствую хабровчане.
Возник вопрос ,
многие из тех кто продает ключи к wireguard vpn ,
ставят ограничение (1, 2, 5 и т.д ) на количество активных подключений к одному ключу .
*и самое интересное - эти ограничения работают.

Собственно вопрос: Как?
На сколько я знаю, подобных функций у самого wireguard (серверной части) нет.

Усиленный гуглинг не дал результатов .

Если кто-то знает как это реализовано - прошу обьяснить.
  • Вопрос задан
  • 3306 просмотров
Подписаться 2 Средний 4 комментария
Решения вопроса 1
@unbelieve
Ограничение делается при помощи ip адресов.

Типичный конфиг wg0.conf на сервере:
[Interface]
PrivateKey = <privatekey server>
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; iptables -A FORWARD -o %i -j ACCEPT
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; iptables -D FORWARD -o %i -j ACCEPT

[Peer]
PublicKey = <publickey peer1>
AllowedIPs = 10.0.0.2/32


Вместо AllowedIPs = 10.0.0.2/32 можно сделать AllowedIPs = 10.0.0.2/28

Так же в конфиге клиента сделать:

[Interface]
PrivateKey = <privatekey peer 1>
Address = 10.0.0.2/28
DNS = 1.1.1.1,8.8.8.8

[Peer]
PublicKey = <publickey peer 1>
Endpoint = xx.xxx.xx.xxx:51820
AllowedIPs = 0.0.0.0/0


После этого один файл должен заработать у нескольких людей. А точнее у 14.
Возможно где-то ошибся. Но примерно так.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Moonshiner21
Заработать-то он поначалу заработает, но будет жёстко глючить при одновременном подключении. См. https://www.procustodibus.com/blog/2021/01/same-ke... :

WireGuard предполагает, что каждый отдельный клиент (он же одноранговый узел) будет использовать отдельную криптографическую пару ключей. Открытый ключ в этой паре ключей используется не только для установления зашифрованного соединения с одноранговым узлом — он также используется в качестве уникального идентификатора для однорангового узла.

Фактически WireGuard использует открытый ключ однорангового узла в качестве ключа поиска во внутренней таблице подключенных одноранговых узлов; при отправке зашифрованного трафика одноранговому узлу WireGuard обращается к этой таблице, чтобы определить общедоступный IP-адрес и порт (он же конечная точка), на который он должен отправлять зашифрованный трафик. Если несколько конечных точек пытаются использовать один и тот же ключ одновременно, запись в этой таблице для других конечных точек, пытающихся использовать тот же ключ, будет перезаписана последней конечной точкой, которая использовала ключ.

Когда только один пользователь активно использует ключ, все будет в порядке, но когда несколько пользователей одновременно пытаются подключиться к одному и тому же хосту WireGuard с помощью одного и того же ключа, работа всех пользователей ухудшится — их соединение будет “зависать”, пока все пользователи, кроме одного, не откажутся. За кулисами WireGuard большую часть времени будет отправлять большинство пакетов обратно не на ту конечную точку, что приводит к пропущенным ответам и постоянным повторным попыткам приложений, которые пользователи пытаются использовать через WireGuard.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы