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

Проблема с межсайтовым OpenVPN

Итак, моя конечная цель - использовать OpenVPN для подключения к удаленной IP-камере. Причина, по которой я иду по пути OpenVPN, состоит в том, чтобы попытаться преодолеть NAT операторского уровня, который мешает мне выполнять переадресацию портов и иметь статический IP-адрес, не платя $ $ $ каждый месяц за привилегию.

Ниже показано, как выглядит топология. Теперь я могу пинговать устройства в локальной сети сайта A (192.168.1.0) как с сайта B, так и с сайта C, так что это хорошо и доказывает, что VPN работает.

Но я не могу проверить связь с IP-камерой, которая находится на сайте B (192.168.2.0), ни с сайта A, ни с сайта B, что является моей конечной целью.

Я все еще не на 100% уверен, что моя конфигурация верна или что-то упустил.

net.ipv4.ip_forward = 1 включен как на сервере OpenVPN (Debian 8), так и на Raspberry Pi.

Еще я обдумывал, нужно ли мне устанавливать шлюз по умолчанию для IP-камер в соответствии с IP-адресом Raspberry Pi?

Топология:

Конфигурация сервера

port 1194
proto udp
dev tun
topology subnet
mode server
tls-server
server 10.8.0.0 255.255.255.0
push "dhcp-option DNS 8.8.8.8"
client-config-dir ccd
client-to-client
route 192.168.2.0 255.255.255.0 10.8.0.3
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
keepalive 10 120
comp-lzo
user nobody
group nogroup
daemon
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0
cipher AES-128-CBC
comp-lzo
persist-key
persist-tun
status /var/log/openvpn-status.log 20
log /var/log/openvpn.log
verb 3

/ и т. д. / openvpn / ccd / flexo_client

push "route 192.168.1.0 255.255.255.0 10.8.0.1"
iroute 192.168.2.0 255.255.255.0[/oconf]

конфигурация клиента

client
dev tun
proto udp
remote x.x.x.x 1194
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ns-cert-type server
key-direction 1
cipher AES-128-CBC
comp-lzo
verb 1
mute 20
topology subnet
ca - XML
cert - XML
key -XML
tls-auth - XML

Таблица маршрутизации на сервере OpenVPN - Сайт A

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use   Iface
0.0.0.0         192.168.1.254   0.0.0.0         UG    0      0        0 eth0
10.8.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.2.0     10.8.0.3        255.255.255.0   UG    0      0        0 tun0

Таблица маршрутизации Raspberry Pi - сайт B

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use      Iface
0.0.0.0         192.168.2.1     0.0.0.0         UG    303    0        0 wlan0
10.8.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun0
192.168.2.0     0.0.0.0         255.255.255.0   U     303    0        0 wlan0

РЕДАКТИРОВАТЬ:

Статические маршруты на маршрутизаторе (192.168.1.254) - Сайт A

Destination     Gateway         Genmask
192.168.2.0     192.168.1.143   255.255.255.0
10.8.0.0        192.168.1.143   255.255.255.0

Установка шлюза IP-камеры по умолчанию на IP-адрес Raspberry Pi должна сделать его доступным, по крайней мере, из подсети vpn (в качестве последнего решения, если вы не можете определять маршруты на своем маршрутизаторе). В качестве альтернативы вы также можете добавить маршруты снизу (сайт B) к IP-камере, если это возможно.

С точки зрения сети, проще добавить маршруты в таблицы маршрутизации ваших маршрутизаторов, что сделает доступными друг для друга все ваши сети, а не только IP-камеру.

Чтобы быть уверенным (это случилось со мной), убедитесь, что у вас нет конфликтующих правил брандмауэра на сервере Debian или Raspberry Pi.

Я протестировал вашу конфигурацию, и она должна работать, если вы добавите эти маршруты:

Добавьте маршруты к маршрутизатору на сайте B

Destination        Gateway             Genmask
192.168.1.0        192.168.2.254       255.255.255.0
10.8.0.0           192.168.2.254       255.255.255.0     (optional)

Второй маршрут необходим только в том случае, если какой-либо другой сервис на сервере openvpn должен достигнуть клиентов на сайте B или клиентам на сайте B необходимо достичь этих сервисов через 10.8.0.1 IP напрямую.

Добавьте маршруты к маршрутизатору на сайте A

Destination        Gateway             Genmask
192.168.2.0        192.168.1.143       255.255.255.0
10.8.0.0           192.168.1.143       255.255.255.0     (optional)

Второй маршрут необходим только в том случае, если какой-либо другой сервис на Raspberry Pi должен достигнуть клиентов на сайте A или клиентов на сайте A необходимо достичь этих сервисов через 10.8.0.3 IP напрямую.

Мне не удалось полностью протестировать маршруты на сайте A, так как мой сервер openvpn работает на маршрутизаторе.

Пояснение: когда IP-камера (или любой другой клиент на сайте B) получает пакет из подсети openvpn или из подсети сайта A, у нее нет маршрута к этим подсетям и направляет ответ на свой шлюз по умолчанию (сайт маршрутизатора B ). Этот шлюз (если он знает эти маршруты) направляет пакет на следующий «шлюз» (Raspberry Pi).

Вставьте фиксированный IP-адрес в Raspberry Pi, добавив следующую строку в свой /etc/openvpn/ccd/flexo_client файл (при условии flexo_client имя CN вашего сертификата Pi):

ifconfig-push 10.8.0.3 255.255.255.0

В противном случае вы можете потерять соединение, если ваш Pi получит другой IP-адрес, так как ваши маршруты больше не будут правильными.

Ниже приведены некоторые дополнительные подсказки к вашей конфигурации openvpn, но они не должны повлиять на вашу проблему.

В конфиге сервера директивы

mode server
tls-server

не требуются, поскольку они подразумеваются server 10.8.0.0 255.255.255.0 директиву и разверните ее следующим образом (см. справочную страницу):

mode server
tls-server
push "topology subnet"
ifconfig 10.8.0.1 255.255.255.0
ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0
push "route-gateway 10.8.0.1"

А также директива push "dhcp-option DNS 8.8.8.8" не требуется, если он вам действительно не нужен, поскольку клиенты, подключающиеся к вашему серверу openvpn, должны получать свои параметры DNS от своего DHCP-сервера. Он также влияет только на клиентов Windows, на клиентах, отличных от Windows, он будет сохранен в переменной среды для дополнительного использования в сценарии запуска.

В daemon директива также не должна быть обязательной (поправьте меня, если я ошибаюсь), поскольку она приведет к отправке всех сообщений и ошибок в средство системного журнала, что не имеет никакого эффекта, поскольку log директива заменяет его. См. Подробности на странице руководства.

В конфиге клиента заменить директиву

ns-cert-type server

по

remote-cert-tls server

если возможно, так как это устаревшее поведение и не включено по умолчанию в Easy-RSA 3, если вы не включите расширения «Netscape» перед подписанием сертификатов с вашим центром сертификации. Видеть openvpn вики страница

Еще я обдумывал, нужно ли мне устанавливать шлюз по умолчанию для IP-камер в соответствии с IP-адресом Raspberry Pi?

ДА. Только Raspberry Pi знает, куда направлять трафик, нацеленный на VPN.

Другой вариант - настройка iptables с помощью SNAT / MASQUERADE на Raspberry Pi, поэтому каждое соединение из сети VPN будет иметь исходный IP-адрес, установленный на IP-адрес Raspberry Pi.