Acesso externo direto HTTPS + Acesso interno HTTP: Duck DNS + NGINX

Este tutorial mostra como configurar o acesso externo com HTTPS e manter o acesso interno com HTTP (pelo navegador e aplicativo).

Isso resolve um erro comum no aplicativo que acontecem com muitos, que é o não reconhecimento dos certificados SSL gerados para o endereço Duck DNS quanto está acessando via rede local prejudicando o acesso pelo aplicativo e a atualização dos sensores do smartphone quando conectado na rede local.

1) Verificando se você está fora de uma rede CGNAT:

  • a) Verifique o endereço IP da interface WAN do seu modem (IPv4 Público):

Neste exemplo vamos assumir que seja 189.1.1.136.

  • c) Se o endereço IP mostrado no roteador for igual ao endereço IP mostrado no site, o seu endereço IP é público e você conseguirá o acesso externo.
  • d) Caso os endereços IP mostrados no roteador e no site forem diferentes você não conseguirá acesso externo usando o Duck DNS. Verifique o tópico Acesso externo ao seu Home Assistant: Diversas formas! para verificar a melhor alternativa para você.

2. Criando um domínio do Duck DNS:

  • b) Crie um endereço para seu Home Assistant e pegue o token que irá mostrar na tela.
    Exemplo: minhacasa.duckdns.org

3) Redirecionando a porta no seu modem:

Esse procedimento varia de acordo com o modelo do modem, as principais informações são:

  • Protocolo: TCP
  • Porta Externa: 8443
  • Porta Interna: 443
  • Endereço IP Interno: 192.168.1.55 (alterar para o endereço IP do seu servidor do home assistant).Segue um exemplo de configuração no modem Askey utilizado pela VIVO (isso vai mudar de acordo com cada roteador), mas a lógica é a mesma: redirecionar a porta 8443 para a porta 443 do IP do seu Home Assistant.

4) Instalando e configurando o DuckDNS:

  • a) Instalação: Acesse a Add-on Store e localize o Duck DNS, clique nele e depois no botão instalar.

Vá em Configurações, clique em Add-ons, Backups e Supervisor.

Clique em Loja de Add-ons.

Procure o Duck DNS.

  • b) Configuração: Acesse a guia Configurações do Duck DNS e substitua pelo código abaixo:

Código:

 lets_encrypt:
  accept_terms: true
  certfile: fullchain.pem
  keyfile: privkey.pem
  algo: secp384r1
 token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 domains:
   - zzzzzzzz.duckdns.org
 aliases: []
 seconds: 300

Substitua o token e atualize o domínio com as informações do item 2.

  • c) Reinicie o add-on Duck DNS.

5) Instalando e Configurando o NGINX Home Assistant SSL proxy:

  • a) Instalação: Acesse a Add-on Store e localize o NGINX Home Assistant SSL proxy, clique nele e depois no botão instalar:

Vá em Configurações, clique em Add-ons, Backups e Supervisor.

Clique em Loja de Add-ons.

Procure o NGINX.

  • b) Configuração: Acesse a guia Configurações do NGINX Home Assistant SSL proxy e faça as seguintes alterações:

    1. Altere o código incluindo o domínio do Duck DNS criado no item 2:
 domain: dominio.duckdns.org
 certfile: fullchain.pem
 keyfile: privkey.pem
 hsts: max-age=31536000; includeSubDomains
 cloudflare: false
 customize:
   active: false
   default: nginx_proxy_default*.conf
servers: nginx_proxy/*.conf
  1. Preencha a porta 443 na configuração de rede.

6) Alterando as configurações do Home Asssistant:

  • a) Remova as linhas abaixo do seu arquivo de configuração (config/configuration.yaml) se elas existirem:
http:
  ssl_certificate: /ssl/fullchain.pem
  ssl_key: /ssl/privkey.pem
  • b) Adicione as seguintes linhas ao seu arquivo de configuração (config/configuration.yaml):
http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 172.30.33.0/24
    - 192.168.0.0/16 #Altere os primeiros dois números para os do endereço IP da sua rede (192 e 168).
  • c) Configure as URL interna e externas de acesso ao seu Home Assistant por uma das opções a seguir:
    • Opção 1: Inclua as informação pela interface em Configurações > Geral, alterando o endereço IP do seu Home Assistant e o domínio do seu Duck DNS):image
    • Opção 2: Adicione as seguintes linhas ao seu arquivo de configuração (config/configuration.uaml), alterando o endereço IP do seu Home Assistant e o domínio do seu Duck DNS):
homeassistant:
  internal_url: "http://192.168.1.55:8123"
  external_url: "https://dominio.duckdns.org:8443"

7) Reinicie o Home Assistant.

Reinicie o Home Assitant para as configurações entrarem em vigor.

8) Configurando o aplicativo:

Configure as URLs de acesso do aplicativo e as redes wifi:

  • Acesso externo: Usar HTTPS e a porta 8443.
  • Acesso Interno: Usar HTTP e a porta 8123.
  • Configurar em quais redes wifi deverá ser usado a URL de acesso interno (incluir todas as redes wifi que você usa na sua casa).

8) Testes de verificação:

  1. Acesse o Home Assistant pela sua rede local no navegador:
  • Usar HTTP e a porta 8123.
  • URL a ser utilizada: http://192.168.1.55:8123/ (alterar para o IP do seu Home Assistant)Não deve apresentar mensagem de erro de certificado SSL.
  1. Acesse o Home Assistant externamente no navegador:
  1. Acesse o Home Assistant pela sua rede local através do aplicativo do celular:
  • Usar HTTP e a porta 8123.
  • URL a ser utilizada: http://192.168.1.55:8123/ (alterar para o IP do seu Home Assistant)
  • Configurar redes wifi conforme item 7.Não deve apresentar mensagem de erro de certificado SSL.
  1. Acesse o Home Assistant externamente através do aplicativo do celular:

9) URL para utilização em integrações externas (exeplo: Alexa, Google, etc):

5 curtidas

Olá @douglasit o meu home assistant não carrega mais depois do passo 6 item b. Fica com a tela iniciando e não abre nada. Nem pela porta 8123 nem pela 8443.
Quando eu acesso o arquivo configuration pelo samba share e volto a configuraçao anterior o HA volta a fucnionar
Screenshot_1

Para o entender onde pode estar o erro, me diga qual o IP local do seu Home Assistant, o IP local do computador que você está tentando acessar e como está colocando o código no arquivo configuration.yaml quando não está conseguindo acessar.

1 curtida

O código que eu estou colocando é o do tutorial:

http:
  use_x_forwarded_for: true
  trusted_proxies:
   - 172.30.33.0/24
   - 192.168.0.0/16
IP do Home Assistant é 192.168.68.122
IP da minha máquina é 192.168.68.121

Uso nginx com duckdns assim:

# nginx
http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 172.30.33.0/24

# duckdns.org (se usar somente o duckdns sem nginx, descomente as 4 linhas abaixo)
#http:
#  server_port: 8123
#  ssl_certificate: /ssl/fullchain.pem
#  ssl_key: /ssl/privkey.pem

homeassistant:
  internal_url: http://192.168.1.100:8123
  external_url: https://xxxxx.duckdns.org:9999

Desconfio que o seu erro é na identação do código, teste copiar e colar este código exatamente igual no seu arquivo configuration.yaml subsituindo esse seu:

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 172.30.33.0/24
    - 192.168.0.0/16
1 curtida

Só que como você está usando não consegue usar o aplicativo com o endereço IP local, né?

Acesso com o ip local normalmente.

1 curtida

Vou conferir a digitação novamente, eu já tinha visto isso… Mas eu consegui usar o duckDNS sem o NGINX. Se não precisar vou deixar sem ele. Mas muito obrigado.

Olá pessoal.
Uso router da vivo, porém com tudo de wifi desligado nele para sair um cabo de rede do roteador, ligar num google wifi e esse sim fazer a distribuição de IPs.
Faço isso pq tenho 3 google wifi em casa, e então coloco um cabo de rede do roteador da vivo para o primeiro google wifi para deixá-lo fazer o papel de DHCP distribuindo os IPs, e então desse google wifi sai um cabo de rede q vai para um hub comum e então para outros aparelhos (tvs etc) assim como os outros dois google wifi.
Dessa forma eu tenho um IP interno no router da Vivo e outro range de IPs q o Google Wifi faz, q seria a minha rede propriamente dita (de onde saem os IPs dos aparelhos), porém essa rede está atrás da rede local primária da Vivo. Não estou achando um modo de configurar isso corretamente.
Alguém tem alguma luz?

Por exemplo… no roteador da vivo o IP do Google Wifi é:
192.168.15.100

No Google Wifi a rede montada é em cima de outro IP e o IP do HA é:
192.168.85.20

Obrigado.

Galera, boa noite!

Eu utilizava bem o DuckDNS há muitos anos atrás,
Mas tive que assinar o NabuCasa após trocar o provedor de internet, pois utilizava CGNAT.

Hoje voltei para um provedor de internet com o IP público,
Segui o tutorial correntamente, porem não consigo acesso externo

Aguém sabe o que pode estar ocorrendo?

Portas direcionadas?
Duckdns rodando normal?
Configuração de encriptação salvo no yaml e HA reiniciado?

1 curtida

Sim, tudo certinho!

Achei estranho não estar acessando

1 curtida

Mostre sua configuração http: do arquivo configuration.yaml e dos DuckDNS e NGINX para que conseguimos identificar algo que possa estar causando o erro.

config http:
http

nginx:
nginx

duckdns:
duckdns

ip publico:
ip roteador

porta:

1 curtida

confirmação porta aberta

O ip da sua rede é 192.168.1.0

Não uso NGINX, não sei se tem tem relação. Não vi a declaração de chave e certificado no http do config.

Como só uso o Duckdns, declaro eles e sempre utilizo a URL.

1 curtida

tambem tentei só utilizar o DuckDNS sem o NGINX e não deu certo

estou pensando em algum problema de config no roteador :thinking: