Контейнер VPN АнтиЗапрета для установки на собственный сервер

Пофигу)

решил жёстко указать, чтобы не было сюрпризов.
В конфиг kresd.conf дописал:

policy.add(
   policy.all(
      policy.TLS_FORWARD({{'1.1.1.1@853', hostname='cloudflare-dns.com'}}),
      policy.TLS_FORWARD({{'8.8.8.8@853', hostname='dns.google'}}),
      policy.TLS_FORWARD({{'1.0.0.1@853', hostname='cloudflare-dns.com'}}),
      policy.TLS_FORWARD({{'8.8.4.4@853', hostname='dns.google'}})
   )
)

И в конфиге wireguard эти адреса исключил. Всё работает, как надо

И да, тут часто спрашивали, как сделать реализацию работы антизапрета для работы через wireguard. Да, это возможно, я у себя сделал, работает без проблем. Для мобильных и слабых устройств wireguard более предпочтителен, т.к. не кушает батарею - он просто не поддерживает коннект, сколько пакетов отправил - столько батареи на это и скушал.
Но тут и минус большой - в конфиге wg жёстко прописывается DNS сервер (который за туннелем wg) - и если какие-то проблемы с удалённым сервером, либо интернет каналом между клиентом и сервером - то вообще никак интернет работать на этом устройстве не будет, т.к. wireguard не предполагает проверки канала (как openvpn - если сервер недоступен, то соединение просто разорвётся и переназначенный удалённый dns просто сбросится). С wg ситуация будет такая - сервер недоступен - значит и dns недоступен.
Для тех, кому всё-же вариант работы через wg интересен, алгоритм такой:

  1. на том сепвере, на котором запускаем контейнер (но не в самом контейнере) назначаем доп IP адрес на сетевой карте, статика, адрес брать из диапазона, который не используется в инфраструктуре (далее буду писать на своём примере, у меня дебиан 11), в моём случае в файле /etc/network/interfaces:
#Additional IP
auto ens192:0
iface ens192:0 inet static
address 172.31.31.1
netmask 255.255.255.0
  1. на этом же сервере изменяем dns сервер по умолчанию, в файле /etc/resolf.conf прописываем:
nameserver 172.31.31.1
  1. Делаем маппинг портов сервера dns вовнутрь контейнера:
lxc config device add antizapret-vpn proxy_53_udp proxy listen=udp:172.31.31.1:53 connect=udp:127.0.0.1:53
lxc config device add antizapret-vpn proxy_53_tcp proxy listen=tcp:172.31.31.1:53 connect=tcp:127.0.0.1:53
  1. берём клиентский конфиг openvpn (я взял udp вариант), изменяем там адрес сервера на локалхост, также изменяю имя устройства на tun1 (у меня tun0 на том сервере уже использовалось для других целей) у меня получилось так (показываю лишь фрагмент, без раздела с ключами):
nobind
client

remote 127.0.0.1

remote-cert-tls server

dev tun1
proto udp

resolv-retry infinite
persist-key
persist-tun

setenv FRIENDLY_NAME "AntiZapret VPN UDP"
comp-lzo
status /var/log/openvpn/myvpn-status.log
log         /var/log/openvpn/myvpn-server.log
log-append  /var/log/openvpn/myvpn-server.log

# Keys

создаём systemd сервис с этим конфигом, ставим в автозагрузку
Перезагружаем.

Этими действиями мы сделали следующее - сам сервер, на котором запущен контейнер - теперь выходит в интернет используя DNS, работающий в этом контейнере.
Доп. IP адрес, который создавали - на нём теперь висит DNS сервер, работающий внутри контейнера. Адес этот нужен для того, чтобы его в дальнейшем указать в качестве DNS в клиентских конфигурациях wireguard.
Ну и wg конфиг сервера (это мой, нужно править под себя):

[Interface]
Address = 172.30.30.253/24
ListenPort = 443
PrivateKey = 2HzqsLYMf8RMbrhqLVkoMJghjkhBVlyB1+jfsFefO3k=
PostUp = iptables -A FORWARD -i wg1 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens192 -j MASQUERADE; iptables -t nat -A POSTROUTING -o wg1 -j MASQUERADE; iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg1 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens192 -j MASQUERADE; iptables -t nat -D POSTROUTING -o wg1 -j MASQUERADE; iptables -t nat -D POSTROUTING -o tun1 -j MASQUERADE

# client peer config 1
[Peer]
PublicKey = Ad0kcRSdsRjhf7pk7czy87X2o3sFfEpiTmDorZ7PFq0=
AllowedIPs = 172.30.30.251/32

Конфиг клиента:

[Interface]
PrivateKey = 3Onw2+iGnbUEoI2HbNys+NkN5d666clZWSw3x1olxHY=
Address = 172.30.30.251/32
DNS = 172.31.31.1

[Peer]
PublicKey = 2aAOFShy1ZjiI02gpAENIh2uvkTT7zZy7zw8xvSEdw3=
AllowedIPs = 10.224.0.0/15, 68.171.224.0/19, 74.82.64.0/19, 103.246.200.0/22, 178.239.88.0/21, 185.104.45.0/24, 193.105.213.36/30, 203.104.128.0/20, 203.104.144.0/21, 203.104.152.0/22, 172.31.31.1/32
Endpoint = vps.servername.zyx:443

