Наверняка вы слышали о сервисах Amazon EC2, Rackspace и им подобным. Может быть даже пользовались. Лично мне бывает нужен иногда личный VPN-сервер. Для этих целей я уже давно держал микро-инстанс на Амазоне, предоставляемый им в течении первого года бесплатно. Плюс использовал для архивов Amazon Glacier, который с его ценой «1 цент за гигабайт в месяц» можно считать тоже почти бесплатным. Но вот год закончился и за EC2 стало нужно платить. Архивы мои тоже разраслись прилично и затраты на Glacier аналогично перестали радовать.
Случайно пробежавший мимо обзор сервиса DigitalOcean по-началу оставил меня равнодушным. Ну, облачный сервис, ну виртуалки. Ну да, чуть-чуть дешевле (но не так чтобы уж очень), чего-то аналогичного Glacier вроде бы нет да и вообще оно того не стоит.
Я сильно ошибался. Ниже будет рассказано как на базе DigitalOcean сделать себе VPN-сервер в пару десятков раз дешевле такого же на Амазоне и сервис хранения архивов, в бесконечность раз дешевле Glacier.
VPN-сервер
Инструкций как поднять на Linux VPN-сервер в интернете пруд-пруди. Вот раз, вот два, ну а вот скрипт гарантированно работающий на образе Ubuntu 12.04 x64 Server, который предоставляется DigitalOcean.
#!/bin/bash
echo "Select on option:"
echo "1) Set up new PoPToP server AND create one user"
echo "2) Create additional users"
read x
if test $x -eq 1; then
echo "Enter username that you want to create (eg. client1 or john):"
read u
echo "Specify password that you want the server to use:"
read p
# get the VPS IP
ip=`ifconfig eth0 | grep 'inet addr' | awk {'print $2'} | sed s/.*://`
echo
echo "Downloading and Installing PoPToP"
apt-get update
apt-get install pptpd
echo
echo "Creating Server Config"
cat > /etc/ppp/pptpd-options <<END
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
nodefaultroute
lock
nobsdcomp
END
# setting up pptpd.conf
echo "option /etc/ppp/pptpd-options" > /etc/pptpd.conf
echo "logwtmp" >> /etc/pptpd.conf
echo "localip $ip" >> /etc/pptpd.conf
echo "remoteip 10.1.0.1-100" >> /etc/pptpd.conf
# adding new user
echo "$u * $p *" >> /etc/ppp/chap-secrets
echo
echo "Forwarding IPv4 and Enabling it on boot"
cat >> /etc/sysctl.conf <<END
net.ipv4.ip_forward=1
END
sysctl -p
echo
echo "Updating IPtables Routing and Enabling it on boot"
iptables -t nat -A POSTROUTING -j SNAT --to $ip
# saves iptables routing rules and enables them on-boot
iptables-save > /etc/iptables.conf
cat > /etc/network/if-pre-up.d/iptables <<END
#!/bin/sh
iptables-restore < /etc/iptables.conf
END
chmod +x /etc/network/if-pre-up.d/iptables
cat >> /etc/ppp/ip-up <<END
ifconfig ppp0 mtu 1400
END
echo
echo "Restarting PoPToP"
/etc/init.d/pptpd restart
echo
echo "Server setup complete!"
echo "Connect to your VPS at $ip with these credentials:"
echo "Username:$u ##### Password: $p"
# runs this if option 2 is selected
elif test $x -eq 2; then
echo "Enter username that you want to create (eg. client1 or john):"
read u
echo "Specify password that you want the server to use:"
read p
# get the VPS IP
ip=`ifconfig venet0:0 | grep 'inet addr' | awk {'print $2'} | sed s/.*://`
# adding new user
echo "$u * $p *" >> /etc/ppp/chap-secrets
echo
echo "Addtional user added!"
echo "Connect to your VPS at $ip with these credentials:"
echo "Username:$u ##### Password: $p"
else
echo "Invalid selection, quitting."
exit
fi
Просто запустите, он спросит логинпароль для пользователя VPN — и готово.
Поднимать это всё можно на самом дешёвом инстансе DigitalOcean (за 5$ в месяц) — одно активное VPN-соединение грузит процессор на 4-6% и оставляет свободными 60% ОЗУ виртуалки. Мы уже видим экономию, поскольку даже микро-инстанс на Амазоне стоит примерно 15$ в месяц, а тут всего 5$. Но это не всё. Если вам, как и мне, не нужен VPN-сервер, работающий 24 часа в сутки (я им пользуюсь от силы пару раз в неделю по пару часов — посмотреть что-нибудь, недоступное из наших славянских краёв), то можно виртуалку выключать. В этом месте внимательный читатель воскликнет «Ага! А автор статьи, оказывается, дурак-дураком, и не знает, что DigitalOcean берёт деньги даже за выключенную виртуалку!». Нет, я в курсе. За выключенную — берёт. А вот за удалённую — нет, не берёт. Поэтому мы сразу после настройки выключим нашу машинку, сделаем с неё снимок (snapshot) — это обойдётся нам в где-то в 4 цента и удалим виртуалку. Всё, теперь мы ничего не платим.
Прелесть в том, что VPN-сервер не содержит каких-либо меняющихся данных и каждый раз когда нам понадобиться VPN — мы просто восстанавливаем snapshot и запускам виртуалку. Не нужна больше — убиваем. Удобнее всего это делать через API Digital Ocean. Вот несколько ссылок, которые можно добавить в закладки браузера и пользоваться для быстрого создания и удаления виртуалки.
https://api.digitalocean.com/images/?client_id=[client_id]&api_key=[api_key]
https://api.digitalocean.com/droplets/?client_id=[client_id]&api_key=[api_key]
https://api.digitalocean.com/droplets/new?client_id=[client_id]&api_key=[api_key]&name=VPN&size_id=66&image_id=[image_id]&region_id=1
javascript: void(function(){var response = JSON.parse(document.body.innerText); var el = document.createElement('a');el.href='https://api.digitalocean.com/droplets/'+ response.droplet.id+ '/destroy/?client_id=[client_id]&api_key=[api_key]';el.innerText = 'Destroy VPN server';document.body.appendChild(el)})();
Пара нюансов использования:
- Не забудьте вписать свои [client_id] и [api_key] — их можно взять со страницы www.digitalocean.com/api_access
- В ссылку «Старт VPN-сервера» нужно вписать правильный номер образа вместо [image_id] — его можно взять из данных по первой ссылке («Все образы»).
- Закладку «Получить ссылку на удаление VPN-сервера» нужно нажимать при открытой вкладке с результатами старта VPN-сервера — это нужно чтобы оттуда взять id созданной виртуалки. Полученную ссылку можно добавить в закладки (ну или просто не закрывать страницу в браузере).
От клика по закладке до рабочего VPN-сервера уходит меньше минуты. В итоге мои затраты на VPN при пользовании им 10-15 часов в неделю составляют 0.2$ — 0.4$ в месяц.
Хранение архивов
Прямого аналога Glacier, как я уже говорил, в DigitalOcean нет. Но помните, выше я писал, что сделать снимок виртуалки нам обойдется в 4 цента? Откуда эта цифра? Всё просто — 2 цента за каждый гигабайт сохраняемых в snapshot данных. И обратите внимание — оплачивается только сохранение. Нигде на сайте или форуме не указано о том, что за хранение берутся какие-то деньги. Люди на форуме даже предлагали заплатить за хранение данных, но ответ DigitalOcean был однозначным — оплата только в момент создания снимка. Таким образом, если архив в 100 Гб на Амазоне будет нам обходиться в 1$ каждый месяц, то в DigitalOcean мы заплатим единоразово 2$ (ну плюс оплата времени работы виртуалки пока мы будем загружать данные — но это считанные центы) и больше ничего. Никаких ограничений на сроки хранения образов или планов менять тарифы я у DigitalOcean не нашел. Плюс сюда добавляется скорость (забирать данные из Glacier ох как не быстро, а тут всё будет доступно в течении пары минут) и удобство (свой протокол у Glacier иногда раздражает, а вот на виртуалку DigitalOcean мы данные можем заливать хоть по HTTP, хоть по FTP, хоть торрентами, хоть Дропбоксом — что захотим, то на эту виртуалку и поставим).
Мораль
Если вы платите в десятки раз больше всяким там «лучшим VPN-серверам интернета» и «самым надёжным файлохранилищам» — бросайте это дело. Берите скриптыссылки в статье и пользуйтесь.
Автор: tangro