{"id":398,"date":"2021-03-22T23:09:16","date_gmt":"2021-03-22T23:09:16","guid":{"rendered":"https:\/\/adrianotanaka.com.br\/?p=398"},"modified":"2022-03-11T19:17:45","modified_gmt":"2022-03-11T19:17:45","slug":"oci-rede-hub-spoke-libreswan","status":"publish","type":"post","link":"https:\/\/adrianotanaka.com.br\/index.php\/2021\/03\/22\/oci-rede-hub-spoke-libreswan\/","title":{"rendered":"OCI &#8211; Rede Hub Spoke + LibreSwan"},"content":{"rendered":"\n<p>A arquitetura Hub-and-Spoke \u00e9 uma das sugeridas pela Oracle na hora de montar o seu ambiente no OCI, nela possu\u00edmos uma rede  que fica a frente de outras redes e serve como concentrador(Hub) para redes mais internas, dessa forma podemos ter uma rede que entregue recursos de seguran\u00e7a(voc\u00ea pode por exemplo ter um Firewall na Hub e passar todas as outras subnets por ele) e facilita tamb\u00e9m o crescimento do seu ambiente(voc\u00ea pode fechar um Fastconnect com a Hub e criar rotas\/regas na spoke), aqui nesse post vou mostrar como fechar uma VPN em um ambiente que possua a topologia Hub-and-Spoke e se comunicar com todas as redes que est\u00e3o no OCI, abaixo a topologia que vamos ter ao final:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"364\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-2-1024x364.png\" alt=\"\" class=\"wp-image-401\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-2-1024x364.png 1024w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-2-300x107.png 300w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-2-768x273.png 768w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-2.png 1177w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Para esse exemplo, vou rodar em dois tenants diferentes, um deles vai rodar o Libreswan e no outro vamos usar o VPNaaS (nesse que temos nossa Hub-and-Spoke configurada).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ambiente Libreswan<\/h2>\n\n\n\n<p>Antes de usarmos o libreswan, precisamos fazer algumas configura\u00e7\u00f5es no nosso ambiente, nesse caso eu estou jogando todos os pacotes que trafegarem na nossa subnet para a interface de rede da VM do LibreSwan:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"570\" height=\"216\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-3.png\" alt=\"\" class=\"wp-image-402\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-3.png 570w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-3-300x114.png 300w\" sizes=\"auto, (max-width: 570px) 100vw, 570px\" \/><\/figure>\n\n\n\n<p>\u00c9 importante tamb\u00e9m marcarmos a op\u00e7\u00e3o skip source\/destination check da vnic do LibreSwan.<\/p>\n\n\n\n<p>Tamb\u00e9m ajustei a Security List para que ela permita o tr\u00e1fego que vem da nossa outra ponta:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"572\" height=\"135\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-4.png\" alt=\"\" class=\"wp-image-403\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-4.png 572w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-4-300x71.png 300w\" sizes=\"auto, (max-width: 572px) 100vw, 572px\" \/><figcaption>Sei que a ultima regra n\u00e3o \u00e9 necess\u00e1ria mas isso foi durante os testes<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Configura\u00e7\u00e3o LibreSwan<\/h2>\n\n\n\n<p>Existem diversos tutoriais na internet de como instalar e configurar um servidor LibreSwan, no nosso caso vou postar somente a configura\u00e7\u00e3o b\u00e1sica(lembre-se de ajustar ao seu ambiente e seguir o guia de VPNaaS):<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">conn hub\n         authby=secret\n         auto=start\n         pfs=yes\n         leftid=x.x.x.x    #IP PUBLICO OCI\n         left=x.x.x.x     #IP PUBLICO OCI\n         leftsubnets={192.168.0.0\/16,172.18.0.0\/16} #QUAIS REDES ESTAO NO HUB\n         right=10.100.0.6            #IP DA MAQUINA LIBRESWAN\n         rightid=y.y.y.y   #IP PUBLICO LIBRESWAN\n         rightsubnets={10.100.0.0\/16}    #REDES LIBRESWAN\n<\/pre>\n\n\n\n<p>A dica aqui \u00e9 o uso dos par\u00e2metros leftsubnet<strong>s<\/strong> e rightsubnet<strong>s<\/strong> que usamos para indicar que estamos trabalhando com mais de uma subnet em nosso setup, \u00e9 importante notar que ao usar o &#8220;s&#8221; no final, precisamos ter ele dos dois lados(n\u00e3o funciona se tentar usar leftsubnet<strong>s<\/strong> com rightsubnet por exemplo).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">OCI<\/h2>\n\n\n\n<p>No OCI temos as seguintes subnets (que v\u00e3o ser nossa Hub-and-Spoke):<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"569\" height=\"103\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-8.png\" alt=\"\" class=\"wp-image-410\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-8.png 569w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-8-300x54.png 300w\" sizes=\"auto, (max-width: 569px) 100vw, 569px\" \/><\/figure>\n\n\n\n<p>Dentro da VCN-SUP-HUB temos a seguinte subnet:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"453\" height=\"59\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-9.png\" alt=\"\" class=\"wp-image-411\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-9.png 453w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-9-300x39.png 300w\" sizes=\"auto, (max-width: 453px) 100vw, 453px\" \/><\/figure>\n\n\n\n<p>As seguintes tabelas de rota:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"649\" height=\"134\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-10.png\" alt=\"\" class=\"wp-image-412\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-10.png 649w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-10-300x62.png 300w\" sizes=\"auto, (max-width: 649px) 100vw, 649px\" \/><\/figure>\n\n\n\n<p>E as seguintes regras:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"449\" height=\"104\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-11.png\" alt=\"\" class=\"wp-image-413\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-11.png 449w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-11-300x69.png 300w\" sizes=\"auto, (max-width: 449px) 100vw, 449px\" \/><\/figure>\n\n\n\n<p>Na VCN-SUP-INTERNA temos a seguinte subnet:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"455\" height=\"66\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-12.png\" alt=\"\" class=\"wp-image-414\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-12.png 455w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-12-300x44.png 300w\" sizes=\"auto, (max-width: 455px) 100vw, 455px\" \/><\/figure>\n\n\n\n<p>As seguintes tabelas de rota:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"625\" height=\"94\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-13.png\" alt=\"\" class=\"wp-image-415\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-13.png 625w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-13-300x45.png 300w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/figure>\n\n\n\n<p>E as seguintes regras:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"387\" height=\"93\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-14.png\" alt=\"\" class=\"wp-image-416\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-14.png 387w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-14-300x72.png 300w\" sizes=\"auto, (max-width: 387px) 100vw, 387px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Local peering<\/h2>\n\n\n\n<p>O &#8220;segredo&#8221; da topologia Hub Spoke \u00e9 o uso do local peering para que duas VCNs diferentes se comuniquem por dentro da infraestrutura do OCI, aqui temos nosso local peering &#8220;lpg&#8221; configurado e dentro deles colocamos uma tabela de rotas(RT-LPG), isso \u00e9 feito dentro da subnet Hub:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"723\" height=\"75\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-16.png\" alt=\"\" class=\"wp-image-419\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-16.png 723w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-16-300x31.png 300w\" sizes=\"auto, (max-width: 723px) 100vw, 723px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"679\" height=\"411\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-17.png\" alt=\"\" class=\"wp-image-420\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-17.png 679w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-17-300x182.png 300w\" sizes=\"auto, (max-width: 679px) 100vw, 679px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">VPNaaS<\/h2>\n\n\n\n<p>Depois que nossa configura\u00e7\u00e3o de rede est\u00e1 feita, vamos subir um VPNaaS apontando para o nosso Libreswan, aqui devemos apontar o DRG que est\u00e1 vinculado \u00e0 rede HUB, o ponto importante aqui \u00e9 mudar a VPN de Static Routing para Policy Based e nela colocar as redes que estamos entregando:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"569\" height=\"316\" src=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-18.png\" alt=\"\" class=\"wp-image-421\" srcset=\"https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-18.png 569w, https:\/\/adrianotanaka.com.br\/wp-content\/uploads\/2021\/03\/image-18-300x167.png 300w\" sizes=\"auto, (max-width: 569px) 100vw, 569px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Testando<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Libreswan para OCI<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[opc@xxxxx ~]$ ip addr show\n1: lo: &lt;LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000\n    link\/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n    inet 127.0.0.1\/8 scope host lo\n       valid_lft forever preferred_lft forever\n2: ens3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UP group default qlen 1000\n    link\/ether 02:00:17:00:24:03 brd ff:ff:ff:ff:ff:ff\n    inet 10.100.0.2\/24 brd 10.100.0.255 scope global dynamic ens3\n       valid_lft 78172sec preferred_lft 78172sec\n[opc@xxxxx ~]$ traceroute 192.168.92.2\ntraceroute to 192.168.92.2 (192.168.92.2), 30 hops max, 60 byte packets\n 1  openswan.subnetlibre.vcnlibre.oraclevcn.com (10.100.0.6)  0.355 ms  0.334 ms  0.307 ms\n 2  * * *\n 3  * * *\n 4  * * *\n 5  192.168.92.2 (192.168.92.2)  10.234 ms  10.187 ms  10.164 ms\n[opc@xxxxx ~]$ ping -c 4 192.168.92.2\nPING 192.168.92.2 (192.168.92.2) 56(84) bytes of data.\n64 bytes from 192.168.92.2: icmp_seq=1 ttl=61 time=2.58 ms\n64 bytes from 192.168.92.2: icmp_seq=2 ttl=61 time=1.80 ms\n64 bytes from 192.168.92.2: icmp_seq=3 ttl=61 time=1.80 ms\n64 bytes from 192.168.92.2: icmp_seq=4 ttl=61 time=1.84 ms\n\n--- 192.168.92.2 ping statistics ---\n4 packets transmitted, 4 received, 0% packet loss, time 3005ms\nrtt min\/avg\/max\/mdev = 1.800\/2.009\/2.582\/0.334 ms\n[opc@xxxxx ~]$ traceroute 172.18.1.2\ntraceroute to 172.18.1.2 (172.18.1.2), 30 hops max, 60 byte packets\n 1  openswan.subnetlibre.vcnlibre.oraclevcn.com (10.100.0.6)  0.332 ms  0.292 ms  0.287 ms\n 2  * * *\n 3  * * *\n 4  172.18.1.2 (172.18.1.2)  1.503 ms !X  1.484 ms !X  1.462 ms !X\n[opc@xxxxx~]$ ping -c 4 172.18.1.2\nPING 172.18.1.2 (172.18.1.2) 56(84) bytes of data.\n64 bytes from 172.18.1.2: icmp_seq=1 ttl=61 time=1.98 ms\n64 bytes from 172.18.1.2: icmp_seq=2 ttl=61 time=2.11 ms\n64 bytes from 172.18.1.2: icmp_seq=3 ttl=61 time=1.92 ms\n64 bytes from 172.18.1.2: icmp_seq=4 ttl=61 time=1.85 ms\n\n--- 172.18.1.2 ping statistics ---\n4 packets transmitted, 4 received, 0% packet loss, time 3004ms\nrtt min\/avg\/max\/mdev = 1.858\/1.971\/2.112\/0.098 ms\n[opc@xxxxx ~]$\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">VCN-SPOKE (a mais interna) para LibreSwan<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[root@vm-interna opc]# ip addr show\n1: lo: &lt;LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000\n    link\/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n    inet 127.0.0.1\/8 scope host lo\n       valid_lft forever preferred_lft forever\n2: ens3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UP group default qlen 1000\n    link\/ether 02:00:17:00:ee:e6 brd ff:ff:ff:ff:ff:ff\n    inet 172.18.1.2\/24 brd 172.18.1.255 scope global dynamic ens3\n       valid_lft 65244sec preferred_lft 65244sec\n[root@vm-interna opc]# ping -c4 10.100.0.2\nPING 10.100.0.2 (10.100.0.2) 56(84) bytes of data.\n64 bytes from 10.100.0.2: icmp_seq=1 ttl=60 time=1.74 ms\n64 bytes from 10.100.0.2: icmp_seq=2 ttl=60 time=1.81 ms\n64 bytes from 10.100.0.2: icmp_seq=3 ttl=60 time=1.83 ms\n64 bytes from 10.100.0.2: icmp_seq=4 ttl=60 time=1.91 ms\n\n--- 10.100.0.2 ping statistics ---\n4 packets transmitted, 4 received, 0% packet loss, time 3005ms\nrtt min\/avg\/max\/mdev = 1.741\/1.828\/1.917\/0.081 ms\n[root@vm-interna opc]# traceroute 10.100.0.2\ntraceroute to 10.100.0.2 (10.100.0.2), 30 hops max, 60 byte packets\n 1  140.91.208.2 (140.91.208.2)  0.113 ms 140.91.208.1 (140.91.208.1)  0.127 ms 140.91.208.7 (140.91.208.7)  0.102 ms\n 2  * * *\n 3  10.100.0.6 (10.100.0.6)  1.262 ms  1.254 ms  1.230 ms\n 4  10.100.0.2 (10.100.0.2)  1.241 ms !X  1.241 ms !X  1.199 ms !X\n[root@vm-interna opc]#\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">VCN-HUB (a mais externa) para LibreSwan<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">opc@vm-hub ~]$  ip addr show\n1: lo: &lt;LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000\n    link\/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n    inet 127.0.0.1\/8 scope host lo\n       valid_lft forever preferred_lft forever\n2: ens3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UP group default qlen 1000\n    link\/ether 02:00:17:00:93:38 brd ff:ff:ff:ff:ff:ff\n    inet 192.168.92.2\/24 brd 192.168.92.255 scope global dynamic ens3\n       valid_lft 65321sec preferred_lft 65321sec\n[opc@vm-hub ~]$  ping -c4 10.100.0.2\nPING 10.100.0.2 (10.100.0.2) 56(84) bytes of data.\n64 bytes from 10.100.0.2: icmp_seq=1 ttl=60 time=90.1 ms\n64 bytes from 10.100.0.2: icmp_seq=2 ttl=60 time=1.86 ms\n64 bytes from 10.100.0.2: icmp_seq=3 ttl=60 time=1.96 ms\n64 bytes from 10.100.0.2: icmp_seq=4 ttl=60 time=2.95 ms\n\n--- 10.100.0.2 ping statistics ---\n4 packets transmitted, 4 received, 0% packet loss, time 3003ms\nrtt min\/avg\/max\/mdev = 1.865\/24.239\/90.175\/38.070 ms\n[opc@vm-hub ~]$  traceroute 10.100.0.2\ntraceroute to 10.100.0.2 (10.100.0.2), 30 hops max, 60 byte packets\n 1  140.91.208.29 (140.91.208.29)  0.142 ms  0.137 ms 140.91.208.26 (140.91.208.26)  0.105 ms\n 2  * * *\n 3  10.100.0.6 (10.100.0.6)  93.732 ms  93.720 ms  93.697 ms\n 4  10.100.0.2 (10.100.0.2)  93.672 ms !X  93.652 ms !X  93.610 ms !X\n[opc@vm-hub ~]$\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>A arquitetura Hub-and-Spoke \u00e9 uma das sugeridas pela Oracle na hora de montar o seu ambiente no OCI, nela possu\u00edmos uma rede que fica a frente de outras redes e serve como concentrador(Hub) para redes mais internas, dessa forma podemos ter uma rede que entregue recursos de seguran\u00e7a(voc\u00ea pode por exemplo ter um Firewall na [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":423,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"material-hide-sections":[],"footnotes":""},"categories":[8,6,1],"tags":[],"class_list":["post-398","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oci","category-oracle","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts\/398","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=398"}],"version-history":[{"count":6,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts\/398\/revisions"}],"predecessor-version":[{"id":424,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts\/398\/revisions\/424"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/media\/423"}],"wp:attachment":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}