<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Protocolo de Infra</title><link>https://protocolodeinfra.com.br/posts/</link><description>Recent content in Posts on Protocolo de Infra</description><generator>Hugo -- gohugo.io</generator><language>pt_br</language><copyright>&lt;a href=&#34;https://creativecommons.org/licenses/by-nc/4.0/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CC BY-NC 4.0&lt;/a&gt;</copyright><lastBuildDate>Sat, 19 Apr 2025 01:05:24 -0300</lastBuildDate><atom:link href="https://protocolodeinfra.com.br/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Cisco - AAA usando RADIUS Windows Server 2012</title><link>https://protocolodeinfra.com.br/posts/2025/04/cisco-aaa-usando-radius-windows-server-2012/</link><pubDate>Sat, 19 Apr 2025 01:05:24 -0300</pubDate><guid>https://protocolodeinfra.com.br/posts/2025/04/cisco-aaa-usando-radius-windows-server-2012/</guid><description>Uma solução de autenticação centralizada para dispositivos de rede usando os recursos do Windows Server 2012.
Cisco - AAA usando RADIUS Windows Server 2012
Fazer o gerenciamento de acesso à equipamentos de rede como routers, switches em redes de pequeno porte, pode ser feito diretamente no dispositivo, porém, a medida que a rede começa a crescer fica difícil de manter a consistência.
O ideal é desde o início provisionar um servidor de autenticação para dispositivos de rede.</description><content type="html"><![CDATA[<hr />

<p>Uma solução de autenticação centralizada para dispositivos de rede usando os recursos do Windows Server 2012.</p>

<hr />

<p><img src="https://raw.githubusercontent.com/keilon-araujo/posts/master/AAA-Title.png" alt="cover" /></p>

<p><strong>Cisco - AAA usando RADIUS Windows Server 2012</strong></p>

<p>Fazer o gerenciamento de acesso à equipamentos de rede como routers, switches em redes de pequeno porte, pode ser feito diretamente no dispositivo, porém, a medida que a rede começa a crescer fica difícil de manter a consistência.</p>

<p>O ideal é desde o início provisionar um servidor de autenticação para dispositivos de rede. Atualmente temos dois protocolos disponíveis para alcançar este objetivo: RADIUS e TACACS+. Ambos tem características diferentes e são mais assertivos para diferentes cenários.</p>

<p>Neste post vamos focar apenas na configuração do Radius em um Windows Server 2012.</p>

<p>Dada a topologia acima, onde temos a rede onde está localizado o Windows Server e outras duas redes, a rede NOC que representa os usuários que tem apenas acesso de leitura e a rede Engineer, que possui usuário com acesso mais privilegiado.
O dispositivo alvo é o roteador que está configurado com a arquitetura Router-on-a-Stick, onde ele é o gateway de todas as redes e faz o roteamento inter-vlan. É nele que faremos a configuração para que os usuários se autentiquem no Radius Server.
Temos as seguintes interfaces no router:</p>

<ul>
<li>WAN: 192.168.77.11</li>
<li>VLAN10: 172.16.10.1</li>
<li>VLAN20: 172.16.20.1</li>
<li>VLAN30: 172.16.30.1</li>
</ul>

<p>Para este exemplo, cada rede de origem terá um tipo de permissão diferente. Mas a granularidade de configuração no RADIUS permite que essa definição seja feita baseada em grupos de usuários, como veremos mais à frente.</p>

<p>Vamos para o Windows Server 2012, onde iremos instalar o Network Policy Server (NPS) que permitirá usar o RADIUS. Basta ir até o <em>Server Manager DashBoard</em>, clicar em  <em>Add Roles and Features</em> e em <em>Server Roles</em> selecionar a opção <em>Network Policy and Access Services</em> e clicar em <em>Next</em> até finalizar todas as opções. Feito isso já temos disponível nosso Radius Server.</p>

<p><img src="https://raw.githubusercontent.com/keilon-araujo/posts/master/NPS-Install.png" alt="NPS-Install" /></p>

<p>Para este Lab é necessário criar dois grupos de usuários no Windows: GRP-N3 para privilege 15 e GRP-N1 para privilege 1. Para o GRP-N3 temos o usuário engineer e para GRP-N1 o usuário noc.</p>

<p>Agora é o momento de criar as policies que serão os níveis de permissão de acesso. Para simplificar teremos apenas dois tipos de acesso: privilege=1 para o NOC e privilege=15 para os engineers. Para iniciar vamos abrir o Dashboard do Network Policy Server e em Policies, clicar com botão direto e depois em New.</p>

<p><img src="https://raw.githubusercontent.com/keilon-araujo/posts/master/new.png" alt="new" /></p>

<p>Com a nova janela aberta, em <em>Overview</em>, vamos dar o nome à policy (PRIV-15_policy) e marcar a opcão <em>Policy enabled</em> e <em>Grant Access</em>, para que a política seja criada e seja habilitada.</p>

<p><img src="https://raw.githubusercontent.com/keilon-araujo/posts/master/Overview.png" alt="overview" /></p>

<p>Na aba <em>Conditions</em> vamos clicar em <em>Add</em> e depois e selecionar <em>Windows Groups</em>, para nosso Lab teremos dois grupos, neste momento vamos adicionar somente o GRP-N3, que terá privilégio total ao router.</p>

<p><img src="https://raw.githubusercontent.com/keilon-araujo/posts/master/conditions.png" alt="conditions" /></p>

<p>Na aba <em>Constraints</em>, neste momento é interessante alterar apenas o campo de <em>Authentication Methods</em> e deixar marcado apenas  a opcão <em>Unecrypted authentication (PAP, SPAP)</em>.</p>

<p><img src="https://raw.githubusercontent.com/keilon-araujo/posts/master/constraints.png" alt="constraints" /></p>

<p>Na aba <em>Settings</em> teremos as configuracões de RADIUS, em <em>Standard</em> vamos usar o <em>Attribute Service-Type Login</em>.</p>

<p><img src="https://raw.githubusercontent.com/keilon-araujo/posts/master/Standard.png" alt="standard" /></p>

<p>Em <em>Vendor Specific</em> vamos deixar os atributos como mostrados abaixo, que dará ao grupo GRP-N3 o acesso ao roteador com privilégio level 15. Feito isso a configuracão no Radius está pronta.</p>

<p><img src="https://raw.githubusercontent.com/keilon-araujo/posts/master/vendor-specific.png" alt="vendor" /></p>

<p>Para adicionar o grupo GRP-N1 basta seguir os mesmo passos alterando apenas o grupo adicionado e o shell privilege que será lelvel 1.</p>

<p>Criadas as políticas de acesso é hora de adicionar os Radius clientes, que serão os dispositivos que faram as solicitacões de validacão de credenciais. Neste caso o nosso router.</p>

<p>Para isto, basta expandir o menu <em>RADIUS Clients and Server</em> e em <em>RADIUS Clients</em> clicar com botão direito em <em>New</em>, aqui teremos que marcar a checkbox &ldquo;Enable this RADIUS client&rdquo;, dar um nome ao dispositivo e depois adicionar o IP abaixo. Aqui o item mais importante é &ldquo;Shared secret&rdquo; que é a chave compartilhada entre o RADIUS Server e o client, essa mesma chave será configurada no router.
Na aba <em>Advanced</em>, em <em>Vendor name</em> vamos alterar para <em>Cisco</em>.
Aqui a configuracão do Radius Server está pronta.</p>

<p><img src="https://raw.githubusercontent.com/keilon-araujo/posts/master/R-client-settings.png" alt="client" /></p>

<p>A configuração no switch é a seguinte:</p>

<pre><code>!
aaa group server radius GRP-RADIUS
 server name NPS-01
 ip radius source-interface Ethernet0/1
!
aaa authentication login VTY_ACCESS group GRP-RADIUS local
aaa authorization exec default group GRP-RADIUS local if-authenticated
!
username admin.local privilege 15 password 7 133112011F5D5679
!
radius server NPS-01
 address ipv4 172.16.10.2 auth-port 1812 acct-port 1813
 key 7 0812494D1B1C11464058
!
line vty 0 4
 login authentication VTY_ACCESS
 transport input ssh
!
</code></pre>

<p>O <em>aaa authorization exec default group GRP-RADIUS local if-authenticated</em> garante que o nível de privilégio criado na política do NPS será aplicado e também à conta local admin.local (em caso de perda de conectividade com servidor Radius), caso contrário, o usuário autenticado teria o privilégio 1.</p>
]]></content></item><item><title>Criando Pendrive Bootavel no Linux</title><link>https://protocolodeinfra.com.br/posts/2021/03/criando-pendrive-bootavel-no-linux/</link><pubDate>Sun, 28 Mar 2021 14:44:05 -0300</pubDate><guid>https://protocolodeinfra.com.br/posts/2021/03/criando-pendrive-bootavel-no-linux/</guid><description>Para um usuário linux sem muita experiência em Linux criar um pen drive bootável pode ser um problema e para facilitar essa tarefa trago este post que de maneira simples resolve esta questão.
1. Overview
2. Listando as unidades disponíveis
3. Criando o Pen Drive Bootável
4. Usando o PV
5. Resumo
1. Overview Vamos realizar esta tarefa via terminal, ou seja, usando linhas de comando. Isto porque a partir de qualquer distribuição Linux será possível criar o pen drive bootável.</description><content type="html"><![CDATA[

<hr />

<p>Para um usuário linux sem muita experiência em Linux criar um pen drive bootável pode ser um problema e para facilitar essa tarefa trago este post que de maneira simples resolve esta questão.</p>

<hr />

<p><a href="#1. Overview">1. Overview</a></p>

<p><a href="#2. Listando as unidades disponíveis">2. Listando as unidades disponíveis</a></p>

<p><a href="#3. Criando o Pen Drive Bootável">3. Criando o Pen Drive Bootável</a></p>

<p><a href="#4. Usando o PV">4. Usando o PV</a></p>

<p><a href="#5. Resumo">5. Resumo</a></p>

<h3 id="1-overview">1. Overview</h3>

<p>Vamos realizar esta tarefa via terminal, ou seja, usando linhas de comando. Isto porque a partir de qualquer distribuição Linux será possível criar o pen drive bootável.</p>

<p>A ferramenta aqui usada será o <code>dd</code> que é um ferramenta de linha de comando que por padrão vem em todas as distribuições GNU/Linux e faz parte do pacote <code>coreutils</code>.</p>

<p>Usando o comando <code>man</code> temos a seguinte saída para descrever o <code>dd</code>:</p>

<pre><code>DD(1) 

NOME
       dd - converte e copia um arquivo

SINOPSE
       dd [--help] [--version] [if=arquivo] [of=arquivo] [ibs=bytes] [obs=bytes] [bs=bytes] [cbs=bytes] [skip=blocos] [seek=blocos] [count=blocos] [conv={ascii, ebcdic, ibm, block, unblock, lcase, ucase, swab, noerror, notrunc, sync}]

DESCRIÇÃO
       dd copia um arquivo (da entrada padrão para a saída padrão, por padrão) usando tamanhos de blocos de entrada e saída especificados, enquanto está fazendo opcionalmente conversões nele.
</code></pre>

<h3 id="2-listando-as-unidades-disponíveis">2. Listando as unidades disponíveis</h3>

<p>Formatar uma unidade não desejada pode ser uma dor de cabeça e tanto, por isso é importante prestar atenção nesse item. O comando <code>lsblk</code> vai nos mostrar as unidade.</p>

<pre><code>user@dragon:~/Documents/blog$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 223,6G  0 disk 
├─sda1   8:1    0   487M  0 part /boot/efi
├─sda2   8:2    0   3,8G  0 part [SWAP]
└─sda3   8:3    0 219,3G  0 part /
sdb      8:16   1   7,3G  0 disk 
├─sdb1   8:17   1   415M  0 part /media/user/flashdrive
└─sdb2   8:18   1   6,4M  0 part 
</code></pre>

<p>A saída do comando <code>lsblk</code> nos mostra duas unidades de disponíveis, <code>sda</code> e <code>sdb</code>, sendo que <code>sda</code> é onde está nosso sistema operacional com as respectivas partições <code>/boot, /swap</code> e <code>/</code>. <code>sdb</code> que é a unidade que vamos montar pen drive bootável está identificado e tem volume de 7,3G.</p>

<h3 id="3-criando-o-pen-drive-bootável">3. Criando o Pen Drive Bootável</h3>

<p>Agora que identificamos <code>/dev/sdb</code> como a unidade que vamos montar a imagem, vamos de fato montar botar a mão na massa.</p>

<p>O comando será <code>sudo dd if=~/Downloads/debian-10.8.0-amd64-netinst.iso of=/dev/sdb</code>, onde <code>if=</code> é o arquivo de origem, ou seja, a ISO que baixamos, neste caso temos um <code>debian netinst</code>. <code>of=</code> é o caminho da unidade onde a imagem será montada, neste caso <code>/dev/sdb</code>. Caso esteja logado com usuário root não é necessário o <code>sudo</code> no início do comando.</p>

<p>Após dar Enter no comando acima a tarefa seja executada e o prompt ficará ocupado e com o cursor piscando até que seja finalizado, caso nada de errado ocorra temos o pen drive bootável pronto para uso.</p>

<h3 id="4-usando-o-pv">4. Usando o PV</h3>

<p>Caso deseje acompanhar de forma dinâmica, o <code>pv</code> é uma solução que mostra uma barra de progresso da nossa tarefa. Ele não vem instalado por padrão na maioria das distribuições então pode ser necessário instalar com o comando <code>apt install pv</code> para distribuições debian-based.</p>

<p>Com o PV o comando fica um pouco diferente, <code>use@dragon$ pv ~/Downloads/debian-10.8.0-amd64-netinst.iso | sudo dd of=/dev/sdb</code>.</p>

<p>Ao final da barra de progresso temos o pen drive pronto!</p>

<pre><code>use@dragon$ pv ~/Downloads/debian-10.8.0-amd64-netinst.iso | sudo dd of=/dev/sdb

 336MiB 0:00:01 [ 242MiB/s] [============================================================&gt;] 100%            
688128+0 registros de entrada
688128+0 registros de saída
352321536 bytes (352 MB, 336 MiB) copiados, 1,38123 s, 255 MB/s
</code></pre>

<h3 id="5-resumo">5. Resumo</h3>

<p>É bem simples a criação de um pen drive bootável usando este método, aqui um resumo:</p>

<ol>
<li>Identificar a unidade com <code>lsblk</code></li>
<li>Usar o comando `<code>sudo dd if=~/Downloads/debian-10.8.0-amd64-netinst.iso of=/dev/sdb</code></li>
<li>Caso deseje usar a barra de progresso deve ser instalado o <code>pv</code> e o comando <code>use@dragon$ pv ~/Downloads/debian-10.8.0-amd64-netinst.iso | sudo dd of=/dev/sdb</code></li>
</ol>

<blockquote>
<p>Vale lembrar que esta tarefa apagará todos os itens da unidade apontada para montagem do pen drive bootável, então faça um backup dos seus arquivos.</p>
</blockquote>
]]></content></item><item><title>Gerenciamento De Arquivos no Cisco IOs</title><link>https://protocolodeinfra.com.br/posts/2020/11/gerenciamento-de-arquivos-no-cisco-ios/</link><pubDate>Wed, 04 Nov 2020 21:31:07 -0300</pubDate><guid>https://protocolodeinfra.com.br/posts/2020/11/gerenciamento-de-arquivos-no-cisco-ios/</guid><description>É de grande importância saber trabalhar com o sistema de arquivos no Cisco IOS, tanto para implantação de novos equipamento, backup de arquivos e configuração e até mesmo recuperação de um equipamento venha a ser danificado.
Antes de verificar o sistema de arquivos no Cisco IOS, precisamos conhecer os tipos de memórias que é onde serão armazenados os arquivos, configuração, IOS e etc.
Todos os exemplos aqui demonstrados foram feitos utilizando o Cisco C1900 Series com IOS versão 15.</description><content type="html"><![CDATA[

<hr />

<p>É de grande importância saber trabalhar com o sistema de arquivos no Cisco IOS, tanto para implantação de novos equipamento, backup de arquivos e configuração e até mesmo recuperação de um equipamento venha a ser danificado.</p>

<hr />

<p>Antes de verificar o sistema de arquivos no Cisco IOS, precisamos conhecer os tipos de memórias que é onde serão armazenados os arquivos, configuração, IOS e etc.</p>

<p>Todos os exemplos aqui demonstrados foram feitos utilizando o Cisco C1900 Series com IOS versão 15.</p>

<p>Tipos de memórias memórias:</p>

<p><strong>DRAM - Dynamic Random-Access Memory</strong>:  é uma memória volátil, ou seja as informações são carregadas no momento do boot mas quando o equipamento é desligado a informação não fica gravada, comparável à memória RAM nos Computadores.</p>

<p><strong>EPROM -</strong> <strong>Erasable Programmable Read-Only Memory</strong>: Também chamada de memória ROM, é do tipo não volátil. É utilizada para armazenar o ROM Monitor Software (ROMMOM), e o bootloader que permite acessar o equipamento mesmo se estiver sem o IOS.</p>

<p><strong>NVRAM - Non-Volatile Rando-Access Memory:</strong> Responsável por armazenar a startup-config e também o configuration-register.</p>

<p><strong>Flash</strong>: É usada para armazenar o IOS e outros arquivos, podemos comparar aos HDs ou SSDs dos computadores.</p>

<h2 id="comandos">Comandos</h2>

<p><strong>show file system:</strong> comando usado para mostrar o sistema de arquivos da caixa além de informações da nvram,flash e sua capacidade de armazenamento.</p>

<p>No exemplo abaixo o asterisco ( * ) nos mostra qual unidade de armazenamento padrão, que é <em>usbflash0</em> e tem aproximadamente 256mb, a <em>nvram</em> possui armazenamento de 255k além de uma unidade removível usb que foi inserida e tem aproximadamente 3.5gb.</p>

<p>As Flags <em>ro, rw e wo</em> descrevem as permissões para o sistema de arquivos.</p>

<pre><code>Router#show file systems 
File Systems:

       Size(b)       Free(b)      Type  Flags  Prefixes
             -             -    opaque     rw   archive:
             -             -    opaque     rw   system:
             -             -    opaque     rw   tmpsys:
             -             -    opaque     rw   null:
             -             -   network     rw   tftp:
        262136        255065     nvram     rw   nvram:
             -             -    opaque     wo   syslog:
             -             -    opaque     rw   xmodem:
             -             -    opaque     rw   ymodem:
             -             -   network     rw   rcp:
             -             -   network     rw   http:
             -             -   network     rw   ftp:
             -             -   network     rw   scp:
             -             -    opaque     ro   tar:
             -             -   network     rw   https:
             -             -    opaque     ro   cns:
*    255537152     209698816  usbflash     rw   usbflash0: flash:
    3505545216    3505541120  usbflash     rw   usbflash1:
</code></pre>

<p><strong>pwd</strong>: <em>print working directory</em>, para se localizar a qualquer momento em qual diretório estamos trabalhando este é o comando.</p>

<pre><code>Router#pwd
usbflash0:
</code></pre>

<p><strong>cd</strong>: <em>change directory</em>, este é o comando que nos permite passar de um diretório para outro apontando o caminho do diretório que se deseja alcançar.</p>

<pre><code>Router#cd usbflash0:backup
</code></pre>

<p><strong>dir</strong>: mostra uma lista de arquivos e diretórios em um diretório específico.</p>

<pre><code>Router#dir
Directory of usbflash0:/

    4  drw-           0   Nov 5 2020 00:21:56 +00:00  backup
    1  drw-           0   Nov 3 2020 15:46:24 +00:00  back
    3  -rw-    45832792   Jul 2 2015 22:03:42 +00:00  c1900-universalk9-mz.SPA.150-1.M8.bin
</code></pre>

<p><strong>mkdir</strong> permite criar um novo diretório.</p>

<pre><code>Router#mkdir backup 
Create directory filename [backup]? 
Created dir usbflash0:backup
</code></pre>

<p><strong>rmdir</strong>: permite remover um diretório, um detalhe é que caso o diretório contenha algum arquivo ou até mesmo outro diretório o comando não vai funcionar, tendo efeito somente em diretórios vazios. No exemplo abaixo não é possível remover o diretório <em>back</em> pois não é um diretório vazio.</p>

<pre><code>Router#rmdir usbflash0:back
Remove directory filename [back]? 
Delete usbflash0:back? [confirm]
%Error Removing dir usbflash0:back (Can't delete a directory that has files in it)
</code></pre>

<p><strong>delete</strong>: permite deletar arquivos dentro file system, um detalhe que ele pode ser forçado e apagar até mesmo um diretório com vários arquivos dentro usando a opção <em>delete /recursive /force /pasta</em>.</p>

<pre><code>Router#delete usbflash0:/back/bkpp
Delete filename [/back/bkpp]? 
Delete usbflash0:/back/bkpp? [confirm]	
</code></pre>

<p><strong>format</strong>: permite formatar um file system, pode ser usado até mesmo para particionar um pen drive inserido por exemplo.</p>

<pre><code>Router#format ?
  flash:      Filesystem to be formatted
  usbflash0:  Filesystem to be formatted
</code></pre>

<p><strong>erase:</strong> permite apagar os arquivos na nvram, o <em>startup-config</em> por exemplo.</p>

<pre><code>Router#erase ?
  /all                       Erase all files(in NVRAM)
  /no-squeeze-reserve-space  Do not reserve space for squeeze operation
  nvram:                     Filesystem to be erased
  startup-config             Erase contents of configuration memory
</code></pre>

<p><strong>verify</strong> : verifica a integridade dos arquivos, ai disponibilizar um IOS a Cisco disponibiliza juntamente o MD5 para checar que não foi alterado do servidor da Cisco até o usuário que está fazendo o Download.</p>

<pre><code>Router#verify flash:c1900-universalk9-mz.SPA.150-1.M8.bin
Starting image verification
Hash Computation:    100% Done!
Computed Hash   SHA2: 006062C86B23F1186BF72FB628D8C63C
                      92787CF94FDD436BC88BE77BBE373B14
                      E6021DAD66E1D25ABA676B0A7B95F9D2
                      8A0778E8F70C6D3A48353F7C2566CCF1
                      
Embedded Hash   SHA2: 006062C86B23F1186BF72FB628D8C63C
                      92787CF94FDD436BC88BE77BBE373B14
                      E6021DAD66E1D25ABA676B0A7B95F9D2
                      8A0778E8F70C6D3A48353F7C2566CCF1
                      
CCO Hash        MD5 : 6DCA357446C1E6ED204F0C578CC465DC
Digital signature successfully verified in file usbflash0:c1900-universalk9-mz.SPA.150-1.M8.bin
</code></pre>

<pre><code>Router#verify /md5 usbflash0:c1900-universalk9-mz.SPA.150-1.M8.bin
..................................................................
Done!
verify /md5 (usbflash0:c1900-universalk9-mz.SPA.150-1.M8.bin) = 6dca357446c1e6ed204f0c578cc465dc
</code></pre>

<p>Pode ser checado também arquivos de configuração como o startup-config que pode ter sido baixado de um servidor FTP, para garantir que não houve alteração rodamos o comando:</p>

<pre><code>Router#verify /md5 nvram:startup-config
.Done!
verify /md5 (nvram:startup-config) = d65faaba055e3c829420dadddd808c6f
</code></pre>

<p>Este md5 tem que ser igual ao que está no servidor e este por sua vez pode também ter sido verificado anteriormente.</p>

<p><strong>fsck:</strong> Faz a checagem do sistema de arquivos para verificar se há alguma falha na unidade <em>flash</em> por exemplo.</p>

<pre><code>Router#fsck ?
  /all        Check all partitions of this disk
  /force      Force fsck of disk
  flash:      Filesystem to be checked
  usbflash0:  Filesystem to be checked
  &lt;cr&gt;
</code></pre>

<p><strong>copy:</strong> permite copiar arquivos ou diretórios de várias origens, por exemplo de um servidor FTP ou TFTP para a unidade flash. É um comando bem versátil.</p>

<pre><code>Router#copy startup-config ftp
Address or name of remote host []? 192.168.1.1
Destination filename [router-confg]? 
Writing router-confg 
</code></pre>

<p><strong>rename:</strong> renomear arquivos ou diretorios.</p>

<pre><code>Router#rename usbflash0:/back/startup-config config-old
Destination filename [/back/config-old]? 
</code></pre>

<p><strong>show version:</strong> um comando que mostra várias informações do equipamento Cisco.</p>

<pre><code>Router#show version 
Cisco IOS Software, C1900 Software (C1900-UNIVERSALK9-M), Version 15.0(1)M8, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2012 by Cisco Systems, Inc.
Compiled Wed 15-Feb-12 21:27 by prod_rel_team

ROM: System Bootstrap, Version 15.0(1r)M15, RELEASE SOFTWARE (fc1)

Router uptime is 56 minutes
System returned to ROM by power-on
System restarted at 23:32:36 UTC Mon Nov 2 2020
System image file is &quot;usbflash0:c1900-universalk9-mz.SPA.150-1.M8.bin&quot;
Last reload type: Normal Reload


This product contains cryptographic features and is subject to United
States and local country laws governing import, export, transfer and
use. Delivery of Cisco cryptographic products does not imply
third-party authority to import, export, distribute or use encryption.
Importers, exporters, distributors and users are responsible for
compliance with U.S. and local country laws. By using this product you
agree to comply with applicable laws and regulations. If you are unable
to comply with U.S. and local laws, return this product immediately.
          
A summary of U.S. laws governing Cisco cryptographic products may be found at:
http://www.cisco.com/wwl/export/crypto/tool/stqrg.html

If you require further assistance please contact us by sending email to
export@cisco.com.

Cisco CISCO1905/K9 (revision 1.0) with 225280K/36864K bytes of memory.
Processor board ID FTX16218269
2 Gigabit Ethernet interfaces
1 Serial(sync/async) interface
DRAM configuration is 64 bits wide with parity disabled.
255K bytes of non-volatile configuration memory.
249840K bytes of USB Flash usbflash0 (Read/Write)
3430096K bytes of USB Flash usbflash1 (Read/Write)


License Info:

License UDI:

-------------------------------------------------
Device#   PID                   SN
-------------------------------------------------
*0        CISCO1905/K9          FTX16218269     



Technology Package License Information for Module:'c1900' 

-----------------------------------------------------------------
Technology    Technology-package           Technology-package
              Current       Type           Next reboot  
------------------------------------------------------------------
ipbase        ipbasek9      Permanent      ipbasek9
security      None          None           None
data          None          None           None

Configuration register is 0x2102
</code></pre>

<p>Dentre outras podemos extrair as seguintes informações:</p>

<ul>
<li>225MB de DRAM</li>
<li>255K de NVRAM</li>
<li>250MB de Flash</li>
<li>~3.5GB de Flash USB (Pen Drive)</li>
<li>2 Gigabit Ethernet interfaces</li>
<li>1 Serial(sync/async) interface</li>
<li>Configuration register is 0x2102</li>
</ul>

<p><strong>show flash:</strong> descreve a memória <em>flash</em> e mostra os arquivos e tamanho dos mesmo.</p>

<pre><code>Router#show flash: 
-#- --length-- -----date/time------ path
1     45832792 Jul 02 2015 22:03:42 c1900-universalk9-mz.SPA.150-1.M8.bin
2            0 Nov 03 2020 00:22:28 backup

209698816 bytes available (45838336 bytes used)
</code></pre>

<ul>
<li>Podemos notar que o IOS tem aproximadamente 45mb.</li>
</ul>
]]></content></item><item><title>Protocolo OSPF - Formação de Vizinhança</title><link>https://protocolodeinfra.com.br/posts/2020/09/protocolo-ospf-forma%C3%A7%C3%A3o-de-vizinhan%C3%A7a/</link><pubDate>Tue, 01 Sep 2020 21:30:35 -0300</pubDate><guid>https://protocolodeinfra.com.br/posts/2020/09/protocolo-ospf-forma%C3%A7%C3%A3o-de-vizinhan%C3%A7a/</guid><description>O protocolo OSPF (Open Shortest Path First) é um protocolo de roteamento de redes e foi desenvolvimento pelo IETF (Internet Engineering Task Force), trabalha diretamente sobre o IP com protocolo número 89. É um protocolo aberto sendo suportado pela maioria dos fabricantes e também por sistemas operacionais Linux, BSD&amp;rsquo;s e Unix e usa o algoritmo de Dijkstra para determinar o melhor caminho para cada rede.
Este é um breve resumo do OSPF e algumas de suas atribuições, cabendo ainda um estudo mais aprofundado para implantação em redes de grande porte e tem referência aos comandos dos roteadores Cisco.</description><content type="html"><![CDATA[

<hr />

<p>O protocolo OSPF (<em>Open Shortest Path First</em>) é um protocolo de roteamento de redes e foi desenvolvimento pelo IETF (Internet Engineering Task Force), trabalha diretamente sobre o IP com protocolo número 89. É um protocolo aberto sendo suportado pela maioria dos fabricantes e também por sistemas operacionais Linux, BSD&rsquo;s e Unix e usa o algoritmo de Dijkstra para determinar o melhor caminho para cada rede.</p>

<hr />

<p>Este é um breve resumo do OSPF e algumas de suas atribuições, cabendo ainda um estudo mais aprofundado para implantação em redes de grande porte e tem referência aos comandos dos roteadores Cisco.</p>

<p>O OSPF é um protocolo de roteamento que utiliza padrão aberto, classless, com convergência rápida e usa o custo como uma métrica.</p>

<p>Os domínios de roteamento do OSPF são divididos em áreas, e deve conter obrigatoriamente a área <strong>zero</strong> a qual todas as outras áreas devem estar conectadas, essa divisão em áreas traz alguns benefícios:</p>

<ul>
<li>Minizar o número de entradas na tabela de roteamento;</li>
<li>Minizar a inundação de LSA&rsquo;s a uma área específica;</li>
<li>Minimizar o impacto de mudanças de topologia, uma vez que um link fica Down o SPF irá rodar novamente o algoritmo naquela área a qual pertence;</li>
<li>Reforçar o conceito de um projeto de rede.</li>
</ul>

<p><img src="https://raw.githubusercontent.com/keilon-araujo/posts/master/OSPF-1.jpg" alt="area-0" style="zoom:80%;" /></p>

<p>O cabeçalho do OSPF, traz algumas informaçoes como a versão sendo v2 para IPv4 e v3 para IPv6, o campo <code>Type</code> identifica o tipo de pacote a ser transportado que no total são 5, além de <code>Router ID</code> e <code>Area ID</code> e autenticação caso seja configurado.</p>

<pre><code>      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |   Version     |     Type      |         Packet length         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                          Router ID                            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           Area ID                             |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           Checksum            |             AuType            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Authentication                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Authentication                          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</code></pre>

<p>Os cindo pacotes transpostados pelo OSPF são:</p>

<table>
<thead>
<tr>
<th>Tipo</th>
<th>Pacote</th>
<th>Função</th>
</tr>
</thead>

<tbody>
<tr>
<td>1</td>
<td>Hello</td>
<td>Descoberta/Manutenção de vizinhança</td>
</tr>

<tr>
<td>2</td>
<td>Database Description</td>
<td>é um resumo do LSDB (banco de dados link-state), incluindo o Router ID e o número de squencia de cada LSA no LSDB</td>
</tr>

<tr>
<td>3</td>
<td>Link State Request</td>
<td>Solicita o LSU do vizinho</td>
</tr>

<tr>
<td>4</td>
<td>Link State Update</td>
<td>Contém entrada LSA completa, incluindo informações de topologia por exemplo, o Router ID do roteador local eo RID e custo de cada vizinho.</td>
</tr>

<tr>
<td>5</td>
<td>Link State Ack</td>
<td>usado para reconhecer o recebimento dos outros pacotes, exceto o hello e o próprio LSAck</td>
</tr>
</tbody>
</table>

<p>Os roteadores rodando o OSPF possuem três tabelas para administração do protocolo de roteamento, são elas:</p>

<ul>
<li><strong>Adjacency Database (Neighbor Table)</strong>: Guarda as informações das vizinhanças descobertas pelo OSPF através do protocolo <code>Hello</code>.</li>
<li><strong>Link-State Database (Topology Table)</strong>: Guarda a base de dados topológica do OSPF, ou seja, os LSA&rsquo;s que foram recebidas pelo roteador e serão utilizadas pelo SPF para descobrir as melhores rotas.</li>
<li><strong>Fowarding Database (Routing Table)</strong>: As melhores rotas serão inseridas na tabela de roteamento.</li>
</ul>

<p>Os pacotes de roteamento OSPF (com exceção de Hellos) são enviados apenas por adjacências. Isso significa que todos os pacotes de protocolo OSPF percorrem um único salto de IP, exceto aqueles que são enviados por adjacências virtuais. O endereço IP de origem de um pacote de protocolo OSPF é uma extremidade de uma adjacência do roteador e o endereço IP de destino é a outra extremidade da adjacência ou um endereço IP multicast.</p>

<h4 id="formação-de-vizinhos-ou-adjacências">Formação de vizinhos ou Adjacências</h4>

<p>Em um link ponto a ponto, para que dois roteadores tornem-se vizinhos ele precisam, além de estar na mesma sub-rede ou compartilharem um link virtual, que os seguintes parâmetros sejam iguais:</p>

<ul>
<li>temporizadores de Hello e Dead</li>
<li>ID da área</li>
<li>Tipo de autenticação e senha caso configurados</li>
</ul>

<p>O processo de estabelecimento de adjacencia e troca de rota entre dois roteadores OSPF segue os seguintes passos:</p>

<ul>
<li><strong>Passo 1</strong> - <strong>Down State</strong> : O processo do OSPF ainda não começou e os pacotes Hello ainda não foram enviados.</li>
<li><strong>Passo 2</strong> - <strong>Init State</strong> : O router envia pacotes Hello para todas as interfaces OSPF configuradas no comando network .</li>
<li><strong>Passo 3</strong> - <strong>Two-way State</strong> : o roteador recebeu um Hello do outro roteador contendo seu próprio ID de roteador na lista de vizinhos. Nessa situação todos os requisitos para vizinhança foram cumpridos e os roteadores podem se tornar vizinhos.</li>
<li><strong>Passo 4</strong> - <strong>Exstart State</strong> : se os roteadores se tornarem adjacentes (fazer troca de rotas), nesse passo eles determinam quem começa o processo de troca de informações.</li>
<li><strong>Passo 5</strong> - <strong>Exchange State</strong>: as bases de dados dos roteadores são trocadas listando os LSA em seu LSDB pelo RID e número de sequencia.</li>
<li><strong>Passo 6</strong> - <strong>Loading State</strong> : cada roteador compara a base de dados recebida com o conteúdo de seu banco de dados local. Em seguida, envia um LSR para LSAs faltantes ou desatualizadas. Cada roteador responde a LSR do seu vizinho com uma atualização do estado do enlace. Cada LSU é reconhecido como um LSAck.</li>
<li><strong>Passo 7</strong> - <strong>Full State</strong> : A LSDB foi sincronizada com o vizinho e foi finalizado o processo de inicialização do OSPF.</li>
</ul>

<p><img src="https://raw.githubusercontent.com/keilon-araujo/posts/master/OSPF-2.jpg" alt="ospf-2" style="zoom:67%;" /></p>
]]></content></item><item><title>Conexão USB-Serial via Terminal no Linux</title><link>https://protocolodeinfra.com.br/posts/2020/08/conex%C3%A3o-usb-serial-via-terminal-no-linux/</link><pubDate>Sat, 29 Aug 2020 21:30:24 -0300</pubDate><guid>https://protocolodeinfra.com.br/posts/2020/08/conex%C3%A3o-usb-serial-via-terminal-no-linux/</guid><description>Neste post farei uma breve explicação de como se conectar à dispositivos de rede via cabo USB-Serial, usado em vários dispositivos de Rede como roteadores e Switches.
Como usar USB-Serial no linux para conexão em via Terminal
A maioria dos dispositivos de Rede oferecem a conexão serial-usb como interface de manutenção e configuração, apesar de muitos já oferecerem uma interface gráfica, muitos administradores ainda preferem estar conectados via terminal, no caso do Windows basta instalar o drive do adaptador USB e conectar via cliente porém no Linux o módulo precisa ser carregado e neste exemplo iremos usar um cliente via Terminal.</description><content type="html"><![CDATA[<hr />

<p>Neste post farei uma breve explicação de como se conectar à dispositivos de rede via cabo USB-Serial, usado em vários dispositivos de Rede como roteadores e Switches.</p>

<hr />

<p><strong>Como usar USB-Serial no linux para conexão em via Terminal</strong></p>

<p>A maioria dos dispositivos de Rede oferecem a conexão serial-usb como interface de manutenção e configuração, apesar de muitos já oferecerem uma interface gráfica, muitos administradores ainda preferem estar conectados via terminal, no caso do Windows basta instalar o drive do adaptador USB e conectar via cliente porém no Linux o módulo precisa ser carregado e neste exemplo iremos usar um cliente via Terminal.</p>

<p>Após conectar o dispositivo serial em alguma das entradas USB vamos usar o comando <code>lsusb</code> que identifica as conexões USB.</p>

<p><img src="https://raw.githubusercontent.com/keilon-araujo/posts/master/lsusb-1.png" alt="lsusb" /></p>

<p>Neste exemplo o nosso dispositivo tem a seguinte identificação:</p>

<pre><code>Bus 001 Device 024: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
</code></pre>

<p>Agora é necessário carregar o módulo do dispositivo, de acordo com as informações obtidas no comando anterior:</p>

<p><img src="https://raw.githubusercontent.com/keilon-araujo/posts/master/modprobe-1.png" alt="modprobe" /></p>

<p>Para verificar se realmente o módulo foi carregado e está pronto para conexão vamos usar o <code>dmesg</code>:</p>

<p><img src="https://raw.githubusercontent.com/keilon-araujo/posts/master/dmesg-1.png" alt="dmesg" /></p>

<p>Basta agora dar as permissões de leitura e escrita ao nosso dispositivo que está identificado como ttyUSB0.</p>

<p><img src="https://raw.githubusercontent.com/keilon-araujo/posts/master/chmod-1.png" alt="chmod" /></p>

<p>Nosso dispositivo está pronto, podemos ainda tornar esta configuração persistente editando o arquivo <code>/etc/modules</code> e inserindo ao final do arquivo a seguinte linha <code>usbserial vendor=0x067b product=0x2303</code>.</p>

<p>Agora é necessário um cliente para conectar ao dispositivos, as opções são várias como: putty, teraterm, secureCRT, etc. para este exemplo vamos continuar no terminal e usar o <code>cu</code> que é extremamente leve e está disponível na maioria dos repositórios. No caso Debian e derivados pode ser instalado com o comando <code>apt install cu</code>.</p>

<p>Para conectar vamos usar o comando <code>cu -l /dev/ttyUSB0 -s 9600</code>, onde a opção <code>-l</code> nos permite apontar o dispositvo USB e a opção <code>-s</code> permiteinformar o baud rate(taxa de transmissão), para dispositivos Cisco o padrão é 9600, em dispositivos Nokia por exemplo, esse valor é 155200.</p>

<p><img src="https://raw.githubusercontent.com/keilon-araujo/posts/master/cu-1.png" alt="cu" /></p>

<p>Para encerrar a sessão é simples, ainda com a sessão aberta no terminal basta digitar o comando <code>~.</code> que a sessão será encerrada.</p>

<p><img src="https://raw.githubusercontent.com/keilon-araujo/posts/master/close-1.png" alt="close" /></p>
]]></content></item><item><title>Link Aggregation - Ethernet Bonding</title><link>https://protocolodeinfra.com.br/posts/2020/07/link-aggregation-ethernet-bonding/</link><pubDate>Wed, 15 Jul 2020 21:29:54 -0300</pubDate><guid>https://protocolodeinfra.com.br/posts/2020/07/link-aggregation-ethernet-bonding/</guid><description>Neste post tentarei explicar como funciona o Link Aggregation, que é bastante comum em Uplinks entre switches e routers mas que também pode ser aplicado em hosts, em nosso caso aplicaremos em um servidor GNU/Linux Debian Buster.
Como funciona o Link Aggregation?
O Link Aggregation está descrito na norma IEEE 802.3ad, e possibilita vincular dois ou mais links ethernet através de um único link virtual.
Esta funcionalidade nos permite prover alta disponibilidade para rescursos importantes em uma rede, neste exemplo será usado um servidor Linux com duas interfaces Ethernet e um módulo que está no kernel chamado bonding.</description><content type="html"><![CDATA[<hr />

<p>Neste post tentarei explicar como funciona o Link Aggregation, que é bastante comum em Uplinks entre switches e routers mas que também pode ser aplicado em hosts, em nosso caso aplicaremos em um servidor GNU/Linux Debian Buster.</p>

<hr />

<p><strong>Como funciona o Link Aggregation?</strong></p>

<p>O Link Aggregation está descrito na norma IEEE 802.3ad, e possibilita vincular dois ou mais links ethernet através de um único link virtual.</p>

<p>Esta funcionalidade nos permite prover alta disponibilidade para rescursos importantes em uma rede, neste exemplo será usado um servidor Linux com duas interfaces Ethernet e um módulo que está no kernel chamado <code>bonding</code>.</p>

<p><img src="https://raw.githubusercontent.com/keilon-araujo/teste/master/lag.png" alt="lag" /></p>

<p>O módulo bonding tem 7 modos de operação e cada oferece recursos diferentes. Neste cenário vamos usar <code>Mode=0 (balance round-robin)</code> o qual provê tolerancia à falhas dos links e também faz o balanceamento de cargas. Outros parametros também podem ser utilizados, como o <code>miimom</code> que define o tempo de espera para monitoramento da interface bounding, <code>downdelay</code> que define o tempo de espera para desabilitar uma interface escrava em caso de falha e deve ser usada em conjunto com miimom e também o parametro <code>updelay</code> o qual define o tempo de espera para ativar uma interface escrava após detecção de normalização do link principal.</p>

<p>Para configuração vamos utilizar duas interfaces físicas sendo elas <code>enp1s0</code> e <code>enp7s0</code> como escravas e criaremos uma interface virtual <code>bond0</code> no modo <code>round-robin</code>:</p>

<pre><code>miimom=100    -&gt; o link será monitorado a cada 100 ms
downdelay=200 -&gt; a interface só será desabilitada em caso de falha após 200 ms
updelay=220   -&gt; tempo em ms que o link irá retomar após falha
</code></pre>

<p>O Debian Buster temos que instalar o <code>ifenslave</code> que irá ativar/desativar as interfaces, como usuário root vamos às configurações:</p>

<pre><code>root@server~# apt install ifenslave
</code></pre>

<p>Em seguida ativamos o módulo bonding no Kernel:</p>

<pre><code>root@server~# modprobe bonding
</code></pre>

<p>Verificando se o módulo foi ativado:</p>

<pre><code>root@server~# lsmod | grep bonding
bonding               180224  0
</code></pre>

<p>O próximo passo é configurar as interfaces, aqui será criado o link virtual <code>bond0</code> e as interfaces que farão parte do Link Aggregation serão declaradas dentro desta. No Debian Buster todas interfaces são configuradas em um único arquivo que fica em <code>/etc/network/interfaces</code>.</p>

<pre><code># This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#allow-hotplug enp1s0
#iface enp1s0 inet dhcp
#

# Interface bonding
# Static IP address
auto bond0
iface bond0 inet static
        bond-slaves enp1s0 enp7s0
        bond-mode  balance-rr
        bond-miimon 100
	bond-updelay 220
	bond-downdelay 220
        bond-primary enp1s0 enp7s0

        address 192.168.122.188
        netmask 255.255.255.0
        network 192.168.122.0
        broadcast 192.168.122.255
        gateway 192.168.122.1
</code></pre>

<p>Feito isso nossa configuração está pronta, basta reiniciar os serviços de rede:</p>

<pre><code>root@server:~# /etc/init.d/networking restart
</code></pre>

<p>Para verificar se tudo está funcionando corretamente vamos rodar o comando <code>ip addr show</code></p>

<pre><code>root@server:~$ ip addr show
1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp1s0: &lt;BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000
    link/ether 52:54:00:82:9d:48 brd ff:ff:ff:ff:ff:ff
3: enp7s0: &lt;BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000
    link/ether 52:54:00:82:9d:48 brd ff:ff:ff:ff:ff:ff
4: bond0: &lt;BROADCAST,MULTICAST,MASTER,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 52:54:00:82:9d:48 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.188/24 brd 192.168.122.255 scope global bond0
       valid_lft forever preferred_lft forever
</code></pre>

<p>Podemos perceber que as interfaces enp1s0 e enp7s0 não receberam enderaçamento IP e a interface virtual <code>bond0</code> está endereçada, podemos ainda ver o processo rodando em <code>/proc</code> com o comando <code>cat /proc/net/bonding/bond0</code> :</p>

<pre><code>Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 200
Down Delay (ms): 200

Slave Interface: enp1s0
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 52:54:00:82:9d:48
Slave queue ID: 0

Slave Interface: enp7s0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 52:54:00:3e:74:69
Slave queue ID: 0
</code></pre>

<p>Nosso servidor já está rodando com balanceamento de carga e tem tolerancia à falhas, qualquer interface física que vier a cair, a segunda continuará rodando.</p>

<p><code>Referência: https://servidordebian.org/pt/squeeze/config/network/bonding</code></p>
]]></content></item><item><title>PCF to VPNC</title><link>https://protocolodeinfra.com.br/posts/2020/07/pcf-to-vpnc/</link><pubDate>Sun, 05 Jul 2020 21:30:11 -0300</pubDate><guid>https://protocolodeinfra.com.br/posts/2020/07/pcf-to-vpnc/</guid><description>Este procedimento é necessário quando, temos um arquivo .pcf que é usado para conectar em uma VPN Cisco via Client do Windows e precisamos conectar em SO Linux ou Unix-like e não sabemos a chave pré-compartilhada.
Vamos ao primeiro passo:
Baixar o pcf2vpnc $ wget http://svn.unix-ag.uni-kl.de/vpnc/trunk/pcf2vpnc Torná-lo executável $ chmod +x pcf2vpnc Mover para o $PATH - opcionalmente /usr/bin $ vm pcf2vpnv /usr/local/bin/ Segundo, cisco decrypt, esse fará a decriptografia:</description><content type="html"><![CDATA[<hr />

<p>Este procedimento é necessário quando, temos um arquivo .pcf que é usado para conectar em uma VPN Cisco via Client do Windows e precisamos conectar em SO Linux ou Unix-like e não sabemos a chave pré-compartilhada.</p>

<hr />

<p>Vamos ao primeiro passo:</p>

<ul>
<li>Baixar o pcf2vpnc</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">$ wget http://svn.unix-ag.uni-kl.de/vpnc/trunk/pcf2vpnc</code></pre></div>
<ul>
<li>Torná-lo executável</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">$ chmod +x pcf2vpnc</code></pre></div>
<ul>
<li>Mover para o $PATH - opcionalmente /usr/bin</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">$ vm pcf2vpnv /usr/local/bin/</code></pre></div>
<p>Segundo, cisco decrypt, esse fará a decriptografia:</p>

<ul>
<li>Baixar o decrypt</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">$ wget http://www.unix-ag.uni-kl.de/~massar/soft/cisco-decrypt.c</code></pre></div>
<ul>
<li>Instalar as dependencias necessários, no caso debian&hellip;</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">$ sudo apt install libgcrypt-dev libgpg-error-dev</code></pre></div>
<ul>
<li>Compilar os binários</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">$ gcc -Wall -o cisco-decrypt cisco-decrypt.c <span style="color:#66d9ef">$(</span>libgcrypt-config --libs --cflags<span style="color:#66d9ef">)</span></code></pre></div>
<ul>
<li>Mover para o $PATH</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">$ sudo mv cisco-decrypt /usr/local/bin</code></pre></div>
<p>Agora é hora de gerar o .conf</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shel" data-lang="shel">$ pcf2vpnc cisco.pcf &gt; client.conf</code></pre></div>
<p>Feito isso basta editar o arquivo client.conf caso necessário, exemplo <code>user</code> e mover para o diretório do <code>VPNC</code>.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">$ mv client.cong /etc/vpnc/default.conf</code></pre></div>
<p>O comando acima vai sobrescrever o arquivo <code>default.conf</code> existente. Já estamos prontos para conectar a VPN, caso tudo tenha ocorrido corretamente, será necessário digitar a senha autenticação.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">$ vpnc</code></pre></div>]]></content></item><item><title>IPv4</title><link>https://protocolodeinfra.com.br/posts/2020/06/ipv4/</link><pubDate>Sun, 14 Jun 2020 02:36:37 -0300</pubDate><guid>https://protocolodeinfra.com.br/posts/2020/06/ipv4/</guid><description>O protocolo IPv4 possui 32 bits de largura (de 0 a 31). Como cada byte tem 8 bits, podemos dizer que o cabeçalho IPv4 possui 4 bytes de largura, e cada espaço existente em cada linha no cabeçalho deverá receber um algarismo binário.
Análise de Tráfego em Redes TCP/IP Cabeçalho IPv4 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -| | 1 byte | 2 byte | 3 byte | 4 byte | | 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7| | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -| |version | IHL |Type of service| Total Lenght | | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -| | Identification |Flag | Fragment Offset | | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -| | Time to Live | Protocol | Header Checksum | | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -| | Source Address | | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -| | Destination Address | | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -| | Options | Padding | | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -| Campo Version</description><content type="html"><![CDATA[

<hr />

<p>O protocolo IPv4 possui 32 bits de largura (de 0 a 31). Como cada byte tem 8 bits, podemos dizer que o cabeçalho IPv4 possui 4 bytes de largura, e cada espaço existente em cada linha no cabeçalho deverá receber um algarismo binário.</p>

<hr />

<h1 id="análise-de-tráfego-em-redes-tcp-ip">Análise de Tráfego em Redes TCP/IP</h1>

<h2 id="cabeçalho-ipv4">Cabeçalho IPv4</h2>

<pre><code>| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -|
|    1 byte      |    2 byte     |   3 byte      |   4 byte      |
| 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7|
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -|
|version |  IHL  |Type of service|       Total Lenght            |
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -|
|      Identification            |Flag | Fragment Offset         |
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -|
| Time to Live   | Protocol      |    Header Checksum            |
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -|
|                     Source Address                             |
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -|
|                     Destination Address                        |
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -|
|              Options                           | Padding       |
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -|
</code></pre>

<ul>
<li><p><strong>Campo Version</strong></p>

<p>O campo version possui largura de 4 bits e é responsável por informar qual é a versão do IP, sendo assim no IPv4 sempre teremos o conteúdo binário <code>0100</code> que representa 4 em números binários.</p></li>

<li><p><strong>Campo IHL ( Internet Header Lenght)</strong></p>

<p>Este campo pode ser traduzido para <em>tamanho do cabeçalho internet</em>, também possui 4 bits e é responsável por informar quantas linhas há no cabeçalho.
Todos os elementos das 5 primeiras linhas do cabeçalho IPv4 são de existência obrigatórios, isso significa dizer que o mínimo de linhas de um cabeçalho IP será cinco. Em outras palavras o cabeçalho IP terá no mínimo 20 bytes (5 linhas x 5 bytes por linhas). Em resumo o campo IHL deve ter no mínimo 20 bytes e no máximo 60 bytes, essa variação se dará devido ao campo <code>options</code>.</p></li>

<li><p><strong>Campo Type of Service</strong></p></li>
</ul>

<p>O campo <code>ToS</code>, que significa tipo de serviço, possui 8 bits (1 byte) de tamanho e é responsável por determinar algumas características para o tráfego de dados. com vista a melhorar a qualidade do serviço (<code>QoS</code>). Este campo basicamente indica para os roteadores que estarão no caminho do pacote como tal deverá ser tratado, se o roteador suportar <code>ToS</code> ele obedererá às indicações. É fato que a maioria dos roteadores ignora o conteúdo deste campo, pois o <code>QoS</code> é comumente tratado por outros protocolos, este campo não é relevante para a análise de tráfego.</p>

<ul>
<li><p><strong>Campo Total Lenght</strong>
É o campo que contém o tamanho total do pacote IP (Cabeçalho + Payload), pode ser formado por 16 bits, teoricamente, admite valores de 0 a 65535 em decimal, porém deve ser subtraído desse valor o cabeçalho IP que não pode ser menor que 20 bytes e o payload que deve ter no mínimo 1 byte de dados, então o menor valor para esse campo será 21 em decimal. Em resumo, um pacote IP poderá ter até 65535 bytes de tamanho, isso equivale a, aproximadamente 64KB.</p></li>

<li><p><strong>Campo Identification</strong>
Este é o primeiro campo da segunda linha do cabeçalho IPv4, a qual trata da fragmentação de pacotes. Este campo identifica os pacotes IP, cada pacote deverá ter um número de identificação diferente que vai de 0 a 65535 em decimal e seu valor é criado a cada nova conexão, com base em algoritmos no kernel do SO, dentro da mesma conexão os pacotes terão números seriais. Apenas para entender o porque da fragmentação,  as redes mais comuns são do tipo ethernet, que, normalmente só conseguem transmitir 1500 bytes de cada vez, Caso o IP a ser transmitido tenha, por exemplo, 3500 bytes será necessário quebrá-lo em pedaços.</p></li>

<li><p><strong>Campo Flag:</strong>
Como dito anteriormente a segunda linha do cabeçalho IPv4 é destinada a controlar a fragmengação, o campo <code>flags</code> é responsável por ajudar a controlar o fluxo de fragmentos IP, quando ocorre a fragmentação. Quando fragmentados, os pacotes possuem o mesmo cabeçalho e por consequencia o mesmo número de identificação (<code>Identification</code>), daí surge a próxima medida de controle: as <code>flags</code>. Flag é um campo que possui 3 bits, e são eles:</p></li>
</ul>

<table>
<thead>
<tr>
<th align="center">0</th>
<th align="center">1</th>
<th align="center">2</th>
</tr>
</thead>

<tbody>
<tr>
<td align="center">none</td>
<td align="center">DF</td>
<td align="center">MF</td>
</tr>
</tbody>
</table>

<ul>
<li><code>none</code>: esse bit é reservado para uso futuro e, por enquanto, sempre terá valor zero.</li>
<li><code>DF</code>  : Significa Don&rsquo;t Fragment. Esse bit é utilizado para expressar se poderá ou não haver fragmentação do pacote IP. Caso o bit seja marcado com valor 1, o pacote não poderá sofrer fragmentação por roteadores que estejam no caminho. Assim, se o pacote for maior do que capacidade de um determinado roteador, este enviará uma solicitação de retransmissão em partes menores. Tal solicitação será feita pelo protocolo ICMP. Caso o bit <code>DF</code> esteja marcado como 0, os roteadores existentes no caminho poderão realizar a quebra do pacote, então os valores possíveis são 0 (pode fragmentar) e 1 (não pode fragmentar).</li>
<li><code>MF</code>  : Significa More Fragment. Caso seja necessário fragmentar um pacote, o bit MF indicará, no destino, a cada fragmento recebido, se haverá mais fragmentos que chegarão ou não. O bit 1 representa mais fragmentos. Exemplo: ao dividir um pacote em 3 partes, as duas primeiras terão o bit MF marcado com 1, enquanto a última será marcada com MF 0.</li>
</ul>

<blockquote>
<p>A flag <code>MF</code> só poderá receber o bit 1 se  <code>DF</code> for igual a 0.</p>
</blockquote>

<ul>
<li><p><strong>Campo Fragment Offset:</strong>
É o último elemento de controle na fragmentação. O Fragment Offset é um campo de 13 bits que se refere ao byte inicial de cada fragmento do pacote dividido por 8. O Cálculo sempre irá considerar apenas o payload.
    * Como exemplo, vamos manipular um pacote de 3000 bytes. Se cada fragmento estiver limitado a 1500 bytes de tamanho total e o cabeçalho tiver 20 bytes, o payload só poderá ter, no máximo, 1480 bytes. Portanto, o payload do primeiro fragmento irá de 0 a 1479. Então considerando o primeiro byte do payload do primeiro fragmento, que estará na posição 0, teremos <code>Fragment Offset</code> será 0 / 8= 0. A segunda parte dp payload irá de 1480 a 2959. Então <code>Fragment Offset</code> será 1480 /8 = 185. O terceiro e último pedaço irá de 2960 a 2979, ou seja, <code>Fragment Offset</code> será 2969 / 8 = 370. Com isso, será possível remontar o pacote na ordem certa, bastando colocar os fragmentos em ordem crescente relativa ao <code>Fragment Offset</code>, a ordem final de montagem será 0, 185, 375.</p>

<hr /></li>

<li><p><strong>Análise de uma fragmentação IP</strong>
Vamos realizar uma análise com auxílio do <em>tcpdump</em>.
Será enviado um pacote gerado com o comando ping, mostrado a seguir.</p></li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">		keilon@ubuntu:~$ ping -c <span style="color:#ae81ff">1</span> -s <span style="color:#ae81ff">3500</span> <span style="color:#ae81ff">192</span>.168.1.1</code></pre></div>
<p>Este comando gerou um pacote com 3500 bytes de payload. Em uma rede ethernet com taxa de transmissão de 1500 bytes, esse pacote terá que ser fragmentado em três pedaços.
Para fazer a anãlise vamos analisar a saída do <em>tcpdump</em>:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">		keilon@ubuntu:~$ sudo tcpdump -n icmp and host <span style="color:#ae81ff">192</span>.168.1.1 -v
		tcpdump: listening on enp6s0, link-type EN10MB <span style="color:#f92672">(</span>Ethernet<span style="color:#f92672">)</span>, capture size <span style="color:#ae81ff">262144</span> bytes

		➊	<span style="color:#ae81ff">00</span>:41:17.773004 IP <span style="color:#f92672">(</span>tos 0x0, ttl <span style="color:#ae81ff">64</span>, id <span style="color:#ae81ff">3581</span>, offset <span style="color:#ae81ff">0</span>, flags <span style="color:#f92672">[</span>+<span style="color:#f92672">]</span>, proto ICMP <span style="color:#f92672">(</span><span style="color:#ae81ff">1</span><span style="color:#f92672">)</span>, length <span style="color:#ae81ff">1500</span><span style="color:#f92672">)</span>
				<span style="color:#ae81ff">192</span>.168.1.10 &gt; <span style="color:#ae81ff">192</span>.168.1.1: ICMP echo request, id <span style="color:#ae81ff">3</span>, seq <span style="color:#ae81ff">1</span>, length <span style="color:#ae81ff">1480</span>

		➋	<span style="color:#ae81ff">00</span>:41:17.773016 IP <span style="color:#f92672">(</span>tos 0x0, ttl <span style="color:#ae81ff">64</span>, id <span style="color:#ae81ff">3581</span>, offset <span style="color:#ae81ff">1480</span>, flags <span style="color:#f92672">[</span>+<span style="color:#f92672">]</span>, proto ICMP <span style="color:#f92672">(</span><span style="color:#ae81ff">1</span><span style="color:#f92672">)</span>, length <span style="color:#ae81ff">1500</span><span style="color:#f92672">)</span>
				<span style="color:#ae81ff">192</span>.168.1.10 &gt; <span style="color:#ae81ff">192</span>.168.1.1: ip-proto-1

		➌	<span style="color:#ae81ff">00</span>:41:17.773018 IP <span style="color:#f92672">(</span>tos 0x0, ttl <span style="color:#ae81ff">64</span>, id <span style="color:#ae81ff">3581</span>, offset <span style="color:#ae81ff">2960</span>, flags <span style="color:#f92672">[</span>none<span style="color:#f92672">]</span>, proto ICMP <span style="color:#f92672">(</span><span style="color:#ae81ff">1</span><span style="color:#f92672">)</span>, length <span style="color:#ae81ff">568</span><span style="color:#f92672">)</span>
				<span style="color:#ae81ff">192</span>.168.1.10 &gt; <span style="color:#ae81ff">192</span>.168.1.1: ip-proto-1

		➍	<span style="color:#ae81ff">00</span>:41:17.773986 IP <span style="color:#f92672">(</span>tos 0x0, ttl <span style="color:#ae81ff">64</span>, id <span style="color:#ae81ff">25582</span>, offset <span style="color:#ae81ff">0</span>, flags <span style="color:#f92672">[</span>+<span style="color:#f92672">]</span>, proto ICMP <span style="color:#f92672">(</span><span style="color:#ae81ff">1</span><span style="color:#f92672">)</span>, length <span style="color:#ae81ff">1500</span><span style="color:#f92672">)</span>
				<span style="color:#ae81ff">192</span>.168.1.1 &gt; <span style="color:#ae81ff">192</span>.168.1.10: ICMP echo reply, id <span style="color:#ae81ff">3</span>, seq <span style="color:#ae81ff">1</span>, length <span style="color:#ae81ff">1480</span>

		➎	<span style="color:#ae81ff">00</span>:41:17.774106 IP <span style="color:#f92672">(</span>tos 0x0, ttl <span style="color:#ae81ff">64</span>, id <span style="color:#ae81ff">25582</span>, offset <span style="color:#ae81ff">1480</span>, flags <span style="color:#f92672">[</span>+<span style="color:#f92672">]</span>, proto ICMP <span style="color:#f92672">(</span><span style="color:#ae81ff">1</span><span style="color:#f92672">)</span>, length <span style="color:#ae81ff">1500</span><span style="color:#f92672">)</span>
				<span style="color:#ae81ff">192</span>.168.1.1 &gt; <span style="color:#ae81ff">192</span>.168.1.10: ip-proto-1

		➏	<span style="color:#ae81ff">00</span>:41:17.774141 IP <span style="color:#f92672">(</span>tos 0x0, ttl <span style="color:#ae81ff">64</span>, id <span style="color:#ae81ff">25582</span>, offset <span style="color:#ae81ff">2960</span>, flags <span style="color:#f92672">[</span>none<span style="color:#f92672">]</span>, proto ICMP <span style="color:#f92672">(</span><span style="color:#ae81ff">1</span><span style="color:#f92672">)</span>, length <span style="color:#ae81ff">568</span><span style="color:#f92672">)</span>
				<span style="color:#ae81ff">192</span>.168.1.1 &gt; <span style="color:#ae81ff">192</span>.168.1.10: ip-proto-1</code></pre></div>
<p>Temos duas linhas por pacote, a primeira se refere ao IP e a segunda ao ICMP. As linhas de 1 a 3 estão mostrando o envio do ping, conhecido como <em>ICMP echo request</em>, enquanto 4 a 6 mostram a responsta a este, ou seja um <em>ICMP echo replay</em>.
Na linha 1, vemos que a máquina 192.168.1.10 enviando um ping para 192.168.1.1, o campo identification tem como valor 3581 e <em>Fragment Offset</em> é 0.
&gt; O <em>tcpdump</em> mostra o valor de <em>Fragment Offset</em> multiplicado por 8, com isso não vemos o <em>offset</em> puro, e sim o byte real que o gerou.</p>

<p>Ainda na linha 1, <em>flags [+]</em> represente que MF é igual a 1. Então, teremos mais fragmentos depois deste, isto é a prova de que o pacote foi fragmentado. O tamanho total o do fragmento atual (cabeçalho + payload) é igual a 1500 bytes. O tamanho do payload, que é o protocolo ICMP, é 1480 bytes. Os ICMP echo replay e echo request tem seus próprios campos de identificação.
A linha 2 mostra que o identification do IP é 3581, já sabemos que todos os fragmentos de um pacote IP possuem o mesmo número de identificação, o mesmo campo <em>Protocol</em>, que, no caso corresponde ao ICMP, mesmo endereço de origem e destino. Se observarmos todos os campos são iguais nas linhas 1, 2 e 3. Isso confirma que temos três fragmentos de um mesmo pacote IP.
Ainda na linha 2 é possível ver o <em>Fragment Offset</em> 1480 e a flag <em>MF</em> marcada com 1 novamente, na linha 3 o <em>offset</em> é 2960 e <em>MF</em> está desabilitado, indicando que não há mais fragmentos a serem recebidos.
As linhas de 4 a 6 mostram a responta do ping.</p>

<hr />

<ul>
<li><strong>Campo Time to Live (TTL)</strong>
Este campo se refere ao tempo de vida de um pacote, inicialmente os pacotes tem um valor de TTL pré-determinado geralmente pelo kernel do SO, a cada roteador (HOP) que o pacote passa é decrementado o valor 1 do TTL que quando chega a 0 é descartado pelo roteador, evitando deste modo que o pacote circulasse eternamente na rede de computadores.</li>
</ul>

<p>O comando que mostra explicitamente o <em>TTL</em> é o ping, que serve para tester a conectividade entre hosts.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">keilon@ubuntu:~$ ping -c <span style="color:#ae81ff">4</span> www.google.com
PING www.google.com <span style="color:#f92672">(</span><span style="color:#ae81ff">172</span>.217.30.164<span style="color:#f92672">)</span> <span style="color:#ae81ff">56</span><span style="color:#f92672">(</span><span style="color:#ae81ff">84</span><span style="color:#f92672">)</span> bytes of data.
<span style="color:#ae81ff">64</span> bytes from <span style="color:#ae81ff">172</span>.217.30.164: icmp_seq<span style="color:#f92672">=</span><span style="color:#ae81ff">1</span> ttl<span style="color:#f92672">=</span><span style="color:#ae81ff">115</span> time<span style="color:#f92672">=</span><span style="color:#ae81ff">19</span>.5 ms
<span style="color:#ae81ff">64</span> bytes from <span style="color:#ae81ff">172</span>.217.30.164: icmp_seq<span style="color:#f92672">=</span><span style="color:#ae81ff">2</span> ttl<span style="color:#f92672">=</span><span style="color:#ae81ff">115</span> time<span style="color:#f92672">=</span><span style="color:#ae81ff">19</span>.9 ms
<span style="color:#ae81ff">64</span> bytes from <span style="color:#ae81ff">172</span>.217.30.164: icmp_seq<span style="color:#f92672">=</span><span style="color:#ae81ff">3</span> ttl<span style="color:#f92672">=</span><span style="color:#ae81ff">115</span> time<span style="color:#f92672">=</span><span style="color:#ae81ff">19</span>.9 ms
<span style="color:#ae81ff">64</span> bytes from <span style="color:#ae81ff">172</span>.217.30.164: icmp_seq<span style="color:#f92672">=</span><span style="color:#ae81ff">4</span> ttl<span style="color:#f92672">=</span><span style="color:#ae81ff">115</span> time<span style="color:#f92672">=</span><span style="color:#ae81ff">20</span>.0 ms

--- www.google.com ping statistics ---
<span style="color:#ae81ff">4</span> packets transmitted, <span style="color:#ae81ff">4</span> received, <span style="color:#ae81ff">0</span>% packet loss, time 12033ms
rtt min/avg/max/mdev <span style="color:#f92672">=</span> <span style="color:#ae81ff">19</span>.471/19.812/19.959/0.199 ms</code></pre></div>
<ul>
<li>O resultado do comando acima é a respota do Google, ou seja, o echo reply. Muito provavelmente este servidor web tem o TTL 128 e foi decrementando até chegar em 115, passando por 13 roteadores. O campo TTL possui 8 bits e pode ir de 0 a 25, cada sistema operacional tem um TTL padrão que pode ser alterado.</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">keilon@ubuntu:~$ traceroute www.google.com
traceroute to www.google.com <span style="color:#f92672">(</span><span style="color:#ae81ff">172</span>.217.172.132<span style="color:#f92672">)</span>, <span style="color:#ae81ff">64</span> hops max
  <span style="color:#ae81ff">1</span>   <span style="color:#ae81ff">192</span>.168.1.1  <span style="color:#ae81ff">0</span>,397ms  <span style="color:#ae81ff">0</span>,326ms  <span style="color:#ae81ff">0</span>,351ms
  <span style="color:#ae81ff">2</span>   <span style="color:#ae81ff">177</span>.66.167.170  <span style="color:#ae81ff">1</span>,340ms  <span style="color:#ae81ff">0</span>,899ms  <span style="color:#ae81ff">0</span>,907ms
  <span style="color:#ae81ff">3</span>   <span style="color:#ae81ff">172</span>.16.167.5  <span style="color:#ae81ff">1</span>,274ms  <span style="color:#ae81ff">1</span>,745ms  <span style="color:#ae81ff">1</span>,052ms
  <span style="color:#ae81ff">4</span>   <span style="color:#ae81ff">189</span>.125.215.253  <span style="color:#ae81ff">2</span>,902ms  <span style="color:#ae81ff">1</span>,878ms  <span style="color:#ae81ff">2</span>,151ms
  <span style="color:#ae81ff">5</span>   <span style="color:#ae81ff">64</span>.209.11.186  <span style="color:#ae81ff">18</span>,873ms  <span style="color:#ae81ff">18</span>,946ms  <span style="color:#ae81ff">19</span>,048ms
  <span style="color:#ae81ff">6</span>   <span style="color:#ae81ff">72</span>.14.212.213  <span style="color:#ae81ff">21</span>,351ms  <span style="color:#ae81ff">22</span>,012ms  <span style="color:#ae81ff">22</span>,109ms
  <span style="color:#ae81ff">7</span>   *  *  *
  <span style="color:#ae81ff">8</span>   <span style="color:#ae81ff">209</span>.85.242.198  <span style="color:#ae81ff">19</span>,827ms  <span style="color:#ae81ff">20</span>,025ms  <span style="color:#ae81ff">19</span>,926ms
  <span style="color:#ae81ff">9</span>   <span style="color:#ae81ff">172</span>.253.66.25  <span style="color:#ae81ff">22</span>,137ms  <span style="color:#ae81ff">21</span>,859ms  <span style="color:#ae81ff">21</span>,961ms
 <span style="color:#ae81ff">10</span>   <span style="color:#ae81ff">74</span>.125.243.65  <span style="color:#ae81ff">21</span>,093ms  <span style="color:#ae81ff">20</span>,964ms  <span style="color:#ae81ff">20</span>,779ms
 <span style="color:#ae81ff">11</span>   <span style="color:#ae81ff">172</span>.253.66.23  <span style="color:#ae81ff">20</span>,192ms  <span style="color:#ae81ff">19</span>,913ms  <span style="color:#ae81ff">19</span>,960ms
 <span style="color:#ae81ff">12</span>   <span style="color:#ae81ff">172</span>.217.172.132  <span style="color:#ae81ff">19</span>,810ms  <span style="color:#ae81ff">19</span>,969ms  <span style="color:#ae81ff">19</span>,916ms</code></pre></div>
<p>Acima um exemplo usando o traceroute, que mostra a rota do pacote até o host de destino. Quando uma linha mostrar mais de um roteador, significa que temos roteadores trabalhando em paralelo fazendo balanceamento de carga.</p>

<ul>
<li><strong>Campo Protocol</strong>
Este campo é responsável por dizer qual será o conteúdo encontrado no payload do IP. No payload do IP só poderá existir um tipo de elemento: outro protocolo, em outras palavras o IP sempre irá carregar outro protocolo no seu payload, os protocolos que podem ser encapsulados pelo IP são conhecidos como <code>protocolos IP</code>.</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">|------------------------|
|     Cabeçalho IP       |
|------------------------|
| |--------------------| |
| |   Cabeçalho TCP    | |
| |                    | |
| |--------------------| |
| |    Payload TCP     | |
| |                    | |
| |                    | |
| |                    | |
| |--------------------| |
|------------------------|</code></pre></div>
<p>A figura acima representa o funcionamento do protocolo IP, sempre encontraremos dentro dele, outro protocolo como payload.
O campo <code>Protocol</code> possui 8 bits, e por isso admite valores de 0 a 255, o protocolo ICMP é o número 1, enquanto o TCP é o número 7 e o UDP o número 17.</p>

<ul>
<li><p><strong>Campo Header Checksum</strong></p>

<p>O campo <code>header checksum</code> é responsável por garantir que o pacote IP transite integro. Esse campo pode nos dizer por exemplo, se durante o tráfego algum equipamento truncou bits.
O <code>Header Checksum</code> contém 16 bits e vai de 0 a 65535 e é calculado com base nos campos existentes em todo cabeçalho IP, em resumo é feito um cálculo de todos os campos do cabeçalho IP e este valor fica registrado dentro do campo header checksum.</p></li>

<li><p><strong>Campo Source Address</strong>
O <code>Source Address</code> é o campo que se refere ao endereço do host que está enviando o pacote IP, o campo contém 32 bits de largura, ou seja 4 bytes. Os campos <code>Source Address</code> e <code>Destination Address</code> são os maiores campos do cabeçalho IP, e o motivo pelo qual foi escolhido 32 bits de largura para o cabeçalho.</p></li>

<li><p><strong>Campo Destination Address</strong></p>

<p>É similar ao Source Address, porém contém o endereço de destino e é o último campo obrigatório do cabeçalho IP, tendo até aqui 20 bytes de cabeçalho.</p></li>

<li><p><strong>Campo Options</strong></p>

<p>Este campo não é de existência obrigatória no pacote IP, seu tamanho irá variar de acordo com a quantidade de informações que ele terá, podendo ir de 0 a 40 bytes, o que corresponde de 0 a 10 linhas de cabeçalho.</p>

<p>Este campo não é tão importante para a análise de tráfego, ele só é relevante em análises muito avançadas.
Apenas por curiosidade este campo pode trazer as seguintes informações:
    - Informações de segurança e restrições de acesso e manipulação do pacote;
    - Relação de roteadores transpostos para chegar a um destino <code>(Record Route)</code>;
    - data e hora <code>(time stamp)</code>
    - Loose source routing
    - Strict source routing</p></li>

<li><p><strong>Campo Padding</strong></p>

<p>Este campo funciona como uma &ldquo;rolha&rdquo;, e só existirá caso o campo options também exista, a função dele é muito simples, como o campo options tem tamanho variados, seu término geralmente não irá coincidir com o fim da linha do cabeçalho. Em outras palavras, cada linha do cabeçalho deve ter obrigatoriamente 4 bytes, assim o <code>padding</code> entra para completar, caso necessário, a linha options.</p></li>

<li><p><strong>Payload</strong></p>

<p>O campo payload de um pacote IP nada mais é do que a área de dados. É nessa área que serão colocados os dados que trafegarão dentro dele na rede.
O tamanho do payload irá variar de acordo com a quantidade de informações que nele será colocada. É importante ressaltar que o menor cabeçalho IP contém 20 bytes de tamanho e que o maior IP possível incluindo o cabeaçalho tem 65535 bytes. Assim o maior payload IP possível terá 65535 - 20 = 65515 bytes. Considerando que um pacote Ip deverá conter outro protocolo dentro de seu payload, este nunca estará vazio. Com isso, podemos dizer que o menor tamanho possível para um payload IP é 1 byte.</p>

<blockquote>
<p>Onde está a máscara de rede e o CIDR? Ambos fazem parte de procedimentos internos e não trafegam na rede. Note que eles nem aparecem nos campos do protocolo IP.</p>
</blockquote></li>

<li><p><strong>Características do IPv4</strong></p>

<ul>
<li><code>Não garantia de entrega</code> - O protocolo IP é do tipo <em>best effort</em>, ou seja,não garante, por si só, que os dados serão entregues ao destinatário. Para o caso de garantia de entrega é necessário outro protocolo, o TCP por exemplo.</li>
<li><code>Não garantia de payload</code> - A única verificação que o protocolo IP faz é a do cabeçalho, por intermédio do <em>header checksum</em>, então o IP não é capaz de garantir os dados dentro de seu payload, outros protocolos farão essa garantia.</li>
<li><code>Endereço Organizado</code> - Trata-se do endereçamento IP, possui um método extremamente flexível e organizado.</li>
<li><code>Fragmentação de Pacote</code> - Os pacotes podem ser fragmentados sempre que necessário, o que facilita seu tráfego por diversos tipos de topologias, há um mecanismo de controle para remontagem.</li>
<li><code>QoS não garantido</code> - O IP pode utilizar o &ldquo;Quality of service&rdquo;, provido pelo campo <code>Type of Service</code>  ou <code>Differentiated Services</code>, com isso é possível priorizar tráfego e atribuir graus de importância aos pacotes, todavia, geralmente os roteadores ignoram esse campo, com isso não é possível garantir que haja QoS.</li>
<li><code>Tempo de Vida</code> - Esta característica é provida pelo campo TTL, é essencial para que um pacote não trafegue eternamente pelas redes.</li>
<li><code>Container de protocolos</code> - O IP, carrega dentro de si outros protocolos.</li>
<li><code>Roteamento</code> - O pacote IP contém as informações necessárias para chegar a seu destino, campo Destinarion Address já é suficiente para isso.</li>
</ul></li>

<li><p><strong>Considerações gerais sobre o IPv4</strong></p>

<p>Cada protocolo IP tem uma importância e executa alguma função especial: transportar outros protocolos. São eles o TCP e UDP. Em outras palavras, o TCP e o UDP recebem outros protocolos no seu payload, como o HTTP.</p></li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">|---------------------|
|   Cabeçalho IP      |
|---------------------|   
| |-----------------| |      
| | Cabeçalho TCP   | |  
| |-----------------| |
| | |-------------| | |
| | |             | | |
| | |  Protocolo  | | |
| | |    HTTP     | | |
| | |             | | |
| | |             | | |
| | |             | | |
| | |-------------| | |
| |-----------------| |
|---------------------|</code></pre></div>
<ul>
<li><strong>Conclusão</strong>
O protocolo IP funciona como um grande caminhão, a boléia representa o cabeçalho, onde está todo o controle de tráfego. A corroceria é análoga ao payload, onde estão os dados que serão carregados.
O protocolo IP sempre terá outro protocolo em seu payload. A todos os protocolos que podem ser transportados pelo IP damos o nome de <code>Protocolos IP</code>.</li>
</ul>

<hr />
]]></content></item></channel></rss>