Уже больше 5 лет держу виртуалку на недорогом европейском хостинге - для обхода известных ограничений, хостинга своего одностраничного вебсайта, тестов и так далее. Однако, хостинг не предлагает бесплатные бэкапы. Поэтому решил настроить резервное копирование на свой домашний Veeam.
Есть решение Veeam Cloud Connect - но в использовавшемся мной иранской версии подобной лицензии не было, другую версию искать было лень, поэтому решил заморочиться с NAT. Инструкцию нашел в первом посте по ссылке: https://forums.veeam.com/veeam-agent-for-windows-f33/featurerequest-veeam-agent-for-windows-behind-nat-t51473.html
Можно было использовать VPN - но у меня поднят shadowsocks, который умеет гонять трафик только в одну сторону, а в случае Veeam общение идет как со стороны сервера к агенту, так и со стороны агента к серверу.
Итак, что требуется для работы:
1. Статический белый IP адрес.
2. Рутер с поддержкой NAT для диапазона портов.
И пол часа времени.
Сперва настраиваем на рутере проброс TCP портов 10001,10005,10006, 49152-65535,2500-5000 на машину с Veeam:
192.168.1.205 - это мой Veeam. Сам Veeam сервер имеет неограниченный доступ в Internet.
Ставим агента, запускаем тестовый бэкап - и ничего не работает :)
В логах видим, что агент с VPS обращается к виртуалке по DNS имени хоста. Файл hosts, конечно же, наше всё - но, как оказалось, его правка и не нужна. Имя хоста используется только в самом начале бэкап сессии. Далее Veeam агент обращается по IP адресу, который ему сообщает сервер Veeam. А сервер сообщает свой внутренний IP адрес, который, естественно, от VPS недоступен.
Чтобы решить проблему - можно пойти двумя путями: настроить iptables на бэкапируемой виртуалке форвардить трафик вместо внутреннего на белый IP (я этот вариант не проверял). Либо нужно заставить сервер Veeam сообщать свой белый IP в дополнение ко внутреннему. Делается это просто - добавляем на сервер Veeam (если серверов несколько - то на сервер с ролью Veeam Backup Proxy) свой белый IP как дополнительный:
Маску ставим /32.
Бэкапящиеся виртуалки, находящиеся внутри сети, при бэкапе первым обратятся на "верхний" IP адрес, а находящиеся снаружи будут использовать следующий.
Собственно, после этого всё заработало. Проверено на Veeam 12 и Ubuntu 22.04 LTS.