OpenVPN-сервер для подключения клиентов ко второй сети

OpenVPN-сервер для подключения клиентов ко второй сети

У меня есть две изолированные домашние сети. Одна подключена к Интернету, а вторая — для отключенных устройств IoT.

Я подключил сервер Ubuntu к обеим этим сетям, используя отдельные сетевые карты.

Я проверил, что могу получить доступ к данным с устройств в обеих сетях с этого сервера (используя старый добрый метод curlдля получения http-запросов). И я также могу получить доступ к интернету с него.

Затем я установил OpenVPN и настроил его, следуя инструкциям изсерверное пространство.

Следующим шагом я настроил клиент и смог подключиться к этому VPN-серверу из Интернета.

Когда клиент подключен, он может получить доступ к Интернету и одной из внутренних сетей, но не к другой.

с vpn сервера, выполняя route -nя получаю:

0.0.0.0         12.12.1.1       0.0.0.0         UG    100    0        0 eno1
0.0.0.0         13.13.0.1       0.0.0.0         UG    200    0        0 eno2
10.8.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun0
12.12.1.0       0.0.0.0         255.255.255.0   U     100    0        0 eno1
12.12.1.1       0.0.0.0         255.255.255.255 UH    100    0        0 eno1
13.13.0.0       0.0.0.0         255.255.255.0   U     200    0        0 eno2
13.13.0.1       0.0.0.0         255.255.255.255 UH    200    0        0 eno2

Клиент VPN подключается к сети 10.8.0.0и ему назначается IP-адрес 10.8.0.2.

Подключенный vpn-клиент:

  • может получить доступ к сети12.12.1.0
  • может получить доступ к Интернету.
  • не могу получить доступ ни к одному IP-адресу из 13.13.0.0...

Чего не хватает в моих настройках, чтобы позволить клиентам VPN получить доступ ко второй сети?

Обновлять

Я попробовал добавить команды NAT из скрипта для eno2 (13.x), но это все равно не сработало... Я изменил созданный файл /etc/iptables/add-openvpn-rules.shследующим содержимым (часть перед пробелом была автоматически создана скриптом):

#!/bin/sh
iptables -t nat -I POSTROUTING 1 -s 10.8.0.0/24 -o eno1 -j MASQUERADE
iptables -I INPUT 1 -i tun0 -j ACCEPT
iptables -I FORWARD 1 -i eno1 -o tun0 -j ACCEPT
iptables -I FORWARD 1 -i tun0 -o eno1 -j ACCEPT
iptables -I INPUT 1 -i eno1 -p udp --dport 1194 -j ACCEPT

iptables -t nat -I POSTROUTING 1 -s 10.8.0.0/24 -o eno2 -j MASQUERADE
iptables -I FORWARD 1 -i eno2 -o tun0 -j ACCEPT
iptables -I FORWARD 1 -i tun0 -o eno2 -j ACCEPT
iptables -I INPUT 1 -i eno2 -p udp --dport 1194 -j ACCEPT

запустив, iptables -S после перезагрузки я получил следующее:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i eno2 -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -i eno1 -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -i tun0 -j ACCEPT
-A FORWARD -i tun0 -o eno2 -j ACCEPT
-A FORWARD -i eno2 -o tun0 -j ACCEPT
-A FORWARD -i tun0 -o eno1 -j ACCEPT
-A FORWARD -i eno1 -o tun0 -j ACCEPT

решение1

Во-первых, брандмауэр на VPN-сервере (т. е. цепочка iptables «FORWARD») должен разрешать отправку и получение пакетов.

Во-вторых, все ваши устройства должны иметь маршруты.назадк сети VPN, в противном случае они только получают пакеты от клиентов VPN, но не имеют возможности ответить на них.

Например, устройствам в сети 12.12.* (или, что чаще, не самим устройствам, а шлюзу этой сети) потребуется маршрут «10.8.0.0/24 через 12.12.1.1».

Если это невозможно, то альтернативой будет заставить VPN-сервер выполнять SNAT (то есть «маскировку» исходного адреса) между двумя сетями. С SNAT все пакеты от VPN-клиентов будутвыглядит какна самом деле они поступают с самого VPN-сервера (т. е. с 12.12.1.1), который в вашем случае находится в той же сети, что и ваши устройства, и, следовательно, это то, к чему устройства уже знают, как подключиться.

Похоже, что скрипт установки VPN, который вы использовали (который делаетмноговещей) фактически добавляет правила iptables SNAT для одного интерфейса; вы можете найти их в /etc/iptables/add-openvpn-rules.sh(строки 963-977в скрипте). Соответствующие правила выглядят так — с использованием MASQUERADEдействия iptables:

iptables -t nat -I POSTROUTING 1 -s 10.8.0.0/24 -o $NIC -j MASQUERADE

и, конечно же, правила, позволяющие пересылаемым пакетам проходить в целом:

iptables -I FORWARD 1 -i $NIC -o tun0 -j ACCEPT
iptables -I FORWARD 1 -i tun0 -o $NIC -j ACCEPT

Поскольку у вас есть две сети на двух интерфейсах, вам необходимо продублировать эти правила (или переписать их по-другому).

Связанный контент