... Современный мир характеризуется каким-то лютым количеством мурзилок, которых хлебом не корми, только дай чего-нибудь заблокировать. Причём, это касается не только нашего родного привычного роскомпозора, но и вполне состоятельных облачных провайдеров типа CloudFlare, Amazon, Akamai и иже с ними. После начала известных_событий™ они взяли и по умолчанию сами забанили доступ на хостящиеся у них ресурсы. Если их клиент прощёлкал этот момент - сам дурак. Доходит до смешного, я как-то не смог попасть на сайт одной ветеринарной клиники в Мытищах, потому что оный хостится как раз в каком-то из этих вот стильных, модных, молодежных облаков.
Так-то у меня давным-давно есть проверенное решение: собственный VDS в одной недружественной стране. Там стоит OpenVPN-сервер, который спускает (push) список маршрутов на подключившегося к нему клиента. Как только я нарываюсь на недоступный ресурс, тут же смотрю его IP, потом whois, потом инфу по AS. И добавляю целиком всю эту AS в список на сервере. Мир, дружба, жвачка.
Всё это хорошо, но я же до фига прогрессивный. Один из моих домашних провайдеров даёт IPv6. Причем, по DHCPv6 спускает на роутер один "/128"-адрес и в довесок к нему "/56"-подсеть для устройств за роутером. Прям всё по фен-шую, хоть я его об этом даже и не просил. И вот тут вся эта отточенная технология с OpenVPN ломается. Поясню почему.
Я заранее не знаю какую именно /56-подсеть в следующий раз выдаст мне провайдер, она динамическая. Поэтому для связи с VDS-кой мне нужна своя собственная серая ULA-подсеть. ОК, сделал, не проблема. Но теперь, когда клиент пытается пойти на "честный" IPv6-адрес, в качестве source ip он выбирает тоже "честный" IP-адрес, выданный провайдером. Который по понятным причинам в OpenVPN-тоннель уже не заворачивается, соответственно, доступа к запрашиваемому ресурсу как не было, так и нет.
Самый простой и очевидный способ решения - сказать роутеру, чтобы он не ретранслировал бы во внутреннюю сеть полученный от провайдера "/56"-сегмент. То есть, по сути, отказаться от него. И включить на внешнем IPv6-интерфейсе роутера NAT с ULA на "/128". Работать, конечно, будет. Но как то жалко на всех устройствах домашней сети отказываться от "честного" провайдерского IPv6. Особенно если это какой-нибудь личный сервачок с проном.
Вот я чё-то призадумался, а можно ли и на ёлку влезть, и руки не поцарапать? То есть и от честных адресов не отказываться, и замаршрутизировать нужные мне ресурсы с ULA-адресов вовнутрь тоннеля? Есть ли для этого какие-нибудь механизмы?
Теоретически, опять же, есть три варианта.
- Держать VPN с забугорной VDSкой не с роутера, а напрямую с клиента. Вариант, но дико неудобно в контексте мобильных устройств (телефоны, планшеты).
- Прописать статикой на клиенте нужные маршуты, которые должны ходить с ULA-адресов в тоннель. Лютый геморрой.
- С самого роутера спускать по DHCPv6 список таких статических маршрутов, смотри пункт 2. Наверное, работоспособно, но прямо сейчас не представляю себе как это сделать. Особенно учитывая то, что очень хотелось бы как-то автомагически синхронизировать эти маршруты с теми, которые прилетают в push-е OpenVPN-а.
В общем, интересная задачка. Прямо сейчас для её решения мне чё-то не хватает знаний.