Настройка WireGuard VPN для доступа в интернет: проблемы с доступом в интернет и их решение

Настройка WireGuard VPN для доступа в интернет

Настройка WireGuard VPN для доступа в интернет

Пользователи все чаще стали сталкиваться, что WireGuard VPN не работает: в зависимости от интернет-провайдеров у некосервис не работает напрочь, у других — работает как ни в чем не бывало.

Для многих обычных пользователей слово VPN сразу ассоциируется со средством доступа в сеть интернет. Действительно, это один из самых популярных сценариев использования данной технологии. Но если для большинства это всего лишь способ обхода ограничений, то специалисты чаще рассматривают VPN как защищенный канал в сетях с низким уровнем доверия: публичный Wi-Fi, сети баров, гостиниц, аэропортов. А если вы работаете с чувствительной информацией, то для таких целей лучше использовать собственный сервер, например, создав его на базе WireGuard.

WireGuard в последнее время стремительно набирает популярность благодаря своей простоте и скорости работы. Конечно, есть и обратная сторона медали, но в данном сценарии раскрываются в основном только плюсы.

Напомним, WireGuard — это туннель без сохранения состояния, а следовательно применять к нему термины «клиент» и «сервер» некорректно, каждый узел WireGuard может как подключаться к другим узлам, так и принимать соединения. Но если мы говорим об организации выхода в интернет посредством VPN, то здесь данные термины уместны. В данном случае VPN-сервер — это узел предоставляющий возможность выхода в интернет, а VPN-клиенты — узлы, которые данную возможность используют, при этом технология реализации самого VPN-канала роли не играет.

Настройка VPN-сервера

Для обеспечения доступа в интернет VPN-сервер должен находиться на узле, обладающем достаточной пропускной способностью и точкой выхода в определенном географическом положении, которое зависит от того, к каким именно ресурсам вам нужно получать доступ. В большинстве случаев отлично подойдет VPS (виртуальный выделенный сервер) с минимальным тарифом в нужном расположении и ОС семейства Linux. Если говорить о семействе Debian / Ubuntu, то WireGuard поддерживается начиная с Debian 10 и Ubuntu 18.04 LTS. Все описанные ниже действия следует выполнять с правами суперпользователя root или через sudo.

Если вы используете Debian 10, то вам потребуется подключить backports-репозиторий:

echo deb http://deb.debian.org/debian buster-backports main > /etc/apt/sources.list.d/buster-backports.listОбновим источники пакетов и установим WireGuard:

apt update
apt install wireguardСледующим шагом выполним генерацию ключей, для этого перейдем в директорию /etc/wireguard:

cd /etc/wireguardВременно изменим маску для обеспечения нужного набора прав на создаваемые файлы:

umask 077Выполним генерацию ключевой пары:

wg genkey > privatekey
wg pubkey < privatekey > publickeyИ вернем маску к стандартным значениям:

umask 022Получим содержимое закрытого ключа, для этого воспользуемся командой:

cat /etc/wireguard/privatekeyСкопируем его содержимое, оно понадобится нам на следующем шаге, помним, что приватный ключ является секретным!

Создадим и откроем на редактирование конфигурационный файл WireGuard:

nano /etc/wireguard/wg0.conf В данном случае мы используем nano, если вам больше по душе редактор mс, то просто замените nanо на mcedit.

Прежде всего настроим сетевой интерфейс WireGuard, для этого добавим в файл следующую секцию:

[Interface]
Address = 10.20.0.1/24
ListenPort = 34567
Privatekey = kNYGiCR3/ikepyURjFnEu5ueoCBsP2pjvGdcj2pggG8=Настроек немного, указываем адрес интерфейса в VPN-сети, порт и секретный ключ. Зарезервированного порта для службы WireGuard нет, поэтому можем использовать любой.

Сохраним конфигурацию и добавим службу в автозагрузку, одновременно запустив ее:

systemctl enable —now wg-quick@wg0В качестве имени службы используется wg-quick@<имя_конфигурационного_файла>.

Посмотреть статус WireGuard можно командой: wg

