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

OpenVPN как маршрутизировать интернет-трафик через клиента

Мой вариант использования: я хочу перенаправить весь интернет-трафик из machine B через machine A. Однако я не могу просто установить сервер OpenVPN на machine A так как machine A находится за уровнями NAT / межсетевых экранов, которые я не контролирую. Мое текущее решение - установить OpenVPN сервер на machine C, и имеют обе machines A и B присоединиться C как клиенты. Я пытаюсь настроить правильные маршруты, чтобы весь трафик из B может быть проложен через A. Настройка на каждой машине и шаги, которые я предпринял, подробно описаны ниже, а моя оставшаяся проблема находится в предпоследнем абзаце.

Сейчас, machine C запускает сервер Linux и OpenVPN в контейнере Docker (https://github.com/kylemanna/docker-openvpn). С участием redirect-gateway def1, обе клиентские машины могут подключаться и направлять трафик через сервер (https://ipleak.net подтверждает IP сервера). Однако для следующих тестов redirect-gateway def1 удаляется, а topology subnet и client-to-client добавлены. Сервер имеет IP подсети 192.168.255.1 и публичный IP AAA.BBB.CCC.DDD.

machine A работает под Windows и имеет IPEnabledRouter=1 установить в HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\, Обслуживание Routing and Remote Access установлен в Automatic и работает, а сетевой адаптер с доступом в Интернет настроен на разрешение совместного использования с адаптером OpenVPN TAP. Присвоено 192.168.255.2.

machine B работает под управлением Windows и находится за маршрутизатором с IP 192.168.1.100. Ему присвоен IP-адрес подсети OpenVPN. 192.168.255.3. Следующие маршруты добавляются в дополнение к тому, что OpenVPN настраивает автоматически:

Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0        128.0.0.0    192.168.255.2    192.168.255.3    259
        128.0.0.0        128.0.0.0    192.168.255.2    192.168.255.3    259
  AAA.BBB.CCC.DDD  255.255.255.255      192.168.1.1    192.168.1.100    291

Из machine B, Я могу пинговать machine A в 192.168.255.2, но Интернет-трафик по-прежнему направляется через сервер OpenVPN. (ipleak показывает AAA.BBB.CCC.DDD). Я пробовал добавить маршрут: route add default gw 192.168.255.2 tun0, но это лишает клиентов возможности доступа в Интернет. Таблица маршрутов сервера обычно выглядит так:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.19.0.1      0.0.0.0         UG    0      0        0 eth0
172.19.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0
192.168.254.0   192.168.255.2   255.255.255.0   UG    0      0        0 tun0
192.168.255.0   0.0.0.0         255.255.255.0   U     0      0        0 tun0

Как я могу заставить это работать?

[РЕДАКТИРОВАТЬ] Еще немного контекста по варианту использования: мне нужно настроить VPN для подразделения, чтобы домашние компьютеры их пользователей machine B может получить доступ к сторонним ресурсам, которые ограничивают доступ на основе IP-адреса. Доступ к machine A не заблокирован, но в организации есть как минимум два уровня NAT / брандмауэров, администраторы которых не хотят изменять свои настройки, чтобы помочь с входящими подключениями. Поэтому мы хотим разработать рабочее решение, используя machine C это может быть VPS в качестве сервера VPN. Существует официальная служба VPN, но, поскольку она открыта для определенных внешних участников, сторонний поставщик не желает предоставлять свой IP-доступ.

В принципе, настройка должна быть похожа на RoutedLans, за исключением того, что мы не можем просто установить machine A обрабатывать 0.0.0.0. Этот SF ответ объясняет, почему пакеты не могут быть отправлены через другого клиента в качестве шлюза с использованием интерфейса TUN. Однако есть обходной путь, согласно первому комментарию к этому ответ.

На machine C:

  1. Добавьте в конфигурацию сервера следующее:
topology subnet
client-to-client

route 1.0.0.0 255.0.0.0
route 2.0.0.0 254.0.0.0
route 4.0.0.0 252.0.0.0
route 8.0.0.0 248.0.0.0
route 16.0.0.0 240.0.0.0
route 32.0.0.0 224.0.0.0
route 64.0.0.0 192.0.0.0
route 128.0.0.0 128.0.0.0

push "route 1.0.0.0 255.0.0.0"
push "route 2.0.0.0 254.0.0.0"
push "route 4.0.0.0 252.0.0.0"
push "route 8.0.0.0 248.0.0.0"
push "route 16.0.0.0 240.0.0.0"
push "route 32.0.0.0 224.0.0.0"
push "route 64.0.0.0 192.0.0.0"
push "route 128.0.0.0 128.0.0.0"
  1. Установите iroutes и статический IP-адрес для machine A в client-config-dir.
ifconfig-push 192.168.255.2 255.255.255.0
push "route 192.168.255.0 255.255.255.0 192.168.255.1"

iroute 1.0.0.0 255.0.0.0
iroute 2.0.0.0 254.0.0.0
iroute 4.0.0.0 252.0.0.0
iroute 8.0.0.0 248.0.0.0
iroute 16.0.0.0 240.0.0.0
iroute 32.0.0.0 224.0.0.0
iroute 64.0.0.0 192.0.0.0
iroute 128.0.0.0 128.0.0.0

На machine A:

  1. В HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\, устанавливать IPEnableRouter=1.

  2. Установить сервис Routing and Remote Access к Automatic и убедитесь, что он запущен.

  3. Настройте сетевой адаптер с доступом в Интернет, чтобы разрешить совместное использование от адаптера OpenVPN TAP. Похоже, что совместное использование необходимо отключать и снова включать при каждой перезагрузке машины.

На machine B: удостовериться redirect-gateway def1 находится в конфигурации клиента.