У меня есть экземпляр 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
раздел:
-A INPUT -p udp --dport 1194 -j ACCEPT
-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.