Ситуация: есть VPS с белым IP и есть некий студенческий проект, живущий глубоко в кампусной сети аж под двумя NATами, т.е. снаружи никак не доступный.
Задача: возможность доступа к проекту снаружи из Интернет (из дому, например).
Общая стратегия решения: докупить ещё 2 белых IP адреса для VPS и пробросить хотя бы один из них с помощью OpenVPN на сервер проекта.
Этапы решения:Два белых IP адреса из диаапзона IP1 и IP2 куплены. Они в одной подсети /24, то есть, видимо, VPS просто включили в такой VLAN, где водятся резервные адреса. IP Forwarding на VPS включен.
Поначалу я поднял OpenVPN туннель в режиме dev tun (l3), назначив эти белые адреса на оба его конца. Туннель сам по себе работал, но проблема возникла в том, что в этот VLAN, в котором оба этих адреса сидели, роутер постоянно слал ARP who-has на оба адреса (и другие) и ответить на такие запросы, естественно, мог только тот конец туннеля, который был на самой VPS. Второй не мог, поскольку ARP по L3 туннелям не ходит, и без этого роутер не знал MAC и не мог посылать ему IP пакеты.
Ладно... Поднимаю туннель в режиме dev tap (L2). Вот серверный конфиг
proto tcp4-server
bind XXX.9.71.223
cipher AES-256-CBC
dev tap
secret /etc/openvpn/static.key
Вот клиентский
proto tcp4-client
remote XXX.9.71.223
cipher AES-256-CBC
dev tap
secret /etc/openvpn/static.key
Всё минималистично. Проверяю туннель -- работает. Ну то есть, начинает бросаться IPv6 NDP и ещё чем-то с обоих концов. Далее -- на VPS делаю бридж из eth0 и tap0, переношу все настройки с eth0 на br0 чтобы всё работало как раньше. Поднимаю tap0 на стороне VPS -- и на tap0 с другой стороны туннеля начинает идти много ARP запросов, в том числе и на IP1 и IP2. Хорошо! Значит, надо проверить, возвращаются ли ответы. Вешаю tcpdump на оба конца туннеля и настраиваю тот его конец, что на стороне проекта, на адрес IP1. Вижу в дампах, что ARP-ответы пошли. Роутер по прежнему не отправляет IP-пакеты на адрес IP1 в этот влан. То есть как -- я делаю пинг снаружи на этот адрес, зная что ответа не будет (потому что на сервере проекта выход в инет через два NATа с другим совсем адресом) но эхо-запрос, по логике вещей я должен видеть и на VPS и на другом конце туннеля. Но там его нет.
Что-то я забыл, пропустил или не так понял... Вот только что?
Прошу прощения за не очень понятную формулировку задачи, но -- да, я хочу пробросить белый адрес через туннель чтобы выдать его серверу проекта.