Как ретранслировать VPN через личный сервер?

У меня есть домашний сервер с белым IP адресом, на нём установлена система Linux Debian 12. Недавно мною был приобретен VPN, он имеет отличную скорость, но он доступен только для одного устройства, меня это не устраивает, а переплачивать не хочется. Как я могу реализовать следующую схему? Я устанавливаю VPN клиент с поддержкой shadowsocks (провайдер рекомендует hiddify), так же создаю WireGuard сервер и прокси сервер на моем сервере. Затем мне нужно сделать так, что бы весь травик идущий через прокси и vpn wireguard шёл не напрямую в интернет, а именно через купленный мною VPN. При этом все остальные программы сервера имели стандартный выход напрямую в интернет, что бы не ломать тот же ssh в локальной сети или же файловый сервер. То есть VPN от провайдера будет работать исключательно с трафиком от WireGuard и Proxy, все остальные программы сохраняют прямой доступ в сеть


Ответы (2 шт):

Автор решения: ValdikSS

Прежде всего, Shadowsocks это не протокол VPN, а прокси. Если бы вы купили VPN, решить вашу проблему можно бы было простой установкой подключения к VPN-провайдеру и настройкой маршрутизации.

Прокси работает на другом уровне (слое) сетевого стека: одной маршрутизацией не обойтись, необходимо перенаправлять трафик в программу, которая поддерживает прокси и знает, как обрабатывать перенаправленные подключения.

Классический сценарий настройки таков:

  1. Установить и настроить программу, поддерживающую прокси и приём входящих транзитных подключений (iptables dnat)
  2. Настроить сервер Wireguard
  3. Настроить iptables/nftables на перенаправление всех TCP/UDP-соединений к программе из пункта 1, попутно не забыв исключить локальные диапазоны и т.п.
  4. Особо пошаманить с DNS-трафиком (либо установить DNS-резолвер локально, либо перенаправлять его на какой-либо из публичных, либо другие подобные доп. действия) так как DNS через прокси работает не так же, как через VPN

Однако в именно вашем случае можно обойтись одним XRay-Core, т.к. он и работает с Shadowsocks, и может выступать как Wireguard-сервер. Он самостоятельно работает со всеми слоями сетевого стека, не полагаясь на ОС (у него внутри TCP/IP-стек gVisor).

Пример конфигурационного файла:

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "port": 10555,
      "protocol": "wireguard",
      "settings": {
        "secretKey": "yNgq9UxAZzEAGk4YsdWD7M7w/rdEbUZYwygrWiNjt0A=",
        "peers": [
          {
            "publicKey": "IPa0VFd/6/8Q7nn73VnRITRkUV+aOevzj2n819BTyng=",
            "allowedIPs": ["192.168.44.2/32"]
          }
        ],
        "mtu": 1420 // optional, default 1420
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "shadowsocks",
      "settings": {
        "servers": [
          {
            "address": "",
            "port": 12345,
            "password": "example_user_1",
            "method": "aes-128-gcm"
          }
        ]
      }
    }
  ]
}

Соответственно, подключаться через Wireguard к порту 10555, ключи клиента должны быть те, что в секции peers. outbounds - shadowsocks настроить согласно конфигурации вашего купленного доступа.

Как обрабатываются DNS-запросы по умолчанию в такой конфигурации — не проверял, но как их настраивать написано здесь.

→ Ссылка
Автор решения: Qwertiy

Если я правильно понял, то имеется компьютер, с которого весь трафик направляется в некий vpn. И ты хочешь использовать этот компьютер в качестве прокси к этому vpn.

Мне кажется, простейший способ поднять на нём любой прокси сервер: если планируется использование только из локальной сети, можно использовать http, если из внешней, то любой с шифрованным трафиком.

Ну а дальше указываешь этот прокси на других компах (или в браузерах) - любо для всего, либо через pac script для конкретных сайтов и пользуешься.

→ Ссылка