Туннелирование сервера LEMP через экземпляр оракула с помощью wireguard. Не удается получить сертификаты Nginx Certbot на сервере LEMP. Как отлаживать?

У меня дома есть сервер LEMP с Ubuntu 22.02 и облачный экземпляр Oracle с Ubuntu 20.04. Облачный экземпляр Oracle действует как сервер Wireguard. Домашний сервер LEMP действует как клиент Wireguard и туннелируется через сервер Oracle, чтобы получить IP-адрес, отличный от моего домашнего IP-адреса. Я настроил эту конфигурацию клиента/сервера Wireguard на этот учебник Linuxbabe.com. Клиент wireguard запущен и может успешно выполнить эхо-запрос на сервер Oracle. Сервер LEMP (клиент Wireguard) также успешно разрешается в общедоступный IP-адрес серверов Oracle. Я также установил openresolv на VPN-клиент и bind9 на VPN-сервер, чтобы использовать DNS экземпляра Oracle с сервера LEMP (клиент Wireguard). Мой регистратор доменов указывает DNS на тот же IP-адрес, что и мой сервер Oracle. Теперь я пытаюсь установить просодию на сервер LEMP и не могу получить сертификаты через плагин certbot nginx. Кажется, что что-то блокирует порт 80/443, а сам порт 80/443 не открыт. Когда я запускаю (на моем сервере LEMP) команду:

sudo certbot -v --nginx --agree-tos --redirect --hsts --staple-ocsp --email example@example.com -d chat.example.com

Я получаю следующий вывод ошибки:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Requesting a certificate for chat.example.com
Performing the following challenges:
http-01 challenge for chat.example.com
Waiting for verification...
Challenge failed for domain chat.example.com
http-01 challenge for chat.example.com

Certbot failed to authenticate some domains (authenticator: nginx). The Certificate Authority reported these problems:
  Domain: chat.example.com
  Type:   connection
  Detail: 150.136.56.232: Fetching http://chat.example.com/.well-known/acme-challenge/GlzBhvxB_hDYefMW48qaHq3I-qc_NArj7VWml54bofM: Connection refused

Hint: The Certificate Authority failed to verify the temporary nginx configuration changes made by Certbot. Ensure the listed domains point to this nginx server and that it is accessible from the internet.

Cleaning up challenges
Some challenges have failed.
Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.

Я использую UFW в качестве брандмауэра, и мой статус UFW на сервере LEMP (клиент VPN):

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    my.local.lan.ip/24
[ 2] 43211/tcp                  ALLOW IN    my.local.lan.ip/24
[ 3] 5222,5269/tcp              ALLOW IN    Anywhere
[ 4] 80,443/tcp                 ALLOW IN    Anywhere
[ 5] 5222,5269/tcp (v6)         ALLOW IN    Anywhere (v6)
[ 6] 80,443/tcp (v6)            ALLOW IN    Anywhere (v6)

Мой статус UFW в экземпляре Oracle Cloud:

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] Anywhere                   ALLOW IN    10.10.10.0/24
[ 2] 22/tcp                     ALLOW IN    my.home.public.ip
[ 3] 22/tcp                     ALLOW IN    my.work.public.ip
[ 4] 5222,5269/tcp              ALLOW IN    Anywhere
[ 5] 51820/udp                  ALLOW IN    my.home.public.ip
[ 6] 80,443/tcp                 ALLOW IN    Anywhere
[ 7] 5222,5269/tcp (v6)         ALLOW IN    Anywhere (v6)
[ 8] 80,443/tcp (v6)            ALLOW IN    Anywhere (v6)

Порт 51820/udp — мой порт wireguard как для экземпляра Oracle, так и для сервера Lemp. Я также перенаправил свой общедоступный IP-адрес в экземпляре Oracle клиенту VPN, чтобы клиент мог отправлять и получать данные через тот же общедоступный порт, который использует экземпляр Oracle. Ниже мой файл /etc/ufw/before.rules. Модификации переадресации портов, которые я сделал, находятся под комментариями под названием «Linuxbabe…».

#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#

# Don't delete these required lines, otherwise there will be errors
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
# End required lines


# allow all on loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT

# quickly process packets for which we already have a connection
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# drop INVALID packets (logs these in loglevel medium and higher)
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP

# ok icmp codes for INPUT
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT

# ok icmp code for FORWARD
-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT

## Linuxbabe tutorial
# allow forwarding for trusted network
-A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT

# allow dhcp client to work
-A ufw-before-input -p udp --sport 67 --dport 68 -j ACCEPT

#
# ufw-not-local
#
-A ufw-before-input -j ufw-not-local

# if LOCAL, RETURN
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN

# if MULTICAST, RETURN
-A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN

# if BROADCAST, RETURN
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN

# all other non-local packets are dropped
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
-A ufw-not-local -j DROP

# allow MULTICAST mDNS for service discovery (be sure the MULTICAST line above
# is uncommented)
-A ufw-before-input -p udp -d 224.0.0.251 --dport 5353 -j ACCEPT

# allow MULTICAST UPnP for service discovery (be sure the MULTICAST line above
# is uncommented)
-A ufw-before-input -p udp -d 239.255.255.250 --dport 1900 -j ACCEPT

# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT

### Linuxbabe - UFW Tutorial
## NAT table rules
*nat
# Nat Pre-Routing
:PREROUTING ACCEPT [0:0]
# !Http! Forward oracle.server.public.ip (Server Public IP) TCP port 80 to 10.10.10.2:80 (VPN Client IP)
-A PREROUTING -i ens3 -d oracle.server.public.ip  -p tcp --dport 80 -j DNAT --to-destination 10.10.10.2:80

# !HTTPS! Forward oracle.server.public.ip (Server Public IP) TCP port 443 to 10.10.10.2:443 (VPN Client IP)
-A PREROUTING -i ens3 -d oracle.server.public.ip  -p tcp --dport 443 -j DNAT --to-destination 10.10.10.2:443

# !PROSODY-5222! Forward oracle.server.public.ip (Server Public IP) TCP port 5222 to 10.10.10.2:5222 (VPN Client IP)
-A PREROUTING -i ens3 -d oracle.server.public.ip  -p tcp --dport 5222 -j DNAT --to-destination 10.10.10.2:5222

# !PROSODY-5269! Forward oracle.server.public.ip (Server Public IP) TCP port 5269 to 10.10.10.2:5269 (VPN Client IP)
-A PREROUTING -i ens3 -d oracle.server.public.ip  -p tcp --dport 5269 -j DNAT --to-destination 10.10.10.2:5269

# !PROSODY-BOSH-5280! Forward oracle.server.public.ip (Server Public IP) TCP port 5280 to 10.10.10.2:5280 (VPN Client IP)
-A PREROUTING -i ens3 -d oracle.server.public.ip  -p tcp --dport 5280 -j DNAT --to-destination 10.10.10.2:5280

# !PROSODY-BOSH-5281! Forward oracle.server.public.ip (Server Public IP) TCP port 5281 to 10.10.10.2:5281 (VPN Client IP)
-A PREROUTING -i ens3 -d oracle.server.public.ip  -p tcp --dport 5281 -j DNAT --to-destination 10.10.10.2:5281
COMMIT

### Linuxbabe - Wireguard Tutorial
# Nat Postrouting
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.10.10.0/24 -o ens3 -j MASQUERADE

# End each table with the 'COMMIT' line or these rules won't be processed
COMMIT

Мой /etc/nginx/nginx.conf файл на сервере LEMP (клиент wireguard) выглядит так:

#user  nginx;
user www-data;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

Мой /etc/nginx/conf.d/prosody.conf файл на сервере LEMP (VPN-клиент) выглядит так:

server {
      listen 80;
      listen [::]:80;
      server_name chat.example.com;

      root /var/www/prosody/;

      location ~ /.well-known/acme-challenge {
         allow all;
      }
}

Наконец, я включил IP-переадресацию на сервере Oracle, раскомментировав строку net.ipv4.ip_forward = 1 в /etc/sysctl.conf.

После всего этого мой сервер LEMP, похоже, успешно использует туннель VPN-сервера экземпляра Oracle, ОДНАКО, он все еще не может получить сертификаты от cerbot с помощью файла конфигурации prosody.conf nginx. Насколько я могу судить, со всеми исследованиями, которые я провел, эта настройка (наиболее важно правила переадресации VPN в before.rules) должна успешно позволить моему серверу LEMP получать сертификаты с использованием IP-адреса экземпляра Oracle. НО ТАК НЕ ДЕЛАЕТ!

Итак, мой вопрос: что я должен сделать, чтобы отладить это, что блокирует порт 80/443 моих серверов LEMP, и что я должен сделать, чтобы успешно получить сертификаты certbot для просодии, используя общедоступный IP-адрес моего экземпляра Oracle?

nginx ubuntu oracle certbot wireguard

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *