<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.ramba-art.ru/index.php?action=history&amp;feed=atom&amp;title=RAMBA_Selective_VPN_Gateway</id>
	<title>RAMBA Selective VPN Gateway - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ramba-art.ru/index.php?action=history&amp;feed=atom&amp;title=RAMBA_Selective_VPN_Gateway"/>
	<link rel="alternate" type="text/html" href="https://wiki.ramba-art.ru/index.php?title=RAMBA_Selective_VPN_Gateway&amp;action=history"/>
	<updated>2026-10-22T03:12:02Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.ramba-art.ru/index.php?title=RAMBA_Selective_VPN_Gateway&amp;diff=150&amp;oldid=prev</id>
		<title>Artem: Artem переименовал страницу RAMBA 20Selective VPN Gateway в RAMBA Selective VPN Gateway</title>
		<link rel="alternate" type="text/html" href="https://wiki.ramba-art.ru/index.php?title=RAMBA_Selective_VPN_Gateway&amp;diff=150&amp;oldid=prev"/>
		<updated>2026-09-10T21:10:58Z</updated>

		<summary type="html">&lt;p&gt;Artem переименовал страницу &lt;a href=&quot;/wiki/RAMBA_20Selective_VPN_Gateway&quot; class=&quot;mw-redirect&quot; title=&quot;RAMBA 20Selective VPN Gateway&quot;&gt;RAMBA 20Selective VPN Gateway&lt;/a&gt; в &lt;a href=&quot;/wiki/RAMBA_Selective_VPN_Gateway&quot; title=&quot;RAMBA Selective VPN Gateway&quot;&gt;RAMBA Selective VPN Gateway&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 00:10, 11 сентября 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Artem</name></author>
	</entry>
	<entry>
		<id>https://wiki.ramba-art.ru/index.php?title=RAMBA_Selective_VPN_Gateway&amp;diff=149&amp;oldid=prev</id>
		<title>Artem: Новая страница: «{{DISPLAYTITLE:RAMBA Selective VPN Gateway}}  = RAMBA Selective VPN Gateway =  &#039;&#039;&#039;RAMBA Selective VPN Gateway&#039;&#039;&#039; — шлюз селективной маршрутизации трафика на базе &#039;&#039;&#039;WireGuard + nftables + dnsmasq + HAPP/VLESS&#039;&#039;&#039;.  Система позволяет подключать мобильные устройства к домашней сети через WireGuard и отправлять через HAPP только тра...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.ramba-art.ru/index.php?title=RAMBA_Selective_VPN_Gateway&amp;diff=149&amp;oldid=prev"/>
		<updated>2026-09-10T21:10:24Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «{{DISPLAYTITLE:RAMBA Selective VPN Gateway}}  = RAMBA Selective VPN Gateway =  &amp;#039;&amp;#039;&amp;#039;RAMBA Selective VPN Gateway&amp;#039;&amp;#039;&amp;#039; — шлюз селективной маршрутизации трафика на базе &amp;#039;&amp;#039;&amp;#039;WireGuard + nftables + dnsmasq + HAPP/VLESS&amp;#039;&amp;#039;&amp;#039;.  Система позволяет подключать мобильные устройства к домашней сети через WireGuard и отправлять через HAPP только тра...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{DISPLAYTITLE:RAMBA Selective VPN Gateway}}&lt;br /&gt;
&lt;br /&gt;
= RAMBA Selective VPN Gateway =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;RAMBA Selective VPN Gateway&amp;#039;&amp;#039;&amp;#039; — шлюз селективной маршрутизации трафика на базе&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WireGuard + nftables + dnsmasq + HAPP/VLESS&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Система позволяет подключать мобильные устройства к домашней сети через WireGuard&lt;br /&gt;
и отправлять через HAPP только трафик выбранных сервисов.&lt;br /&gt;
&lt;br /&gt;
Остальной интернет-трафик выходит напрямую через основной маршрутизатор.&lt;br /&gt;
&lt;br /&gt;
По состоянию на сентябрь 2026 года через HAPP маршрутизируются:&lt;br /&gt;
&lt;br /&gt;
* YouTube&lt;br /&gt;
* Instagram&lt;br /&gt;
* Telegram&lt;br /&gt;
* OpenAI / ChatGPT&lt;br /&gt;
&lt;br /&gt;
Discord тестировался, однако был исключён из селективной маршрутизации из-за проблем&lt;br /&gt;
с голосовым UDP-трафиком.&lt;br /&gt;
&lt;br /&gt;
== Архитектура ==&lt;br /&gt;
&lt;br /&gt;
Основная схема:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                         INTERNET&lt;br /&gt;
                            |&lt;br /&gt;
                  Public IP / Router&lt;br /&gt;
                            |&lt;br /&gt;
                   UDP 51821 -&amp;gt; 51820&lt;br /&gt;
                            |&lt;br /&gt;
                            v&lt;br /&gt;
                 +---------------------+&lt;br /&gt;
                 | CT103 vpn-gateway   |&lt;br /&gt;
                 | 192.168.1.53        |&lt;br /&gt;
                 |                     |&lt;br /&gt;
                 | WireGuard           |&lt;br /&gt;
                 | dnsmasq             |&lt;br /&gt;
                 | nftables            |&lt;br /&gt;
                 | policy routing      |&lt;br /&gt;
                 +----------+----------+&lt;br /&gt;
                            |&lt;br /&gt;
                +-----------+-----------+&lt;br /&gt;
                |                       |&lt;br /&gt;
        обычный трафик            выбранный трафик&lt;br /&gt;
                |                       |&lt;br /&gt;
                v                       v&lt;br /&gt;
         192.168.1.1             192.168.1.52&lt;br /&gt;
        основной роутер                 |&lt;br /&gt;
                                        v&lt;br /&gt;
                              +--------------------+&lt;br /&gt;
                              | CT502 happ-gateway |&lt;br /&gt;
                              | HAPP / VLESS       |&lt;br /&gt;
                              +---------+----------+&lt;br /&gt;
                                        |&lt;br /&gt;
                                        v&lt;br /&gt;
                                      VPN&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Клиент WireGuard использует:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10.20.0.0/24&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Адрес шлюза:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10.20.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Компоненты ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Компонент&lt;br /&gt;
! Адрес&lt;br /&gt;
! Назначение&lt;br /&gt;
|-&lt;br /&gt;
| CT103 vpn-gateway&lt;br /&gt;
| 192.168.1.53&lt;br /&gt;
| WireGuard, DNS, nftables, selective routing&lt;br /&gt;
|-&lt;br /&gt;
| CT502 happ-gateway&lt;br /&gt;
| 192.168.1.52&lt;br /&gt;
| HAPP/VLESS VPN gateway&lt;br /&gt;
|-&lt;br /&gt;
| Основной маршрутизатор&lt;br /&gt;
| 192.168.1.1&lt;br /&gt;
| Обычный выход в Интернет&lt;br /&gt;
|-&lt;br /&gt;
| WireGuard&lt;br /&gt;
| 10.20.0.1/24&lt;br /&gt;
| VPN-сеть клиентов&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== WireGuard ==&lt;br /&gt;
&lt;br /&gt;
WireGuard работает внутри LXC-контейнера &amp;#039;&amp;#039;&amp;#039;CT103&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Основной интерфейс:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wg0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Адрес:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10.20.0.1/24&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Порт WireGuard внутри сети:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UDP 51820&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На внешнем маршрутизаторе настроен проброс:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WAN UDP 51821&lt;br /&gt;
        |&lt;br /&gt;
        v&lt;br /&gt;
192.168.1.53:51820&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Клиенты используют:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AllowedIPs = 0.0.0.0/0&lt;br /&gt;
DNS = 10.20.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом весь IPv4-трафик клиента сначала поступает на &amp;#039;&amp;#039;&amp;#039;vpn-gateway&amp;#039;&amp;#039;&amp;#039;,&lt;br /&gt;
а уже там принимается решение о дальнейшем маршруте.&lt;br /&gt;
&lt;br /&gt;
== Принцип селективной маршрутизации ==&lt;br /&gt;
&lt;br /&gt;
Для выбранного трафика устанавливается:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fwmark 0x1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На CT103 существует отдельная таблица маршрутизации:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
table 200&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правило:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
100: from all fwmark 0x1 lookup 200&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таблица 200:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default via 192.168.1.52 dev eth0&lt;br /&gt;
192.168.1.0/24 dev eth0 scope link src 192.168.1.53&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
без mark&lt;br /&gt;
   |&lt;br /&gt;
   v&lt;br /&gt;
192.168.1.1&lt;br /&gt;
   |&lt;br /&gt;
   v&lt;br /&gt;
обычный Интернет&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
mark 0x1&lt;br /&gt;
   |&lt;br /&gt;
   v&lt;br /&gt;
table 200&lt;br /&gt;
   |&lt;br /&gt;
   v&lt;br /&gt;
192.168.1.52&lt;br /&gt;
   |&lt;br /&gt;
   v&lt;br /&gt;