В итоге - всё работает, незаблокированные адреса открываются напрямую, заблокированные резолвятся в фейковые адреса из подсети 10.224.0.0/15 и идут через туннель.
В AllowedIPs клиента включена подменная подсеть 10.224.0.0/15, адрес DNS 172.31.31.1/32 и остальные подсети, которые выводились в таблице маршрутизации на vps сервере при поднятом туннеле антизапрета. Предназначение их я не знаю, включил в конфиг wireguard просто так как они присутствуют в таблице маршрутизации при включенном туннеле openvpn.

Схема рабочая, но не для всех - для каждого клиента нужно создавать отдельный конфиг руками. Если сервер свой, делается для себя и устройств немного - то такой вариант имеет право на жизнь.

P.S.
п. 2 можно не делать, если сервер vps за бугром. Просто у меня он в РФ и мне даже для самого сервера надо обходить блокировки. Сам контейнер - на нём тоже поставил wireguard и весь трафик контейнера завернул за бугор, через ещё один vps

Никакие, это рекурсивный резолвер.

Удалено

Добрый день. Очень странный вопрос, но может кому-то тоже пригодится.

Ситуация следующая: развернул свой VPN Антизапрет, раздал друзьям профиль, а те раздали своим друзьям. Сейчас появилась необходимость сменить сервер (не хватает памяти), а полного списка пользователей нет даже у меня.

Возможно ли их как-то уведомить, что профиль нужно будет перекачать? Видел, что бесплатные VPN например встраивают свои баннеры на сайты, может у кого-то есть такой же кейс?

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

А можно ли как-то посмотреть подключенных клиентов к серверу? Пока только через jorunalctl вижу подключения, но там не разберешь какой это клиент, если ip и версия клиента одинаковы. Точнее хотябы чтобы hostname можно было увидеть

Если вы настраивали контейнер с помощью LXD, то нельзя — настройка осуществляется с помощью прокси, который не сохраняет IP-адрес клиента.
Можете перенастроить с помощью маршрутизации (proxy nat=true), но в LXD это сделано не очень удобно, требует статического назначения IP-адреса контейнера. См. Instance configuration - LXD documentation

Что-то вроде:

lxc config device set antizapret-vpn eth0 ipv4.address='10.22.33.1'
lxc config device add antizapret-vpn proxy_1194 proxy listen=tcp:ВНЕШНИЙ_IP:1194 connect=tcp:10.22.33.1:1194 nat=true

Есть для windows вариант? Unix ни на одном компе нет. А виртуалку запускать не охота из-за ограниченых ресурсов машин

Хотел запустить такой сервер в домашней сети, но по описанию понял, что на все домашние устройства необходимо будет установить VPN-клиент. Можно ли сделать так, чтобы сервер являлся для устройств ну как бы просто шлюзом, без необходимости установления VPN?

Сервер необходимо устанавливать на канале без блокировок. Если в вашей домашней сети нет блокировок, то и контейнер АнтиЗапрета вам не нужен.

Каждый поддомен нужно отдельно добавлять, так и должно быть?
Напр, Twitter не работал, пока не указал:
twimg.com
abs.twimg.com

Не знает ли кто, какие домены или ip используются в приложении Strava? (блокировка России со стороны сервиса)
Сам домен strava.com я добавил include-hosts-custom.txt - через браузер сайт открывается, а вот приложение работать не хочет.

P.S.: Насколько вижу/понимаю, Strava шлет запросы на dns-сервер 8.8.8.8 и получает оттуда резолв своих доменов в обход VPN. Возможно ли это как-то побороть?

Нет, нужно добавлять зону, без поддоменов.

Да, добавьте маршрут до 8.8.8.8 через VPN.

это скорее как днс-сервер выступает, а не как шлюз, если на маршрутизаторе есть понтдержка опенвпн, например на микротике, то достаточно чтобы клиенты в домашней сети получали по дхцп айпишник днс сервера роутера и сё, не надо на каждом клиенте устанавливать опенвпн

Здравствуйте, с сегоднящнего дня netflix начал блокировать пользователей с российским айпи, прописал домены
netflix.com
nflxext.com
assets.nflxext.com
codex.nflxext.com
в include-hosts-custom.txt, но это не помогло. Может кто-нить знает, как обойти?

а вы уверены, что
netflix.com
и
nflxext.com
это все необходимые домены?

Здравствуйте. Как и от куда удалить не нужный хлам виде azino, casino, joycasino и.т.п ?

flxvpn.net
netflix.ca
netflix.com
netflix.com.au
netflixdnstest10.com
netflixdnstest1.com
netflixdnstest2.com
netflixdnstest3.com
netflixdnstest4.com
netflixdnstest5.com
netflixdnstest6.com
netflixdnstest7.com
netflixdnstest8.com
netflixdnstest9.com
netflixinvestor.com
netflix.net
netflixstudios.com
netflixtechblog.com
nflxext.com
nflximg.com
nflximg.net
nflxso.net
nflxvideo.net
btstatic.com

Может эти помогут

Эти домены содержатся в Реестре. Часть мусорных/неработающих зеркал вычищается скриптом /root/antizapret/config/exclude-regexp-dist.awk.