Итак, моя конечная цель - использовать 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.