Я подключил свой локальный сервер к облачному серверу с помощью VPN-туннеля (Tinc). Оба сервера могут общаться друг с другом по интерфейсам tun0.
Мой облачный сервер может быть доступен через Интернет с публичным IP-адресом, назначенным его интерфейсу eth0. Я хочу, чтобы мой локальный сервер был напрямую доступен с общедоступного IP-адреса моего облачного сервера. Я попытался связать интерфейсы eth0 и tun0 облака с помощью следующих команд:
ip link add name br0 type bridge
ip link set dev br0 up
ip link set dev tun0 master br0
ip link set dev eth0 master br0
Но eth0 не работает после того, как я соединю интерфейс eth0 (последняя команда выше). Я подозреваю, что это какая-то защита, которую сделал провайдер VPS (Digital Ocean). Что я делаю не так? Какие еще варианты у меня есть?
Позвольте мне ответить на свой вопрос. Обратный прокси-сервер NGINX может решить эту проблему, создав такой файл конфигурации: / etc / nginx / sites-enabled / tunnel-config
server {
listen <cloud server port> default_server;
server_name localhost;
large_client_header_buffers 4 32k;
root /usr/share/nginx/html;
index index.html index.htm;
location / {
proxy_pass <tunneled remote server IP>:<port>;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Вот несколько источников подробных объяснений: