Привет всем. Я сам родом из Украины. Кто не в курсе, наш президент запретил вконтакте, одноклассни, яндекс и mail.ru. Эти все сервисы очень важны для меня и я начал думать как ими пользоваться. Для android ставил Orbot (клиент TOR), OperaMax, OpenVPN(zaborona.help), для компьютера пользовался Opera с её встроенным VPN. Но все эти способы не устраивали меня. Сервис Zaborona.help подходил, но мне не нравилась маршрутизация через русский ip и что я не могу контролировать его. Скажу сразу - у меня нет неприязни к русским.
Захотелось себе свой openvpn сервер. Начал я со сбора информации : что это за штука VPS, как с ней работать, как поставить openvpn, сколько стоит это удовольствие, какая мощность мне нужна для сервера
Что такое VPS? Википедия дала исчерпывающий ответ . И главное что я понял это не отдельный компьютер для сервер, а виртуальная машина на основе физического сервера.
Стоит такая штука от 1 доллара/евро в месяц в зависимости от мощности. Можно найти предложения и подешевле при оплате сразу за год.
Как я прочёл на хабре для сервера openvpn достаточно 256 мегабайт ОЗУ и процессор от 1 Ггц.
Openvpn - это открытая реализация сервера VPN. Работает на Windows/Linux/Android/iOS.
Чтобы поставить openvpn на VPS можно воспользоваться кучей гайдов из сети или качнуть скрипт автоматической установки.
Управлять сервером нужно через конфигурационные файлы.
Итак: я купил VPS в Италии (сервис не буду называть чтобы не сочли за рекламу, он еще и в Чехии работает) за 1 евро в месяц. Мой конфиг :
Linux
1 Core Intel® Xeon® E5-2650L v4
1 GB RAM
20 GB SSD Storage
2TB/month data transfer
Мне такого хватит с головой.
Процесс оплаты я не буду описывать там всё стандартно.
При регистрации нужно ввести Hostnamе. Сначала меня ввело это в ступор, т.к. предлагалось в placeholder (серые буквы в поле ввода) ввести имя сайта. Но это не так, это нужно просто ввести имя машины, название сервера. Дальше я выбрал операционную систему Ubuntu 16.04. Ввёл данные для root пользователя, подождал 5 минут и мой сервер готов к установке openvpn. Чтобы получить доступ к его потрохам я скачал последнюю версию ssh клиента Putty (версия 0.7), установил её и получил доступ к командной строке.
Установка и настройка проходил по шагам:
1. Установил mc apt-get install mc . Ктопомнит нортонн командер или работает с FAR меня поймёт
2. Добавил в source list репозитарий openvpn. Использовал для этого команды:
wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -
echo "deb http://build.openvpn.net/debian/openvpn/ release/2.4 xenial main" > /etc/apt/sources.list.d/openvpn-aptrepo.list
3. Установил openvpn c помощью скрипта отсюда. Почему именно оттуда, мне было лень выполнять гайды состоящие из кучи шагов. При установке скрипт будет задавать вопросы в которых нужно будет сделать выбор типа сети, порта, названия файла конфигурации. Сам файл будет в /root.
4. Приступил к настройке самого сервера. Идею как его настроить почерпнул из конфигов Zaborona.help на гитхабе. Т.е. на моём сервере как и на забороне будет прокидывать vpn тунелль только к заблокированным сайтам. Адреса сайтов взял из конфигов забороны. Но я ещё хотел чтобы можно было весь трафик пускать через vpn.
5. Итак у меня получилось 2 конфига.
server.conf:
port 1194 #порт на котором работает сервер
proto tcp #протокол работы сети
dev tun
sndbuf 0
rcvbuf 0
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem
auth SHA512
tls-auth /etc/openvpn/ta.key 0
topology subnet
server 10.8.0.0 255.255.255.0 #ip адреса для клиентов сервера
#ifconfig-pool-persist ipp.txt
#push "redirect-gateway def1 bypass-dhcp" #после раскомментирования строки весь трафик будет идти чрез vpn
push "dhcp-option DNS 208.67.222.222" #использую OPENDNS
push "dhcp-option DNS 208.67.220.220"
push "route 208.67.220.220"
push "route 208.67.220.222"
keepalive 10 120
cipher AES-256-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
crl-verify /etc/openvpn/crl.pem
#log-append openvpn.log
mode server
duplicate-cn
# Routes - маршруты на запрещённые сайты
# Yandex network
push "route 5.45.192.0 255.255.192.0"
push "route 5.255.192.0 255.255.192.0"
push "route 37.9.64.0 255.255.192.0"
push "route 37.140.128.0 255.255.192.0"
push "route 77.75.152.0 255.255.248.0"
push "route 77.88.0.0 255.255.192.0"
push "route 84.201.128.0 255.255.192.0"
push "route 87.250.224.0 255.255.224.0"
push "route 93.158.128.0 255.255.192.0"
push "route 95.108.128.0 255.255.128.0"
push "route 100.43.64.0 255.255.224.0"
push "route 109.235.160.0 255.255.248.0"
push "route 130.193.32.0 255.255.224.0"
push "route 141.8.128.0 255.255.192.0"
push "route 178.154.128.0 255.255.128.0"
push "route 185.32.185.0 255.255.255.0"
push "route 185.32.186.0 255.255.255.0"
push "route 185.71.76.0 255.255.252.0"
push "route 199.21.96.0 255.255.252.0"
push "route 199.36.240.0 255.255.252.0"
push "route 213.180.192.0 255.255.224.0"
#push "route-ipv6 2001:678:384::/48"
#push "route-ipv6 2620:10f:d000::/44"
#push "route-ipv6 2a02:6b8::/32"
#push "route-ipv6 2a02:5180::/32"
# Mail.ru network
push "route 5.61.16.0 255.255.248.0"
push "route 5.61.232.0 255.255.248.0"
push "route 79.137.157.0 255.255.255.0"
push "route 79.137.183.0 255.255.255.0"
push "route 94.100.176.0 255.255.240.0"
push "route 95.163.32.0 255.255.224.0"
push "route 95.163.248.0 255.255.248.0"
push "route 128.140.168.0 255.255.248.0"
push "route 178.22.88.0 255.255.248.0"
push "route 178.237.16.0 255.255.240.0"
push "route 185.5.136.0 255.255.252.0"
push "route 185.16.148.0 255.255.252.0"
push "route 185.16.244.0 255.255.252.0"
push "route 188.93.56.0 255.255.248.0"
push "route 194.186.63.0 255.255.255.0"
push "route 195.211.20.0 255.255.252.0"
push "route 195.211.128.0 255.255.252.0"
push "route 195.218.168.0 255.255.255.0"
push "route 208.87.92.0 255.255.252.0"
push "route 217.20.144.0 255.255.240.0"
push "route 217.69.128.0 255.255.240.0"
push "route 185.6.244.0 255.255.252.0"
push "route 185.30.176.0 255.255.252.0"
push "route 195.218.190.0 255.255.254.0"
#push "route-ipv6 2a00:1148::/32"
#push "route-ipv6 2a00:a300::/32"
#push "route-ipv6 2a00:b4c0::/32"
#push "route-ipv6 2a04:4b40::/29"
# VK.com network
push "route 87.240.128.0 255.255.192.0"
push "route 93.186.224.0 255.255.240.0"
push "route 95.142.192.0 255.255.240.0"
push "route 95.213.0.0 255.255.192.0"
push "route 185.29.130.0 255.255.255.0"
push "route 185.32.248.0 255.255.252.0"
# Kaspersky network
push "route 77.74.176.0 255.255.252.0"
push "route 77.74.181.0 255.255.255.0"
push "route 77.74.183.0 255.255.255.0"
push "route 93.159.228.0 255.255.252.0"
push "route 185.54.220.0 255.255.254.0"
push "route 185.85.12.0 255.255.255.0"
push "route 185.85.14.0 255.255.254.0"
push "route 77.74.176.0 255.255.248.0"
push "route 91.103.64.0 255.255.248.0"
push "route 93.159.224.0 255.255.248.0"
#push "route-ipv6 2a03:2480::/33"
# DrWeb
push "route 178.248.232.183 255.255.255.255"
push "route 178.248.233.94 255.255.255.255"
push "route 195.88.252.0 255.255.254.0"
server2.conf:
port 1193
proto tcp
dev tun2
sndbuf 0
rcvbuf 0
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem
auth SHA512
tls-auth /etc/openvpn/ta.key 0
topology subnet
server 10.8.1.0 255.255.255.0
#ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
keepalive 10 120
cipher AES-256-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
crl-verify /etc/openvpn/crl.pem
duplicate-cn
6. Чтобы заработало сразу 2 конфига нужно было в файле /etc/rc.local добавить маршрутизацию и запуск 2-х экземпляров сервера
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to ip_address_vps
iptables -t nat -A POSTROUTING -s 10.8.1.0/24 ! -d 10.8.1.0/24 -j SNAT --to ip_address_vps
sudo service openvpn start server
sudo service openvpn start server2
до строчки exit
7. Команды управления openvpn:
openvpn --config /etc/openvpn/server.conf - проверка выбранного конфига, нет ли в нём конфликтующих опций
service openvpn restart или stop или start или status
8. Установка и настройка ftp сервера - чтобы забрать файл конфигурации для клиентов
apt-get install vsftpd
конфиг находится по пути /etc/vsftpd.conf
мой конфиг:
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
use_localtime=YES
connect_from_port_20=YES
xferlog_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
utf8_filesystem=YES
chroot_local_user=NO - опция отвечающая чтобы юзер попадал только в свою домашнюю дтректорию
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list - список юзеров у которых доступен вход в домашнюю директорию
Чтобы зайти на ftp сервер нужно создать отдельного пользователя командой
useradd ftp_user - вводим ему пароль, потом идём в /home/ftp_user и создаём папку с правами на запись.
Нюанс заключается в том что в самой директории /home/ftp_user права только на чтение, а в созданной папке уже и на запись.
/etc/vsftpd.chroot_list содержит только имя юзера ftp_user
9. Скачиваем файл конфигурации и изменяем его для 2-х конфигов.
Менять нужно только порт чтобы соответсвовал конфигу. Для каждого конфига свой файл конфигурации.
10. Для windows качаем openvpn клиент, импортируем конфигурацию и подключаемся. Для android я рекомендую использовать "Openvpn для Android", тоже делаем импорт конфигурации и настраиваем какие приложения должны бегать через vpn.
После всего этого осталось только вовремя оплачивать аренду сервера.