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

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

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

Машина A работает под управлением Windows и имеет IPEnabledRouter = 1 установлен в HKLM \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters \ ,Служба Маршрутизация и удаленный доступ настроена на Автоматически и работает, а сетевой адаптер с доступом в Интернет настроен на разрешение совместного использования с адаптера OpenVPN TAP. Ему назначено 192.168.255.2 .

компьютер 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

С машины B я могу пинговать машину 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

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

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

Network Diagram

1
задан 17 August 2019 в 06:09
1 ответ

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

На машине 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 для машины 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

On machine A:

  1. In HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\, set IPEnabledRouter=1.

  2. Установите службу Маршрутизация и удаленный доступ на Автоматический и убедитесь, что он работает.

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

На машине B: убедитесь, что redirect-gateway def1 находится в клиентской конфигурации.

.
1
ответ дан 3 December 2019 в 23:02

Теги

Похожие вопросы