Как ретранслировать VPN через личный сервер?
У меня есть домашний сервер с белым IP адресом, на нём установлена система Linux Debian 12. Недавно мною был приобретен VPN, он имеет отличную скорость, но он доступен только для одного устройства, меня это не устраивает, а переплачивать не хочется. Как я могу реализовать следующую схему? Я устанавливаю VPN клиент с поддержкой shadowsocks (провайдер рекомендует hiddify), так же создаю WireGuard сервер и прокси сервер на моем сервере. Затем мне нужно сделать так, что бы весь травик идущий через прокси и vpn wireguard шёл не напрямую в интернет, а именно через купленный мною VPN. При этом все остальные программы сервера имели стандартный выход напрямую в интернет, что бы не ломать тот же ssh в локальной сети или же файловый сервер. То есть VPN от провайдера будет работать исключательно с трафиком от WireGuard и Proxy, все остальные программы сохраняют прямой доступ в сеть
Ответы (2 шт):
Прежде всего, Shadowsocks это не протокол VPN, а прокси. Если бы вы купили VPN, решить вашу проблему можно бы было простой установкой подключения к VPN-провайдеру и настройкой маршрутизации.
Прокси работает на другом уровне (слое) сетевого стека: одной маршрутизацией не обойтись, необходимо перенаправлять трафик в программу, которая поддерживает прокси и знает, как обрабатывать перенаправленные подключения.
Классический сценарий настройки таков:
- Установить и настроить программу, поддерживающую прокси и приём входящих транзитных подключений (iptables dnat)
- Настроить сервер Wireguard
- Настроить iptables/nftables на перенаправление всех TCP/UDP-соединений к программе из пункта 1, попутно не забыв исключить локальные диапазоны и т.п.
- Особо пошаманить с 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-запросы по умолчанию в такой конфигурации — не проверял, но как их настраивать написано здесь.
Если я правильно понял, то имеется компьютер, с которого весь трафик направляется в некий vpn. И ты хочешь использовать этот компьютер в качестве прокси к этому vpn.
Мне кажется, простейший способ поднять на нём любой прокси сервер: если планируется использование только из локальной сети, можно использовать http, если из внешней, то любой с шифрованным трафиком.
Ну а дальше указываешь этот прокси на других компах (или в браузерах) - любо для всего, либо через pac script для конкретных сайтов и пользуешься.