Назад | Перейти на главную страницу

Настройка прокси-сервера, использующего vpn-соединение

Мои мысли такие:

У меня есть эта внешняя служба vpn, к которой я подключаюсь. Но могу ли я настроить локальный прокси-сервер, который использует это соединение vpn, чтобы приложения, которые подключаются через этот прокси, использовали vpn? Это относится к системе Linux.

Подсказки и ссылки приветствуются!

РЕДАКТИРОВАТЬ: вариант использования: возможно, есть другой способ сделать это.

Router #1 - Connects by the default net provided by ISP
Router #2 - Connects by PPTP VPN to another 'ISP'

Клиенты в сети по умолчанию подключены к обычному маршрутизатору №1, и весь трафик обрабатывается им. У клиента другой браузер (опера), который подключается через прокси к маршрутизатору №2 и заканчивается в конце туннеля VPN.

Это проясняет?

Шесть лет спустя я подошел к этому вопросу и почти подвел его, основываясь на принятом ответе. На сегодняшний день это несложно с использованием политик маршрутизации. Все подробности доступны на этом же сайте, по адресу https://serverfault.com/a/389004/70774.

В моем случае мне нужно было сначала убедиться, что vpn не был маршрутом по умолчанию. Как вы этого добьетесь, зависит от того, какой диспетчер соединений вы используете.

Прокси-сервер (tinyproxy) работает с собственным пользователем, поэтому я помечаю все пакеты, приходящие от этого пользователя, с помощью команды

iptables -t mangle -A OUTPUT -m owner --uid-owner 125 -j MARK --set-mark 2

где 125 это uid пользователя tinyproxy и 2 - произвольное число, которое будет сопоставлено позже.

Затем я даю указание системе маршрутизации использовать определенную таблицу для маршрутизации всех запросов, отмеченных 2.

ip rule add fwmark 2 table 3

Опять же, 3 это просто произвольное число. Просто помолите внимание, чтобы выбрать неиспользуемый стол (просто посмотрите, есть ли что-то на столе с вами, выберите с помощью ip route list table 3 ).

Затем я заполняю таблицу 3 с моим маршрутом по умолчанию:

ip route add default dev ppp0 via proto static scope link metric 1024

Последним шагом было создание правила маскировки, необходимость которого я не совсем понимаю:

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

И вуаля!

Возможно, я не понял вашего вопроса, но попробуйте следующее:

  • Настройте сервер, подключитесь к своему VPN-серверу (какой тип VPN? OpenVpn, PPTP? IPSec?).
  • Сделайте GW по умолчанию конечной точкой VPN
  • Включите переадресацию IP, примерно так: "echo 1> / proc / sys / net / ipv4 / ip_forward"
  • На клиентах используйте ваш сервер как GW по умолчанию.

Хотя описанная вами ситуация невозможно (запущенное приложение не может переопределить системную таблицу маршрутизации) у вас может быть два варианта:

  • создание прокси в сети, к которой вы обращаетесь по VPN, и пусть ваши приложения будут использовать этот прокси по умолчанию. Вы можете выбрать один из нескольких прокси в зависимости от протокола, который использует ваше приложение.
  • ssh на хост в данной сети и использовать службу ssh-s, называемую Динамическая пересылка. По сути, это SOCKS-прокси, созданный из вашего ssh-клиента. Затем вы можете настроить свое приложение с помощью этого прокси или настроить его с помощью tsocks (Transparent Socks)

человек ssh_config

     DynamicForward
             Specifies that a TCP port on the local machine be forwarded over the
             secure channel, and the application protocol is then used to determine
             where to connect to from the remote machine.

             The argument must be [bind_address:]port.  IPv6 addresses can be specified
             by enclosing addresses in square brackets or by using an alternative syn‐
             tax: [bind_address/]port.  By default, the local port is bound in accor‐
             dance with the GatewayPorts setting.  However, an explicit bind_address
             may be used to bind the connection to a specific address.  The
             bind_address of “localhost” indicates that the listening port be bound for
             local use only, while an empty address or ‘*’ indicates that the port
             should be available from all interfaces.

             Currently the SOCKS4 and SOCKS5 protocols are supported, and ssh(1) will
             act as a SOCKS server.  Multiple forwardings may be specified, and addi‐
             tional forwardings can be given on the command line.  Only the superuser
             can forward privileged ports.