Если все сделано правильно, то вы увидите информацию о созданном интерфейсе, в частности порт и публичный ключ.

wireguard-vpn-internet-access-001.png
Публичный ключ не является секретным, его также следует скопировать, он понадобиться нам для настройки клиентов.

Настройка NAT и брандмауэра

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

Прежде всего включим маршрутизацию, чтобы иметь возможность пересылать пакеты между интерфейсами, для этого откроем файл /etc/sysctl.conf, найдем и напишем в нем следующую опцию:

net.ipv4.ip_forward = 1 Затем перечитаем настройки:

sysctl -p Остальными настройками будет управлять iptables и этот вопрос может вызвать ряд затруднений. Настройки iptables не сохраняются при перезагрузке и существуют различные способы сделать это, наиболее простые и понятные — это скрипты, более современные — это специальные утилиты.

Более подробно о всех этих способах вы можете прочитать в нашей статье: Основы iptables для начинающих. Как сохранить правила и восстановить их при загрузке

Если вы не обладаете большим опытом работы с iptables, то, на наш взгляд, лучше начать со скрипта, а уже потом переходить к использованию утилит.

Создадим файл скрипта и разместим его в /etc:

nano /etc/nat-rules И добавим в него следующее содержимое:

#!/bin/sh
# Сбрасываем настройки брандмауэра
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
# Разрешаем уже установленные соединения. Первое правило в цепочке!!!
iptables -A INPUT -i ens33 -m state —state ESTABLISHED,RELATED -j ACCEPT
# Разрешаем подключения по SSH
iptables -A INPUT -i ens33 -p tcp —dport 22 -j ACCEPT
# Разрешаем подключения к WireGuard
iptables -A INPUT -i ens33 -p udp —dport 34567 -j ACCEPT
#Запрещаем входящие извне. Последнее правило в цепочке!!!
iptables -A INPUT -i ens33 -j DROP
# Разрешаем уже установленные транзитные соединения
iptables -A FORWARD -i ens33 -o wg0 -m state —state ESTABLISHED,RELATED -j ACCEPT
# Запрещаем транзитный трафик извне
iptables -A FORWARD -i ens33 -o wg0 -j DROP
# Включаем маскарадинг для WireGuard клиентов
iptables -t nat -A POSTROUTING -o ens33 -s 10.20.0.0/24 -j MASQUERADEЭто минимальная конфигурация брандмауэра, разрешающего только SSH и WireGuard подключения к серверу, по мере необходимости следует добавить в нее собственные правила. Все они должны располагаться между правилами, разрешающими уже установленные соединения и запрещающего входящие соединения извне. В качестве внешнего интерфейса сервера используется ens33.

Сделаем данный файл исполняемым:

chmod + x /etc/nat-rulesДля его запуска можно добавить в секцию [Interface] конфигурационного файла WireGuard опцию:

PostUp = /etc/nat-rulesВ большинстве случаев этого достаточно, но, если вдруг у нас не запустится WireGuard мы останемся без брандмауэра. Поэтому мы предлагаем пойти другим путем.

Прежде всего убедимся, что все правила работают как следует, для этого достаточно просто запустить скрипт.

/etc/nat-rulesПосмотреть состояние брандмауэра можно командой:

iptables -L -vnЕсли все работает нормально, то установим утилиту iptables-persistent:

apt install iptables-persistentВо время установки вам будет предложено сохранить текущие правила, с чем следует согласиться. После чего ваши правила будут автоматически сохранены в /etc/iptables/rules.v4, откуда будут восстанавливаться при загрузке. Скрипт нам больше не нужен, можем его убрать.

Можно ли обойтись без скрипта? Можно. Но не все обладают достаточными навыками работы с iptables, поэтому предложенный нами способ, хоть и является более длинным и избыточным, позволяет выполнить настройку брандмауэра наиболее просто для начинающих.

Настройка WireGuard клиента в Linux

Несмотря на то, что WireGuard уже давно поддерживается на уровне ядра Linux с графическими инструментами для его настройки дело обстоит не совсем хорошо, многое зависит от конкретного дистрибутива, но управлять WireGuard из командной строки тоже очень просто.

С правами root или через sudo выполним установку и генерацию ключей точно также, как мы это делали на сервере, затем также создадим конфигурационный файл:

nano /etc/wireguard/wg0.confИ внесем в него следующее содержимое:

[Interface]
Address = 10.20.0.102/24
Privatekey = 4Hfj7lZuaQZWkW2OGHPlkhr3Jxheg/lpcJkwiosvG0w=
DNS = 8.8.8.8, 1.1.1.1
[Peer]
PublicKey = kKxQ4wF+kUrpsTGwjMvlSwX45WV4nixG76/+sKlzEQA=
AllowedIPs = 10.20.0.0/24, 0.0.0.0/0
Endpoint = 203.0.113.2:34567
PersistentKeepalive = 25Секция [Interface] описывает сетевой интерфейс, в ней мы указываем секретный ключ клиента, желаемый адрес в VPN-сети и DNS-сервера. Секция [Peer] отвечает за подключение к серверу, у всех клиентов она общая, содержит публичный ключ сервера, его адрес и порт, а также параметры подключения и роутинга.

Для управление туннелем в ручном режиме можно использовать утилиту wg-quick, для подключения выполните:

wg-quick up wg0 —

где wg0 — имя вашего конфигурационного файла, с этим же именем будет создан сетевой интерфейс. Если запустить команду от имени обычного пользователя будет автоматически запрошено повышение прав.

wireguard-vpn-internet-access-006.png
Для отключения используйте:

wg-quick down wg0

При этом не забудьте добавить секцию [Peer] для этого узла на сервере и перезапустить службу, для этого понадобится указать публичный ключ клиента и его адрес, точно также как мы это делали для Windows-клиента.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Настройка WireGuard клиента в Windows

Скачайте и установите WireGuard для Windows c официального сайта. В приложении выберите Добавить туннель — Добавить пустой туннель.

wireguard-vpn-internet-access-002.png
При этом автоматически будет создана ключевая пара и откроется окно редактирования конфигурационного файла, который уже будет содержать секцию [Interface] и закрытый ключ, все что нам останется, это добавить туда опцию с адресом интерфейса, его следует выбирать из того же диапазона, который вы указали на сервере.

Address = 10.20.0.101/24Ниже добавим секцию [Peer] для подключения к серверу:

[Peer]
PublicKey = kKxQ4wF+kUrpsTGwjMvlSwX45WV4nixG76/+sKlzEQA=
AllowedIPs = 10.20.0.0/24, 0.0.0.0/0
Endpoint = 203.0.113.2:34567
PersistentKeepalive = 25

Которая содержит публичный ключ сервера, его адрес и порт, разрешенные сети. Так как нам требуется обеспечить выход в интернет через WireGuard подключение, то в список сетей мы добавили 0.0.0.0/0, что обеспечит направление в туннель всего исходящего трафика. Опция PersistentKeepalive предполагает обмен служебным трафиком с указанным пиром раз в 25 секунд, что требуется для поддержания нормальной работы клиента в том случае, если он находится за NAT.

wireguard-vpn-internet-access-003.png
После сохранения настроек туннельный интерфейс будет поднят и статус соединения будет Подключен, хотя мы еще не делали никаких настроек для данного клиента со стороны сервера. Кого-то может удивить или ввести в заблуждение такое положение дел и именно поэтому мы каждый раз акцентируем тот факт, что WireGuard — это туннель без сохранения состояния. Он ничего не знает о реальном состоянии канала и пира, к которому производится подключение, единственный способ это выяснить — послать пакет на другую сторону туннеля.

wireguard-vpn-internet-access-004.png
Так что же означает Подключен? Только то, что в конфигурации нет ошибок и туннельный интерфейс успешно поднят. Поэтому скопируем публичный ключ клиента и снова вернемся на сервер. Откроем конфигурационный файл и добавим в него следующую секцию:

