<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Raphael Borges</title>
    <description>The latest articles on DEV Community by Raphael Borges (@raphaborges).</description>
    <link>https://dev.to/raphaborges</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1026246%2Ff3e47f46-69e3-4f87-aa28-ab6283543bdf.jpeg</url>
      <title>DEV Community: Raphael Borges</title>
      <link>https://dev.to/raphaborges</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/raphaborges"/>
    <language>en</language>
    <item>
      <title>Como Resolver Erro no Boot de uma VM na OCI Devido a Problemas no fstab e Usuário Root Bloqueado</title>
      <dc:creator>Raphael Borges</dc:creator>
      <pubDate>Thu, 07 Aug 2025 13:17:10 +0000</pubDate>
      <link>https://dev.to/raphaborges/como-resolver-erro-no-boot-de-uma-vm-na-oci-devido-a-problemas-no-fstab-e-usuario-root-bloqueado-5kc</link>
      <guid>https://dev.to/raphaborges/como-resolver-erro-no-boot-de-uma-vm-na-oci-devido-a-problemas-no-fstab-e-usuario-root-bloqueado-5kc</guid>
      <description>&lt;p&gt;Um problema que me ocorreu ao trabalhar com máquinas virtuais na Oracle Cloud Infrastructure (OCI) é a falha no boot devido a erros no arquivo fstab, combinados com a impossibilidade de acessar o usuário root no modo de emergência/recuperação. Este artigo descreve um procedimento detalhado para corrigir essa situação utilizando o modo de usuário único via GRUB.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cenário do Problema
&lt;/h2&gt;

&lt;p&gt;A VM não inicializa corretamente porque o arquivo fstab contém um erro de digitação na configuração (defalits em vez de defaults). Além disso, o usuário root está bloqueado, impedindo acesso via modo de emergência/recuperação para corrigir o problema. Para resolver, é necessário iniciar a VM em modo de usuário único.&lt;/p&gt;

&lt;h2&gt;
  
  
  Passos para Resolver
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Acessar o Console da VM na OCI&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Conectar ao Shell Console pela interface da OCI para gerenciar a máquina diretamente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pare a VM utilizando a opção de Stop forçado.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reinicie a VM utilizando a opção de Start.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Modificar o GRUB para Iniciar em Modo de Usuário Único&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Durante o boot, pressione rapidamente a tecla 'e' para interromper o boot e acessar as opções do GRUB.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Com o cursor sobre opção de boot, pressione ‘e’ novamente para editar a Entrada do GRUB.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Alterar os parâmetros da linha que começa com linux para incluir:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rw &lt;span class="o"&gt;(&lt;/span&gt;para montar o sistema com permissão de leitura e escrita&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nv"&gt;init&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/bin/bash &lt;span class="o"&gt;(&lt;/span&gt;para iniciar o shell diretamente&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Exemplo atualizado:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;linux &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$root&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;/vmlinuz-5.15.0-210.163.7.el9uek.x86_64 &lt;span class="nv"&gt;root&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/mapper/ocivolume-root rw quiet &lt;span class="nv"&gt;LANG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;en_US.UTF-8 &lt;span class="nv"&gt;console&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;tty0 &lt;span class="nv"&gt;console&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ttyS0,115200 &lt;span class="nv"&gt;init&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/bin/bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pressione Ctrl+x ou F10 para inicializar a máquina com as alterações realizadas.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Corrigir o Arquivo fstab&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Após o boot em modo usuário único, promova-se a root:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;su -
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Criar um Backup do fstab:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; /etc/fstab /etc/fstab.bkp
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Editar o Arquivo fstab:&lt;br&gt;
Recrie o arquivo fstab utilizando comandos echo:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"/dev/mapper/ocivolume-root / xfs defaults 0 0"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /etc/fstab
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"UUID=&amp;lt;UUID&amp;gt; /boot xfs defaults 0 0"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/fstab
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"UUID=&amp;lt;UUID&amp;gt; /boot/efi vfat defaults,uid=0,gid=0,umask=077,shortname=winnt 0 2"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/fstab
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"/dev/mapper/ocivolume-oled /var/oled xfs defaults 0 0"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/fstab
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"tmpfs /dev/shm tmpfs defaults,nodev,nosuid,noexec 0 0"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/fstab
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"UUID=&amp;lt;UUID&amp;gt; /mnt/logs xfs defaults 0 0"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/fstab
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"/.swapfile none swap sw,comment=cloudconfig 0 0"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/fstab
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Reiniciar a VM&lt;br&gt;
Após corrigir o fstab, reinicie a máquina para verificar se o problema foi resolvido:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusão:
&lt;/h2&gt;

&lt;p&gt;Seguindo este procedimento, é possível corrigir o erro no fstab e outros problemas, recuperando o acesso à máquina virtual. Utilizando o modo de usuário único via GRUB em situações onde o acesso ao root está bloqueado e o sistema não inicializa corretamente.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Do you already know Digestabot?</title>
      <dc:creator>Raphael Borges</dc:creator>
      <pubDate>Wed, 27 Dec 2023 14:32:05 +0000</pubDate>
      <link>https://dev.to/raphaborges/do-you-already-know-digestabot-3n16</link>
      <guid>https://dev.to/raphaborges/do-you-already-know-digestabot-3n16</guid>
      <description>&lt;p&gt;In summary, Digestabot is a GitHub Action developed by Chainguard to keep your images always up-to-date, minimizing the risks of CVEs (Common Vulnerabilities and Exposures).&lt;/p&gt;

&lt;p&gt;Using the 'tag+digest' pattern, the Action opens a Pull Request (PR) to update the image in use, and the user only needs to approve the merge with the most recent version(s), not only from Chainguard but also from any other registry used in the repository.&lt;/p&gt;

&lt;p&gt;Consider the following configurations when utilizing Digestabot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Your images must follow the &lt;code&gt;&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;@sha256:&amp;lt;digest&amp;gt;&lt;/code&gt; pattern. For example, &lt;code&gt;cgr.dev/chainguard/nginx:latest@sha256:81bed54c9e507503766c0f8f030f869705dae486f37c2a003bb5b12bcfcc713f&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You need to authorize GitHub Actions to create Pull Requests in the &lt;code&gt;Settings -&amp;gt; Actions&lt;/code&gt; tab by selecting the option 'Allow GitHub Actions to create and approve pull requests.'&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now let's create the &lt;code&gt;digestabot.yml&lt;/code&gt; file in the &lt;code&gt;.github/workflows&lt;/code&gt; directory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Image digest update&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;workflow_dispatch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# Every day at 00:00 UTC&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;cron&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*"&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;image-update&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Image digest update&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt; &lt;span class="c1"&gt;# Write access to the repository&lt;/span&gt;
      &lt;span class="na"&gt;pull-requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt; &lt;span class="c1"&gt;# Permission to create pull requests&lt;/span&gt;
      &lt;span class="na"&gt;id-token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt; &lt;span class="c1"&gt;# It's necessary to create the `JWT` token&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;chainguard-dev/digestabot@v1.0.2&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
        &lt;span class="na"&gt;signoff&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="c1"&gt;# Add the email field to the commit&lt;/span&gt;
        &lt;span class="na"&gt;author&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;update-bot&lt;/span&gt; &lt;span class="c1"&gt;# Set the author of the commit&lt;/span&gt;
        &lt;span class="na"&gt;committer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;update-bot@example.com&lt;/span&gt; &lt;span class="c1"&gt;# Set the committer email&lt;/span&gt;
        &lt;span class="na"&gt;labels-for-pr&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;automated pr, kind/cleanup, release-note-none&lt;/span&gt; &lt;span class="c1"&gt;# Set the labels for the PR&lt;/span&gt;
        &lt;span class="na"&gt;branch-for-pr&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;update-digests&lt;/span&gt; &lt;span class="c1"&gt;# Set the branch name for the PR&lt;/span&gt;
        &lt;span class="na"&gt;title-for-pr&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Update images digests&lt;/span&gt; &lt;span class="c1"&gt;# Set the PR title&lt;/span&gt;
        &lt;span class="na"&gt;commit-message&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Update images digests&lt;/span&gt; &lt;span class="c1"&gt;# Set the commit message&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more information about Digestabot, please access the Action's link on the &lt;a href="https://github.com/marketplace/actions/update-the-image-digest"&gt;Marketplace&lt;/a&gt; or the &lt;a href="https://github.com/chainguard-dev/digestabot"&gt;official repository on GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>digestabot</category>
      <category>chainguard</category>
      <category>security</category>
      <category>container</category>
    </item>
    <item>
      <title>Você já conhece o Digestabot?</title>
      <dc:creator>Raphael Borges</dc:creator>
      <pubDate>Mon, 18 Dec 2023 13:00:00 +0000</pubDate>
      <link>https://dev.to/raphaborges/voce-ja-conhece-o-digestabot-787</link>
      <guid>https://dev.to/raphaborges/voce-ja-conhece-o-digestabot-787</guid>
      <description>&lt;p&gt;Em resumo, o Digestabot é uma GitHub Action desenvolvida pela Chainguard para manter suas imagens sempre atualizadas, com o objetivo de minimizar os riscos de CVE (Vulnerabilidades Comuns e Exposições, do inglês "Common Vulnerabilities and Exposures").&lt;/p&gt;

&lt;p&gt;Utilizando o padrão "tag+digest", a Action atualiza a imagem em uso e abre um Pull Request (PR) para que o usuário faça o merge com a(s) versão(ões) mais recente(s) da(s) imagem(ns) nao só da Chainguard, mas também de qualquer outro registry utilizado no repositório.&lt;/p&gt;

&lt;p&gt;Algumas configurações às quais você deve estar atento ao usar o Digestabot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Suas imagens devem seguir o padrão &lt;code&gt;&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;@sha256:&amp;lt;digest&amp;gt;&lt;/code&gt;. Por exemplo, &lt;code&gt;cgr.dev/chainguard/nginx:latest@sha256:81bed54c9e507503766c0f8f030f869705dae486f37c2a003bb5b12bcfcc713f&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;É necessário autorizar o GitHub Actions para criar Pull Requests na aba &lt;code&gt;Settings -&amp;gt; Actions&lt;/code&gt; marcando a opção &lt;code&gt;Allow GitHub Actions to create and approve pull requests&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para utilizar o Digestabot, vamos criar o arquivo &lt;code&gt;digestabot.yml&lt;/code&gt; em &lt;code&gt;.github/workflows&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Image digest update&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;workflow_dispatch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# Agendado para rodar todos os dias as 00:00&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;cron&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*"&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;image-update&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Image digest update&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt; &lt;span class="c1"&gt;# Permissão para escrever no repositório&lt;/span&gt;
      &lt;span class="na"&gt;pull-requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt; &lt;span class="c1"&gt;# Permissão para abrir PRs&lt;/span&gt;
      &lt;span class="na"&gt;id-token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt; &lt;span class="c1"&gt;# Necessário para solicitar o JWT (JSON Web Token)&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;chainguard-dev/digestabot@v1.0.2&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
        &lt;span class="na"&gt;signoff&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="c1"&gt;# Adiciona o campo email ao commit  &lt;/span&gt;
        &lt;span class="na"&gt;author&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;update-bot&lt;/span&gt; &lt;span class="c1"&gt;# Define o autor do commit&lt;/span&gt;
        &lt;span class="na"&gt;committer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;update-bot@example.com&lt;/span&gt; &lt;span class="c1"&gt;# Define o email do autor do commit&lt;/span&gt;
        &lt;span class="na"&gt;labels-for-pr&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;automated pr, kind/cleanup, release-note-none&lt;/span&gt; &lt;span class="c1"&gt;# Define as labels do PR&lt;/span&gt;
        &lt;span class="na"&gt;branch-for-pr&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;update-digests&lt;/span&gt; &lt;span class="c1"&gt;# Define o nome da branch do PR&lt;/span&gt;
        &lt;span class="na"&gt;title-for-pr&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Update images digests&lt;/span&gt; &lt;span class="c1"&gt;# Define o título do PR&lt;/span&gt;
        &lt;span class="na"&gt;commit-message&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Update images digests&lt;/span&gt; &lt;span class="c1"&gt;# Define a mensagem do commit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para mais informações sobre o Digestabot acesse o link da Action no &lt;a href="https://github.com/marketplace/actions/update-the-image-digest"&gt;Marketplace&lt;/a&gt; ou o &lt;a href="https://github.com/chainguard-dev/digestabot"&gt;repositório oficial no GitHub.&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>chainguard</category>
      <category>digestabot</category>
      <category>security</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>A custom action to deploy mdBook</title>
      <dc:creator>Raphael Borges</dc:creator>
      <pubDate>Tue, 23 May 2023 15:37:35 +0000</pubDate>
      <link>https://dev.to/raphaborges/a-custom-action-to-deploy-mdbook-n41</link>
      <guid>https://dev.to/raphaborges/a-custom-action-to-deploy-mdbook-n41</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;I built a Github action for automating the deployment of a compiled book.&lt;/p&gt;

&lt;h3&gt;
  
  
  Category Submission:
&lt;/h3&gt;

&lt;p&gt;DIY Deployments - DevOps &amp;amp; CI/CD&lt;/p&gt;

&lt;h3&gt;
  
  
  App Link
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/Rapha-Borges/mdBook-action"&gt;https://github.com/Rapha-Borges/mdBook-action&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgnt0or4qbh7sjh4o150y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgnt0or4qbh7sjh4o150y.png" alt="Screenshot of the Github Action" width="800" height="290"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Description
&lt;/h3&gt;

&lt;p&gt;This Github action is designed to be triggered when a push occurs on the "main" branch of a repository. It performs a series of steps within a job named "build" on the latest version of the Ubuntu operating system.&lt;/p&gt;

&lt;p&gt;The action utilizes a Docker container with the image "raphaelborges/mdbook:1.0.2" to compile a book located at the path "/github/workspace/book". It then executes a shell script named "copy.sh".&lt;/p&gt;

&lt;p&gt;The "copy.sh" script creates a worktree, sets Git configuration, deletes and clears the "gh-pages" branch, copies files from specified directories, commits the changes, and pushes them to the "gh-pages" branch on the remote repository.&lt;/p&gt;

&lt;p&gt;This action automates the process of compiling the book and deploying it to a designated location using custom settings, simplifying the workflow for users.&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Source Code
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/Rapha-Borges/mdBook-action"&gt;https://github.com/Rapha-Borges/mdBook-action&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Permissive License
&lt;/h3&gt;

&lt;p&gt;MIT License&lt;/p&gt;

&lt;h2&gt;
  
  
  Background (What made you decide to build this particular app? What inspired you?)
&lt;/h2&gt;

&lt;p&gt;I built this Github action to automate the deployment of ebooks using customized configurations that better meet the needs of the projects I am involved in. The motivation behind creating this action was to streamline the process and eliminate manual steps required for ebook deployment.&lt;/p&gt;

&lt;h3&gt;
  
  
  How I built it (How did you utilize GitHub Actions or GitHub Codespaces? Did you learn something new along the way? Pick up a new skill?)
&lt;/h3&gt;

&lt;p&gt;To build this Github action, I leveraged the power of GitHub Actions, which provides a flexible and robust platform for automating workflows. I utilized the "actions/checkout@v3" action to perform repository checkout and the "docker://" syntax to use a specific Docker container for compiling the book. The shell script, "copy.sh," was developed to handle the file copying and Git operations required for deployment.&lt;/p&gt;

&lt;p&gt;During the development process, I gained valuable experience in utilizing GitHub Actions to orchestrate CI/CD workflows. I learned about Docker integration within GitHub Actions, enabling seamless execution of tasks in isolated environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Additional Resources/Info
&lt;/h3&gt;

&lt;p&gt;For more information about this project, please refer to the official repository at [&lt;a href="https://github.com/Rapha-Borges/mdBook-action"&gt;https://github.com/Rapha-Borges/mdBook-action&lt;/a&gt;].&lt;/p&gt;

&lt;p&gt;Additionally, you can find examples of usage and implementation at the following links: [&lt;a href="https://github.com/badtuxx/DescomplicandoPrometheus"&gt;https://github.com/badtuxx/DescomplicandoPrometheus&lt;/a&gt;], [&lt;a href="https://github.com/rochacbruno/py2rs"&gt;https://github.com/rochacbruno/py2rs&lt;/a&gt;].&lt;/p&gt;

</description>
      <category>githubhack23</category>
    </item>
    <item>
      <title>Um servidor DNS Recursivo rápido, seguro e escalável</title>
      <dc:creator>Raphael Borges</dc:creator>
      <pubDate>Mon, 01 May 2023 21:06:36 +0000</pubDate>
      <link>https://dev.to/raphaborges/um-servidor-dns-recursivo-rapido-seguro-e-escalavel-28bo</link>
      <guid>https://dev.to/raphaborges/um-servidor-dns-recursivo-rapido-seguro-e-escalavel-28bo</guid>
      <description>&lt;h2&gt;
  
  
  O que é o Unbound?
&lt;/h2&gt;

&lt;p&gt;O Unbound é um servidor DNS recursivo que tem a capacidade de pesquisar informações de DNS em nome de seus clientes, permitindo que nomes de domínio sejam traduzidos em endereços IP. Projetado para ser rápido, seguro e escalável, o Unbound é uma solução de software livre que é frequentemente usado para melhorar a privacidade e segurança online. Além disso, ele possui uma arquitetura modular e pode ser configurado para suportar várias extensões, tornando-o altamente personalizável e flexível.&lt;/p&gt;

&lt;p&gt;Algumas das principais características e funcionalidades do Unbound incluem:&lt;/p&gt;

&lt;p&gt;Segurança: O Unbound é projetado para ser resistente a ataques de DNS spoofing e cache poisoning. Ele utiliza criptografia DNSSEC para garantir que as respostas DNS recebidas sejam autênticas e não foram modificadas durante a transmissão.&lt;/p&gt;

&lt;p&gt;Velocidade: O Unbound é otimizado para alto desempenho e baixa latência. Ele usa técnicas de caching e pre-fetching para minimizar o tempo de resposta e reduzir a sobrecarga do servidor.&lt;/p&gt;

&lt;p&gt;Escalabilidade: O Unbound é capaz de lidar com grandes volumes de consultas DNS simultâneas e pode ser facilmente escalado adicionando mais servidores.&lt;/p&gt;

&lt;p&gt;Flexibilidade: O Unbound é altamente configurável e pode ser personalizado para atender às necessidades específicas de um ambiente de rede. Ele suporta vários tipos de consultas DNS, incluindo consultas recursivas e consultas diretas.&lt;/p&gt;

&lt;p&gt;Fácil integração: O Unbound é compatível com vários sistemas operacionais, como Linux, FreeBSD, macOS e Windows. Ele também pode ser integrado com outros servidores DNS, como BIND e PowerDNS.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Como o Unbound funciona:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Recebimento de consultas: O Unbound recebe consultas DNS de seus clientes (usuários finais ou outros servidores DNS). Essas consultas incluem um nome de domínio que precisa ser resolvido em um endereço IP.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resolução recursiva: O Unbound inicia o processo de resolução recursiva, onde ele envia a consulta DNS para o servidor raiz (root server) responsável pelo domínio de nível superior (TLD) correspondente ao nome de domínio. O servidor raiz responde com uma lista de servidores DNS autoritativos para o TLD correspondente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Consulta aos servidores autoritativos: O Unbound envia a consulta DNS para um dos servidores DNS autoritativos listados pelo servidor raiz. O servidor autoritativo responde com um registro de recurso (RR) que contém informações sobre o nome de domínio, como um registro A (endereço IP) ou um registro MX (servidor de e-mail).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Caching: O Unbound armazena em cache a resposta DNS recebida do servidor autoritativo para acelerar consultas futuras para o mesmo nome de domínio. Isso ajuda a reduzir o tempo de resposta e a carga no servidor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Retorno da resposta: O Unbound retorna a resposta DNS ao cliente que iniciou a consulta original. O cliente agora tem o endereço IP correspondente ao nome de domínio que estava tentando resolver.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flg8g88h2iew5v1tg3z7n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flg8g88h2iew5v1tg3z7n.png" alt="Diagrama de funcionamento do Unbound"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;No diagrama acima, o cliente faz uma consulta DNS para o servidor Unbound. O servidor Unbound, em seguida, inicia o processo de resolução recursiva, enviando a consulta DNS para o servidor raiz responsável pelo TLD correspondente. O servidor raiz responde com uma lista de servidores DNS autoritativos para o TLD correspondente, que o servidor Unbound usa para consultar um servidor autoritativo específico. O servidor autoritativo responde com a resposta DNS contendo as informações solicitadas, que o servidor Unbound, em seguida, retorna ao cliente.&lt;/p&gt;

&lt;p&gt;É importante destacar que durante todo esse processo de resolução recursiva, o servidor Unbound utiliza seu cache local para armazenar as respostas de consultas anteriores. Isso significa que se o servidor Unbound já tiver a resposta em seu cache local, ele não precisará passar por todo o processo de consulta recursiva, o que torna o processo de resolução de consultas DNS muito mais rápido.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  DNSSEC (Domain Name System Security Extensions)
&lt;/h2&gt;

&lt;p&gt;O DNSSEC é uma extensão de segurança do DNS que foi projetada para proteger o DNS contra ataques de falsificação de DNS. O DNSSEC utiliza criptografia de chave pública para assinar digitalmente os registros DNS, permitindo que os clientes possam verificar se os registros DNS recebidos são autênticos e não foram adulterados.&lt;/p&gt;

&lt;p&gt;O Unbound pode verificar a autenticidade dos registros DNS usando DNSSEC. Quando um cliente faz uma consulta DNS, o Unbound envia a consulta para o servidor raiz responsável pelo TLD correspondente, que responde com uma lista de servidores DNS autoritativos para o TLD e chaves de assinatura DNSSEC. O Unbound usa as chaves de assinatura para verificar a autenticidade dos registros DNS recebidos dos servidores autoritativos.&lt;/p&gt;

&lt;p&gt;Se o registro DNS não for autêntico ou não puder ser verificado, o Unbound não irá retornar o registro para o cliente, garantindo a integridade e autenticidade das informações DNS. Isso ajuda a proteger os usuários contra ataques de falsificação de DNS e aumenta a segurança e confiabilidade do sistema de resolução de nomes de domínio.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Instalação do Unbound
&lt;/h2&gt;

&lt;p&gt;O Unbound pode ser configurado de três maneiras:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Como um DNS de cache recursivo simples, usando a porta UDP 53 sem criptografia.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Como um DNS sobre TLS, com cache recursivo DNS, usando a porta TCP 853 ENCRYPTED.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Como um DNS autoritativo, validador e de cache recursivo.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Para maior segurança, neste exemplo, utilizaremos a terceira configuração. O Unbound consultará recursivamente qualquer nome de host dos servidores DNS raiz dos quais não possui uma cópia em cache e validará as consultas usando DNSSEC e bits aleatórios codificados em 0x20 para evitar tentativas de falsificação. Além disso, esse servidor podera ser o DNS autorizado para alguns nomes de host em sua LAN.&lt;/p&gt;

&lt;p&gt;Para iniciar, algumas etapas de configuração são necessárias. Primeiramente, é preciso obter uma cópia atualizada da lista de servidores DNS raiz, denominada root.hints. Em seguida, é necessário obter a configuração da chave confiável raiz DNSSEC. Por fim, é preciso configurar quaisquer nomes de host e endereços IP de sua LAN. &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Instalando o Unbound
&lt;/h3&gt;

&lt;p&gt;O Unbound está disponível nos repositórios oficiais do Ubuntu. Para instalar o Unbound, execute o seguinte comando:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;unbound


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Configurando o Unbound
&lt;/h3&gt;

&lt;p&gt;O arquivo de configuração padrão do Unbound é &lt;code&gt;/etc/unbound/unbound.conf&lt;/code&gt;. Caso queira aprender mais sobre todas as opções de configuração disponíveis, o arquivo de configuração padrão vem com muitos comentários que explicam o que cada opção faz.&lt;/p&gt;

&lt;p&gt;Para este exemplo, vamos utilizar o arquivo de configuração &lt;a href="https://github.com/Rapha-Borges/Unbound-Servidor-DNS-Recursivo/blob/main/unbound.conf" rel="noopener noreferrer"&gt;unbound.conf&lt;/a&gt; que ficará no diretório &lt;code&gt;/etc/unbound/unbound.conf.d/&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/unbound/unbound.conf.d/unbound.conf


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Obtendo a lista de servidores DNS raiz
&lt;/h3&gt;

&lt;p&gt;A lista de servidores DNS raiz é um arquivo chamado &lt;code&gt;root.hints&lt;/code&gt; que contém os endereços IP dos servidores raiz. O Unbound usa esse arquivo para iniciar o processo de resolução recursiva. &lt;/p&gt;

&lt;p&gt;O arquivo root.hints pode ser obtido no site do IANA (Internet Assigned Numbers Authority) em &lt;a href="https://www.iana.org/domains/root/servers" rel="noopener noreferrer"&gt;https://www.iana.org/domains/root/servers&lt;/a&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

wget https://www.internic.net/domain/named.root &lt;span class="nt"&gt;-O&lt;/span&gt; /var/lib/unbound/root.hints


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Obtendo a configuração da chave confiável raiz DNSSEC
&lt;/h3&gt;

&lt;p&gt;O Unbound usa a configuração da chave confiável raiz DNSSEC para verificar a autenticidade dos registros DNS recebidos dos servidores DNS raiz. A configuração da chave confiável raiz DNSSEC pode ser obtida no site do IANA em &lt;a href="https://www.iana.org/dnssec/files" rel="noopener noreferrer"&gt;https://www.iana.org/dnssec/files&lt;/a&gt; mas essa chave não é atualizada com frequência então você pode usar os valores abaixo ou verificar se existe uma versão mais atualizada em &lt;a href="https://data.iana.org/root-anchors/root-anchors.xml" rel="noopener noreferrer"&gt;https://data.iana.org/root-anchors/root-anchors.xml&lt;/a&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5
IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Crie o arquivo root.key e adicione os valores acima.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/unbound/root.key


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Certifique-se de que o arquivo root.key é de propriedade do usuário com o qual o daemon do Unbound está sendo executado, neste exemplo estamos utilizando o usuário &lt;code&gt;unbound&lt;/code&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;sudo chown &lt;/span&gt;unbound:unbound /etc/unbound/root.key


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Habilite e reinicie o serviço do Unbound.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;unbound
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart unbound


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Zonas atendidas localmente
&lt;/h2&gt;

&lt;p&gt;O Unbound pode ser configurado para atender localmente a determinadas zonas. Isso é útil para nomes de host que não são resolvidos corretamente pelos servidores DNS raiz. Por exemplo, se você tiver um servidor de arquivos chamado files.example.com, poderá configurar o Unbound para atender localmente a esse nome de host. Isso significa que o Unbound não precisará consultar os servidores DNS raiz para resolver esse nome de host.&lt;/p&gt;

&lt;p&gt;No exemplo, é configurado o nome de host fileserver.home.lan resolvendo para o endereço IP 10.2.2.1. Além disso, é configurada uma pesquisa reversa para permitir que 10.2.2.1 resolva de volta para o nome do host fileserver.home.lan.&lt;/p&gt;

&lt;p&gt;Isso pode ser feito adicionando as seguintes linhas no arquivo /etc/unbound/unbound.conf.d/unbound.conf:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;


&lt;span class="c"&gt;# locally served zones can be configured for the machines on the LAN.&lt;/span&gt;

    local-zone: &lt;span class="s2"&gt;"home.lan."&lt;/span&gt; static

    local-data: &lt;span class="s2"&gt;"fileserver.home.lan.  IN A 10.2.2.1"&lt;/span&gt;

    local-data-ptr: &lt;span class="s2"&gt;"10.2.2.1  fileserver.home.lan"&lt;/span&gt;



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Testando o Unbound
&lt;/h2&gt;

&lt;p&gt;Para testar se o Unbound está funcionando corretamente e com o DNSSEC habilitado, execute o seguinte comando:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

dig com. SOA +dnssec


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Se o Unbound estiver funcionando corretamente, você verá a flag &lt;code&gt;ad&lt;/code&gt; no resultado:&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Resolvendo problemas
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Resolvendo nomes de host localmente
&lt;/h3&gt;

&lt;p&gt;Para que o servidor que está rodando o Unbound possa resolver nomes de host, pode ser necessário configurar o arquivo &lt;code&gt;/etc/resolv.conf&lt;/code&gt; para que o Unbound seja o servidor DNS padrão.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/resolv.conf


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Adicione a linha abaixo no arquivo &lt;code&gt;/etc/resolv.conf&lt;/code&gt; para que o Unbound seja o servidor DNS padrão.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

nameserver 127.0.0.1


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Após isso desative o serviço &lt;code&gt;systemd-resolved&lt;/code&gt; para que o arquivo &lt;code&gt;/etc/resolv.conf&lt;/code&gt; não seja sobrescrito.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl disable systemd-resolved


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Reinicie o sistema para que as alterações tenham efeito.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;reboot


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Resolvendo nomes de host em outra rede ou sub-rede
&lt;/h3&gt;

&lt;p&gt;Para que os dispositivos de outra rede ou sub-rede possam resolver nomes de host, pode ser necessário adicionar a interface de rede no arquivo &lt;code&gt;/etc/unbound/unbound.conf.d/unbound.conf&lt;/code&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/unbound/unbound.conf.d/unbound.conf


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Adicione a linha abaixo no arquivo &lt;code&gt;/etc/unbound/unbound.conf.d/unbound.conf&lt;/code&gt; para que o Unbound possa resolver nomes de host em outra rede ou sub-rede.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

interface: xxx.xxx.xxx.xxx


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Além disso, pode ser necessário adicionar o endereço IP de rede ou do dispositivo no arquivo &lt;code&gt;/etc/unbound/unbound.conf.d/unbound.conf&lt;/code&gt;. Para isso adicione a linha abaixo no arquivo &lt;code&gt;/etc/unbound/unbound.conf.d/unbound.conf&lt;/code&gt; para que o Unbound possa resolver nomes de host em outra rede ou sub-rede.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

access-control: xxx.xxx.xxx.xxx/xx allow


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Reinicie o sistema para que as alterações tenham efeito.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;reboot


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>unbound</category>
      <category>dns</category>
      <category>opensource</category>
      <category>braziliandevs</category>
    </item>
  </channel>
</rss>
