{"id":4496,"date":"2018-07-25T14:23:36","date_gmt":"2018-07-25T17:23:36","guid":{"rendered":"https:\/\/blog.clusterweb.com.br\/?p=4496"},"modified":"2018-07-25T14:23:36","modified_gmt":"2018-07-25T17:23:36","slug":"ipv6-completo-net-virtua","status":"publish","type":"post","link":"https:\/\/blog.clusterweb.com.br\/?p=4496","title":{"rendered":"IPV6 COMPLETO NET VIRTUA"},"content":{"rendered":"<h1>INTRODU\u00c7\u00c3O<\/h1>\n<p>&nbsp;<\/p>\n<div>Resolvi escrever este artigo no intuito de ajudar quem deseja come\u00e7ar a utilizar IPv6 em suas redes internas.<\/p>\n<p>Neste setup optei por desativar completamente a rede IPv4 para a rede interna, utilizando nat64 ao inv\u00e9s de utilizar pilha dupla.<\/p>\n<p>O acesso a endere\u00e7os IPv4 ser\u00e3o feitos atrav\u00e9s do IPv4 da WAN, atrav\u00e9s de NAT nos endere\u00e7os convertidos pela interface 6to4.<\/p>\n<p>Para o cliente \u00e9 transparente. Ele recebe um IPv6 falso, j\u00e1 que o IPv4 n\u00e3o existe na LAN.<\/p>\n<p>Este artigo n\u00e3o engloba o firewall, voc\u00ea deve ter suas regras tanto para v4 como v6.<\/p>\n<p>Para esta configura\u00e7\u00e3o, foi utilizada a distribui\u00e7\u00e3o\u00a0<em>Debian<\/em>, sendo eth0 a LAN e ETH1 a WAN. Na LAN, funcionar\u00e1 somente IPv6, enquanto a WAN em pilha dupla.<br \/>\n<!--more--><\/p>\n<h1>AS PRINCIPAIS DIFEREN\u00c7AS<\/h1>\n<p>Antes de come\u00e7ar \u00e9 necess\u00e1rio entender as principais diferen\u00e7as pr\u00e1ticas. Entre elas:<\/p>\n<p>A interface pode possuir v\u00e1rios IPs ao mesmo tempo, entre eles:<\/p>\n<ul>\n<li>IP local, come\u00e7ado com fe80::\/64 (auto configurado durante o boot)<\/li>\n<li>IP global (valido), com prefixo delegado pela net (recebi 2804:14d:5ca9::\/64)<\/li>\n<li>IP local de um servidor DHCP com prefixo fd00::\/64, mas n\u00e3o \u00e9 necess\u00e1rio, a fe80 faz o mesmo papel<\/li>\n<\/ul>\n<p>O default gateway e o DNS passam a ser anunciados atrav\u00e9s de RA (router advertisement) com o radvd, sem a necessidade de um servidor DHCPv6.<\/p>\n<p>As esta\u00e7\u00f5es Windows por algum motivo ignoram o DNS anunciado pelo RA, tornando obrigat\u00f3rio o uso do DHCP-server.<\/p>\n<p>Utilizaremos o wide-dhcpv6-server para anunciar o nosso DNS e opcionalmente o prefixo local fd00::\/64.<\/p><\/div>\n<h1>PR\u00c9-REQUISITOS<\/h1>\n<p>Conecte ao servidor por ssh na porta LAN, pelo IPv6 local (fe80:&#8230;:&#8230;).<\/p>\n<p>Instale os pacotes necess\u00e1rios:<\/p>\n<p><strong># apt-get install wide-dhcpv6-client wide-dhcpv6-server radvd ndisc6 bind9 tayga<\/strong><\/p>\n<p>Edite o arquivo interfaces e deixe como abaixo. No meu caso, a eth0 \u00e9 a LAN, e a ETH1 a WAN:<\/p>\n<p><strong># vim \/etc\/networks\/interfaces<\/strong><\/p>\n<div>\n<div class=\"codigo\">auto eth0<br \/>\nallow-hotplug eth0<br \/>\niface eth0 inet manual<br \/>\niface eth0 inet6 manual<\/p>\n<p>auto eth1<br \/>\nallow-hotplug eth1<br \/>\niface eth1 inet dhcp<br \/>\niface eth1 inet6 manual<\/p><\/div>\n<p>Configure o dhcp-client V4 para configurar o\u00a0<em>resolv.conf<\/em>\u00a0com o endere\u00e7o localhost, acrescentando as 2 linhas &#8220;supersede&#8221;, como no exemplo abaixo:<\/p>\n<p><strong># vim \/etc\/dhcp\/dhclient.conf<\/strong><\/p>\n<div class=\"codigo\">option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;<\/p>\n<p>supersede domain-name-servers localhost;<br \/>\nsupersede domain-name &#8220;rede.local&#8221;;<\/p>\n<p>send host-name = gethostname();<br \/>\nrequest subnet-mask, broadcast-address, time-offset, routers,<br \/>\ndomain-name, domain-name-servers, domain-search, host-name,<br \/>\nnetbios-name-servers, netbios-scope, interface-mtu,<br \/>\nrfc3442-classless-static-routes, ntp-servers;<\/p><\/div>\n<p>Feito isto, reinicie o servidor.<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<h1>WIDE-DHCPV6-CLIENT<\/h1>\n<p>&nbsp;<\/p>\n<div>A NET fornece um IPv6 v\u00e1lido e 1 sub-rede \/64. Com a configura\u00e7\u00e3o abaixo, o\u00a0<em>wide-dhcpv6-client<\/em>\u00a0ir\u00e1 atribuir este IP na interface WAN(eth1) e delegar a sub-rede na interface LAN(eth0):<\/p>\n<p><strong># vim \/etc\/wide-dhcpv6\/dhcp6c.conf<\/strong><\/p>\n<div class=\"codigo\">interface eth1 {<br \/>\nsend ia-na 1;<br \/>\nsend ia-pd 1;<br \/>\n};<\/p>\n<p>id-assoc na 1 { };<\/p>\n<p>id-assoc pd 1 {<br \/>\nprefix-interface eth0 {<br \/>\nsla-len 0;<br \/>\nsla-id 0;<br \/>\nifid 1;<br \/>\n};<br \/>\n};<\/p><\/div>\n<p>Certifique-se que o dhcp6-client esteja escutando na interface WAN:<\/p>\n<p><strong># vim \/etc\/default\/wide-dhcpv6-client<\/strong><\/p>\n<div class=\"codigo\"><span class=\"comentario\">#Interface WAN<\/span>\u00a0INTERFACES=&#8221;eth1&#8243;<\/div>\n<p>Agora precisamos descobrir qual prefixo a net delegou para configurarmos os outros servi\u00e7os.<\/p>\n<p>Defina estas 3 vari\u00e1veis no kernel. Posteriormente salvaremos elas em um arquivo que ser\u00e1 executado no boot.<\/p>\n<p><strong># echo &#8220;1&#8221; &gt; \/proc\/sys\/net\/IPv4\/ip_forward<br \/>\n# echo &#8216;2&#8217; &gt; \/proc\/sys\/net\/IPv6\/conf\/eth1\/accept_ra<br \/>\n# echo &#8216;1&#8217; &gt; \/proc\/sys\/net\/IPv6\/conf\/all\/forwarding<\/strong><\/p>\n<p>Execute o wide-dhcpv6-client em modo console:<\/p>\n<p><strong># \/usr\/sbin\/dhcp6c -c \/etc\/wide-dhcpv6\/dhcp6c.conf -p \/var\/run\/dhcp6c-eth0-pd.pid -dDf eth1<\/strong><\/p>\n<p>Procure no console por algo como:<\/p>\n<p><samp>IA_PD prefix: 2804:14d:5ca9:85ea::\/64<\/samp><\/p>\n<p>Este \u00e9 o prefixo \/64 que a NET atribuiu para a rede interna. Precisamos dar permiss\u00e3o para ele no DNS e firewall.<\/p>\n<p>Em seguida inicie o servi\u00e7o:<\/p>\n<p><strong># \/etc\/init.d\/wide-dhcpv6-client start<\/strong><\/p>\n<p>Digite &#8220;ifconfig&#8221;. Se tudo correu bem, voc\u00ea ter\u00e1 isto:<\/p>\n<pre>eth0: flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt;  mtu 1500\r\n        inet6 fe80::21f:d0ff:fee1:ff77  prefixlen 64  scopeid 0x20&lt;link&gt;   ( IPv6 Local da LAN )\r\n        inet6 2804:14d:5ca9:85ea::1  prefixlen 64  scopeid 0x0&lt;global&gt;     ( IPv6 da rede delegada pela net. \u00c9 o default gateway da LAN)\r\n   \r\neth1: flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt;  mtu 1500\r\n        inet 186.221.151.6  netmask 255.255.240.0  broadcast 186.221.159.255   (Ipv4 wan, vai ser usado para acessar sites sem IPv6)\r\n        inet6 2804:14d:5ca9::5b7  prefixlen 128  scopeid 0x0&lt;global&gt;  (Ipv6 wan do servidor atribu\u00eddo pela net) \r\n        inet6 fe80::260:8ff:fe1f:c868  prefixlen 64  scopeid 0x20&lt;link&gt; (Ipv6 wan local) \r\n \r\n<\/pre>\n<p>Explicando:<\/p>\n<ul>\n<li>IPs iniciados fe80 s\u00e3o locais, auto-configurados durante o boot e n\u00e3o s\u00e3o rote\u00e1veis pela internet.<\/li>\n<li>IPs iniciados com 2804 foram atribu\u00eddos pela NET e s\u00e3o rote\u00e1veis pela internet.<\/li>\n<\/ul>\n<p>Se estes endere\u00e7os n\u00e3o apareceram, revise os passos anteriores.<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<h1>PROBLEMA COM ROTA PADR\u00c3O EXPIRANDO. SOLU\u00c7\u00c3O: NDISC6<\/h1>\n<p>&nbsp;<\/p>\n<div>Por algum motivo, depois de algum tempo a conectividade se perdia e percebi que a rota padr\u00e3o n\u00e3o era renovada na WAN.<\/p>\n<p>N\u00e3o vou entrar em detalhes t\u00e9cnicos, mas resolvi este problema agendando o ndisc6 no cron:<\/p>\n<p><strong># vim \/etc\/crontab<\/strong><\/p>\n<div class=\"codigo\">*\/5 *\u00a0\u00a0* * *\u00a0\u00a0 root\u00a0\u00a0\u00a0\u00a0\/bin\/rdisc6 -1 -q eth1<\/div>\n<h1>O NAT64 (TAYGA) E A INTEGRA\u00c7\u00c3O COM O DNS<\/h1>\n<p>O Nat 64 \u00e9 feito atrav\u00e9s de uma interface virtual 6to4 chamada tayga, integrado a um servidor DNS com dns64 configurado.<\/p>\n<p>N\u00e3o vou entrar em detalhes t\u00e9cnicos, mas funciona assim:<\/p>\n<p>A esta\u00e7\u00e3o consulta um host em nosso servidor DNS e nosso DNS consulta os root servers.<\/p>\n<ul>\n<li>Se o root server responder com um IPv6 valido, nosso servidor rotear\u00e1 por IPv6, fim.<\/li>\n<li>Se o root server responder com IPv4, o nosso dns vai responder com um endere\u00e7o IPv6 falso, gerado atrav\u00e9s do prefixo que configuraremos no bind + endere\u00e7o IPv4 que o root server respondeu.<\/li>\n<\/ul>\n<p>A interface 6to4 vai retirar o prefixo IPv6 falso, converter para IPv4 e mascarar uma rede local IPv4 192.168.253.x. Feito isto, fazemos o mascaramento (nat) e enviamos pelo IPv4 da wan.<\/p>\n<p>Na volta, \u00e9 o processo inverso: o servidor recebe a resposta pelo IPv4 da wan, faz o nat e entrega para a interface 6to4, que converte novamente para IPv6 encaminha para a esta\u00e7\u00e3o.<\/p>\n<p>Vamos \u00e0 configura\u00e7\u00e3o do Tayga!<\/p>\n<p>Edite os arquivos abaixo, deixe igual e reinicie o servi\u00e7o:<\/p>\n<p><strong># vim \/etc\/tayga.conf<\/strong><\/p>\n<div class=\"codigo\">IPv4-addr 192.168.253.1<br \/>\nprefix 2001:db8:1:ffff::\/96<br \/>\ndynamic-pool 192.168.253.0\/24<\/div>\n<p><strong># vim \/etc\/default\/tayga<\/strong><\/p>\n<div class=\"codigo\">RUN=&#8221;yes&#8221;<br \/>\nCONFIGURE_IFACE=&#8221;yes&#8221;<br \/>\nCONFIGURE_NAT44=&#8221;yes&#8221;<br \/>\nDAEMON_OPTS=&#8221;&#8221;<br \/>\nIPV4_TUN_ADDR=&#8221;&#8221;<br \/>\nIPV6_TUN_ADDR=&#8221;&#8221;<\/div>\n<p>Agora reiniciamos o servi\u00e7o:<\/p>\n<p><strong># service tayga restart<\/strong><\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<h1>BIND9 COM DNS64<\/h1>\n<p>&nbsp;<\/p>\n<div>A configura\u00e7\u00e3o do\u00a0<em>bind<\/em>\u00a0\u00e9 simples, consiste em dar permiss\u00e3o aos endere\u00e7os locais, ao prefixo delegado e acrescentar a linha &#8220;dns64 2001:db8:1:ffff::\/96 { clients { any; }; };&#8221;.<\/p>\n<p>Seu arquivo deve estar semelhante a este abaixo:<\/p>\n<p><strong># vim \/etc\/bind\/named.conf.options<\/strong><\/p>\n<div class=\"codigo\">listen-on-v6 { any; };<br \/>\nlisten-on { any; };<br \/>\ndns64 2001:db8:1:ffff::\/96 { clients { any; }; };<br \/>\nallow-query { 127.0.0.0\/8; fe80::\/64; 2804:14d:5ca9::\/64; };\u00a0<span class=\"comentario\">#( 2804:14d:5ca9::\/64 = prefixo delegado pelo provedor)<\/span><\/div>\n<p>Certifique-se que o resolv.conf est\u00e1 desabilitado:<\/p>\n<p><strong># vim \/etc\/default\/bind9<\/strong><\/p>\n<div class=\"codigo\">RESOLVCONF=no<\/div>\n<p>Agora basta reiniciar o servi\u00e7o:<\/p>\n<p><strong># service bind9 restart<\/strong><\/p>\n<h1>NAT, ROTEAMENTO E VARI\u00c1VEIS DO KERNEL<\/h1>\n<p>Agora iremos criar um script que ser\u00e1 carregado no boot, setando algumas vari\u00e1veis no kernel e criando algumas regras no netfilter.<\/p>\n<p>Crie o arquivo nat64, torne execut\u00e1vel, cole o conte\u00fado abaixo, execute e carregue durante o boot:<\/p>\n<p><strong># touch \/etc\/init.d\/nat64<br \/>\n# chmod +rx \/etc\/init.d\/nat64<br \/>\n# vi \/etc\/init.d\/nat64<\/strong><\/p>\n<div class=\"codigo\"><span class=\"comentario\">#! \/bin\/sh<br \/>\n### BEGIN INIT INFO<br \/>\n# Provides:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 NAT 6 to 4<br \/>\n# Required-Start:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $remote_fs $syslog<br \/>\n# Required-Stop:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$remote_fs $syslog<br \/>\n# Default-Start:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a02 3 4 5<br \/>\n# Default-Stop:<br \/>\n# Short-Description:\u00a0\u00a0\u00a0\u00a0Servi\u00e7o de NAT 6 to 4<br \/>\n### END INIT INFO<\/span><\/p>\n<p><span class=\"comentario\"># Variaveis do kernel<\/span><br \/>\necho &#8220;1&#8221; &gt; \/proc\/sys\/net\/IPv4\/ip_forward<br \/>\necho &#8216;2&#8217; &gt; \/proc\/sys\/net\/IPv6\/conf\/eth1\/accept_ra<br \/>\necho &#8216;1&#8217; &gt; \/proc\/sys\/net\/IPv6\/conf\/all\/forwarding<\/p>\n<p><span class=\"comentario\"># Faz o NAT para a rede local e permite o encaminhamento entre as interfaces\u00a0<\/span><br \/>\n#iptables -t nat -A POSTROUTING -s 192.168.253.0\/24 -o eth1 -j MASQUERADE<br \/>\niptables -A FORWARD -i eth1 -o nat64 -m state &#8211;state RELATED,ESTABLISHED -j ACCEPT<br \/>\niptables -A FORWARD -i nat64 -o eth1 -j ACCEPT<br \/>\niptables -A FORWARD -i nat64 -o eth0 -j ACCEPT<\/div>\n<p><strong># update-rc.d nat64 defaults<\/strong><\/p>\n<p>Agora reiniciar o servidor e verificar se tudo est\u00e1 funcionando corretamente.<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>INTRODU\u00c7\u00c3O &nbsp; Resolvi escrever este artigo no intuito de ajudar quem deseja come\u00e7ar a utilizar IPv6 em suas redes internas. Neste setup optei por desativar completamente a rede IPv4 para a rede interna, utilizando nat64 ao inv\u00e9s de utilizar pilha dupla. O acesso a endere\u00e7os IPv4 ser\u00e3o feitos atrav\u00e9s do IPv4 da WAN, atrav\u00e9s de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1082,730,1,830,540,772,42,51,495,68,271],"tags":[1198,143,1199,1200],"class_list":["post-4496","post","type-post","status-publish","format-standard","hentry","category-centos-7-rhel-7","category-clusterweb","category-viazap","category-debian","category-dhcp-2","category-dns-2","category-leitura-recomendada","category-linux-linuxrs","category-profissional-de-ti","category-redes-2","category-seguranca-2","tag-completo","tag-ipv6","tag-net","tag-virtua"],"_links":{"self":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4496","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4496"}],"version-history":[{"count":1,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4496\/revisions"}],"predecessor-version":[{"id":4497,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4496\/revisions\/4497"}],"wp:attachment":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4496"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4496"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4496"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}