Перейти к содержанию

Вопрос

Опубликовано

Добрый день!

Может кому-то пригодится выборочная маршрутизация через Wireguard по ipv6.

На версии 3.7.4 ipv6 адрес на интерфейсе nwg можно было задать командой:

interface Wireguard2 ipv6 address fd01:5ca1:ab1e:891f:c4fc:4a2e:e64d:503d

На версии 3.8.2 эта команда не работает. Поэтому был модифицирован скрипт /opt/etc/ndm/ifstatechanged.d/000-fix-Wireguard2.sh

#!/bin/sh

[ "$1" == "hook" ] || exit 0
[ "$change" == "link" ] || exit 0
[ "$id" == "Wireguard2" ] || exit 0

ip6t() {
	if ! ip6tables -C "$@" &>/dev/null; then
		ip6tables -A "$@"
	fi
}

case ${id}-${change}-${connected}-${link}-${up} in
	${id}-link-yes-up-up)
	cat << EOF >/tmp/fix-${id}.conf
[Interface]
PrivateKey = MMVM2wVNQqUyug1cBY=
[Peer]
PublicKey = bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = engage.cloudflareclient.com:2408
EOF

		ip -6 addr add fd01:5ca1:ab1e:891f:c4fc:4a2e:e64d:503d/128 dev nwg2
		wg setconf nwg2 /tmp/fix-${id}.conf
		ip6t POSTROUTING -t nat -o nwg2 -j MASQUERADE
	;;
esac

exit 0

Сам тест:

wg show nwg2
ifconfig nwg2

ip -6 rule add from all lookup 123 priority 1123
ip -6 route add table 123 2a03:1b20:1:f410::ff1 dev nwg2

ip -6 rule
ip -6 route show table 123

traceroute6 2a03:1b20:1:f410::ff1

Результат:

~ # uname -a
Linux ZyAvenger 4.9-ndm-5 #0 SMP Tue Jun 21 16:39:31 2022 mips GNU/Linux
~ # wg show nwg2
interface: nwg2
  public key: JL+TtFAHd2heTNrACYj8tlkn9f4rrZi7auvuQRBkajY=
  private key: (hidden)
  listening port: 49203

peer: bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
  endpoint: [2606:4700:d0::a29f:c001]:2408
  allowed ips: 0.0.0.0/0, ::/0
  latest handshake: 1 minute, 33 seconds ago
  transfer: 15.29 KiB received, 6.19 KiB sent
~ # ifconfig nwg2
nwg2      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:172.16.0.2  P-t-P:172.16.0.2  Mask:255.255.255.255
          inet6 addr: fd01:5ca1:ab1e:891f:c4fc:4a2e:e64d:503d/128 Scope:Global
          UP POINTOPOINT RUNNING NOARP  MTU:1280  Metric:1
          RX packets:52643 errors:0 dropped:53 overruns:0 frame:0
          TX packets:63283 errors:3 dropped:1 overruns:0 carrier:0
          collisions:0 txqueuelen:50
          RX bytes:14968865 (14.2 MiB)  TX bytes:8037372 (7.6 MiB)

~ # ip -6 rule
0:      from all lookup local
233:    from all fwmark 0x2333 lookup 233
1123:   from all lookup 123
1778:   from all fwmark 0xd1001 lookup 1001
32766:  from all lookup main
~ # ip -6 route show table 123
2a03:1b20:1:f410::ff1 dev nwg2  metric 1024  pref medium
~ # traceroute6 2a03:1b20:1:f410::ff1
traceroute to 2a03:1b20:1:f410::ff1 (2a03:1b20:1:f410::ff1) from fd01:5ca1:ab1e:891f:c4fc:4a2e:e64d:503d, port 33434, from port 45415, 30 hops max, 60 bytes packets
 1  fd01:5ca1:ab1e::1 (fd01:5ca1:ab1e::1)  10.845 ms  10.961 ms  10.997 ms
 2  2400:cb00:87:1000::1 (2400:cb00:87:1000::1)  11.906 ms  17.869 ms  20.842 ms
 3  mow-b4-link.ip.twelve99.net (2001:2000:3080:539::1)  11.994 ms  11.797 ms  11.299 ms
 4  mow-b8-v6.ip.twelve99.net (2001:2034:0:220::1)  11.474 ms  11.974 ms  12.476 ms
 5  kbn-bb2-v6.ip.twelve99.net (2001:2034:1:78::1)  40.321 ms  41.409 ms  72.470 ms
^C22% completed...

 

Рекомендуемые сообщения

  • 0
Опубликовано (изменено)

спасибо)

Изменено пользователем Zeleza
  • 0
Опубликовано

Сутки с редиректами по ipv6. Полет нормальный. Огромное спасибо, товарищи разработчики!!!

  • 0
Опубликовано
В 30.06.2022 в 12:00, avn сказал:

Сутки с редиректами по ipv6. Полет нормальный. Огромное спасибо, товарищи разработчики!!!

у меня 3.7.4. Насколько понимаю, в этом случае надо просто добавить для ipv6 адрес на интерфейс Wireguard и AllowedIPs в параметры туннеля. Адрес добавляется без проблем, а AllowedIPs нет:

(config)> interface Wireguard2 wireguard peer <Public Key peer-а> allow-ips ::/0
Command::Base error[7405602]: address: argument parse error.

Похоже, в CLI также не предусмотрена установка параметров Wireguard для ipv6, как и в веб интерфейсе. Также я не могу воспользоваться и вашим способом, т.к. у меня нет команды wg. Из какого пакета Entware она?

Я верно понял вот это ваше замечание "нужен ещё аналог ipv6 nat Wireguard2, например для warp. А иначе с br0 идут реальные ipv6 адреса", что пакеты из туннеля приходят с ipv6 warp-а, а не пира в этом туннеле Wireguard...? Почему так, ведь у вас же прописан маскарадинг

ip6t POSTROUTING -t nat -o nwg2 -j MASQUERADE

?

  • 0
Опубликовано
38 минут назад, ale_xb сказал:

у меня 3.7.4. Насколько понимаю, в этом случае надо просто добавить для ipv6 адрес на интерфейс Wireguard и AllowedIPs в параметры туннеля. Адрес добавляется без проблем, а AllowedIPs нет:

(config)> interface Wireguard2 wireguard peer <Public Key peer-а> allow-ips ::/0
Command::Base error[7405602]: address: argument parse error.

Похоже, в CLI также не предусмотрена установка параметров Wireguard для ipv6, как и в веб интерфейсе. Также я не могу воспользоваться и вашим способом, т.к. у меня нет команды wg. Из какого пакета Entware она?

Я верно понял вот это ваше замечание "нужен ещё аналог ipv6 nat Wireguard2, например для warp. А иначе с br0 идут реальные ipv6 адреса", что пакеты из туннеля приходят с ipv6 warp-а, а не пира в этом туннеле Wireguard...? Почему так, ведь у вас же прописан маскарадинг

ip6t POSTROUTING -t nat -o nwg2 -j MASQUERADE

?

Так маскардинг для этого и прописан. А вот если не прописать, то будет как описано выше. Пакет, вроде wireguard-utils. На 3.7.4 ip -6 rule не работает.

  • 0
Опубликовано
16 минут назад, avn сказал:

Пакет, вроде wireguard-utils.

Нашел, спасибо. wireguard-tools

16 минут назад, avn сказал:

На 3.7.4 ip -6 rule не работает.

Да, в курсе, буду апгрейдиться до 3.8 в delta, как выйдет.

  • 0
Опубликовано (изменено)

Мечты про версию 3.8.3. Уважаемые разработчики, что скажете? @vst

interface Wireguard2 ipv6 address <ipv6 address>
interface Wireguard2 wireguard peer <Public Key peer> allow-ips ::/0

Или идеальный вариант:

interface Wireguard2 ipv6 address <ipv6 address>
interface Wireguard2 wireguard peer <Public Key peer> allow-ips <ipv6 route>
ipv6 nat Wireguard2

 

Изменено пользователем avn
  • 0
Опубликовано (изменено)
В 29.06.2022 в 12:00, avn сказал:

Поэтому был модифицирован скрипт /opt/etc/ndm/ifstatechanged.d/000-fix-Wireguard2.sh

Я все же не понимаю, как конфиг из web-интерфейса (для ipv4 только) будет соседствовать с конфигом из скрипта. Указанный в скрипте Endpoint engage.cloudflareclient.com разрешается в два адреса ipv6 и ipv4. Скрипт в качестве конфига, судя по всему, прописывает ipv6 адрес. Как только скрипт срабатывает, туннель wireguard в web-интерфейсе сразу падает. Что я неправильно делаю/понимаю?

Изменено пользователем ale_xb
  • 0
Опубликовано
В 29.06.2022 в 12:00, avn сказал:

На версии 3.7.4 ipv6 адрес на интерфейсе nwg можно было задать командой:

interface Wireguard2 ipv6 address fd01:5ca1:ab1e:891f:c4fc:4a2e:e64d:503d

 

3.8.5 не починили. Ждем...

  • 0
Опубликовано
В 29.06.2022 в 12:00, avn сказал:

Добрый день!

Может кому-то пригодится выборочная маршрутизация через Wireguard по ipv6.

не работает это, при вводе комманды wg show nwg2 мне выдает Unable to access interface: No such device

  • 0
Опубликовано
11 час назад, koctik-2017 сказал:

не работает это, при вводе комманды wg show nwg2 мне выдает Unable to access interface: No such device

Так посмотрите через ifconfig, как ваш интерфейс называется.

  • 0
Опубликовано
54 минуты назад, avn сказал:

Так посмотрите через ifconfig, как ваш интерфейс называется.

~ # uname -a
Linux Keenetic-2488 4.9-ndm-5 #0 SMP Mon Oct 10 09:28:53 2022 mips GNU/Linux
~ # wg show nwg0
interface: nwg0
  public key: ONWylXOVjnCnh3tqD35N0wx46sR1a/aLFCyh+CAn7RY=
  private key: (hidden)
  listening port: 48950

peer: bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
  endpoint: 162.159.192.1:1701
  allowed ips: 0.0.0.0/0
  latest handshake: 49 seconds ago
  transfer: 1.37 GiB received, 45.94 MiB sent
  persistent keepalive: every 1 hour
~ # sh /opt/etc/ndm/ifstatechanged.d/000-fix-Wireguard0.sh
~ # wg show nwg0
interface: nwg0
  public key: ONWylXOVjnCnh3tqD35N0wx46sR1a/aLFCyh+CAn7RY=
  private key: (hidden)
  listening port: 48950

peer: bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
  endpoint: 162.159.192.1:1701
  allowed ips: 0.0.0.0/0
  latest handshake: 1 minute, 28 seconds ago
  transfer: 1.38 GiB received, 46.20 MiB sent
  persistent keepalive: every 1 hour
 

  • 0
Опубликовано
25 минут назад, koctik-2017 сказал:

~ # uname -a
Linux Keenetic-2488 4.9-ndm-5 #0 SMP Mon Oct 10 09:28:53 2022 mips GNU/Linux
~ # wg show nwg0
interface: nwg0
  public key: ONWylXOVjnCnh3tqD35N0wx46sR1a/aLFCyh+CAn7RY=
  private key: (hidden)
  listening port: 48950

peer: bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
  endpoint: 162.159.192.1:1701
  allowed ips: 0.0.0.0/0
  latest handshake: 49 seconds ago
  transfer: 1.37 GiB received, 45.94 MiB sent
  persistent keepalive: every 1 hour
~ # sh /opt/etc/ndm/ifstatechanged.d/000-fix-Wireguard0.sh
~ # wg show nwg0
interface: nwg0
  public key: ONWylXOVjnCnh3tqD35N0wx46sR1a/aLFCyh+CAn7RY=
  private key: (hidden)
  listening port: 48950

peer: bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
  endpoint: 162.159.192.1:1701
  allowed ips: 0.0.0.0/0
  latest handshake: 1 minute, 28 seconds ago
  transfer: 1.38 GiB received, 46.20 MiB sent
  persistent keepalive: every 1 hour
 

Не вижу подсети ::/0, возможно Вы не изменили имя интерфейса Wireguard2 на Wireguard0.

  • 0
Опубликовано
1 минуту назад, avn сказал:

Не вижу подсети ::/0, возможно Вы не изменили имя интерфейса Wireguard2 на Wireguard0.

#!/bin/sh

[ "$1" == "hook" ] || exit 0
[ "$change" == "link" ] || exit 0
[ "$id" == "Wireguard0" ] || exit 0

ip6t() {
	if ! ip6tables -C "$@" &>/dev/null; then
		ip6tables -A "$@"
	fi
}

case ${id}-${change}-${connected}-${link}-${up} in
	${id}-link-yes-up-up)
	cat << EOF >/tmp/fix-${id}.conf
[Interface]
PrivateKey = yBnzNZVgfCC4T0N9+OZM0i2dSOSqidaSOtKYiNdL1F0=
Address = 2606:4700:110:8bb9:3c5:e24a:5acd:42de/128
DNS = 2606:4700:4700::1111, 2606:4700:4700::1001

