Настраиваем шлюз для маршрутизации по списку доступа. маршрутизация с помощью Iptables, списки доступа ipset, получение ip поддоменов *.googlevideo.com или других из списка доступов - tshark (извлечение заголовков). ====== включаем шлюз: ====== echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p устанавливаем необходимые пакеты: iptables ipset tshark на wire-in конфиг /etc/wireguard/wg0.conf root@p621665:~# cat /etc/wireguard/wg0.conf [Interface] PrivateKey = [WG-IN privatekey] Address = 10.0.0.1/24 ListenPort = 51820 PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE [Peer] PublicKey = [WG-OUT publickey] AllowedIPs = 10.0.0.2/32, 192.168.31.5/32 # IP proxy-wireguard-gate в туннеле и локальный IP PersistentKeepalive = 25 root@p621665:~# Генерируем приватный ключ: wg genkey > privatekey Генерируем публичный ключ на основе приватного: wg pubkey < privatekey > publickey или wg genkey | tee privatekey | wg pubkey > publickey Конфиг шлюза: [Interface] PrivateKey = [host privatekey] Address = 10.0.0.2/24 ListenPort = 51820 [Peer] PublicKey = [peer public] AllowedIPs = 0.0.0.0/0 # Весь трафик будет идти через туннель (пока iptables не вмешается) Endpoint = 109.120.141.194:51820 PersistentKeepalive = 25 Тестируем туннель: wg-quick down wg0 wg-quick up wg0 на обоих хостах wg чекаем latest handshake Если всё работает, то: systemctl enable wg-quick@wg0 systemctl start wg-quick@wg0 ====== Настраиваем маршрутизацию для клиентов на шлюзе ====== echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/99-forward.conf iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE Сохраняем конфиг. apt install iptables-persistent Можно заребутиться для проверки. Всё, в данный момент шлюз работает, гоняя всё через тоннель. Приступаем к настройке алгоритма, чтобы только указанные сайты шли через тоннель, по списку. ===== Настройка логики ===== mkdir /etc/iproute2 создаём таблицу маршрутизации echo 200 vpn >> /etc/iproute2/rt_tables добавляем маршрут по этой таблице ip route add default dev wg0 table vpn проверяем: #ip route show table vpn должно быть: ''default dev wg0 scope link'' добавляем правило для пометки пакетов: iptables -t mangle -A PREROUTING -m set --match-set vpn_sites dst -j MARK --set-mark 42 [[iptables_mangle| разбор команды]] добавляем правило, чтобы помеченные пакеты шли через таблицу vpn: ip rule add fwmark 42 table vpn проверяем, что у нас за правила на mangle: sudo iptables -t mangle -L -v -n --line-numbers чтобы удалить дубликаты (если есть): iptables -t mangle -D POSTROUTING 2 добавляем NAT для пакетов с меткой "42" iptables -t nat -A POSTROUTING -m mark --mark 42 -o wg0 -j MASQUERADE теперь заполняем таблицу vpn айпишниками нужных сайтов. apt install dnsutils (нам понадобится команда dig для извлечения всех ip из адреса) apt install ipset создаём [[parse_vpn_list|скрипт]] и список сайтов.