HAPP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== nftables ==&lt;br /&gt;
&lt;br /&gt;
Основной конфигурационный файл:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/nftables.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Актуальная логика:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
table ip selective {&lt;br /&gt;
    set happ_ipv4 {&lt;br /&gt;
        type ipv4_addr&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    set telegram_ipv4 {&lt;br /&gt;
        type ipv4_addr&lt;br /&gt;
        flags interval&lt;br /&gt;
        elements = {&lt;br /&gt;
            91.108.4.0/22,&lt;br /&gt;
            91.108.8.0/22,&lt;br /&gt;
            91.108.12.0/22,&lt;br /&gt;
            91.108.16.0/22,&lt;br /&gt;
            91.108.56.0/22,&lt;br /&gt;
            149.154.160.0/20&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    chain prerouting {&lt;br /&gt;
        type filter hook prerouting priority mangle;&lt;br /&gt;
        policy accept;&lt;br /&gt;
&lt;br /&gt;
        iifname &amp;quot;wg0&amp;quot; ip daddr @telegram_ipv4 \&lt;br /&gt;
            counter meta mark set 0x1&lt;br /&gt;
&lt;br /&gt;
        iifname &amp;quot;wg0&amp;quot; ip daddr @happ_ipv4 \&lt;br /&gt;
            counter meta mark set 0x1&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Набор:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
happ_ipv4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
заполняется динамически через &amp;#039;&amp;#039;&amp;#039;dnsmasq&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Telegram использует отдельный статический набор IP-сетей, поскольку мобильное&lt;br /&gt;
приложение может устанавливать MTProto-соединения непосредственно с IP-адресами&lt;br /&gt;
Telegram.&lt;br /&gt;
&lt;br /&gt;
== DNS-based routing ==&lt;br /&gt;
&lt;br /&gt;
На CT103 работает &amp;#039;&amp;#039;&amp;#039;dnsmasq&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
WireGuard-клиенты используют:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DNS = 10.20.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конфигурация:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/dnsmasq.d/wireguard.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
interface=wg0&lt;br /&gt;
listen-address=10.20.0.1&lt;br /&gt;
bind-dynamic&lt;br /&gt;
&lt;br /&gt;
no-resolv&lt;br /&gt;
server=1.1.1.1&lt;br /&gt;
server=1.0.0.1&lt;br /&gt;
&lt;br /&gt;
cache-size=2000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Домены сервисов находятся в:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/dnsmasq.d/happ-domains.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При DNS-разрешении IP-адрес автоматически добавляется в nftables set:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip selective happ_ipv4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого трафик WireGuard-клиента к этому IP получает &amp;#039;&amp;#039;&amp;#039;mark 0x1&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== YouTube ==&lt;br /&gt;
&lt;br /&gt;
Для YouTube используются:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
nftset=/youtube.com/4#ip#selective#happ_ipv4&lt;br /&gt;
nftset=/youtu.be/4#ip#selective#happ_ipv4&lt;br /&gt;
nftset=/googlevideo.com/4#ip#selective#happ_ipv4&lt;br /&gt;
nftset=/ytimg.com/4#ip#selective#happ_ipv4&lt;br /&gt;
nftset=/youtubei.googleapis.com/4#ip#selective#happ_ipv4&lt;br /&gt;
nftset=/ggpht.com/4#ip#selective#happ_ipv4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Особенно важен:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
googlevideo.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
так как через него передаётся значительная часть видеопотока YouTube.&lt;br /&gt;
&lt;br /&gt;
== Instagram ==&lt;br /&gt;
&lt;br /&gt;
Используются:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
nftset=/instagram.com/4#ip#selective#happ_ipv4&lt;br /&gt;
nftset=/cdninstagram.com/4#ip#selective#happ_ipv4&lt;br /&gt;
nftset=/fbcdn.net/4#ip#selective#happ_ipv4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следует учитывать, что &amp;#039;&amp;#039;&amp;#039;fbcdn.net&amp;#039;&amp;#039;&amp;#039; является общей инфраструктурой Meta.&lt;br /&gt;
&lt;br /&gt;
Поэтому некоторые ресурсы других сервисов Meta также могут попасть через HAPP.&lt;br /&gt;
&lt;br /&gt;
== Telegram ==&lt;br /&gt;
&lt;br /&gt;
Одних DNS-правил для Telegram оказалось недостаточно.&lt;br /&gt;
&lt;br /&gt;
Telegram может подключаться непосредственно к IP-адресам дата-центров.&lt;br /&gt;
&lt;br /&gt;
Поэтому используется статический nftables set:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
set telegram_ipv4 {&lt;br /&gt;
    type ipv4_addr&lt;br /&gt;
    flags interval&lt;br /&gt;
&lt;br /&gt;
    elements = {&lt;br /&gt;
        91.108.4.0/22,&lt;br /&gt;
        91.108.8.0/22,&lt;br /&gt;
        91.108.12.0/22,&lt;br /&gt;
        91.108.16.0/22,&lt;br /&gt;
        91.108.56.0/22,&lt;br /&gt;
        149.154.160.0/20&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Трафик маркируется:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
iifname &amp;quot;wg0&amp;quot; ip daddr @telegram_ipv4 \&lt;br /&gt;
    counter meta mark set 0x1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Работа правила проверяется счётчиком:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nft list chain ip selective prerouting&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OpenAI / ChatGPT ==&lt;br /&gt;
&lt;br /&gt;
Для OpenAI используется DNS-based routing.&lt;br /&gt;
&lt;br /&gt;
Основные правила:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
nftset=/chatgpt.com/4#ip#selective#happ_ipv4&lt;br /&gt;
nftset=/openai.com/4#ip#selective#happ_ipv4&lt;br /&gt;
nftset=/auth.openai.com/4#ip#selective#happ_ipv4&lt;br /&gt;
nftset=/oaistatic.com/4#ip#selective#happ_ipv4&lt;br /&gt;
nftset=/oaiusercontent.com/4#ip#selective#happ_ipv4&lt;br /&gt;
nftset=/oaistatsig.com/4#ip#selective#happ_ipv4&lt;br /&gt;
nftset=/openaimerge.com/4#ip#selective#happ_ipv4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При тестировании мобильного приложения ChatGPT после очистки набора:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nft flush set ip selective happ_ipv4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DNS-запросы приложения снова заполняли &amp;#039;&amp;#039;&amp;#039;happ_ipv4&amp;#039;&amp;#039;&amp;#039;, а счётчик правила&lt;br /&gt;
селективной маршрутизации увеличивался при отправке сообщений.&lt;br /&gt;
&lt;br /&gt;
Таким образом работа ChatGPT через HAPP была подтверждена непосредственно&lt;br /&gt;
трафиком WireGuard-клиента.&lt;br /&gt;
&lt;br /&gt;
== Discord ==&lt;br /&gt;
&lt;br /&gt;
Discord первоначально был добавлен в DNS-based routing.&lt;br /&gt;
&lt;br /&gt;
Тестировались домены:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
discord.com&lt;br /&gt;
discordapp.com&lt;br /&gt;
discordapp.net&lt;br /&gt;
discordcdn.com&lt;br /&gt;
discord.gg&lt;br /&gt;
discord.media&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обычный HTTPS-трафик успешно попадал в &amp;#039;&amp;#039;&amp;#039;happ_ipv4&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
При тестировании голосового соединения были обнаружены отдельные UDP endpoints.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
155.212.196.192&lt;br /&gt;
155.212.204.196&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Был создан экспериментальный набор:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
discord_voice_ipv4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и голосовой трафик начал попадать под &amp;#039;&amp;#039;&amp;#039;mark 0x1&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Однако при реальном голосовом соединении наблюдались проблемы:&lt;br /&gt;
&lt;br /&gt;
* очень небольшой объём трафика попадал под статическое правило;&lt;br /&gt;
* voice endpoint мог изменяться;&lt;br /&gt;
* входящий голос практически отсутствовал;&lt;br /&gt;
* маршрутизация двух отдельных IP не обеспечивала стабильную работу Discord Voice.&lt;br /&gt;
&lt;br /&gt;
Поэтому эксперимент был отменён.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Текущее состояние: Discord полностью исключён из selective routing.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Discord проходит обычным маршрутом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Android&lt;br /&gt;
   |&lt;br /&gt;
WireGuard&lt;br /&gt;
   |&lt;br /&gt;
CT103 vpn-gateway&lt;br /&gt;
   |&lt;br /&gt;
192.168.1.1&lt;br /&gt;
   |&lt;br /&gt;
Internet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это решение принято намеренно, чтобы не нарушать работу голосовых каналов.&lt;br /&gt;
&lt;br /&gt;
== HAPP Gateway ==&lt;br /&gt;
&lt;br /&gt;
CT502:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
192.168.1.52&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
работает как отдельный VLESS/HAPP gateway.&lt;br /&gt;
&lt;br /&gt;
Используется TUN-интерфейс:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thapp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
пример адреса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
198.18.0.1/30&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HAPP создаёт отдельную таблицу маршрутизации:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
table 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для корректного возврата трафика WireGuard необходимо сохранить маршруты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip route replace table 100 \&lt;br /&gt;
    192.168.1.0/24 dev eth0 src 192.168.1.52&lt;br /&gt;
&lt;br /&gt;
ip route replace table 100 \&lt;br /&gt;
    10.20.0.0/24 via 192.168.1.53 dev eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Иначе широкое правило:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
192.168.0.0/16&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
может отправить обратный трафик WireGuard-клиента не в CT103.&lt;br /&gt;
&lt;br /&gt;
== HAPP Auto Selector ==&lt;br /&gt;
&lt;br /&gt;
На CT502 работает автоматический выбор HAPP-сервера.&lt;br /&gt;
&lt;br /&gt;
Скрипт:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/sbin/happ-autoselect.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Он выполняет реальные HTTP-запросы через тестовый HAPP proxy и сравнивает&lt;br /&gt;
время ответа нескольких стран.&lt;br /&gt;
&lt;br /&gt;
Тестовые порты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SOCKS 12080&lt;br /&gt;
HTTP  12081&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для каждого сервера выполняется несколько запросов и используется медианное&lt;br /&gt;
значение времени ответа.&lt;br /&gt;
&lt;br /&gt;
Переключение производится только при достаточно заметном улучшении, чтобы&lt;br /&gt;
избежать постоянного переключения между близкими по скорости серверами.&lt;br /&gt;
&lt;br /&gt;
Проверка выполняется systemd timer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
happ-autoselect.timer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Проверка состояния ==&lt;br /&gt;
&lt;br /&gt;
=== WireGuard ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl is-active wg-quick@wg0&lt;br /&gt;
wg show&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== nftables ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl is-active nftables&lt;br /&gt;
nft list chain ip selective prerouting&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl is-active dnsmasq&lt;br /&gt;
dnsmasq --test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dynamic HAPP set ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nft list set ip selective happ_ipv4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Очистить набор для диагностики:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nft flush set ip selective happ_ipv4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После открытия нужного приложения набор должен заполниться снова.&lt;br /&gt;
&lt;br /&gt;
=== Policy routing ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip rule show&lt;br /&gt;
ip route show table 200&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ожидается:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
100: from all fwmark 0x1 lookup 200&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default via 192.168.1.52 dev eth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка конкретного адреса ===&lt;br /&gt;
&lt;br /&gt;
Обычный маршрут:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip route get 1.1.1.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Маршрут с HAPP mark:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip route get 1.1.1.1 mark 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Второй запрос должен использовать:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
table 200&lt;br /&gt;
via 192.168.1.52&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Диагностика трафика ==&lt;br /&gt;
&lt;br /&gt;
Трафик конкретного WireGuard-клиента можно наблюдать:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tcpdump -ni wg0 host 10.20.0.2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HTTPS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tcpdump -ni wg0 &amp;#039;host 10.20.0.2 and port 443&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UDP:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tcpdump -ni wg0 &amp;#039;host 10.20.0.2 and udp&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DNS и HTTPS одновременно:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tcpdump -ni wg0 \&lt;br /&gt;
    &amp;#039;host 10.20.0.2 and (port 53 or port 443)&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это основной способ поиска сервисов, которые используют дополнительные CDN,&lt;br /&gt;
UDP endpoints или прямые IP-соединения.&lt;br /&gt;
&lt;br /&gt;
== Автозапуск ==&lt;br /&gt;
&lt;br /&gt;
После перезагрузки CT103 должны быть активны:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl is-active nftables&lt;br /&gt;
systemctl is-active dnsmasq&lt;br /&gt;
systemctl is-active wg-quick@wg0&lt;br /&gt;
systemctl is-active selective-routing&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ожидаемый результат:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
active&lt;br /&gt;
active&lt;br /&gt;
active&lt;br /&gt;
active&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сервис selective routing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
selective-routing.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
восстанавливает:&lt;br /&gt;
&lt;br /&gt;
* маршрут локальной сети в table 200;&lt;br /&gt;
* default route через CT502;&lt;br /&gt;
* правило fwmark 0x1.&lt;br /&gt;
&lt;br /&gt;
== Итоговая схема маршрутизации ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WireGuard Client&lt;br /&gt;
10.20.0.x&lt;br /&gt;
      |&lt;br /&gt;
      v&lt;br /&gt;
CT103 vpn-gateway&lt;br /&gt;
      |&lt;br /&gt;
      +--------------------------------------+&lt;br /&gt;
      |                                      |&lt;br /&gt;
      | обычный destination                  | selected destination&lt;br /&gt;
      |                                      |&lt;br /&gt;
      v                                      v&lt;br /&gt;
192.168.1.1                         nftables mark 0x1&lt;br /&gt;
      |                                      |&lt;br /&gt;
      |                                      v&lt;br /&gt;
      |                                  table 200&lt;br /&gt;
      |                                      |&lt;br /&gt;
      |                                      v&lt;br /&gt;
      |                               192.168.1.52&lt;br /&gt;
      |                                      |&lt;br /&gt;
      |                                      v&lt;br /&gt;
      |                                  HAPP/VLESS&lt;br /&gt;
      |                                      |&lt;br /&gt;
      +------------------+-------------------+&lt;br /&gt;
                         |&lt;br /&gt;
                         v&lt;br /&gt;
                      Internet&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Текущее состояние ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Сервис&lt;br /&gt;
! Маршрут&lt;br /&gt;
! Метод&lt;br /&gt;
! Статус&lt;br /&gt;
|-&lt;br /&gt;
| YouTube&lt;br /&gt;
| HAPP&lt;br /&gt;
| DNS / nftset&lt;br /&gt;
| Работает&lt;br /&gt;
|-&lt;br /&gt;
| Instagram&lt;br /&gt;
| HAPP&lt;br /&gt;
| DNS / nftset&lt;br /&gt;
| Работает&lt;br /&gt;
|-&lt;br /&gt;
| Telegram&lt;br /&gt;
| HAPP&lt;br /&gt;
| Статические IP-сети + DNS&lt;br /&gt;
| Работает&lt;br /&gt;
|-&lt;br /&gt;
| ChatGPT / OpenAI&lt;br /&gt;
| HAPP&lt;br /&gt;
| DNS / nftset&lt;br /&gt;
| Работает&lt;br /&gt;
|-&lt;br /&gt;
| Discord&lt;br /&gt;
| Direct WAN&lt;br /&gt;
| Исключён из selective routing&lt;br /&gt;
| Голос через HAPP отключён&lt;br /&gt;
|-&lt;br /&gt;
| Остальной трафик&lt;br /&gt;
| Direct WAN&lt;br /&gt;
| Main routing table&lt;br /&gt;
| Работает&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Безопасность ==&lt;br /&gt;
&lt;br /&gt;
Закрытые ключи WireGuard не должны публиковаться в Wiki, Git или конфигурационных&lt;br /&gt;
примерах.&lt;br /&gt;
&lt;br /&gt;
В документации допускается указывать:&lt;br /&gt;
&lt;br /&gt;
* IP-адреса;&lt;br /&gt;
* порты;&lt;br /&gt;
* имена интерфейсов;&lt;br /&gt;
* публичные ключи при необходимости;&lt;br /&gt;
* архитектуру сети.&lt;br /&gt;
&lt;br /&gt;
Не следует публиковать:&lt;br /&gt;
&lt;br /&gt;
* WireGuard PrivateKey;&lt;br /&gt;
* API keys;&lt;br /&gt;
* HAPP/VLESS credentials;&lt;br /&gt;
* токены;&lt;br /&gt;
* пароли.&lt;br /&gt;
&lt;br /&gt;
== Дальнейшее развитие ==&lt;br /&gt;
&lt;br /&gt;
Возможные следующие этапы:&lt;br /&gt;
&lt;br /&gt;
# Добавление новых сервисов через dnsmasq/nftset.&lt;br /&gt;
# Автоматическая диагностика новых destination IP.&lt;br /&gt;
# Разделение динамических nftables sets по сервисам.&lt;br /&gt;
# Статистика трафика отдельно для каждого сервиса.&lt;br /&gt;
# Web-интерфейс состояния gateway.&lt;br /&gt;
# Автоматическое тестирование HAPP-серверов.&lt;br /&gt;
# Мониторинг WireGuard-клиентов.&lt;br /&gt;
# Безопасная автоматизация добавления и удаления WireGuard-пользователей.&lt;br /&gt;
&lt;br /&gt;
[[Категория:RAMBA]]&lt;br /&gt;
[[Категория:Infrastructure]]&lt;br /&gt;
[[Категория:VPN]]&lt;br /&gt;
[[Категория:WireGuard]]&lt;br /&gt;
[[Категория:Proxmox]]&lt;br /&gt;
[[Категория:Networking]]&lt;/div&gt;</summary>
		<author><name>Artem</name></author>
	</entry>
</feed>