[Peer]
PublicKey = bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = [2606:4700:d0::a29f:c001]:1701
EOF

		ip -6 addr add fd01:5ca1:ab1e:891f:c4fc:4a2e:e64d:503d/128 dev nwg0
		wg setconf nwg0 /tmp/fix-${id}.conf
		ip6t POSTROUTING -t nat -o nwg0 -j MASQUERADE
	;;
esac

exit 0
  • 0
Опубликовано
3 часа назад, avn сказал:

Не вижу подсети ::/0, возможно Вы не изменили имя интерфейса Wireguard2 на Wireguard0.

по неизвестным мне причинам данный скрипт не работает.

  • 0
Опубликовано
5 часов назад, koctik-2017 сказал:

по неизвестным мне причинам данный скрипт не работает.

В ручную поискать свои ошибки через 

wg setconf nwg0 /tmp/fix-${id}.conf
  • 0
Опубликовано
15 часов назад, avn сказал:

wg setconf nwg0 /tmp/fix-${id}.conf

мне выдает это 

~ # wg setconf nwg0 /tmp/fix-${id}.conf
fopen: No such file or directory

 

а вот то что мне выдает cat

~ # cat /opt/etc/ndm/ifstatechanged.d/000-fix-Wireguard0.sh
#!/bin/sh

[ "$1" == "hook" ] || exit 0
[ "$change" == "link" ] || exit 0
[ "$id" == "Wireguard0" ] || exit 0

ip6t() {
        if ! ip6tables -C "$@" &>/dev/null; then
                ip6tables -A "$@"
        fi
}

case ${id}-${change}-${connected}-${link}-${up} in
        ${id}-link-yes-up-up)
        cat << EOF >/tmp/fix-${id}.conf
[Interface]
PrivateKey = yBnzNZVgfCC4T0N9+OZM0i2dSOSqidaSOtKYiNdL1F0=
Address = 2606:4700:110:8bb9:3c5:e24a:5acd:42de/128
DNS = 2606:4700:4700::1111
DNS = 2606:4700:4700::1001
[Peer]
PublicKey = bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = [2606:4700:d0::a29f:c001]:1701
EOF

                ip -6 addr add fd01:5ca1:ab1e:891f:c4fc:4a2e:e64d:503d/128 dev nwg0
                wg setconf nwg0 /tmp/fix-${id}.conf
                ip6t POSTROUTING -t nat -o nwg0 -j MASQUERADE
        ;;
esac

exit 0~ #
 

  • 0
Опубликовано
16 часов назад, avn сказал:

wg setconf nwg0 /tmp/fix-${id}.conf

root@Keenetic-2488 ~# wg setconf nwg0 /tmp/fix-Wireguard0.conf
Line unrecognized: `Address=2606:4700:110:8bb9:3c5:e24a:5acd:42de/128'
Configuration parsing error
 

  • 0
Опубликовано
1 минуту назад, koctik-2017 сказал:

root@Keenetic-2488 ~# wg setconf nwg0 /tmp/fix-Wireguard0.conf
Line unrecognized: `Address=2606:4700:110:8bb9:3c5:e24a:5acd:42de/128'
Configuration parsing error
 

Адрес на интерфейсе другой строкой задаётся 

ip -6 addr add fd01:5ca1:ab1e:891f:c4fc:4a2e:e64d:503d/128 dev nwg0

  • 0
Опубликовано

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

root@Keenetic-2488 ~ [1]# wg show nwg0
interface: nwg0
  public key: z+ritbWSDJCgQ/SnR8z8fpYfGyMVNp/tqJI/toMq1jM=
  private key: (hidden)
  listening port: 54999

peer: bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
  endpoint: 162.159.192.1:1701
  allowed ips: 0.0.0.0/0
  latest handshake: 29 seconds ago
  transfer: 74.90 KiB received, 38.47 KiB sent
  persistent keepalive: every 1 hour
 

  • 0
Опубликовано
#!/bin/sh

[ "$1" == "hook" ] || exit 0
[ "$change" == "link" ] || exit 0
[ "$id" == "Wireguard0" ] || exit 0

ip6t() {
    if ! ip6tables -C "$@" &>/dev/null; then
        ip6tables -A "$@"
    fi
}

case ${id}-${change}-${connected}-${link}-${up} in
    ${id}-link-yes-up-up)
    cat << EOF >/tmp/fix-${id}.conf
[Interface]
PrivateKey = yBnzNZVgfCC4T0N9+OZM0i2dSOSqidaSOtKYiNdL1F0=
[Peer]
PublicKey = bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = [2606:4700:d0::a29f:c001]:1701
EOF

        ip -6 addr add fd01:5ca1:ab1e:891f:c4fc:4a2e:e64d:503d/128 dev nwg0
        wg setconf nwg0 /tmp/fix-${id}.conf
        ip6t POSTROUTING -t nat -o nwg0 -j MASQUERADE
    ;;
esac

exit 0

сам скрипт

  • 0
Опубликовано
1 минуту назад, koctik-2017 сказал:

вроде все правильно а почему-то не работает

Начните с простого показа ifconfig nwg0

  • 0
Опубликовано
1 минуту назад, avn сказал:

Начните с простого показа ifconfig nwg0

root@Keenetic-2488 ~# ifconfig nwg0
nwg0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:172.16.0.2  P-t-P:172.16.0.2  Mask:255.255.255.255
          inet6 addr: fd01:5ca1:ab1e:891f:c4fc:4a2e:e64d:503d/128 Scope:Global
          UP POINTOPOINT RUNNING NOARP  MTU:1324  Metric:1
          RX packets:261363 errors:0 dropped:0 overruns:0 frame:0
          TX packets:70339 errors:1 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:50
          RX bytes:340900499 (325.1 MiB)  TX bytes:6308488 (6.0 MiB)
 

  • 0
Опубликовано
1 минуту назад, avn сказал:

ИП адрес вижу. Теперь wg setconf nwg0 /tmp/fix-Wireguard0.conf

Wg show nwg0

root@Keenetic-2488 ~# wg setconf nwg0 /tmp/fix-Wireguard0.conf
root@Keenetic-2488 ~# wg show nwg0
interface: nwg0
  public key: z+ritbWSDJCgQ/SnR8z8fpYfGyMVNp/tqJI/toMq1jM=
  private key: (hidden)
  listening port: 59705

peer: bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
  endpoint: [2606:4700:d0::a29f:c001]:1701
  allowed ips: 0.0.0.0/0, ::/0
  latest handshake: 16 seconds ago
  transfer: 1.26 KiB received, 8.64 KiB sent
 

  • 0
Опубликовано
1 минуту назад, koctik-2017 сказал:

root@Keenetic-2488 ~# wg setconf nwg0 /tmp/fix-Wireguard0.conf
root@Keenetic-2488 ~# wg show nwg0
interface: nwg0
  public key: z+ritbWSDJCgQ/SnR8z8fpYfGyMVNp/tqJI/toMq1jM=
  private key: (hidden)
  listening port: 59705

peer: bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
  endpoint: [2606:4700:d0::a29f:c001]:1701
  allowed ips: 0.0.0.0/0, ::/0
  latest handshake: 16 seconds ago
  transfer: 1.26 KiB received, 8.64 KiB sent
 

Тоже все хорошо, появилось ::/0. Только ipv6 адрес надо свой брать, а не мой. Он присваивается на этапе генерации конфигурации wg. А так все гуд. И так далее разбирайтесь по цепочке.

  • 0
Опубликовано
10 минут назад, avn сказал:

Тоже все хорошо, появилось ::/0. Только ipv6 адрес надо свой брать, а не мой. Он присваивается на этапе генерации конфигурации wg. А так все гуд. И так далее разбирайтесь по цепочке.

root@Keenetic-2488 ~# wg show nwg0
interface: nwg0
  public key: z+ritbWSDJCgQ/SnR8z8fpYfGyMVNp/tqJI/toMq1jM=
  private key: (hidden)
  listening port: 59453

peer: bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
  endpoint: [2606:4700:d0::a29f:c001]:1701
  allowed ips: 0.0.0.0/0, ::/0
  latest handshake: 2 minutes, 1 second ago
  transfer: 2.22 MiB received, 268.36 KiB sent
root@Keenetic-2488 ~# ifconfig nwg0
nwg0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:172.16.0.2  P-t-P:172.16.0.2  Mask:255.255.255.255
          inet6 addr: 2606:4700:110:8bb9:3c5:e24a:5acd:42de/128 Scope:Global
          UP POINTOPOINT RUNNING NOARP  MTU:1324  Metric:1
          RX packets:3673 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2888 errors:1 dropped:1 overruns:0 carrier:0
          collisions:0 txqueuelen:50
          RX bytes:3084223 (2.9 MiB)  TX bytes:450772 (440.2 KiB)

  • 0
Опубликовано

Все будет в версии 4.0.

interface ipv6 address уже появилась опять, и работает правильно + можно задавать allow-ips в ipv6-формате + роутинг через force-default позволяет сделать дефолтным.

Осталось доделать NAT66, но тут больше вопросов компоновки чем технических проблем.

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.