BDFINFO1.9
Оффлайн
Регистрация
12.05.16
Сообщения
1.927
Реакции
523
Репутация
0
Итак, собственно, поднимаем OpenVPN-server вручную на анонимном впс, снятом за биткойны.

Начнем с установки каких-то пакетов. Некоторые из этих пакетов мы устанавливали в прошлой теме.

Обновим систему:
Код:
apt-get update && apt-get dist-upgrade -y
apt-get install -y sudo nano htop curl perl python wget git openssl ca-certificates iptables
И три основных пакета:
Код:
apt-get install -y openvpn easy-rsa ufw
После установки пакетов, разархивируем пример конфигурационного файла в папку /etc/openvpn/:
Код:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz >/etc/openvpn/server.conf
Файл /etc/openvpn/server.conf - основной серверный конфигурационный файл OpenVPN.

Теперь немного отредактируем его:
Код:
nano /etc/openvpn/server.conf
Файл длиный, с большим количесвом комментариев (все, что идет в строчке после символа # - комментарий). Строки, которые начинаются с символа ; в данном файле - тоже комментарии.

Частичный разбор конфига будет ниже в статье.
Редактируем. В самом верху сразу будет port:
Код:
port 1194
Я поменяю порт на какой-нибудь совсем не стандартный:
Код:
port 16122
(Диапазон от 0 до 65000), я выбрал рандомно. Не займите порт, который слушает другой сервис, например в моем случае sshd случает 1488.

Идем дальше. Выбираем протокол - пара строк ниже:
Код:
proto udp
И видим, что она никак не закоментированная. Потому что по-умолчанию OpenVPN будет работать по UDP. Если вам нужен TCP, выше есть строчка proto tcp - раскоментируйте ее, удалите символ ; в нчале строки, а proto udp закоментируйте, добавив символ #. Оба нельзя, или то или другое. Я буду показывать на примере UDP, поэтому оставляю как есть.

Опускаемся ниже в конфиге и находим строку:
Код:
dh dh1024.pem
Меняем на dh2048.pem:
Код:
dh dh2048.pem
Идем ниже и находим закоментированную строку:
Код:
;push "redirect-gateway def1 bypass-dhcp"
Раскоментируем:
Код:
push "redirect-gateway def1 bypass-dhcp"

Еще чуть ниже находим две раскоментированные строки рядом:
Код:
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
Это то, какой DNS будет использоваться. По-умолчанию прописаны сервера OpenDNS, но можем прописать публичные сервера Google:
Код:
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
Можете оставить и OpenDNS.

Идем дальше и натыкаемся на строку
Код:
;tls-auth ta.key 0# This file is secret
Просто раскоментируем:
Код:
tls-auth ta.key 0# This file is secret
Листаем ниже и находим строку:
Код:
;cipher AES-128-CBC   # AES
Это шифрование. Раскоментируем строку и переделаем на AES-256-CBC:
Код:
cipher AES-256-CBC
Еще чуть ниже в файле находим две закоментированные строки:
Код:
;user nobody
;group nogroup
Раскоментим их:
Код:
user nobody
group nogroup
Далее, ниже находим строку, которая начинается со слова status и переделываем ее в следующий вид:
Код:
#status /dev/null 2>&1
Закоментированная.

Еще чуть ниже, находим строку, которая начинается со слова log, и придаем ей такой вид:
Код:
log /dev/null2>&1
Не закоментированная.
Код:
https://bdfclub.com/threads/dediki-shpiony-ili-pochemu-ne-stoit-ehkonomit-na-rabochej-srede.4915/
. Отключить логирование OpenVPN нельзя в привычном понимании, поскольку если закоментировать строку, то по-умолчанию будет писаться в syslog файл (/var/log/syslog).

Строку
Код:
;log-append
не трогаем

Еще чуть ниже, verb 3 меняем на:
Код:
verb 0
Сохраняем, закрываем. Мы еще вернемся к этому файлу позже.

Теперь включаем перенаправление пакетов, вводим команду:
Код:
echo 1>/proc/sys/net/ipv4/ip_forward
Затем:
Код:
cat /proc/sys/net/ipv4/ip_forward
Если возвращает единицу, значит все ОК.

Теперь надо чтобы изменения были и при перезагрузке сервера, поэтому редактирум файл /etc/sysctl.conf:
Код:
nano /etc/sysctl.conf
Ищем строку:
Код:
#net.ipv4.ip_forward=1
Раскоментируем ее:
Код:
net.ipv4.ip_forward=1
Если такой строки в файле нет вообще, добавьте вручную.

Настроим Firewall

Ранее мы установили пакет ufw. Теперь нам нужно добавить некоторые правила. Во-первых, нам нужно дать разрешить траффик на SSH. Я ввожу:
Код:
ufw allow 1488
Поскольку у меня sshd слушает порт 1488, если вы не меняли и у вас sshd слушает 22 порт, то вводите:
Код:
ufw allow ssh
Далее, нам нужно разрешить траффик на порт, который будет слушать OpenVPN, в моем случае это port 16122, потому что я менял его в конфиг. файле (выше):
Код:
ufw allow 16122/udp
Поскольку OpenVPN будет слушать UDP порт, я в конце добавил /udp. Если у вас OpenVPN настроен не на UDP, а на TCP, без слеша на конце (или /tcp).

Если вы ничего не меняли в конфиге, то у вас слушает порт 1194 UDP, а значит:
Код:
ufw allow 1194/udp
Теперь нужно изменить Forward Policy, редактируем файл /etc/default/ufw:
Код:
nano /etc/default/ufw
Ищем строку:
Код:
DEFAULT_FORWARD_POLICY="DROP"
И меняем ее значение на:
Код:
DEFAULT_FORWARD_POLICY="ACCEPT"
Теперь нам нужно разобраться с сетевыми интерфейсами, вводим команду:
Код:
ip addr
Команда выведет ваши интерфейсы. Там будет интерфейс lo и еще какой-нибудь, например eth0 или venet0. В моем случае интерфейс называется venet0 (ибо OpenVZ). У меня такой вывод:
Код:
1: lo:<LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
Код:
2: venet0:<BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/void
    inet 127.0.0.2/32 scope host venet0
    inet МОЙ IP/32 brd МОЙ IP scope global venet0:0

Вам нужен интерфейс, который показывает ваш внешний IP. Из кода выше понятно, что venet0 показывает внешний IP. (inet МОЙ IP)

Далее, что нужно редактировать файл /etc/ufw/before.rules:
Код:
nano /etc/ufw/before.rules
И куда-нибудь наверх, вставляем следующее:
Код:
# START
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/8-o <ВАШИНТЕРФЕЙС>-j MASQUERADE
COMMIT
# END
где вместо <ВАШ ИНТЕРФЕЙС> пишем интерфейс, в моем случае это venet0 и получилось так:
Код:
# START
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/8-o venet0 -j MASQUERADE
COMMIT
# END

После всего этого включаем ufw:
Код:
ufw enable
Cмотрим на наши правила:
Код:
ufw status
Выводом покажет правила, которые вы создавали выше, у меня так:
You must be registered for see images attach

где 1488 - для SSH и 16122 - UDP опенвпн.

Отключить ufw можно так:
Код:
ufw disable
Генерируем ключи для сервера. Ранее мы ставили пакет easy-rsa. Теперь копируем папку со скриптами easy-rsa в папку openvpn:
Код:
cp -r /usr/share/easy-rsa/ /etc/openvpn
внутри папки easy-rsa создаем папку keys:
Код:
mkdir /etc/openvpn/easy-rsa/keys
Теперь сгенерируем Diffie-Hellman длиной 2048 и поместим его в /etc/openvpn:
Код:
openssl dhparam -out/etc/openvpn/dh2048.pem 2048
Еще сгенерируем файл ta.key в папку /etc/openvpn, для tls-auth:
Код:
openvpn --genkey --secret /etc/openvpn/ta.key
Далее...
Переходим в папку easy-rsa:
Код:
cd /etc/openvpn/easy-rsa
Тут лежит файл vars с какими-то переменными, редактируем его:
Код:
nano vars
Крутим вниз пока не наткнемся на блок:
Код:
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="[email protected]"
export KEY_OU="MyOrganizationalUnit"

# X509 Subject Field
export KEY_NAME="EasyRSA"
В первых 6 строках можете менять значения, можете оставить как есть. Я оставлю как есть. Пофиг. Главное нельзя оставлять их пустыми.

Но конкретно здесь нас интересует строка
Код:
export KEY_NAME="EasyRSA"
Здесь значение меняем на server, что бы было вот так:
Код:
export KEY_NAME="server"
Можно поменять на любое другое, но не ебем мозг и меняем как я, потому что иначе вам придется менять значения в server.conf.
Если дали название отличное от server - запомните его.
Вот так. Сохраняем, закрываем файл.

Далее вводим следующее:
Код:
source vars
Далее, вводим:
Код:
./clean-all &amp;&amp; ./build-ca
Будет предлогать вводить какие-то значения, но мы их меняли (или не меняли) в файле vars. Просто везде жмем Enter и все. При этом, дойдя до пункта Name, нажимая Enter будет то имя, которое вы указывали ранее в KEY_NAME у меня это server.

Следующим делом вводим:
Код:
./build-key-server &lt;ИМЯВ KEY_NAME&gt;
где: <ИМЯ В KEY_NAME> - это то имя, которое вы давали в файле vars. Если ничего не давали, то по-умолчанию там было Easy-RSA. Я давал имя server, поэтому:
Код:
./build-key-server server
Точно таким же образом, везде жмем Enter. Даже там, где предложит ввести 'A challenge password', жмем enter.

Потом дважды вводим символ y, где попросит:
Код:
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y

В конце вы увидите:
Код:
Write out database with 1 new entries
Data Base Updated

Теперь нам нужно переместить все сгенерированные ключи и сертификаты в папку /etc/openvpn.

Всё добро находится в папке /etc/oepnvpn/easy-rsa/keys. Нас интересуют 3 файла (исплючая dh2048.pem и ta.key, которые мы сгенерировали ранее) - ca.crt, server.crt, server.key,

где файлы server.crt и server.key - имеют название, которое вы указывали в KEY_NAME, я указывал server, помним да.

Перемещаем их следующим образом:
Код:
cp /etc/openvpn/easy-rsa/keys/{ca.crt,server.crt,server.key}/etc/openvpn/
Идем обратно в папку openvpn:
Код:
cd /etc/openvpn
Вводим к консоли ls и смотрим, какие файлы лежат. На данный момент должны быть следующие файлы: ca.crt, dh2048.pem (который мы генерировали ранее), server.conf (основной конфиг), server.crt, server.key и ta.key Еще может быть файл update-resolv-conf.

root@ppVPS:/etc/openvpn# ls
ca.crt dh2048.pem easy-rsa server.conf server.crt server.key update-resolv-conf
Теперь запускаем openvpn:
Код:
systemctl start openvpn
или
Код:
/etc/init.d/openvpn start
Проверяем, запустился ли:
Код:
systemctl status openvpn
или
Код:
/etc/init.d/openvpn status
Должно гореть зелененьким (лол), вы увидите надпись:

Active: active (exited) since
Проверяем, слушает ли порт:
Код:
netstat -tulpn | grep vpn
Должно вывести один сервис, который слушает на порту, который вы указывали.

У меня вывод такой:

udp 0 00.0.0.0:16122 0.0.0.0:* 484/openvpn
Все проверили, молодцы. Теперь остановим:
Код:
systemctl stop openvpn
или
Код:
/etc/init.d/openvpn stop
Делаем клиента, генерируем ключи.

Для начала нам нужно скопировать пример конфиг. файла для клиента.
Скопируем его в папочку /etc/openvpn/easy-rsa/keys и переименуем (даем расширение .ovpn):

Код:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client.ovpn
Редактируем файл клиента:

Код:
nano /etc/openvpn/easy-rsa/keys/client.ovpn
Листаем файл вниз, натыкаемся на строку

Код:
remote my-server-11194
где: my-server-1 - IP адрес вашего сервера. Тот, что пришел вам на почту или смотрите по команде ip addr | grep inet и ищите. 1194 - Порт, на котором слушает OpenVPN на вашем сервере, в моем случа это 16122.

Меняйте эту строку, я меняю:

Код:
remote 111.222.111.22216122
Листаем ниже, находим строку:

Код:
ns-cert-type server
стираем ее и меняем на:

Код:
remote-cert-tls server
Еще чуть ниже строка:

Код:
;cipher x
Меняем шифрование на то, которое вы указывали в server.conf. Я указывал AES-256-CBC:

Код:
cipher AES-256-CBC
Если вы в server.conf ничего не указывали, то эту строку не трогайте.

Все. Сохраняем и закрываем.

Теперь нужно сгенерировать ключи и серты для клиента.

Перейдем в папку easy-rsa:

Код:
cd /etc/openvpn/easy-rsa
Генерим:

Код:
./build-key client1
где: client1 - название клиента. Может быть любым. Я сделал client1.

Таким же образом, как и с сервом, везде жмем Enter. И соглашаемся, нажимая y, там где это нужно.

Клиентский конфиг состоит из:

.ovpn файла. В моем случае это client.ovpn.
файла ca.crt - который общий для сервера и все клиентов.
файл ta.key - тоже общий для сервера и клиента. Это для tls-auth, что не обязательно.
файлов client1.crt и client1.key - которые индивидуальные для каждого клиента.

Дело в том, что все эти файлы нужны .ovpn конфигу, без них он не будет работать. Но не будем же мы их везде вместе таскать! Поэтому есть возможность все эти файлы строить в .ovpn конфиг, чтобы был один единый файл и все.

Нужно проделать кое-какие манипуляции, поэтому для удобства создаем папку client1:

Код:
mkdir /etc/openvpn/easy-rsa/keys/client1
Нужно скопировать туда конфиг.файл .ovpn и все серты и ключи,
по аналогии с сервером, файлы client1.crt и client1.key имеют названия специфические, в зависимости от того, какое вы указывали имя клиента, выполняя команду выше. Я назвал client1 поэтому у меня они называются именно так.

Копируем:

Код:
cp /etc/openvpn/easy-rsa/keys/{ca.crt,client1.crt,client1.key}/etc/openvpn/easy-rsa/keys/client1
За одно копируем client.ovpn (называться может как угодно, хоть xuy.ovpn):

Код:
cp /etc/openvpn/easy-rsa/keys/client.ovpn /etc/openvpn/easy-rsa/keys/client1
И не забываем про ta.key, которые лежит в папке openvpn:

Код:
cp /etc/openvpn/ta.key /etc/openvpn/easy-rsa/keys/client1/
Переходим в папку client1:
Код:
cd /etc/openvpn/easy-rsa/keys/client1
На данный момент там находится 5 файлов:

ca.crt client.ovpn (конфигфайл) client1.crt client1.key ta.key
Теперь нужно быть внимательнее! В особенности с именами файлов.
Внедряем содержимое нужных файлов в наш конфиг .ovpn.

По очереди, в том порядке, в котором это у меня, выполняем следующие команды.

Для ca.crt:

Код:
echo ''&gt;&gt; client.ovpn
cat ca.crt &gt;&gt; client.ovpn
echo ''&gt;&gt; client.ovpn
где client.ovpn название конфиг файла.

Теперь для client1.crt:

Код:
echo ''&gt;&gt; client.ovpn
cat client1.crt &gt;&gt; client.ovpn
echo ''&gt;&gt; client.ovpn
где client1.crt - серт. файл, которые генерировали выше.

Теперь для client1.key:

Код:
echo ''&gt;&gt; client.ovpn
cat client1.key &gt;&gt; client.ovpn
echo ''&gt;&gt; client.ovpn
Теперь для ta.key, нужно для tls-auth:

Код:
echo 'key-direction 1'&gt;&gt; client.ovpn
echo ''&gt;&gt; client.ovpn
cat ta.key &gt;&gt; client.ovpn
echo ''&gt;&gt; client.ovpn
Таким образом, все ключи и сертификаты теперь в одном файле .ovpn, и он может работать сам по себе.

Теперь нужно еще немного отредактировать файл client.ovpn:

Код:
nano client.ovpn
Листаем, пока не наткнемся на блок:

Код:
ca ca.crt
cert client.crt
key client.key
Нам это не нужно, поэтому закоментируем их:

Код:
#ca ca.crt
#cert client.crt
#key client.key
Собственно, конфиг клиента готов. Он будет работать, если вы запустите его на OpenVPN клиенте вашего устройства.

Можем запускать OpenVPN:
Код:
systemctl start openvpn
или
Код:
/etc/init.d/openvpn start
После любых манупуляций в файле server.conf, для того что бы применились изменения, нужно перезапускать OpenVPN:
Код:
systemctl restart openvpn
или
Код:
/etc/init.d/openvpn restart
Но я хочу еще проделать какие-то модификации на server.conf и client.ovpn

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

Сделать это легко. Но для начала, на всякий случай, сделаем backup:
Код:
server.conf
cp /etc/openvpn/server.conf /etc/openvpn/server.conf.bak
и client.ovpn:
Код:
cp /etc/openvpn/easy-rsa/keys/client1/client.ovpn /etc/openvpn/easy-rsa/keys/client1/client.ovpn.bak
теперь одной командой удаляем все комментарии (# и ; в начале строки) и пустые строки:
Код:
server.conf

sed -i '/^[#;]\|^$/ d'/etc/openvpn/server.conf

client.ovpn

sed -i '/^[#;]\|^$/ d'/etc/openvpn/easy-rsa/keys/client1/client.ovpn
И оба наших конфига примут более читабельный вид.

Открываем server.conf

Код:
nano /etc/openvpn/server.conf
И куда-нибудь в середину прихерачим следующее:
Код:
sndbuf 0
rcvbuf 0
topology subnet
auth SHA512
И на клиенте.
Код:
nano /etc/openvpn/easy-rsa/keys/client1/client.ovpn
Куда-нибудь в конфиг, до начала сертификатов и ключей:
Код:
sndbuf 0
rcvbuf 0
keepalive 10120
auth SHA512
Таким образом, мой конфиг server.conf выглядит так:
Код:
port 16122
proto udp
dev tun
sndbuf 0
rcvbuf 0
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh2048.pem
tls-auth ta.key 0
topology subnet
server 10.8.0.0255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10120
cipher AES-256-CBC
auth SHA512
comp-lzo
persist-key
persist-tun
log /dev/null2&gt;&amp;1
verb 0
А client.ovpn так (Безключей и сертификатов):
Код:
client
dev tun
proto udp
sndbuf 0
rcvbuf 0
remote 111.222.111.22214500
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
auth SHA512
keepalive 10120
comp-lzo
verb 3
Можете использовать эти конфиги.

Разберем немного конфиг.

proto udp
Какой протокол юзать, TCP или UDP?

UDP обычно работает быстрее.

TCP более надежный, стабильный, лучше обходит фаерволл - например можно повестить на порт 443.

UDP, также можно повесить на порт, который обычно не блокируют - 53.

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

Port16122
На какой порт повесить? Лучше на нестандартный, как у меня. Или замаскировать под какой-то сервис - 443/ssl для tcp и 53/dns для udp

cipher AES-256-CBC
Какое шифрование использовать?

Используйте AES-256-CBC или AES-128-CBC. Если явно не задать, то по-умолчанию будет исопльзоваться Blowfish (cipher BF-CBC).
Этот параметр должен быть и на сервере и на клиенте. Если на сервере есть, на клиенте нет или они отличаются, может не законнектить.

auth SHA512
Если не задавать, будет использоваться auth SHA1. Используйте auth SHA512 или auth SHA256. Этот параметр должен быть и на сервере и на клиенте. Если на сервере есть, на клиенте нет или они отличаются, может не законнектить.

#status /dev/null 2&gt;&amp;1
По умолчанию будет записываться в файл какой-то, какие клиенты сейчас онлайн. Чтобы ничего не писало, нужно закомментировать строку. Я также ЗАЧЕМ то написал /dev/null 2>&1 ...

log /dev/null2&gt;&amp;1
Это то самое логирование OpenVPN которое для безопасности лучше выключить. Дело в том, что выключить его нельзя, а если закоментировать, то логи будут писаться в /var/log/syslog
Поэтому я раскоментировал и сказал писать в /dev/null.

push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
Какие DNS юзать?

Юзайте паблик DNS от Google (8.8.8.8 и 8.8.4.4.) или от OpenDNS (208.67.222.222 и 208.67.220.220).

Утечка DNS под Windows и Linux
Если вы будете юзать этот конфиг на Windows, в конфиг добавляем следующую строку:

setenv opt block-outside-dns
Да, вот так просто. Под MacOS с Tunnelblick все норм.

А под Linux есть файл update-resolv-conf, который находится в папке /etc/openvpn на клиентской машине. Файл может иметь название или update-resolv-conf или update-resolv-conf.sh. Поэтому на клиентском Линукс вводим в терминале:
Код:
ls /etc/openvpn | grep update
И узнаем название файла.

Далее, в конфиг .ovpn нужно вставить следующие строки:
Код:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
где update-resolv-conf - название файла, которое вы получили выше.

Перекидываем конфиг .ovpn с серва на клиент.

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

Если вы создавали пользователя и запрещали ssh коннект от рута, то первым делом нужно поместить .ovpn конфиг в домашнюю папку созданного пользователя. У меня это был pp-ruloh
Код:
cp /etc/openvpn/easy-rsa/keys/client1/client.ovpn /home/pp-ruloh
Изменить права у файла:
Код:
chown pp-ruloh:pp-ruloh /home/pp-ruloh/client.ovpn
Linux. Будем юзать sftp.
Код:
sftp -P 1488pp-ruloh@ip
где 1488 - порт на котором слушает sshd.

Как законнектились, мы уже будем в домашней папке pp-ruloh. Можем посмотреть файлы - вводим ls.

копируем конфиг:
Код:
get client.ovpn ~/
Windows, linux, MacOS: скачиваем программу для работы по FTP - FileZilla
и подключаемся к серву по sftp. Нужено будет указать port sftp (у меня 1488), пользователя (pp-ruloh, ибо руту зарпетили). Копируем файл куда хотим и радуемся. Как пользоваться программой разберетесь сами.
 

Вложения

  • upload_2017-8-23_18-38-28.png
    upload_2017-8-23_18-38-28.png
    15,4 KB · Просмотры: 584
Последнее редактирование модератором:
marinad
Оффлайн

marinad

Заблокирован
Регистрация
28.07.17
Сообщения
27
Реакции
0
Репутация
3
Обратите внимание, если вы хотите провести сделку с данным пользователем, на то, что он заблокирован! Обязательно используйте услуги гаранта и не переводите денежные средства данному пользователю первым.
Вот я понимаю Статья.Спасибо.Почитав твои темы понял что ты самое годное выкладываешь.Надеюсь все получится.Если возникнут вопросы можно в личку писать,что бы не флудить?
 
prad
Оффлайн

prad

.
Регистрация
29.03.17
Сообщения
594
Реакции
452
Репутация
0
Вот я понимаю Статья.Спасибо.Почитав твои темы понял что ты самое годное выкладываешь.Надеюсь все получится.Если возникнут вопросы можно в личку писать,что бы не флудить?
Конечно. ЛС всегда открыт.
 
prad
Оффлайн

prad

.
Регистрация
29.03.17
Сообщения
594
Реакции
452
Репутация
0
Сверху Снизу