Ставим wireguard на сервере:
1 |
apt install -y wireguard |
Генерим ключи сервера:
1 |
wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey |
Проставляем права на приватный ключ:
1 |
chmod 600 /etc/wireguard/privatekey |
С помощью «ip a» проверим название интерфейса (enp0s3) и создадим для него конфиг:
1 |
nano /etc/wireguard/wg0.conf |
1 2 3 4 5 6 |
[Interface] PrivateKey = privatekey # вставить ключ Address = 10.0.0.1/24 ListenPort = 55555 #udp PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s3 -j MASQUERADE |
Включаем IP форвардинг:
1 2 |
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p |
Включаем systemd демон с wireguard:
1 2 |
systemctl enable wg-quick@wg0.service systemctl start wg-quick@wg0.service |
Создаём ключи клиента:
1 |
sudo wg genkey | tee /etc/wireguard/client1_privatekey | wg pubkey | tee /etc/wireguard/client1_publickey |
Добавляем клиента в конфиг сервера:
1 |
nano /etc/wireguard/wg0.conf |
1 2 3 |
[Peer] PublicKey = client1_publickey # ключ клиента AllowedIPs = 10.0.0.2/32 |
Перезагружаем systemd сервис с wireguard:
1 |
systemctl restart wg-quick@wg0 |
Клиент
На локальной машине (например, на ноутбуке) создаём текстовый файл с конфигом клиента:
1 |
nano client1_wg.conf |
1 2 3 4 5 6 7 8 9 10 |
[Interface] PrivateKey = <CLIENT-PRIVATE-KEY> Address = 10.0.0.2/32 DNS = 8.8.8.8 [Peer] PublicKey = <SERVER-PUBKEY> Endpoint = <SERVER-IP>:55555 AllowedIPs = 0.0.0.0/0 PersistentKeepalive = 20 |
Здесь <CLIENT-PRIVATE-KEY> заменяем на приватный ключ клиента, то есть содержимое файла /etc/wireguard/goloburdin_privatekey на сервере. <SERVER-PUBKEY> заменяем на публичный ключ сервера, то есть на содержимое файла /etc/wireguard/publickey на сервере. <SERVER-IP> заменяем на IP сервера.
Ограничение скорости на сервере
Outbound limit:
1 2 |
sudo tc qdisc add dev wg0 parent root handle 1: hfsc default 1 sudo tc class add dev wg0 parent 1: classid 1:1 hfsc sc rate 10mbit ul rate 10mbit |
Inbound limit:
Создаём и запускаем ifb интерфейс inbound0:
1 2 |
sudo ip link add name inbound0 type ifb sudo ip link set inbound0 up |
Направляем пакеты с wireguard в этот интерфейс:
1 2 |
sudo tc qdisc add dev wg0 handle ffff: ingress sudo tc filter add dev wg0 parent ffff: matchall action mirred egress redirect dev inbound0 |
отдельный HFSC qdisc для ifb интерфейса и ограничение всего траффика 10Мбит:
1 2 |
sudo tc qdisc add dev inbound0 parent root handle f: hfsc default 1 sudo tc class add dev inbound0 parent f: classid f:1 hfsc sc rate 10mbit ul rate 10mbit |
Расширенное ограничение (взамен предыдущих двух строк):
Максималка – 50mbit, И 2 дочерних класса:
1) Для https скорость – 5mbit (фильтры ниже)
2) по умолчанию скорость – 45mbit (19)
1 2 3 4 |
sudo tc qdisc add dev inbound0 parent root handle f: hfsc default 19 sudo tc class add dev inbound0 parent f: classid f:1 hfsc sc rate 50mbit ul rate 50mbit sudo tc class add dev inbound0 parent f:1 classid f:11 hfsc ls rate 5mbit ul rate 5mbit sudo tc class add dev inbound0 parent f:1 classid f:19 hfsc ls rate 45mbit |
Фильтры https для ip 10.0.0.6:
1 2 3 4 5 |
sudo tc filter add dev inbound0 parent f: protocol ip prio 11 u32 \ match ip src 10.0.0.6 \ match ip protocol 6 0xff \ match ip sport 443 0xffff \ classid f:11 |