xtrime-ru / antizapret-vpn-docker

Docker container with antizapret-vpn for selfhosting.
MIT License
143 stars 21 forks source link

Перестал работать #5

Closed mazixs closed 8 months ago

mazixs commented 8 months ago

Дня 4 назад перестал работать, пытался обновить, но ничего не изменилось. Сервер удаленный в Ниндерландах, подключение происходит, но сайты выдают ERR_NAME_NOT_RESOLVED Публичный антизапрет работает.

xtrime-ru commented 8 months ago

Да, была ошибка с новым конфигом. Исправлена сегодня: https://github.com/xtrime-ru/antizapret-vpn-docker/issues/4 Просьба обновится и пересобрать контейнер:

git fetch && git reset --hard origin/master
docker compose build
docker compose up -d
mazixs commented 8 months ago

Не исправило ситуацию, та же ошибка ERR_NAME_NOT_RESOLVED

xtrime-ru commented 8 months ago

Надо проверить, работает ли kresd: servicectl status kresd@1

mazixs commented 8 months ago

Надо проверить, работает ли kresd: servicectl status kresd@1

root@nlserver01:~# cd antizapret
root@nlserver01:~/antizapret# docker compose down
[+] Running 2/2
 ✔ Container antizapret-vpn    Removed                                                                            10.8s
 ✔ Network antizapret_default  Removed                                                                             0.1s
root@nlserver01:~/antizapret# git fetch && git reset --hard origin/master
HEAD is now at 9d7e41b Fix: kresd config error
root@nlserver01:~/antizapret# docker compose build
[+] Building 1.1s (11/11) FINISHED                                                                       docker:default
 => [antizapret-vpn internal] load build definition from Dockerfile                                                0.0s
 => => transferring dockerfile: 1.35kB                                                                             0.0s
 => [antizapret-vpn internal] load metadata for docker.io/library/alpine:latest                                    0.9s
 => [antizapret-vpn internal] load .dockerignore                                                                   0.0s
 => => transferring context: 2B                                                                                    0.0s
 => [antizapret-vpn builder 1/2] FROM docker.io/library/alpine:latest@sha256:c5b1261d6d3e43071626931fc004f70149ba  0.0s
 => [antizapret-vpn internal] load build context                                                                   0.0s
 => => transferring context: 29B                                                                                   0.0s
 => CACHED [antizapret-vpn builder 2/2] RUN wget https://antizapret.prostovpn.org/container-images/az-vpn/rootfs.  0.0s
 => CACHED [antizapret-vpn stage-1 1/4] COPY --from=builder /rootfs-dir /                                          0.0s
 => CACHED [antizapret-vpn stage-1 2/4] RUN wget https://secure.nic.cz/files/knot-resolver/knot-resolver-release.  0.0s
 => CACHED [antizapret-vpn stage-1 3/4] RUN cd /root/antizapret/     && git pull     && sed -i -E "s/(CHARSET=UTF  0.0s
 => CACHED [antizapret-vpn stage-1 4/4] COPY ./init.sh /                                                           0.0s
 => [antizapret-vpn] exporting to image                                                                            0.0s
 => => exporting layers                                                                                            0.0s
 => => writing image sha256:495935776ae282ed5bf75e3eff04f40ea54fedf1b63ad06d6b6217ff47a06712                       0.0s
 => => naming to docker.io/xtrime/antizapret-vpn:latest                                                            0.0s
root@nlserver01:~/antizapret# docker compose up -d
[+] Running 1/2
 ⠋ Network antizapret_default  Created                                                                             1.1s
 ✔ Container antizapret-vpn    Started                                                                             0.9s
root@nlserver01:~/antizapret# systemctl status kresd@1
Unit kresd@1.service could not be found.
root@nlserver01:~/antizapret# systemctl status kresd
Unit kresd.service could not be found.
mazixs commented 8 months ago

я пробовал с нуля поставить все, ничего не меняется. Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-94-generic x86_64)

В логах в контейнере глухо, подключение происходит, но все сайты становятся недоступны

xtrime-ru commented 8 months ago

Команду нужно выполнять внутри контейнера. И надо подождать 2-5 минут после его старта:

docker compose exec antizapret-vpn bash
servicectl status kresd@1
mazixs commented 8 months ago

Команду нужно выполнять внутри контейнера. И надо подождать 2-5 минут после его старта:

docker compose exec antizapret-vpn bash
servicectl status kresd@1
root@431c3ae311e9:~# systemctl status kresd@1
● kresd@1.service - Knot Resolver daemon
   Loaded: loaded (/lib/systemd/system/kresd@.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/kresd@.service.d
           └─override.conf
   Active: activating (start) since Wed 2024-02-21 14:05:54 UTC; 3s ago
     Docs: man:kresd.systemd(7)
           man:kresd(8)
 Main PID: 43366 (kresd)
    Tasks: 1 (limit: 151)
   Memory: 317.1M
      CPU: 2.375s
   CGroup: /system.slice/system-kresd.slice/kresd@1.service
           └─43366 /usr/sbin/kresd -c /usr/lib/knot-resolver/distro-preconfig.lua -c /etc/knot-resolver/kresd.conf -n

Feb 21 14:05:54 431c3ae311e9 systemd[1]: Starting Knot Resolver daemon...
Feb 21 14:05:54 431c3ae311e9 kresd[43366]: [system] warning: hard limit for number of file-descriptors is only 65535 but recommended value is 524288
mazixs commented 8 months ago

Вот конфиг kresd как я понял

-- Default empty Knot DNS Resolver configuration in -*- lua -*-

net.listen('127.0.0.1', 53, { kind = 'dns' })
net.listen('192.168.100.1', 53, { kind = 'dns', freebind = true })
net.listen('192.168.104.1', 53, { kind = 'dns', freebind = true })

-- Switch to unprivileged user --
user('knot-resolver','knot-resolver')
-- Unprivileged
cache.size = 100 * MB

-- For tmpfs
-- cache.open(300 * MB, 'lmdb:///tmp/knot-resolver')

-- See https://gitlab.labs.nic.cz/knot/knot-resolver/issues/470
net.ipv6 = false

modules = {
        'hints > iterate',  -- Load /etc/hosts and allow custom root hints
        'stats',            -- Track internal statistics
        'predict',          -- Prefetch expiring/frequent records
}

-- minimum TTL = 2 minutes
cache.min_ttl(120)

dofile("/etc/knot-resolver/knot-aliases-alt.conf")

policy.add(
    policy.suffix(
        policy.STUB(
            {'127.0.0.4'}
        ),
        policy.todnames(blocked_hosts)
    )
)

-- Resolve OpenNIC, EMCDNS and Namecoin domains
policy.add(
    policy.suffix(
        policy.STUB(
            {'172.104.136.243', '176.126.70.119', '87.98.175.85', '193.183.98.66'}
        ),
        policy.todnames({'bbs.', 'chan.', 'cyb.', 'dyn.', 'geek.', 'gopher.',
                         'indy.', 'libre.', 'neo.', 'null.', 'o.', 'oss.', 'oz.',
                         'parody.', 'pirate.', 'free.', 'bazar.', 'coin.',
                         'emc.', 'lib.', 'fur.', 'bit.', 'ku.', 'te.', 'ti.', 'uu.'
                         }
        )
    )
)

-- Resolve Apple
policy.add(
    policy.suffix(
        policy.FORWARD(
            {'77.88.8.8'}
        ),
        policy.todnames({'apple.com.', 'mzstatic.com.', 'akamaiedge.net.', 'edgekey.net.', 'aaplimg.com.'})
    )
)
mazixs commented 8 months ago

Переустановил еще раз, теперь вывод такой

root@nlserver01:~/antizapret# docker compose exec antizapret-vpn bash
root@28c166cf4409:/#  systemctl status kresd@1
● kresd@1.service - Knot Resolver daemon
   Loaded: loaded (/lib/systemd/system/kresd@.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/kresd@.service.d
           └─override.conf
   Active: active (running) since Wed 2024-02-21 14:43:39 UTC; 7s ago
     Docs: man:kresd.systemd(7)
           man:kresd(8)
 Main PID: 310 (kresd)
    Tasks: 1 (limit: 151)
   Memory: 6.6M
      CPU: 85ms
   CGroup: /system.slice/system-kresd.slice/kresd@1.service
           └─310 /usr/sbin/kresd -c /usr/lib/knot-resolver/distro-preconfig.lua -c /etc/knot-resolver/kresd.conf -n

Feb 21 14:43:39 28c166cf4409 systemd[1]: Starting Knot Resolver daemon...
Feb 21 14:43:39 28c166cf4409 kresd[310]: [system] warning: hard limit for number of file-descriptors is only 65535 but recommended value is 524288
Feb 21 14:43:39 28c166cf4409 systemd[1]: Started Knot Resolver daemon.
mazixs commented 8 months ago

Кажется я нашел проблему, но пока не решил

root@28c166cf4409:/# systemctl --failed
  UNIT                                 LOAD   ACTIVE SUB    DESCRIPTION
● systemd-networkd-wait-online.service loaded failed failed Wait for Network to be Configured

Вывод networkctl status -a

● 1: lo
       Link File: n/a
    Network File: n/a
            Type: loopback
           State: carrier (pending)
         Address: 127.0.0.1

● 2: vpn
       Link File: n/a
    Network File: n/a
            Type: none
           State: routable (pending)
         Address: 192.168.100.1

● 3: vpn-tcp
       Link File: n/a
    Network File: n/a
            Type: none
           State: routable (pending)
         Address: 192.168.104.1

● 22: eth0
       Link File: n/a
    Network File: n/a
            Type: ether
           State: routable (pending)
      HW Address: 02:42:ac:12:00:02
         Address: 172.18.0.2
         Gateway: 172.18.0.1

Пробовал добавить поправить systemd-networkd-wait-online systemctl edit systemd-networkd-wait-online.service

[Service]
ExecStart=
ExecStart=/lib/systemd/systemd-networkd-wait-online --interface=eth0

Вывод systemctl status systemd-networkd-wait-online.service

● systemd-networkd-wait-online.service - Wait for Network to be Configured
   Loaded: loaded (/lib/systemd/system/systemd-networkd-wait-online.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/systemd-networkd-wait-online.service.d
           └─override.conf
   Active: failed (Result: exit-code) since Thu 2024-02-22 07:46:17 UTC; 13min ago
     Docs: man:systemd-networkd-wait-online.service(8)
 Main PID: 51 (code=exited, status=1/FAILURE)
      CPU: 10ms

Feb 22 07:44:17 28c166cf4409 systemd[1]: Starting Wait for Network to be Configured...
Feb 22 07:44:17 28c166cf4409 systemd-networkd-wait-online[51]: ignoring: lo
Feb 22 07:46:17 28c166cf4409 systemd-networkd-wait-online[51]: Event loop failed: Connection timed out
Feb 22 07:46:17 28c166cf4409 systemd[1]: systemd-networkd-wait-online.service: Main process exited, code=exited, status=1/FAILURE
Feb 22 07:46:17 28c166cf4409 systemd[1]: systemd-networkd-wait-online.service: Failed with result 'exit-code'.
Feb 22 07:46:17 28c166cf4409 systemd[1]: Failed to start Wait for Network to be Configured.
Feb 22 07:46:17 28c166cf4409 systemd[1]: systemd-networkd-wait-online.service: Consumed 10ms CPU time.
xtrime-ru commented 8 months ago

У меня systemd-networkd-wait-online.service тоже не работает. Это ни на что не влияет, вероятно. А вот kresd@1 не запустился еще до конца. Нужно ждать запуска пару минут и мониторить логи... У меня к сожалению логи уже ротировались, но там не должно быть ошибок.

Потребление памяти kresd при нормальной работе должно быть 50-100 мбайт с пиками до 300 мбайт при загрузке/обновлении правил.

Снимок экрана 2024-02-22 в 15 32 06
mazixs commented 8 months ago

У меня systemd-networkd-wait-online.service тоже не работает. Это ни на что не влияет, вероятно. А вот kresd@1 не запустился еще до конца. Нужно ждать запуска пару минут и мониторить логи... У меня к сожалению логи уже ротировались, но там не должно быть ошибок.

Потребление памяти kresd при нормальной работе должно быть 50-100 мбайт с пиками до 300 мбайт при загрузке/обновлении правил.

Снимок экрана 2024-02-22 в 15 32 06

Вот вывод давно запущенного, не показывает никаких ошибок

● kresd@1.service - Knot Resolver daemon
   Loaded: loaded (/lib/systemd/system/kresd@.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/kresd@.service.d
           └─override.conf
   Active: active (running) since Fri 2024-02-23 08:46:15 UTC; 54min ago
     Docs: man:kresd.systemd(7)
           man:kresd(8)
 Main PID: 3893 (kresd)
    Tasks: 1 (limit: 151)
   Memory: 63.6M
      CPU: 4.168s
   CGroup: /system.slice/system-kresd.slice/kresd@1.service
           └─3893 /usr/sbin/kresd -c /usr/lib/knot-resolver/distro-preconfig.lua -c /etc/knot-resolver/kresd.conf -n

Feb 23 08:46:11 28c166cf4409 systemd[1]: Starting Knot Resolver daemon...
Feb 23 08:46:11 28c166cf4409 kresd[3893]: [system] warning: hard limit for number of file-descriptors is only 65535 but recommended value is 524288
Feb 23 08:46:15 28c166cf4409 systemd[1]: Started Knot Resolver daemon.
xtrime-ru commented 8 months ago

Замечательно. kresd работает без ошибок. Что возвращает такая команда?

docker exec antizapret-vpn nslookup fb.com 127.0.0.1

Должно быть что то такое:

Server:     127.0.0.1
Address:    127.0.0.1#53

Non-authoritative answer:
Name:   fb.com
Address: 10.224.0.5
mazixs commented 8 months ago

Вывод

root@28c166cf4409:/# nslookup fb.com 127.0.0.1
Server:         127.0.0.1
Address:        127.0.0.1#53

Non-authoritative answer:
Name:   fb.com
Address: 10.224.0.1
xtrime-ru commented 8 months ago

kresd работает корректно: правила загрузились и заблокированные домены перенапрявляются во внутреннюю сеть.

Что выдает nslookup fb.com 192.168.100.1 на локальном компьютере? 192.168.100.1 - это IP адрес удаленного сервера в сети, создаваемой OpenVPN.

mazixs commented 8 months ago

kresd работает корректно: правила загрузились и заблокированные домены перенапрявляются во внутреннюю сеть.

Что выдает nslookup fb.com 192.168.100.1 на локальном компьютере? 192.168.100.1 - это IP адрес удаленного сервера в сети, создаваемой OpenVPN.

Я не знаю как, но подключение на пк само по себе заработало , а в приложении на телефоне через openvpn подключается, но интернет не дает. Пытался через termux посмотреть, но там что-то с nslookup, оно не ставится.

mazixs commented 8 months ago

Проблема была в модуле от magisk для изменения dns, вероятно там используется DoH

xtrime-ru commented 8 months ago

А как решилась эта проблема?

mazixs commented 8 months ago

На самом деле все ещё не решилось, происходят иногда отвалы до перезагрузки. Пока нет времени копать, попробую посмотреть лог в следующий раз.

xtrime-ru commented 8 months ago

Я на asuswrt сделал такой cron/cru для перезапуска VPN при наличии проблем:

* * * * * if [ \$(nslookup fb.com 192.168.100.1 | grep 'Address 1: 10' | wc -l) -eq 0 ]; then service stop_vpnclient5; sleep 1; service start_vpnclient5; fi

Что-то подобное можно запихнуть и в сам контейнер при сборке. Только надо определить какой именно процесс надо рестартить. Можно запилить и стандартный healthckeck докера, но тогда сам контейнер будет рестартится, а это "дорогая" операция - старт этого контейнера очень долгий.

mazixs commented 8 months ago

Вывод во время сбоя

root@28c166cf4409:/#  systemctl status kresd@1
● kresd@1.service - Knot Resolver daemon
   Loaded: loaded (/lib/systemd/system/kresd@.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/kresd@.service.d
           └─override.conf
   Active: deactivating (stop-post) (Result: signal) since Fri 2024-03-08 10:08:01 UTC; 25min ago
     Docs: man:kresd.systemd(7)
           man:kresd(8)
  Process: 1000 ExecStart=/usr/sbin/kresd -c /usr/lib/knot-resolver/distro-preconfig.lua -c /etc/knot-resolver/kresd.conf -n (code=killed, signal=KILL)
 Main PID: 1000 (code=killed, signal=KILL); Control PID: 1001 (rm)
    Tasks: 1 (limit: 151)
   Memory: 5.9M
      CPU: 1.251s
   CGroup: /system.slice/system-kresd.slice/kresd@1.service

Mar 08 10:33:29 28c166cf4409 systemd[1]: Starting Knot Resolver daemon...
Mar 08 10:33:29 28c166cf4409 kresd[1000]: [system] warning: hard limit for number of file-descriptors is only 65535 but recommended value is 524288
Mar 08 10:33:30 28c166cf4409 systemd[1]: kresd@1.service: Main process exited, code=killed, status=9/KILL
Mar 08 10:33:30 28c166cf4409 systemd[1]: kresd@1.service: Failed with result 'signal'.
Mar 08 10:33:30 28c166cf4409 systemd[1]: Failed to start Knot Resolver daemon.
Mar 08 10:33:30 28c166cf4409 systemd[1]: kresd@1.service: Consumed 1.252s CPU time.
root@28c166cf4409:/#

Пока пытаюсь разобраться, контейнер попросту весь замирает и сервер вместе с ним, нагрузка на процессор уходит за 100% . Достучаться до логов в такой момент сложно, каждое действие обрабатывается по несколько минут.
Я один с такой проблемой или есть еще случаи?

mazixs commented 8 months ago

Screenshot_1 Это именно контейнер антизапрета так весело себя ведет

mazixs commented 8 months ago

Screenshot_2

xtrime-ru commented 8 months ago

Нужен вывод top. Судя по описанию память закончилась и сервер полез в swap. CPU ждет IO, поэтому все тормозит.