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

Сервер OpenVPN на экземпляре Oracle Cloud Computing: проблемы с маршрутизацией

У меня есть экземпляр Ubuntu 20.04 LTS, работающий на «бесплатном уровне» Oracle Cloud. Я установил OpenVPN на этой виртуальной машине после это руководство (это на немецком языке). Порт брандмауэра 1194 / UDP открыт, перенаправление IPv4 настроено правильно (как в /etc/sysctl.conf И в /etc/default/ufw, UFW также выполняет пересылку в /etc/ufw/before.rules с этим магическим заклинанием:

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to ens3
-A POSTROUTING -s 10.27.0.0/8 -o ens3 -j MASQUERADE
COMMIT
# END OPENVPN RULES

ifconfig вывод на сервер:

ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9000
        inet 10.0.0.4  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::200:17ff:fe02:52db  prefixlen 64  scopeid 0x20<link>
        ether 00:00:17:02:52:db  txqueuelen 1000  (Ethernet)
[....]
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 10.27.0.1  netmask 255.255.255.0  destination 10.27.0.1
        inet6 fe80::b07f:586a:c721:fddb  prefixlen 64  scopeid 0x20<link>

Выглядит хорошо. Проблема в том, что клиент не может подключиться к серверу, в журнале написано «Ошибка TLS: не удалось согласовать ключ TLS в течение 60 секунд».

Когда я бегу sudo tcpdump -ni ens3 udp and port 1194, Я вижу, что пакеты приходят от клиента (IP-адрес "X.X.X.X"):

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 
listening on ens3, link-type EN10MB (Ethernet), capture size 262144 bytes
14:18:08.024761 IP X.X.X.X.20800 > 10.0.0.4.1194: UDP, length 54

Когда я сканирую сервер OpenVPN с помощью nmap:

sudo nmap -sU -p 1194 problematic.server.ip.address

тогда порт 1194 / UDP определяется как filtered. Которое значит что nmap обнаружил ошибку недоступности ICMP согласно "книга Nmap".

К счастью, у меня есть еще один сервер OpenVPN на платном VPS, который годами работал нормально, я просканировал его порт 1194 / UDP, и диагностика была open|filtered.

Я подозреваю, что проблема связана с тем, как виртуальные сети настроены в Oracle Cloud. Моя виртуальная машина имеет IP-адрес 10.0.0.4, поэтому конфигурация сервера OpenVPN содержит запись listen 10.0.0.4. Скорее всего, отсутствует какая-то настройка маршрутизации, поэтому сервер не может ответить на запрос подключения клиента.

У меня вопрос: кто-то успешно настроил сервер OpenVPN в облаке Oracle? И если да, то какой дополнительный шаг настройки нужно было выполнить?

FWIW, я установил флажок «Пропустить проверку источника / назначения» в разделе «Сведения об экземпляре»> «Подключенные виртуальные сетевые адаптеры»> «Изменить» в графическом интерфейсе веб-управления Oracle Cloud. В противном случае настройка сети "стандартная".

Отвечая на свой вопрос:

Проблема заключалась в том, как Oracle настраивал свои облачные образы. Решающий намек пришел от этот блог разработчика PHP: им не удалось получить доступ к порту 80 (!) на экземпляре Oracle Cloud. Их решение состояло в том, чтобы «стереть» таблицы IP.

Я выбрал менее радикальное решение. Образ Ubuntu, предоставленный Oracle, использует пакет Debian iptables-persistent для сохранения таблиц IP между перезагрузками (см. этот пост UNIX StackExchange). Я просмотрел /etc/iptables/rules.v4 файл, в котором хранятся настройки, и выполнил следующие изменения в *filter раздел:

  1. Добавлена ​​следующая строка для разрешения входящего UDP-трафика на порт 1194: -A INPUT -p udp --dport 1194 -j ACCEPT
  2. Закомментировал строку -A FORWARD -j REJECT --reject-with icmp-host-prohibited и разрешена переадресация IP -A FORWARD -j ACCEPT

Теперь полный раздел выглядит так:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [463:49013]
:InstanceServices - [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p udp --sport 123 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
### OpenVPN rule
-A INPUT -p udp --dport 1194 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
### Let everything be forwarded
-A FORWARD -j ACCEPT
### -A FORWARD -j REJECT --reject-with icmp-host-prohibited

«Активация» изменений:

/sbin/iptables-restore < /etc/iptables/rules.v4

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

Установите правило выхода VCN. Гамбургер -> Сеть -> Виртуальные облачные сети. Щелкните VCN, Списки безопасности, затем «Список безопасности по умолчанию» (если вы не назвали его другим именем).

Добавьте правило входа, разрешающее порт назначения 1194 и правило выхода для порта источника 1194.