<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivos Prefix-Delegated - Remontti</title>
	<atom:link href="https://blog.remontti.com.br/tag/prefix-delegated/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.remontti.com.br/tag/prefix-delegated</link>
	<description>rudimar@remontti</description>
	<lastBuildDate>Tue, 10 Dec 2024 18:00:24 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.remontti.com.br/wp-content/uploads/2024/09/icone-rr-80x80.png</url>
	<title>Arquivos Prefix-Delegated - Remontti</title>
	<link>https://blog.remontti.com.br/tag/prefix-delegated</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Como entregar IPv6+IPv4 no Mikrotik/RouterOS através de PPPoE/DHCPv6 PD e registrando os logs em um banco de dados</title>
		<link>https://blog.remontti.com.br/3931</link>
					<comments>https://blog.remontti.com.br/3931#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 22 Jan 2020 02:28:36 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debian 10]]></category>
		<category><![CDATA[Delegated-IPv6-Prefix]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[logs]]></category>
		<category><![CDATA[ppp]]></category>
		<category><![CDATA[pppoe]]></category>
		<category><![CDATA[Prefix-Delegated]]></category>
		<category><![CDATA[routeos]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=3931</guid>

					<description><![CDATA[<p>Neste tutorial vamos aprender como entregar IPv6 para clientes finais utilizando RouterOS/Mikrotik (Concentrador PPPoE) e registrar os logs dos prefixos IPv6 entregue na WAN (Remote IPv6 Prefix Pool) e na LAN (DHCPv6 PD Pool).&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/3931">Como entregar IPv6+IPv4 no Mikrotik/RouterOS através de PPPoE/DHCPv6 PD e registrando os logs em um banco de dados</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img fetchpriority="high" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/banner_ipv6_log_mk.jpg" alt="" width="720" height="340" class="alignnone size-full wp-image-3950" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/banner_ipv6_log_mk.jpg 720w, https://blog.remontti.com.br/wp-content/uploads/2020/01/banner_ipv6_log_mk-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/banner_ipv6_log_mk-520x245.jpg 520w" sizes="(max-width: 720px) 100vw, 720px" /><br />
Neste tutorial vamos aprender como entregar IPv6 para clientes finais utilizando RouterOS/Mikrotik (Concentrador PPPoE) e registrar os logs dos prefixos IPv6 entregue na WAN (Remote IPv6 Prefix Pool) e na LAN (DHCPv6 PD Pool).</p>
<p>Ainda hoje encontramos alguns bugs no Mikrotik, e um dos maiores motivos de buscar essa solução foi que freeradius não registra os logs de IPv6 PD (Mikrotik), o IPv6 que vai se configurar na LAN cliente (o mais importante a ser guardado), seria muito mais fácil para muitos sistemas se implementassem o Delegated-IPv6-Prefix, mas já faz 6 anos (jan/2020) que é motivo de discussão lá no <a href="https://forum.mikrotik.com/viewtopic.php?t=89443" rel="noopener noreferrer" target="_blank">forum</a>. E para variar a solução é dar aquele jeitinho&#8230;. (Popular gambiarra) <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61b.png" alt="😛" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Para montar esse servidor de logs você precisa apenas de um serviço WEB (Apache/NGINX) PHP7+ e um banco de dados MySQL/MariaDB.</p>
<p><strong>Requisito para montar um servidor do zero</strong>:<br />
<a href="https://blog.remontti.com.br/2966" rel="noopener noreferrer" target="_blank">&#8211; Debian 10 Stretch / Instalação Limpa</a><br />
<a href="https://blog.remontti.com.br/3006" rel="noopener noreferrer" target="_blank">&#8211; Como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin no Debian 10 Buster “LAMP”</a></p>
<p>Você precisa ter um pouquinho de conhecimento em IPv6 e saber dividir as subclasses. Recomendo dar uma olhadinha no <a href="http://ipv6.nic.br/" rel="noopener noreferrer" target="_blank">http://ipv6.nic.br/</a> lá irá encontrar cursos do NIC.BR.</p>
<p>Recomendo você instalar uma calculadora de IPv6. Aqui vai uma calculador muito boa que uso no dia a dia.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc.png" data-rel="lightbox-gallery-JmsB5yS2" data-rl_title="" data-rl_caption="" title=""><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc.png" alt="" width="1680" height="1008" class="alignnone size-full wp-image-3933" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc.png 1680w, https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc-300x180.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc-1024x614.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc-768x461.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/01/ip6calc-1536x922.png 1536w" sizes="(max-width: 1680px) 100vw, 1680px" /></a></p>
<pre class="remontti-code"># apt install wget python-ipaddr
# wget https://blog.remontti.com.br/arquivos/Home/ip6calc -O /bin/ip6calc
# chmod +x /bin/ip6calc</pre>
<p>Para fazer o calculo use ex.:</p>
<pre class="remontti-code"># ip6calc 2001:db8:abcd::/48</pre>
<p>Para esse projeto desenvolvi em PHP alguns arquivos onde fica &#8220;ouvido&#8221; os logs que o Mikrotik irá enviar e uma telinha simples para fazer buscas dos IPs nesse banco de dados. Já disponibilizei ele lá no <a href="https://github.com/remontti/LogIPv6RouterOS" rel="noopener noreferrer" target="_blank">github</a>.</p>
<p>Com seu servidor web configurado, <a href="https://blog.remontti.com.br/3464" rel="noopener noreferrer" target="_blank">seria bacana criar um host no seu dns e configurar nesse seu servdor web um domínio virtual</a> ex.: log6.seudominio.com.br onde você irá jogar os arquivos do projeto. Mas como muitos não tem essa facilidade vou tentar deixar aqui a forma mais simples, que é jogar os arquivos no diretório padrão do apache &#8220;/var/www/html&#8221;, assim qualquer um consegue montar <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Acessamos o diretório base então</p>
<pre class="remontti-code"># cd /var/www/html
# wget https://github.com/remontti/LogIPv6RouterOS/archive/master.zip
# apt install unzip
# unzip master.zip 
# mv LogIPv6RouterOS-master logs6
# cd logs6</pre>
<p>Por segurança crie/edite um .htaccess para proteger que apenas determinados IPs tenham acesso. (apensar de ter um token)</p>
<pre class="remontti-code"># vim .htaccess</pre>
<p>Altere pelo IPs que você deseja que tenham acesso. (Seus router e seu NOC)</p>
<pre class="remontti-code">Options -Indexes
&lt;RequireAll&gt;
    &lt;RequireAny&gt;
        Require ip 200.200.200.0/24
        Require ip 192.168.0.0/26
        Require ip 2001:db8::/32
    &lt;/RequireAny&gt;
&lt;/RequireAll&gt;</pre>
<p>Precisaremos criar um banco de dados e nossa tabela. Para gerar suas senhas/token recomendo <a href="https://senhasegura.remontti.com.br/" rel="noopener noreferrer" target="_blank">https://senhasegura.remontti.com.br/</a> e gerar algo aleatório.</p>
<pre class="remontti-code"># mariadb -p</pre>
<p>Crie o banco de dados, não esqueça de alterar a senha (SUA_SENHA_DA_CONEXAO)</p>
<pre class="remontti-code">CREATE DATABASE logs6;
GRANT ALL PRIVILEGES ON logs6.* TO &#039;logs6&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SUA_SENHA_DA_CONEXAO&#039;;
FLUSH PRIVILEGES;
quit;</pre>
<p>Importe a tabela utilizando a senha criada anteriormente</p>
<pre class="remontti-code"># mariadb -u logs6 logs6 &lt; logs6_mikrotik.sql -p</pre>
<p>Agora altere no arquivo <strong>config.php</strong> o <strong>token</strong> para validar seu envio de dados e acessar o interface simples que desenvolvi para buscas, e a senha de conexão com banco (db_password).</p>
<pre class="remontti-code">
?php
/* Your security token  */
$token = &#039;xxxxxxxxxxxxx&#039;;

/* Set langage */
// Portugês Brasil: pt-br
// English:  en
$lang = &#039;pt-br&#039;;

/* Db conect */
$db_host = &#039;localhost&#039;;
$db_user = &#039;logs6&#039;;
$db_password = &#039;SUA_SENHA_DA_CONEXAO&#039;;
$db_name = &#039;logs6&#039;;
</pre>
<p>Agora acesse sua <strong>http(s)://URL/logs6/</strong>. Você deve receber a seguinte tela.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6.png" data-rel="lightbox-gallery-JmsB5yS2" data-rl_title="" data-rl_caption="" title=""><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6.png" alt="" width="965" height="243" class="alignnone size-full wp-image-3971" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6.png 965w, https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6-300x76.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6-768x193.png 768w" sizes="(max-width: 965px) 100vw, 965px" /></a></p>
<p>Já pode autenticar com seu token (ainda não terá logs, então não adianta querer fazer buscas rsrsrs)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6_search.png" data-rel="lightbox-gallery-JmsB5yS2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6_search.png" alt="" width="991" height="253" class="alignnone size-full wp-image-3974" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6_search.png 991w, https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6_search-300x77.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/mikrotik_logs_ipv6_search-768x196.png 768w" sizes="auto, (max-width: 991px) 100vw, 991px" /></a></p>
<p>Se alguém tiver ideias melhores/criticas todas são bem vindas, sinta-se a vontade para criar forks do projeto. </p>
<p>Para entregar IPv6 em seu Mk é claro que  precisa ter conectividade v6 em seu concentrador PPPoE (Não vou entrar em detalhes nessa parte pois entraria na questão roteamento da sua rede, mas se vale de ajuda como dica um iBGP/OSPF resolve fácil)</p>
<p>Servidor preparado para receber os logs vamos ao routerOS/Mikrotik. Você precisará criar duas Pool, uma para <strong>WAN</strong> outra para a <strong>LAN</strong>, como recomendação do nic.br para LAN do cliente devemos enviar um prefixo /56 (mas isso não é uma regra). A calcular pode ajudar muito nessa parte. No meu exemplo vou reservar um <strong>prefixo /48</strong> para entregar <strong>prefixos /64 na WAN</strong> (65.536 prefixos/64), e um <strong>prefixo /45</strong> entregando <strong>prefixos /56</strong> oque daria 2.048 prefixos (clientes).</p>
<p>Ex 2001:db8:1000::/48 (WAN)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1.png" data-rel="lightbox-gallery-JmsB5yS2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1.png" alt="" width="1568" height="814" class="alignnone size-full wp-image-3939" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1.png 1568w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1-300x156.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1-1024x532.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1-768x399.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc1-1536x797.png 1536w" sizes="auto, (max-width: 1568px) 100vw, 1568px" /></a></p>
<p>Ex 2001:db8:2000::/45 (LAN)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2.png" data-rel="lightbox-gallery-JmsB5yS2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2.png" alt="" width="1571" height="831" class="alignnone size-full wp-image-3940" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2.png 1571w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2-300x159.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2-1024x542.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2-768x406.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/01/calc2-1536x812.png 1536w" sizes="auto, (max-width: 1571px) 100vw, 1571px" /></a></p>
<p><strong>IPv6 -> Pool</strong><br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/pool_v6.png" data-rel="lightbox-gallery-JmsB5yS2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/pool_v6.png" alt="" width="538" height="182" class="alignnone size-full wp-image-3942" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/pool_v6.png 538w, https://blog.remontti.com.br/wp-content/uploads/2020/01/pool_v6-300x101.png 300w" sizes="auto, (max-width: 538px) 100vw, 538px" /></a></p>
<p>Alteramos no profile. Menu PPP aba Profiles.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_1.png" data-rel="lightbox-gallery-JmsB5yS2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_1.png" alt="" width="1138" height="658" class="alignnone size-full wp-image-3943" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_1.png 1138w, https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_1-300x173.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_1-1024x592.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_1-768x444.png 768w" sizes="auto, (max-width: 1138px) 100vw, 1138px" /></a><br />
<strong>Remote IPv6 Prefix Pool</strong> selecione sua <strong>pool_wan</strong> e <strong>DHCPv6 PD Pool </strong>sua <strong>pool_lan</strong></p>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_2.png" data-rel="lightbox-gallery-JmsB5yS2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_2.png" alt="" width="546" height="250" class="alignnone size-full wp-image-3944" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_2.png 546w, https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_2-300x137.png 300w" sizes="auto, (max-width: 546px) 100vw, 546px" /></a><br />
Na abra Protocol, Use IPv6 selecione yes.</p>
<p>Vamos ao pulo do gato na aba <strong>Scripts</strong>. A ideia aqui é toda vez que um  PPPoE conectar ou desconectar ele execute um script. Vai ser necessário que você altere o TOKEN que você configurou lá no <strong>config.php</strong>, informe a URL (URLUP) correta que encontrará seu arquivo log6.php e em <strong>checkconnection</strong> informe o IP do seu servidor (explico o motivo a seguir).</p>
<pre class="remontti-code">:global TOKEN &quot;xxxxxxxxxxxxxxxx&quot;;
:global URLUP &quot;http://logs6.remontti.com.br/log6.php&quot;;
:global checkconnection &quot;200.200.200.200&quot;;</pre>
<p>A lógica é: Antes de tentar enviar as informações/valores (via post ao log6.php) fazer uma verificação se a conexão exite com o servidor de log, isso foi necessário ao simular uma "queda de energia", as vezes ele pode autenticar antes de conseguir uma conexão (se seu o usuários estiver no routerOS e ai perdemos todos os logs) nesse caso ele fica aguardando por até 5 min na tentativa (ping ao ip checkconnection) antes prosseguir, caso exista uma conexão (checkconnection) então prossegue com o script coletando as informações. </p>
<p>Eu aproveitei coletar IPv4 como <strong>localAddr</strong> (NAS), <strong>remoteAddr</strong> (IPv4 entregue ao cliente) isso vai facilitar também em uma analise se você quiser bater com os dados do freeradius (radacct), já aproveitei também para capturar o <strong>callerId</strong> (MAC), serviço PPP <strong>calledId</strong>. Acredito que com essas informações podem ser uteis para outros fins. Seguindo o script todo o PPPoE que subir ele vai criar um prefixo (WAN) <strong>RemoteIPv6</strong> e em seguida precisei fazer um while que setei 60 seg para que a cada segundo ele tente identificar em <strong>/ipv6 dhcp-server binding</strong> se o cliente solicitou o prefixo que ele vai auto se configurar em sua LAN, passando por esses requisitos ele irai gerar um LOG (<a href="https://blog.remontti.com.br/2674" rel="noopener noreferrer" target="_blank">que você também pode estar salvando em um servidor de log remoto</a>) e finalizando fará um fetch com os dados do binding caso ele consiga ou enviará null para a URL e assim o servidor salva-lo no banco de dados. Você verá dois logs na tela de logs, um azul quando uma conexão subir e um vermelho quando desconectar, se você desejar não ter esses logs é só remover as linha "<em>log warning message=..... / :log error message=.....</em>"</p>
<p>Acesse PPP vá até a aba profile e configure os script do profile. Não esqueça de alterar as variáveis globais.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_ipv6_mikrotik_script.png" data-rel="lightbox-gallery-JmsB5yS2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_ipv6_mikrotik_script-300x171.png" alt="" width="300" height="171" class="alignnone size-medium wp-image-3935" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_ipv6_mikrotik_script-300x171.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_ipv6_mikrotik_script-768x439.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/01/profile_ipv6_mikrotik_script.png 814w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
<strong>On UP</strong></p>
<pre class="remontti-code">{
  :global TOKEN &quot;xxxxxxxxxxxxxxxx&quot;;
  :global URLUP &quot;http://________________/logs6/log6.php&quot;;
  :global checkconnection &quot;200.200.200.200&quot;;
  :local ii 0;
  :local tt 300; # Aguarda até 5min para tentar 
  while ( $ii &lt; $tt &#038;&#038; ([/ping $checkconnection count=1]=0) ) do={
    :put $ii
    :set $ii ($ii + 1)
    :delay delay-time=1s
    :log error &quot;Awaiting connection ... $checkconnection&quot;;
  }
  :local localAddr $&quot;local-address&quot;
  :local remoteAddr $&quot;remote-address&quot;
  :local callerId $&quot;caller-id&quot;
  :local calledId $&quot;called-id&quot;
  :local interfaceName [/interface get $interface name]
  :local RemoteIPv6 [/ipv6 nd prefix get value-name=prefix [find interface=$interfaceName]]
  :local i 0;
  :local x 1;  
  :local t 60; # Segundos aguardando ipv6 ser configurado no cliente
  while ($i &lt; $t &#038;&#038; [ :len [/ipv6 dhcp-server binding find server=$interfaceName] ] &lt; $x) do={
    :put $i
    :set $i ($i + 1)
    :delay delay-time=1s
  }
  if ($i = $t) do={
    :log warning message=&quot;UP: $user | $callerId | $calledId | $remoteAddr | $localAddr | $RemoteIPv6 | NULL&quot;
    /tool fetch url=&quot;$URLUP&quot; http-data=&quot;action=i&#038;token=$TOKEN&#038;user=$user&#038;mac=$callerId&#038;nas=$localAddr&#038;service=$calledId&#038;ipv4=$remoteAddr&#038;remoteipv6=$RemoteIPv6&quot; http-method=post
  } else={
    :local DHCPv6PD [/ipv6 dhcp-server binding get value-name=address [find server=$interfaceName]]
    :log warning message=&quot;UP: $user | $callerId | $calledId | $remoteAddr | $localAddr | $RemoteIPv6 | $DHCPv6PD&quot;
    /tool fetch url=&quot;$URLUP&quot; http-data=&quot;action=i&#038;token=$TOKEN&#038;user=$user&#038;mac=$callerId&#038;nas=$localAddr&#038;service=$calledId&#038;ipv4=$remoteAddr&#038;remoteipv6=$RemoteIPv6&#038;dhcpv6pd=$DHCPv6PD&quot; http-method=post
  }
  file remove log6.php
}</pre>
<p>E ao desconectar vamos enviar ao servidor que o mesmo descontou.<br />
<strong>On Down</strong></p>
<pre class="remontti-code">{
  :global TOKEN &quot;xxxxxxxxxxxxxxxx&quot;
  :global URLDOWN &quot;http://________________/logs6/log6.php&quot;
  :local localAddr $&quot;local-address&quot;
  :local callerId $&quot;caller-id&quot;
  /tool fetch url=&quot;$URLDOWN&quot; http-data=&quot;action=u&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr&quot; http-method=post
  :log warning message=&quot;DOWN: $user | $callerId | $localAddr&quot;
  file remove log6.php
}</pre>
<p>Para concluir em IPv6 -> ND<br />
<img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/ipv6_nd.png" alt="" width="668" height="472" class="alignnone size-full wp-image-3957" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/ipv6_nd.png 668w, https://blog.remontti.com.br/wp-content/uploads/2020/01/ipv6_nd-300x212.png 300w" sizes="auto, (max-width: 668px) 100vw, 668px" /><br />
Marque todas as opções.</p>
<p>No menu <strong>IP -> DNS </strong>também informe os DNS IPv6. Só assim o cliente irá aprender um DNSv6 (<em>Advertise DNS</em>)</p>
<p>Agora todo PPPoE que autenticar um log será registrado, o legal aqui é que se alguém não utiliza Radius poderá também ter um log <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>No arquivo log6.php que recebe os logs sempre que um usuário conectar ele irá verificar se não existe uma conexão em aberta, pois em casos de quedas de energia não vai existir tempo para ele informar que o pppoe desconectou, então ele fecha a conexão com a hora da nova conexão, logo esse IP pode ter sido utilizado por algum outro usuário, neste caso ele registra a hora que fechou a conexão com "falha" (<strong>failure</strong>), para no caso de uma investigação você observar se o mesmo ip não teve algum outro usuário que usou na horário solicitado.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti.png" data-rel="lightbox-gallery-JmsB5yS2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti.png" alt="" width="1661" height="398" class="alignnone size-full wp-image-3946" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti.png 1661w, https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti-300x72.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti-1024x245.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti-768x184.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/01/logs_ipv6_remontti-1536x368.png 1536w" sizes="auto, (max-width: 1661px) 100vw, 1661px" /></a></p>
<p>Pelo phpMyAdmin também fica muito fácil de fazer buscas.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/phpmyadmin_log_ipv6.png" data-rel="lightbox-gallery-JmsB5yS2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/phpmyadmin_log_ipv6-300x178.png" alt="" width="300" height="178" class="alignnone size-medium wp-image-3959" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/phpmyadmin_log_ipv6-300x178.png 300w, https://blog.remontti.com.br/wp-content/uploads/2020/01/phpmyadmin_log_ipv6-1024x607.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2020/01/phpmyadmin_log_ipv6-768x455.png 768w, https://blog.remontti.com.br/wp-content/uploads/2020/01/phpmyadmin_log_ipv6.png 1408w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Para quem deseja bloquear um cliente IPv6, uma solução é no Router criar outra Pool6 com uma classe "invalida" por exemplo 2001:db8:6666::/48, e no freeradius usar o attibute <strong>Mikrotik-Delegated-IPv6-Pool</strong>, pode ser na tabela radreply (dizendo para qual usuário) ou para um  grupo de configurações (radgroupreply) "plano".</p>
<p>Mikrotik:<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2020/01/drop_ipv6.png" data-rel="lightbox-gallery-JmsB5yS2" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2020/01/drop_ipv6.png" alt="" width="544" height="292" class="alignnone size-full wp-image-3963" srcset="https://blog.remontti.com.br/wp-content/uploads/2020/01/drop_ipv6.png 544w, https://blog.remontti.com.br/wp-content/uploads/2020/01/drop_ipv6-300x161.png 300w" sizes="auto, (max-width: 544px) 100vw, 544px" /></a></p>
<p>Freeradius<br />
Ex.: <strong>radreply </strong></p>
<pre class="remontti-code">INSERT INTO `radreply` (`username`, `attribute`, `op`, `value`) VALUES
(&#039;nome_user&#039;, &#039;Mikrotik-Delegated-IPv6-Pool&#039;, &#039;=&#039;, &#039;ipv6_drop&#039;);</pre>
<p>Ex.: <strong>radgroupreply</strong></p>
<pre class="remontti-code">INSERT INTO `radgroupreply` (`groupname`, `attribute`, `op`, `value`) VALUES
(&#039;PLANO_BLOQUEADO&#039;, &#039;Mikrotik-Delegated-IPv6-Pool&#039;, &#039;=&#039;, &#039;ipv6_drop&#039;);</pre>
<p>Desta forma o routerOS interpretará o nome da pool pelo atriburo Mikrotik-Delegated-IPv6-Pool, e assim que o cliente logar ele não pegará do bloco válido. <em>Até poderia usar uma válido e bloquear no firewall (mas isso é coisa de sistema amador #ficadica).</em>  </p>
<p>Se seu freradius é antigo (v2.x) precisará ter o <a href="https://wiki.mikrotik.com/wiki/Manual:RADIUS_Client/vendor_dictionary" rel="noopener noreferrer" target="_blank">dictionary</a> atualizado.</p>
<p>Vou deixar um exemplo de como configurar um pppoe cliente em um mikrotik, já que percebi um bug quando ele precisa renovar seu IPv6.</p>
<pre class="remontti-code">/interface pppoe-client
add add-default-route=yes disabled=no interface=ether1 name=pppoe-out1 password=SENHA use-peer-dns=yes user=SENHA

/ipv6 dhcp-client
add interface=pppoe-out1 pool-name=DHCPv6PD pool-prefix-length=56 request=prefix

/ipv6 address
add advertise=yes from-pool=DHCPv6PD interface=INTERFACE_LAN

/ppp profile
set *0 on-up=&quot;{\r\
    \n  /delay delay-time=5s\r\
    \n  /ipv6 dhcp-client renew numbers=0\r\
    \n  /delay delay-time=2s\r\
    \n  /ipv6 dhcp-client renew numbers=0\r\
    \n}&quot;
/ipv6 firewall mangle
add action=change-mss chain=forward new-mss=clamp-to-pmtu passthrough=yes \
    protocol=tcp tcp-flags=syn
</pre>
<p>Gambiarazinha no profile para renovar o IP sem dor de cabeça toda vez que ele autenticar (bugs)</p>
<pre class="remontti-code">{
  /delay delay-time=5s
  /ipv6 dhcp-client renew numbers=0
  /delay delay-time=2s
  /ipv6 dhcp-client renew numbers=0
}</pre>
<p>Gostou? Espero que você consiga implementar seu IPv6 e esteja seguro com os logs armazenado! </p>
<p>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!<br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<h3> RouterOS v7</h3>
<p>Descomente os <strong># :log warning "DEBUG>...."</strong> se precisar debugar o script, ou remova para deixar mais enxuto o script.</p>
<p><strong>UP</strong></p>
<pre class="remontti-code-blue">
{
  # :log warning &quot;DEBUG&gt; UP: Iniciando o script logs6&quot;;
  :global TOKEN &quot;xxxxxxxxxxxxxxxx&quot;;
  :global URLUP &quot;http://logs6.remontti.com.br/log6.php&quot;;
  :global checkconnection &quot;10.0.0.1&quot;;
  :local ii 0;
  :local tt 60;
  while ( $ii &lt; $tt &#038;&#038; ([/ping $checkconnection count=1]=0) ) do={
    :put $ii
    :set $ii ($ii + 1)
    :delay delay-time=1s
    :log error &quot;Aguardando conexao com servidor... $checkconnection&quot;;
  }
  :local localAddr $&quot;local-address&quot;
  # :log warning &quot;DEBUG&gt; localAddr = $localAddr&quot;;
  :local remoteAddr $&quot;remote-address&quot;
  # :log warning &quot;DEBUG&gt; remoteAddr = $remoteAddr&quot;;
  :local callerId $&quot;caller-id&quot;
  # :log warning &quot;DEBUG&gt; callerId = $callerId&quot;;
  :local calledId $&quot;called-id&quot;
  # :log warning &quot;DEBUG&gt; calledId = $calledId&quot;;
  :local userName $&quot;user&quot;
  # :log warning &quot;DEBUG&gt; userName = $userName&quot;;
  :local interfaceID $&quot;interface&quot;
  # :log warning &quot;DEBUG&gt; interfaceID = $interfaceID&quot;;
  :local interfaceName [/interface get $interfaceID name]  
  # :log warning &quot;DEBUG&gt; interfaceName = $interfaceName&quot;;
  :local RemoteIPv6 [/ipv6 nd prefix get value-name=prefix [find interface=$interfaceName]]
  # :log warning &quot;DEBUG&gt; RemoteIPv6 = $RemoteIPv6&quot;;
  :local i 0;
  :local x 1;  
  :local t 60;
  while ($i &lt; $t &#038;&#038; [ :len [/ipv6 dhcp-server binding find server=$interfaceName] ] &lt; $x) do={    
    :put $i    
    :set $i ($i + 1)
    :delay delay-time=1s
    # :log warning &quot;DEBUG&gt; Aguardando IPv6 da LAN de $userName ($i)s&quot;;
  }
  :local file [/file find name=&quot;log6.php&quot;]
  :if ([:len $file] &gt; 0) do={
      /file remove log6.php
  }  
  if ($i = $t) do={
    # :log warning &quot;DEBUG&gt; IPv6 LAN: não descoberto descoberto&quot;;
    :log warning message=&quot;UP: $user | $callerId | $calledId | $remoteAddr | $localAddr | $RemoteIPv6 | NULL&quot;
    # :log warning &quot;DEBUG&gt; Executando fetch UP: $URLUP http-data=action=i&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr&amp;service=$calledId&amp;ipv4=$remoteAddr&amp;remoteipv6=$RemoteIPv6 http-method=post&quot;
    /tool/fetch url=&quot;$URLUP&quot; http-data=&quot;action=i&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr&amp;service=$calledId&amp;ipv4=$remoteAddr&amp;remoteipv6=$RemoteIPv6&quot; http-method=post
  } else={    
    :local DHCPv6PD [/ipv6 dhcp-server binding get value-name=address [find server=$interfaceName]]
    # :log warning &quot;DEBUG&gt; IPv6 LAN: Descoberto descoberto $DHCPv6PD&quot;;
    :log warning message=&quot;UP: $user | $callerId | $calledId | $remoteAddr | $localAddr | $RemoteIPv6 | $DHCPv6PD&quot;
    # :log warning &quot;DEBUG&gt; Executando fetch UP: $URLUP http-data=action=i&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr&amp;service=$calledId&amp;ipv4=$remoteAddr&amp;remoteipv6=$RemoteIPv6&amp;dhcpv6pd=$DHCPv6PD http-method=post&quot;;
    /tool/fetch url=&quot;$URLUP&quot; http-data=&quot;action=i&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr&amp;service=$calledId&amp;ipv4=$remoteAddr&amp;remoteipv6=$RemoteIPv6&amp;dhcpv6pd=$DHCPv6PD&quot; http-method=post
  }
  :delay delay-time=1s
  # :log warning &quot;DEBUG&gt; Removendo arquivo log6.php&quot;;
  :local file [/file find name=&quot;log6.php&quot;]
  :if ([:len $file] &gt; 0) do={
      /file remove log6.php
  }
  # :log warning &quot;DEBUG&gt; Script concluído.&quot;
}
</pre>
<p><strong>DOWN</strong></p>
<pre class="remontti-code-blue">
{
  # :log warning &quot;DEBUG&gt; DOWN: Iniciando o script logs6&quot;;
  :global TOKEN &quot;xxxxxxxxxxxxxxxx&quot;
  :global URLDOWN &quot;http://logs6.remontti.com.br/log6.php&quot;
  :local localAddr $&quot;local-address&quot;
  # :log warning &quot;DEBUG&gt; localAddr = $localAddr&quot;;
  :local callerId $&quot;caller-id&quot;
  # :log warning &quot;DEBUG&gt; calledId = $calledId&quot;;
  :local file [/file find name=&quot;log6.php&quot;]
  :if ([:len $file] &gt; 0) do={
      /file remove log6.php
  }  
  # :log warning &quot;DEBUG&gt; Executando fetch DOWN: $URLDOWN http-data=action=u&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr http-method=post&quot;;
  /tool/fetch url=&quot;$URLDOWN&quot; http-data=&quot;action=u&amp;token=$TOKEN&amp;user=$user&amp;mac=$callerId&amp;nas=$localAddr&quot; http-method=post
  :log warning message=&quot;DOWN: $user | $callerId | $localAddr&quot;
  :delay delay-time=1s
  # :log warning &quot;DEBUG&gt; Removendo arquivo log6.php&quot;;
  :local file [/file find name=&quot;log6.php&quot;]
  :if ([:len $file] &gt; 0) do={
      /file remove $file
  }
  # :log warning &quot;DEBUG&gt; Script concluído.&quot;
}
</pre>
<p>O post <a href="https://blog.remontti.com.br/3931">Como entregar IPv6+IPv4 no Mikrotik/RouterOS através de PPPoE/DHCPv6 PD e registrando os logs em um banco de dados</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/3931/feed</wfw:commentRss>
			<slash:comments>42</slash:comments>
		
		
			</item>
	</channel>
</rss>
