Мой вариант использования: я хочу маршрутизировать весь Интернет-трафик с компьютера 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-доступ.
В принципе, настройка должна быть аналогична RoutedLans, за исключением того, что мы не можем просто настроить машину A
на работу с 0.0.0.0
. Этот SF answer объясняет, почему пакеты не могут быть отправлены через другого клиента в качестве шлюза, используя интерфейс TUN. Однако, существует обходной путь согласно первому комментарию к этому ответу.
На машине C
:
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"
машины 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
:
In HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\
, set IPEnabledRouter=1
.
Установите службу Маршрутизация и удаленный доступ
на Автоматический
и убедитесь, что он работает.
Установите сетевой адаптер с доступом в Интернет, чтобы разрешить совместный доступ с помощью TAP-адаптера OpenVPN. Похоже, что обмен должен быть отключен и снова включен каждый раз при перезагрузке машины.
На машине B
: убедитесь, что redirect-gateway def1
находится в клиентской конфигурации.