Привет, Хабр! Так уж получилось, что в сети довольно мало документации по работе с региональными интернет-регистраторами (RIR) по получению IP-адресов, а также дальнейшей настройке BGP маршрутизаторов. Зачем закупаться оборудованием и разбираться с настройкой самим? Да потому что это экономит деньги: в нашем случае речь шла о почти 10к долларов ежемесячно. Мы окупили затраты на оборудование за два с небольшим месяца; по стоимости его закупка обошлась в три месяца аренды у Microsoft. В статье рассмотрим наш кейс снижения расходов на инфраструктуру через подключение собственного железа к BGP шлюзу.
Есть несколько вводных, задающих пограничные условия, которые требуют отдельного внимания:
- BGP-роутер физически находится вне сети серверной инфраструктуры.
- Физические каналы связи сервера предоставлены российскими ISP.
Последний пункт особенно важен, потому что небезызвестный РКН частенько исполняет блокировки целыми подсетями, что может создать ряд сложностей с доступом к ресурсу со стороны зарубежных пользователей, которые при подключении могут использовать маршруты, проходящие через пиры с заблокированными РКН IP-адресами.
Все изложенное в статье так или иначе будет привязано к виду деятельности, связанному с email-сервисами.
Проблема
Работая с инфраструктурой, каждая компания так или иначе должна решить, за какие вопросы она будет отвечать самостоятельно, а что готова делегировать сторонним исполнителям.
Возможные зоны ответственности:
- Железо: где находится физически и кто отвечает за его работоспособность?
- Провайдер: кто предоставляет каналы связи?
- IP: кто владеет IP-адресами?
- Домены: кто представлен в whois и кто регистратор?
Последний вопрос про домены заслуживает внимания, но будем считать, что до уровня регистратора и владельца доменной зоны подниматься не будем, так как это, как правило, экономически нецелесообразно.
Сосредоточимся на IP-адресах, так как именно они являются камнем преткновения для некоторых спорных вопросов:
- Когда ваш провайдер сообщает, что из вашей сети было установлено соединение с кем-то, кто находится в торрент-сети (или находился ранее) и со стороны правообладателя раздаваемого в сети контента отправлена жалоба на все адреса, которые имели коннект с пиром раздачи.
- Когда ваш провайдер блочит отправку писем:
Еще одна важная задача — снизить расходы на инфраструктуру. Используя AWS или Azure, при росте начинаешь замечать, как счета за аренду приближаются к отметке в 10k USD в месяц — так было в нашем случае. Столь огромные накладные расходы сподвигают к приобретению собственного железа, т.к. при покупке и настройке железа на пару миллионов рублей единоразово подобная акция окупается уже через 2-4 месяца.
Исходные данные и задача
- Заключенный договор с RIR (в нашем случае это RIPE NCC), выделенные диапазоны IP-адресов, а также AS.
- BGP шлюз (в нашем случае это bare metal машина, работающая на Ubuntu), запиренный к парочке ISP (не РФ, в нашем случае это Великобритания).
- Физическое железо с российскими ISP (мы находимся в Тамбове).
Как результат, мы должны иметь возможность на своих железках в РФ располагать интерфейсами с белыми IP-адресами нашей подсети, с маршрутизацией через BGP роутер в Великобритании.
В качестве примера рассмотрим работу с IPv4 адресами, но с IPv6 ситуация абсолютно аналогичная.
RIPE
RIPE — один из пяти RIR по всему миру; отвечает за Европу и Западную Азию. Есть вариант обратиться к LIR за выделением IP-адресов, возможно, с присваиванием их вашей организации. Здесь надо понимать, что в случае получения абузы на стороне RIR от любого лица, RIR вправе отобрать у вас адреса, поэтому получение статуса LIR дает некоторую гибкость в вопросе работы с абузами.
Настройка в RIPE начинается с получения статуса LIR, подписания договора и присвоения ASN, а также диапазона IP-адресов.
Для получения статуса LIR нужно юридическое лицо, причём не принципиально, в какой именно юрисдикции. Ключевой момент — местонахождение железок. В нашем случае юридическое лицо, от которого был подписан договор с RIPE, де факто находится в США, а сама эта организация является дочкой компании, зарегистрированной в Сингапуре. Для успешного заключения договора нужно предоставить информацию о физическом местонахождении железок (договор аренды и копии счетов покупки оборудования).
Для получения ASN необходимо заручиться поддержкой двух других провайдеров, с которыми вы гипотетически можете иметь коннект. При оформлении заявки на получение ASN вы указываете ASN провайдеров с контактами владельцев. В общем виде, RIPE имеет право подтвердить факт возможности пиринга вашей инфраструктуры, связавшись с ISP, ASN которых были вами задекларированы, но в нашем случае такого контакта не было, никто не подтверждал факт наличия канала связи, и в течение пары суток ASN был успешно присвоен.
Предполагаем, что можно также использовать публичные AS от Azure или AWS. Как результат, RIPE в свою базу вносят предоставленные вами ASN, а вы позже можете заменить их на любые угодные вам (в конце концов, вы имеете право сменить провайдера). В записях указывается разрешение на анонс со стороны вашей AS в адрес указанных AS, и наоборот (записи с маркировками export и import).
Процессы аллокации AS и IP-адресов абсолютно асинхронны и не обязательно должны быть последовательными. Мы вначале послали запрос на аллокацию адресов, а потом на присвоение AS.
RIPE предоставляют удобный веб-интерфейс для работы с записями своей базы данных, через который вы крайне быстро можете внести изменения AS или IP диапазона.
Крайне важно после аллокации IP-адресов выполнить их Assignment, чтобы адреса не числились неиспользуемыми. В случае долгого неиспользования адресов есть шанс потерять их, т.к. RIPE оставляет за собой право их отозвать. Assignment происходит через создание Maintainer с присваиванием его нужному диапазону. В нашем случае Maintainer-ами являются разные отделы организации, но в общем виде это могут быть и другие компании. Информация о присваивании является публичной.
BGP + OpenVPN
От слов к делу. Выберите подходящий вам ISP с надёжными каналами связи. Учитывая специфику деятельности (email-рассылки), мы смотрели на ограничения фаерволов роутеров, а также на количество AS, с которыми можно запириться. Возможно, понадобится официальное письмо от вашей организации в адрес ISP с разрешением принимать анонсы от вашей AS. В примере будет указана одна пиринг AS, но крайне рекомендуется использовать минимум две для повышения отказоустойчивости.
В качестве роутера выступает машина, работающая под управлением ОС Ubuntu.
В качестве программного обеспечения — Bird 1.6.3.
Публичный IP BGP шлюза -
IP адрес пиринг AS шлюза -
Наш ANS -
Наш диапазон IP -
Установка Bird: apt install — y bird
Конфигурация:
/etc/bird/bird.conf
router id <machine ip>;
protocol bgp heficed {
local as <local as number>;
source address <machine ip>;
import all;
export all;
graceful restart on;
multihop 2;
neighbor <peer router ip address> as <peer AS number>;
password "<something not easy>";
}
protocol static {
route <anonsed network in CIDR format (x.x.x.x/mask) via <machine ip>;
}
protocol device {
scan time 5;
}
Установка OpenVPN: apt install — y openvpn
Конфигурация:
Конфигурация OpenVPN несколько выходит за рамки статьи, поэтому приведём базовые опции, которые мы используем:
/etc/openvpn/openvpn.conf
mode server
;daemon openvpn
port 1984
management localhost 6666
proto udp
dev tun
ca /etc/openvpn/server_keys/ca.crt
cert /etc/openvpn/server_keys/localhost.crt
key /etc/openvpn/server_keys/localhost.key
dh /etc/openvpn/server_keys/dh2048.pem
client-config-dir /etc/openvpn/ccd
tls-auth /etc/openvpn/server_keys/ta.key 0
auth SHA512
cipher AES-256-CBC
topology subnet
server <as network> <as netmask>
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 8.8.8.8"
keepalive 5 30
persist-key
persist-tun
user nobody
group nogroup
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 2
mute 3
mute-replay-warnings
push "redirect-gateway def1"
Основная идея заключается в том, что интерфейсом с белым IP является tun интерфейс, созданный OpenVPN на стороне клиента.
Конфигурация OpenVPN на стороне клиента:
client
tls-client
auth SHA512
cipher AES-256-CBC
proto udp
remote-cert-tls server
remote <vpn server ip> 1984
dev tun
resolv-retry 5
nobind
keepalive 5 30
persist-key
persist-tun
verb 3
route-delay 2
Клиент-машины могут располагаться в разных физических дата-центрах, при этом весь трафик будет маршрутизироваться через OpenVPN/BGP сервер. Он в данном случае является точкой отказа, поэтому настоятельно рекомендуется в конфигурациях OpenVPN на клиенте использовать доменные имена, чтобы можно было перенаправить трафик через другой роутер, заменив записи DNS. Это не fault-tolerance решение, но поможет избежать длительного даунтайма при возникновении проблем с BGP шлюзом.
Идеальное решение — настройка присутствия на отдельном провайдере со своим BGP пирингом, но для этого вам необходимо обеспечить консистентность данных на уровне приложения, включая репликацию данных. Это будет в продолжении серии наших статей про настройку инфраструктуры.
Всем удачного имейлинга, задавайте вопросы, с радостью ответим в комментариях.