[Peer]
PublicKey =i p9UjCFHiLnhQTcVgS/Y7j0s8caNj9hhn5RS2UqMXRo=
AllowedIPs = 10.20.0.101/32Где мы укажем публичный ключ клиента и его внутренний IP-адрес, с которого следует принимать пакеты.

Перезапустим службу WireGuard на сервере:

systemctl restart wg-quick@wg0Теперь можем проверить связь, для начала пропингуем внутренний адрес сервера 10.20.0.1 — если он отвечает, то туннель работает нормально.

Как мы уже говорили, при тех настройках, которые мы указали в туннель будет заворачиваться весь исходящий трафик клиента, в т.ч. и DNS-запросы. Поэтому если у вас в системе указаны локальные адреса DNS, скажем 192.168.1.1 роутера или адреса провайдера, недоступные из внешнего интернета, то разрешение имен работать не будет. Внешне это будет проявляться в том, что интернет работать не будет с указанием на ошибку DNS.

wireguard-vpn-internet-access-005.png
WireGuard прост, и обратная сторона этой простоты заключается в том, что мы не можем передавать нужные опции с сервера на клиента, как в OpenVPN, поэтому спасение утопающих — дело рук самих утопающих. К счастью, WireGuard позволяет задать опции для конфигурирования локального сетевого интерфейса, поэтому откройте приложение Wireguard, найдите свой туннель и выберите Редактировать, в открывшемся окне в секцию [Interface] добавьте опцию:

DNS = 8.8.8.8, 1.1.1.1

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

Как подключить 1.1.1.1

Возможность подключения к 1.1.1.1 можно восстановить несмотря на блокировку.

Прочитав эту инструкцию, многие скажут, что проще не возиться с настройками, а скачать какой-нибудь другой VPN-сервис и пользоваться им. Безусловно, это так и есть. Но WARP 1.1.1.1 компании Cloudflare — уже проверенный временем VPN с приличной скоростью работы. Там, где другие сервисы кое-как загружают изображения, WARP позволяет относительно спокойно смотреть видео. Плюс стабильность соединения находится на достаточно приличном уровне. Поэтому стоит все же прописать эти настройки. Однако никто не мешает вам держать на смартфоне или планшете дополнительные VPN-сервисы на случай, если ваш основной перестанет работать. С учетом того, как активно взялись за блокировку различных VPN, которые отказываются исполнять предписания Роскомнадзора, подобное может произойти абсолютно с любым приложением в любой момент.

Чтобы восстановить работоспособность VPN-сервиса WARP 1.1.1.1 необходимо сделать следующее:

  • Скачайте приложение WireGuard из App Store.
  • Загрузите индивидуальную конфигурацию для WARP.
  • По умолчанию конфигурация скачается в папку «Загрузки». Чтобы убедиться, что она действительно скачалась, откройте приложение «Файлы» и перейдите в папку «Загрузки». Конфигурация должна находиться здесь.
  • Если по какой-то причине на вашем Айфоне или Айпаде отсутствует приложение «Файлы» то скачайте его из App Store.
  • Запустите приложение WireGuard.

Добавить конфигурацию сможет даже неподготовленный пользователь.

  • Нажмите на «+» и в появившемся меню выберите «Создать из файла или архива».

Выберите нужный файл в папке «Загрузки».

  • Выберите загруженную конфигурацию.

Для безопасности система убедится, что это действительно вы.

  • После этого появится запрос на добавление новой конфигурации VPN. Нажмите кнопку «Разрешить».

На смартфонах и планшетах с Face ID будет использован этот датчик.

  • Система перекинет вас в настройки, где с помощью Touch ID или Face ID необходимо будет подтвердить добавление конфигурации.

Название конфигурации кликабельно для перехода в настройки.

  • После возвращения в WireGuard нажмите на название конфигурации, чтобы открыть ее параметры.
  • Нажмите кнопку «Править» чтобы внести изменения в конфигурацию для корректного установления соединения.

Для входа в настройки потребуется подтверждение личности с помощью Touch ID или Face ID.

  • Подтвердите с помощью Touch ID или Face ID, что это действительно вы вносите изменения в конфигурацию.

Обязательно исправьте DNS-сервер.

  • В строку «IP адрес сервера» введите «162.159.193.5:2408».
  • В поле «DNS-серверы» введите «8.8.8.8». Если оставить в этом поле единицы, то соединения не установится и все предыдущие действия будут напрасными.
  • Нажмите кнопку сохранить.
  • Активируйте переключатель напротив названия конфигурации и дождитесь появления значка VPN в статусной строке.

После этих действий можете наслаждаться любимыми ресурсами с помощью привычного вам VPN-сервиса. Приложение 1.1.1.1 можете удалить из памяти смартфона или планшета, чтобы оно на занимало место. Использовать его больше не понадобится.

Бесплатный VPN для Айфона

Всегда имейте несколько VPN-сервисов на смартфоне или планшете.

Скорость и качество соединения через WireGuard ничем не хуже, а иногда и лучше, чем через приложение 1.1.1.1. Этот момент интересует большинство пользователей этого VPN. Поэтому можете смело переходить на него. В отдельном материале, мы рассказывали, чем хорош этот сервис. Если власти не заблокируют и этот вариант подключения, то использовать другие сервисы вам не понадобится.

В любом случае советую держать на устройстве несколько разных VPN-сервисов чтобы не лишиться доступа к нужным вам ресурсам. Я использую на Айпаде Super VPN. Не сказать, чтобы этот сервис демонстрировал какие-то сногсшибательные скорости, но стабильность соединения и отсутствие разрывов — очень достойный показатель. С помощью него можно смотреть и видео, но необходимо немного подождать, чтобы оно немного прогрузилось.

У этого приложения есть один минус — отсутствие ландшафтного режима на планшетах. Так как я постоянно работаю именно в горизонтальном положении, то для меня этот момент становится важным. Но спустя полгода пользования этим приложением я уже приноровился включать VPN и без переворота интерфейса.

Мой VDS

  • базовый VDS в DIgitalOcean за $4: 512 MB Memory / 10 GB Disk / SGP1 — Ubuntu 22.10 x64
  • регион Сингапур. Скорее всего не лучший вариант, но точно рабочий. Изначально пробовал другие регионы, но в процессе поиска проблем менял сервера. Встречал комменты, что для некоторых регионов не «заводилось». Пример замера скорости в конце статьи.

Примечание: при регистрации Digital Ocean предоставил пробный период с «$200.00 (expires in 59 days)». При этом DO сделал списание (и сразу возврат) тестовой суммы в $5 при регистрации. Если есть подходящая карта, то скорее всего есть рабочий вариант завести новый аккаунт и раскатать wireguard еще раз на два месяца. При необходимости повторить.

Пробовал настраивать VDS по нескольким инструкциям. В целом, они однотипны и по каждой из них была проблема на финальном шаге — подключаюсь в WireGuard через клиент, но интернета нет. Скорее всего если есть проблема, то она будет воспроизводиться именно на этом шаге.

Полагаю, что вы прошли инструкцию и понимаете о чем идет речь дальше.

Еще раз проверяем файлы конфигураций

Проверьте еще раз файлы конфигураций. При минимальной настройке файлов получается два:

  • первый файл wg0.conf располагается на самом VDS и задает настройки для wireguard
  • второй, к примеру, mac.conf в моем случае, в котором задаются настройки клиента

Пример моего файла wg0.conf

[Interface] Address = 10.0.0.1/24 PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE ListenPort = 51830 PrivateKey =[Peer] PublicKey =

AllowedIPs = 10.0.0.2/32

Пройдемся по основным полям:

  1. PrivateKey & PublicKey. В процессе настройке можно вполне легко перепутать данные для вставки в поля PrivateKey и PublicKey при вставке в файлы конфигураций. Проверьте еще раз, что в этой части все правильно.
  2. ListenPort. У меня указан 51830, но вроде как 51820 согласно другим инструкциям тоже должен работать. Проблем тут быть не должно.
  3. AllowedIPs. По сути данное значение должно совпадать с указанным в файле настроек клиента.
  4. ⚡⚡⚡ PostUp & PostDown. Молния. Даже три. В инструкции указана такая строчка:

PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADEДанные команды выполняются при старте/останове wireguard сервера. Здесь нас интересуют значения %i и eth0.

Так понял значение %i является шаблоном для сетевого интерфейса, вместо которого в итоге подставляется конкретное значение. В моем случаем указал хардкодом ‘wg0’. Без этого у меня не работало.

Также вместо eth0 иногда требуется указать ваше значение сетевого интерфейса. Для просмотра сетевых интерфейсов можно использовать команду ifconfig -a в терминале VDS. В моем случае eth0, но может быть ens3 или другое значение. Если здесь указан неправильный интерфейс, то при просмотре статуса через команду systemctl status [email protected] видел ошибку в консоли. В моем случае правка относительно инструкции не понадобилась.

Пример моего файла mac.conf

[Interface] PrivateKey =Address = 10.0.0.2/32 # должно совпадать с указанным в wg0.cong в для настойки [Peer] DNS = 1.1.1.1 # сами задаем DNS, можно 8.8.8.8 или любой другой [Peer] PublicKey =

Endpoint = :51830 # проверяем порт AllowedIPs = 0.0.0.0/0 # пропускаем весь трафик через wireguard PersistentKeepalive = 20

Инструкция актуальна как для пользователей Android, так и iOS.

1. Скачиваем приложение WireGuard из маркета:
— Для Android: https://play.google.com/store/apps/details?id=com.wireguard.android
— Для iOS: https://apps.apple.com/us/app/wireguard/id1441195209

WireGuard — это бесплатное приложение с исходным кодом, позволяющее подключаться к VPN-серверам, используя современную криптографию.WireGuard — это бесплатное приложение с исходным кодом, позволяющее подключаться к VPN-серверам, используя современную криптографию.Именно с помощью этого приложения мы и будем подключаться к серверу WARP, так что нерабочее приложение 1.1.1.1 можно смело удалять.

2. Скачиваем уникальный конфиг WARP по ссылке:
https://cf-warp.maple3142.net/

— Перейдя по ссылке нажимаем на «Click here to get your warp.conf!»
Начнется загрузка файла «warp.conf»
— Из-за высокой нагрузки сайт может выдавать ошибку, и конфиг может скачаться не с первого раза.
— Если вы скачиваете с Android устройства, файл может загрузиться с расширением «warp.conf.txt» — удалите его, чтобы название файла было именно «warp.conf».

3. Импортируем скачанный конфиг в приложении WireGuard:
— Открываем приложение WireGuard
— Нажимаем «+» и выбираем «Импорт из файла или архива»
— Выбираем загруженный конфиг «warp.conf»

4. Исправляем нерабочее имя конечной точки и DNS-сервера:
— Открываем конфиг «warp».
— Нажимаем «Изменить».
— В строке «Имя конечной точки» заменяем буквенный «engage.cloudflareclient.com:2408» на цифровой «162.159.193.5:2408».
— В строке «DNS-серверы» заменяем «1.1.1.1» на «8.8.8.8».
— Сохраняем.

5. Готово! Теперь можно снова подключаться к «WARP» и пользоваться одним из лучших бесплатных сервисов для шифрования трафика и обхода блокировок.

Также для удобства на устройствах Android вы можете добавить переключатель WARP прямо в шторку центра управления:

Кроме того, чтобы каждый раз не включать и не отключать его при использовании разных приложения, на Android-смартфонах можно настроить список приложений, конкретно для которых будет использоваться WARP. Таким образом можно будет включить WARP на постоянной основе. На расходе батареи в таком случае это практически не отразится.

Чтобы убедиться, что вы подключены к WARP, можно перейти по ссылке: https://www.cloudflare.com/cdn-cgi/trace (в предпоследней строчке должна быть надпись «warp=on»)

Друзья, пишите в комментариях, получилось ли у вас настроить WARP через WireGuard. И если понравилась инструкция, обязательно подписывайтесь и поддержите старания лайком ;)

 

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: