<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>draskolnikova.github.io</title>
		<description>Another junkyard</description>
		<link>/</link>
		<atom:link href="/feed.xml" rel="self" type="application/rss+xml" />
		
			<item>
				<title>KADABRA - IDNIC Smart Routing Analyzer</title>
				<description>&lt;p&gt;It’s been 2 years ago I’ve updated my blog :( But thanks for anyone who’s still reading this dead blog (lol). This post will tell about my latest project in last 2-3 year that involved many people and I hope useful to other people too.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://log.xtremenitro.org/assets/draskolnikova/kadabra-logo-transparent.png#center&quot; alt=&quot;IDNIC Kadabra&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Today, I’d like to write about my latest projects with &lt;a href=&quot;https://idnic.net/&quot;&gt;IDNIC&lt;/a&gt; called &lt;a href=&quot;https://idnic.net/blog/detail/resmi-kadabra-dapat-diakses-oleh-pengguna-publik/MTIx&quot;&gt;KADABRA&lt;/a&gt;. KADABRA is smart routing analyzer platform and helps IDNIC or network administrator to analyze internet routing table, especially in Indonesia.&lt;/p&gt;

&lt;p&gt;KADABRA v1 built at 2018 in collaboration with RIPE Atlas, &lt;a href=&quot;https://www.bukalapak.com&quot;&gt;Bukalapak&lt;/a&gt; and &lt;a href=&quot;https://atlas.ripe.net/get-involved/community/#!sponsors&quot;&gt;IDNIC-APJII as sponsor&lt;/a&gt;. You can read the &lt;a href=&quot;https://www.slideshare.net/draskolnikova/distributed-measurements-as-transparency&quot;&gt;paper about first KADABRA release&lt;/a&gt;. It’s talk about transparency and simple network mitigation using traceroute and ping only. And we faced so many problems because of RIPE Atlas framework limitation and we didn’t have any control access into RIPE backends.&lt;/p&gt;

&lt;p&gt;The first development takes 1 year, since end of 2018 until end of 2019 and the result wasn’t as expected due the probes limitation.&lt;/p&gt;

&lt;h2 id=&quot;kadabra-v2&quot;&gt;KADABRA v2&lt;/h2&gt;

&lt;p&gt;In early 2020, we tried to rebuild KADABRA from scratch and collecting several issue that we facing in KADABRA v1, especially at IDNIC. So, we decided to build KADABRA as a Smart Routing Analyzer to help IDNIC validates the data and helps the Indonesian Network Administrator debuging network problem in the internet.&lt;/p&gt;

&lt;p&gt;KADABRA v2, born at Feb 2020 with several improvement and adjustment. KADABRA have several core values:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Collecting and analyze all bgp attributes both ipv4 and ipv6.&lt;/li&gt;
  &lt;li&gt;Marking RPKI with ROA Status (Valid, Invalid and Unknown for each IP Blocks)&lt;/li&gt;
  &lt;li&gt;RIS (Routing information service) realtime stream with 5 minutes update interval Indonesian domestic routing information base&lt;/li&gt;
  &lt;li&gt;It’s track the growth of new IPv4, IPv6 and new ASN in daily estimate.&lt;/li&gt;
  &lt;li&gt;… and much more!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;KADABRA built on top heterogen ecosystem that makes the application and infrastructure more modular and decentralized.&lt;/p&gt;

&lt;h2 id=&quot;infrastructure&quot;&gt;Infrastructure&lt;/h2&gt;

&lt;p&gt;All infrastructure platform distributed across multi-cloud (agnostics), with the following details :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;JETDINO Hosting - Kubernetes Platforms&lt;/li&gt;
  &lt;li&gt;Alibaba Cloud - Relational Database Management System&lt;/li&gt;
  &lt;li&gt;Biznet GIO - Network Object Storage&lt;/li&gt;
  &lt;li&gt;Cloudflare - Anycast Domain Name system&lt;/li&gt;
  &lt;li&gt;Google Cloud Platform - Cloud-based message queueing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And all infrastructure above are hosted in Indonesia.&lt;/p&gt;

&lt;h2 id=&quot;application&quot;&gt;Application&lt;/h2&gt;

&lt;p&gt;KADABRA Application built using open sources framework, with the following details :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Go Programming Language (Backend)&lt;/li&gt;
  &lt;li&gt;Laravel Framework (Frontend)&lt;/li&gt;
  &lt;li&gt;PostgreSQL Database (Database)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;statistics&quot;&gt;Statistics&lt;/h2&gt;

&lt;p&gt;Currently, &lt;a href=&quot;https://ris.kadabra.id&quot;&gt;KADABRA&lt;/a&gt; already record approx. 96K prefixes across 5 exchange in 4 cities. And we have processing power up to 33K request per second to analyze the prefix and create public statistics via &lt;a href=&quot;https://stats.kadabra.id&quot;&gt;RAGNO&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;People behind KADABRA is :&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Ardika Bagus as Senior Cloud &amp;amp; Kubernetes Engineer&lt;/li&gt;
  &lt;li&gt;Indra Saputra as Senior Backend Engineer&lt;/li&gt;
  &lt;li&gt;Fahri Ahmad Fadil as Application Engineer&lt;/li&gt;
  &lt;li&gt;Lufti Rahadian as Senior System &amp;amp; Network Engineer&lt;/li&gt;
  &lt;li&gt;Abdul Basit as Senior Database Architect&lt;/li&gt;
  &lt;li&gt;Achmad Reyhan as Network Engineer Support&lt;/li&gt;
  &lt;li&gt;Adi Nugroho as System Engineer Support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Special thanks to:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Chief of IDNIC - Mr. Adi Kusuma&lt;/li&gt;
  &lt;li&gt;Chief of APJII - Mr. Jamalul Izza&lt;/li&gt;
  &lt;li&gt;Chief of PT. APIK Media Inovasi - Mr. Azhari Ahmad&lt;/li&gt;
  &lt;li&gt;Indah Yuliani - KADABRA Logo &amp;amp; Design&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;… and all people behind this project, especially it’s you! Yes you!&lt;/p&gt;

&lt;p&gt;If you have any question or feature request regarding KADABRA, you can send an email to abra [at] kadabra [dot] id or you can directly mention me at twitter &lt;a href=&quot;https://twitter.com/draskolnikova&quot;&gt;@draskolnikova&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Sat, 05 Dec 2020 00:00:00 +0700</pubDate>
				<link>/work/2020/12/05/kadabra-smart-routing-analyzer.html</link>
				<guid isPermaLink="true">/work/2020/12/05/kadabra-smart-routing-analyzer.html</guid>
			</item>
		
			<item>
				<title>Set transparent RTBH to upstream using MikroTik RouterOS</title>
				<description>&lt;p&gt;Couple weeks ago, there was &lt;a href=&quot;https://blog.cloudflare.com/memcrashed-major-amplification-attacks-from-port-11211/&quot;&gt;memcrashed exist in the wild&lt;/a&gt; and it’s hurt my router so hard. It was attack my router up to 1GBps, fortunately my router doesn’t hung. LoL.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://log.xtremenitro.org/assets/draskolnikova/memcrashed.png&quot; alt=&quot;Memcrashed&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;how-to-mitigate-this-issue-from-client-side&quot;&gt;How to mitigate this issue from client side?&lt;/h2&gt;

&lt;p&gt;There’s several options to resolve this issue, you can drop it using firewall or send your ddos’ed IP Address to blackhole. To save your router(s) resource, it’s simply send your ddos’ed IP to upstream blackhole.&lt;/p&gt;

&lt;p&gt;Then what happen if you’re a service provider and using MikroTik RouterOS? You need to pass your internal bgp communities to upstream bgp communities.&lt;/p&gt;

&lt;h2 id=&quot;how-to-passing-internal-blackhole-communities-to-upstream-blackhole-communities&quot;&gt;How to passing internal blackhole communities to upstream blackhole communities?&lt;/h2&gt;

&lt;p&gt;For example, my client has ddos’ed IP &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;192.168.10.10&lt;/code&gt;, my blackhole community is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[AS:6969]&lt;/code&gt;, my upstream blackhole community is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[UPSTREAM:999]&lt;/code&gt; and client ASN is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AS65666&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;TL;DR&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AS65666&lt;/code&gt;) =&amp;gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AS65555&lt;/code&gt;) =&amp;gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AS65444&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AS65666&lt;/code&gt; = Client ASN
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AS65555&lt;/code&gt; = Service Provider
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AS65444&lt;/code&gt; = Upstream Provider&lt;/p&gt;

&lt;p&gt;From client point of view (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AS65666&lt;/code&gt;), they need to blackhole and mark IP &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;192.168.10.10&lt;/code&gt; disappear from internet, so they need send blackhole community to (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AS65555&lt;/code&gt;) and pass it to (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AS65444&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;From &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AS65666&lt;/code&gt; point of view:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/rou filter
chain=transit-out-AS65555 prefix=192.168.10.10 prefix-length=32 invert-match=no action=accept set-bgp-prepend-path=&quot;&quot; \
     set-bgp-communities=65555:6969 append-bgp-communities=&quot;&quot;
     
/rou bgp network
add network=192.168.10.10/32 synchronize=no
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AS65666&lt;/code&gt; Advertisement&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[client@as65666] &amp;gt; /routing bgp advertisements print peer-as65555
PEER         PREFIX               NEXTHOP          AS-PATH    ORIGIN     LOCAL-PREF
peer-as65555 192.168.10.10/32     172.16.66.2                 igp
peer-as65555 192.168.10.0/24      172.16.66.2                 igp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;From &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AS65555&lt;/code&gt; point of view:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/rou filter
add action=accept bgp-communities=65555:6969 chain=transit-out-65444 comment=RTBH set-bgp-communities=65444:9999
add action=accept bgp-communities=65555:6969 chain=transit-in-65666 prefix-length=29-32
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Prefix length in AS65555 is how long prefix we accept for blackhole community.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AS65555&lt;/code&gt; Advertisement&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[dewangga@as65555] &amp;gt; /routing bgp advertisements print peer-as65444
PEER         PREFIX               NEXTHOP          AS-PATH    ORIGIN     LOCAL-PREF
peer-as65444 192.168.10.10/32     172.16.20.2      AS65666    igp
peer-as65444 192.168.10.0/24      172.16.20.2      AS65666    igp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;We can see advertised prefix above, we found &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;192.168.10.10&lt;/code&gt; should be blackholed and sent to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;AS65444&lt;/code&gt; as upstream provider. It’s just a simple case, and you can improve using sflow or any opensource tools.&lt;/p&gt;
</description>
				<pubDate>Sun, 01 Apr 2018 00:00:00 +0700</pubDate>
				<link>/work/2018/04/01/set-transparent-rtbh-to-upstream-using-mikrotik-routeros.html</link>
				<guid isPermaLink="true">/work/2018/04/01/set-transparent-rtbh-to-upstream-using-mikrotik-routeros.html</guid>
			</item>
		
			<item>
				<title>Creating unlimited storage using Google Cloud Storage</title>
				<description>&lt;p&gt;Couple months ago, I have simple task but hardly to deploy. Creating huge/big storage for rawset/dataset but using very effience budget. Sounds impossible? Yes, it is. Because, to deploy redundant storage server it requires “huge” on everything (money, infrastructure, etc). The requirements is so simple, user stored assets, save it and access it.&lt;/p&gt;

&lt;p&gt;So, I decided to put it on the cloud. I choose Google Cloud Storage (GCS) instead of AWS S3. Why? I need &lt;a href=&quot;https://en.wikipedia.org/wiki/Filesystem_in_Userspace&quot;&gt;FUSE&lt;/a&gt;, and only GCS have &lt;a href=&quot;https://github.com/GoogleCloudPlatform/gcsfuse&quot;&gt;official FUSE support&lt;/a&gt;, called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gcsfuse&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;By default, GCS will not allow you to create any files and directory then sync them to the cloud. But, they gave many parameters to allow you do that (like local file system on your linux).&lt;/p&gt;

&lt;h2 id=&quot;first-init&quot;&gt;First Init&lt;/h2&gt;
&lt;p&gt;First thing first, don’t forget to &lt;a href=&quot;https://cloud.google.com/sdk/downloads&quot;&gt;install&lt;/a&gt; and &lt;a href=&quot;https://cloud.google.com/sdk/gcloud/reference/auth/login&quot;&gt;auth&lt;/a&gt; your self on Google by follow the instruction. If you’re successfully authorized, you should get information like this:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[jenna@galea ~]$ gcloud config list
[compute]
region = asia-east1
zone = asia-east1-a
[core]
account = [removed]
disable_usage_reporting = False
project = machine-learning-[removed]]

Your active configuration is: [default]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;mounting-buckets&quot;&gt;Mounting buckets&lt;/h2&gt;
&lt;p&gt;I assume you already have buckets, if don’t &lt;a href=&quot;https://cloud.google.com/storage/docs/creating-buckets&quot;&gt;please follow the instruction(s)&lt;/a&gt;. The buckets called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;buckets1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Please select or create your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;key&lt;/code&gt; by &lt;a href=&quot;https://developers.google.com/identity/protocols/application-default-credentials#howtheywork&quot;&gt;following this instructions&lt;/a&gt;. If you have create and download the key, the key should be like this.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;{
  &quot;type&quot;: &quot;service_account&quot;,
  &quot;project_id&quot;: &quot;machine-learning-[removed]&quot;,
  &quot;private_key_id&quot;: &quot;f3b9d87f5837200[removed]&quot;,
  &quot;private_key&quot;: &quot;YOUR_PRIVATE_KEY_HERE&quot;,
  &quot;client_email&quot;: &quot;[removed]-compute@developer.gserviceaccount.com&quot;,
  &quot;client_id&quot;: &quot;113014412[removed]&quot;,
  &quot;auth_uri&quot;: &quot;https://accounts.google.com/o/oauth2/auth&quot;,
  &quot;token_uri&quot;: &quot;https://accounts.google.com/o/oauth2/token&quot;,
  &quot;auth_provider_x509_cert_url&quot;: &quot;https://www.googleapis.com/oauth2/v1/certs&quot;,
  &quot;client_x509_cert_url&quot;: &quot;https://www.googleapis.com/robot/v1/metadata/x509/[removed]-compute%40developer.gserviceaccount.com&quot;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then you can place it anywhere, don’t forget to chmod &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;600&lt;/code&gt; otherwise the mount progress won’t work. Then on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/fstab&lt;/code&gt;, put your configuration like this.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;buckets1 /mnt/buckets1   gcsfuse rw,allow_other,file_mode=0644,dir_mode=0755,implicit_dirs,key_file=/root/key-files.json
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Trying mount it using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mount -a&lt;/code&gt; command, if you got no error, you should access the directory. Try to put some files/directory on this directory, it will appears also on the cloud and vice versa.&lt;/p&gt;

&lt;p&gt;Hope it helps! :)&lt;/p&gt;
</description>
				<pubDate>Mon, 28 Aug 2017 00:00:00 +0700</pubDate>
				<link>/work/2017/08/28/creating-unlimited-storage-using-google-cloud-storage.html</link>
				<guid isPermaLink="true">/work/2017/08/28/creating-unlimited-storage-using-google-cloud-storage.html</guid>
			</item>
		
			<item>
				<title>Creating bridge interface using nmcli</title>
				<description>&lt;p&gt;Recenly I got confused setting up VLAN and deliver it to my virtualization server(s). I pretty sure my VLAN configuration was working fine and double check the logic is working. I have 10 (Ten) KVM Host, 9 nine of them was properly connected to networks (bridged interface(s)) and the other is having problem because of the bridge interface won’t up.&lt;/p&gt;

&lt;h2 id=&quot;problem&quot;&gt;Problem&lt;/h2&gt;

&lt;p&gt;The interface can’t connect to existing networks, it can be caused by manual bridge interface creation.&lt;/p&gt;

&lt;p&gt;Since the network configuration is a bit differents between EL6 and EL7, &lt;a href=&quot;https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/sec-Network_Bridging_Using_the_NetworkManager_Command_Line_Tool_nmcli.html&quot;&gt;nmcli&lt;/a&gt; is the key here. Trying to hook up manual configuration by adding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;brX&lt;/code&gt; interface on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/sysconfig/networks-script&lt;/code&gt;, but no luck.&lt;/p&gt;

&lt;p&gt;Have you setup your bridge interface using this &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;old&lt;/code&gt; configuration ?&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;TYPE=Bridge
BOOTPROTO=none
DEFROUTE=no
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=ip.ad.dr.es
PREFIX=24
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If yes, trying to avoid that, and you should (must!) using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nmcli&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To create bridge interface, you just only type this in your servers.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[root@linux ~]# nmcli con add type bridge ifname br0 stp yes priority 36864
[root@linux ~]# nmcli con add type ethernet ifname enp1s0f0 master bridge-br0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;enp1s0f0&lt;/code&gt; is the interface and change with your real interface name, then &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;br0&lt;/code&gt; is new bridge interface, you can named it, and it’s not always br0 (can be br1, br2, etc). And if you want to see script files inside &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/sysconfig/networks-script/&lt;/code&gt;, it should be like this :&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;DEVICE=br0
STP=no
TYPE=Bridge
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=bridge-br0
UUID=411a4a13-caab-41e1-83f5-4d1c31ab0fb4
ONBOOT=yes
IPADDR=192.168.69.25
PREFIX=24
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;If you’re using NetworkManager on EL7, you should avoid creating or editing network configuration located under &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/sysconfig/networks-script&lt;/code&gt;. Use NetworkManager (available on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nmcli&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nmtui&lt;/code&gt;) instead of manual.&lt;/p&gt;
</description>
				<pubDate>Wed, 23 Aug 2017 00:00:00 +0700</pubDate>
				<link>/work/2017/08/23/creating-bridge-interface-using-nmcli.html</link>
				<guid isPermaLink="true">/work/2017/08/23/creating-bridge-interface-using-nmcli.html</guid>
			</item>
		
			<item>
				<title>Fixing VLC flickering on AMD Graphic Cards</title>
				<description>&lt;p&gt;Couple days ago, I’ve been update my Fedora Core 25 to latest Fedora Core 26. Got some adjustment and improvement there, also got new (bugs?) errors regarding my dedicated graphic cards. From &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lspci&lt;/code&gt; reports, I am using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Radeon HD 8670A/8670M/8690M / R5 M330 / M430&lt;/code&gt; graphic cards on Lenovo G40-80 notebook.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ sudo lspci -v | grep AMD
04:00.0 Display controller: Advanced Micro Devices, Inc. [AMD/ATI] Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430] (rev 83)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;When I launch VLC, the video was flickering like this.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://log.xtremenitro.org/assets/draskolnikova/2017-08-09-flicker-1.png&quot; alt=&quot;Flickering while using AMD Dedicated Graphic Cards&quot; /&gt;&lt;/p&gt;

&lt;p&gt;And I search for the clue, why this VLC flicker when I start it using dedicated graphic cards, I found it &lt;a href=&quot;https://www.phoronix.com/forums/forum/linux-graphics-x-org-drivers/amd-linux/5374-trick-to-prevent-flickering-in-vlc&quot;&gt;there&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Trying to check default VLC Configuration, it was set to automatic.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://log.xtremenitro.org/assets/draskolnikova/2017-08-09-preferences-1.png&quot; alt=&quot;Automatic preferences&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Then, I was trying set it to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;VA-API video decoder via DRM&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://log.xtremenitro.org/assets/draskolnikova/2017-08-09-preferences-2.png&quot; alt=&quot;VA-API video decord via DRM&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Don’t forget to save, apply and restart your VLC.&lt;/p&gt;

&lt;p&gt;Test again my latest configuration, and voila!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://log.xtremenitro.org/assets/draskolnikova/2017-08-09-flicker-2.png&quot; alt=&quot;VLC was fixed from flickered screen&quot; /&gt;.&lt;/p&gt;

&lt;p&gt;I hope it helps if you got same problem like me.&lt;/p&gt;
</description>
				<pubDate>Wed, 09 Aug 2017 00:00:00 +0700</pubDate>
				<link>/personal/2017/08/09/fixing-vlc-screen-error-while-using-amd-graphic-cards.html</link>
				<guid isPermaLink="true">/personal/2017/08/09/fixing-vlc-screen-error-while-using-amd-graphic-cards.html</guid>
			</item>
		
			<item>
				<title>How to deploy and migrating to IPv6</title>
				<description>&lt;p&gt;Since I &lt;a href=&quot;https://log.xtremenitro.org/work/2016/11/12/taking-network-monitoring-to-the-next-level.html&quot;&gt;(accidentally)&lt;/a&gt; work as Network Administrator, I always curios with IPv6 and how to deliver it to customer (especially my own device). But please keep in mind, you need up-to-date firmware and network device (router, switch, wireless radio(s)) and another equipment to do this.&lt;/p&gt;

&lt;p&gt;In my lab and production environment, RouterOS firmware and MikroTik device(s) are still capable to do this transition. Why? It’s cheap, easy to configure and “rock-solid”. So, my setup actually like this :&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;1x MikroTik RB850Gx2 (tested on RoS 6.39.2)&lt;/li&gt;
  &lt;li&gt;1x HP v1920-24G (Managed)&lt;/li&gt;
  &lt;li&gt;4x HP v1410-2G (Unmanaged)&lt;/li&gt;
  &lt;li&gt;1x TP-Link TL-SF1048 (Unmanaged)&lt;/li&gt;
  &lt;li&gt;2x UAP AC Pro&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you can see, looks like this :
&lt;img src=&quot;https://log.xtremenitro.org/assets/draskolnikova/2017-08-07-ipv6.png&quot; alt=&quot;Deployment Topology&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The goals is to reduce my routing policy because of NAT (with simple routing, I can easily reach client device than using NAT). It’s can be solved using IPv4 too, but we already know, how IPv4 were exhausted.&lt;/p&gt;

&lt;h2 id=&quot;how-to-deploy-it&quot;&gt;How to deploy it?&lt;/h2&gt;
&lt;h3 id=&quot;configuration-on-router-mikrotik-rb850gx2&quot;&gt;Configuration on Router MikroTik RB850Gx2&lt;/h3&gt;

&lt;p&gt;Assume that you already have &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/64&lt;/code&gt; prefix from your ISP to do Router Advertisement (RA).&lt;/p&gt;

&lt;p&gt;For example, I use this prefix &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2400:ff:ec00:dead::/64&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ether3&lt;/code&gt; is interface point to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HP v1920&lt;/code&gt;. (please review and change the configuration mathced on your side)&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[admin@MikroTik] &amp;gt; /ipv6 address add address=2400:ff:ec00:dead:: advertise=no interface=ether3
[admin@MikroTik] &amp;gt; /ipv6 nd
set [ find default=yes ] disabled=yes
add advertise-mac-address=no interface=ether3 managed-address-configuration=yes mtu=1500 other-configuration=yes reachable-time=10s \
    retransmit-interval=5s
/ipv6 nd prefix
add interface=ether3 prefix=2001:df2:cc00:dead::/64
/ipv6 nd prefix default
set autonomous=no
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Interesting point there, if you are using RouterOS too and have &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/127&lt;/code&gt; point-to-point links from your upstream or ISP, then your ISP(s) using MikroTik too, you need to add the default route using local-links.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/ipv6 route
add !bgp-as-path !bgp-atomic-aggregate !bgp-communities !bgp-local-pref !bgp-med !bgp-origin !bgp-prepend check-gateway=ping distance=1 gateway=\
    fe80::e68d:8cff:fe3f:6731%ether5 !route-tag
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Don’t know why, but it works.&lt;/p&gt;

&lt;p&gt;Since now, you can check in your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/ipv6 neigh&lt;/code&gt;, you should get advertised prefix from your client.
Cheers and welcome to IPv6!&lt;/p&gt;
</description>
				<pubDate>Mon, 07 Aug 2017 00:00:00 +0700</pubDate>
				<link>/work/2017/08/07/migrating-to-ipv6.html</link>
				<guid isPermaLink="true">/work/2017/08/07/migrating-to-ipv6.html</guid>
			</item>
		
			<item>
				<title>Taking network monitoring to the next level</title>
				<description>&lt;p&gt;As system engineer and part-time network engineer, I am responsible to make sure all system are running and the network properly connected (24/7/365).Now, I will write about a project came from RIPE NCC, called &lt;a href=&quot;https://atlas.ripe.net/about/&quot;&gt;RIPE Atlas&lt;/a&gt;. RIPE Atlas is a global network of probes that measure Internet connectivity and reachability, providing an unprecedented understanding of the state of the Internet in real time.&lt;/p&gt;

&lt;p&gt;Currently, I host 2 probes (the device from RIPE is called probe), 1 public probe &lt;a href=&quot;https://atlas.ripe.net/probes/25259/&quot;&gt;#25259&lt;/a&gt; and 1 private probe #25577. My public probe have dual stack network configuration, both IPv4 and IPv6 are enabled. You can create custom measurement, for example I have infrastructure(s) on Amsterdam, and have FQDN &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;speedtest.ams01.softlayer.com&lt;/code&gt;, then I create &lt;a href=&quot;https://atlas.ripe.net/measurements/4434917/#!probes&quot;&gt;public measurement&lt;/a&gt; to monitoring my network route.&lt;/p&gt;

&lt;p&gt;From that measurement, I can track down the history of my network route, whenever it was down or reroute to another link. It’s help me so much to maintain the SLA from upstream. The probe have another capability to monitoring, available feature is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PING&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TRACEROUTE&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DNS&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SSL&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HTTP&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NTP&lt;/code&gt;. And you can select specific probe(s) to fulfill your monitoring needs.&lt;/p&gt;

&lt;p&gt;This project is FREE*, you only need to host the probe online. The atlas probe includes: 1xTP-Link MR3020 (Modified F/W), 1xUTP Cable, 1xMicroUSB Cable, 1x8GB USB Disk. Interest to join the project? Feel free to reach me out on twitter, or you can directly contact to Atlas Probe Ambasaddor at Indonesia using &lt;a href=&quot;https://twitter.com/budiwijaya&quot;&gt;Twitter&lt;/a&gt; or &lt;a href=&quot;https://www.facebook.com/budiwijaya&quot;&gt;Facebook&lt;/a&gt; (Mr. Budiwijaya).&lt;/p&gt;

&lt;p&gt;Happy probing!&lt;/p&gt;
</description>
				<pubDate>Sat, 12 Nov 2016 00:00:00 +0700</pubDate>
				<link>/work/2016/11/12/taking-network-monitoring-to-the-next-level.html</link>
				<guid isPermaLink="true">/work/2016/11/12/taking-network-monitoring-to-the-next-level.html</guid>
			</item>
		
			<item>
				<title>Building AKAMAI-like CDN using Amazon AWS with minimal budget</title>
				<description>&lt;p&gt;Based on &lt;a href=&quot;https://aws.amazon.com/resources/gartner-2016-mq-learn-more/&quot;&gt;Gartner Magic Quadrant (Aug) 2016&lt;/a&gt;, AWS still leader on cloud IaaS provider. And I’ve been using Amazon AWS since 2013 (S3 Bucket, Cloudfront, and Route53). The reason why I use that service only on Amazon AWS are, to optimize existing on premise infrastructure. The big challenge is to manage big assets (images) without downtime and data loss and of course using optimized resource.&lt;/p&gt;

&lt;p&gt;According to &lt;a href=&quot;https://aws.amazon.com/s3/sla/&quot;&gt;S3 SLA&lt;/a&gt;, I believe that at least I have only 0.01% downtime, it means only &lt;a href=&quot;http://uptime.is/99.9&quot;&gt;approximately 43minutes&lt;/a&gt; in a month. And what happen if the S3 bucket can’t accessed in period time? I combine with Amazon CloudFront. CloudFront will cached anything that hosted by AmazonS3.&lt;/p&gt;

&lt;p&gt;Actually, the design is looks like.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://log.xtremenitro.org/assets/draskolnikova/2016-10-29-01.png&quot; alt=&quot;AKAMAI-Like CDN&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I use S3 bucket to store all assets as origin, then distribute them through CloudFront. And I use Route53 as my DNS Servers, since route53 support geolocation and failover support, it will be nice. Cloudwatch? It’s help me to monitor performance of cache server on Indonesia, if the cache server goes down or unreachable, it will be trigger route53 to remove it from dns record and switch to AWS CloudFront distribution as default images server (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;static.xtremenitro.org&lt;/code&gt;).&lt;/p&gt;

&lt;h2 id=&quot;cost-calculation&quot;&gt;Cost Calculation&lt;/h2&gt;

&lt;p&gt;It’s the most important to do setup using Amazon AWS, miss configuration, &lt;strong&gt;you’ll be charged more expensive&lt;/strong&gt;. From the existing installation, I have.&lt;/p&gt;

&lt;h3 id=&quot;amazon-simple-storage-service-s3&quot;&gt;Amazon Simple Storage Service (S3)&lt;/h3&gt;

&lt;p&gt;I thought it’s still the best storage service ever, because I have a lot of asset(s) there, approx 400GB++, it’s only charged me $14.xx.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://log.xtremenitro.org/assets/draskolnikova/2016-10-29-02.png&quot; alt=&quot;Amazon Simple Storage Service&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;amazon-cloudfront&quot;&gt;Amazon CloudFront&lt;/h3&gt;

&lt;p&gt;Since CloudFront didn’t have any node in Indonesia, build cache server in Indonesia (our visitor is 99% in Indonesia) will cut off your Amazon CloudFront billing usage.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://log.xtremenitro.org/assets/draskolnikova/2016-10-29-03.png&quot; alt=&quot;Amazon CloudFront&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;amazon-route53&quot;&gt;Amazon Route53&lt;/h3&gt;

&lt;p&gt;It’s the key to save your resource, using Amazon Route53, and the feature of Geolocation and Failover combine with CloudWatch.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://log.xtremenitro.org/assets/draskolnikova/2016-10-29-04.png&quot; alt=&quot;Amazon Route53&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;vps-on-indonesia&quot;&gt;VPS on Indonesia&lt;/h3&gt;

&lt;p&gt;The last one, to serve our visitor came from Indonesia, we need at least two VPS with 2 vCPU &amp;amp; 2 GB of RAM. Why we need this? We need lower latency to serve Indonesian Visitor. You can go through &lt;a href=&quot;https://portal.jetdino.com/cart.php?gid=8&quot;&gt;JetdinoVM using Professional package&lt;/a&gt; (this is non-paid article, seriously).&lt;/p&gt;

&lt;h2 id=&quot;total-cost&quot;&gt;Total Cost&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Amazon S3: $14.61&lt;/li&gt;
  &lt;li&gt;Amazon CloudFront: $43.80&lt;/li&gt;
  &lt;li&gt;Amazon Route53: $44.87&lt;/li&gt;
  &lt;li&gt;VPS: $60&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Total Cost: $163.28 (round up $165)&lt;/p&gt;

&lt;p&gt;What if we use all of AWS Infrastructure? I’ve tried it couple months ago, it will charged you $450 / month. And still having some latency issue regarding internet access in Indonesia.&lt;/p&gt;

&lt;p&gt;With this algorithm and specification, I can reduce the monthly cost and increase speed access to user upto 1-3 times.&lt;/p&gt;

&lt;p&gt;What about akamai? The title as I mentioned above. Since now, only Akamai that penetrate CDN in Indonesia, most CDN company nearby nodes is on Singapore. And what about the price? I have the price, but it’s NDA, you can directly contact Akamai’s Sales for more information.&lt;/p&gt;
</description>
				<pubDate>Sat, 29 Oct 2016 00:00:00 +0700</pubDate>
				<link>/work/2016/10/29/build-akamai-like-cdn-using-amazon-aws.html</link>
				<guid isPermaLink="true">/work/2016/10/29/build-akamai-like-cdn-using-amazon-aws.html</guid>
			</item>
		
			<item>
				<title>Subnetting IPv6 Cheatsheet</title>
				<description>&lt;p&gt;Since IPv6 hype was launch several years ago, many people (incl. me) were struggling how to split IPv6 subnet correctly. Honestly, I wasn’t network engineer, but learning network fundamental is not a big deal (especially IPv6, nowadays, it’s a new protocol!). Since it was launch at 1990 (former IPNG), based on APNIC Labs Survey, the adoption of native IPv6 &lt;a href=&quot;https://stats.labs.apnic.net/ipv6/&quot;&gt;still low&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The fundamental of TCP/IP is how to correctly split the subnet and know the routing works. At July 25th, I was attend the &lt;a href=&quot;https://www.idnog.or.id/en/workshop/3&quot;&gt;Advance IPv6 Routing Workshop by APNIC&lt;/a&gt; and learn with many senior engineers right there. The most interesting part is, I know how to split IPv6 subnet correctly without using any IPv6 calculator. I’ll write down how to do it for self notes, and I hope it is usefull for you too.&lt;/p&gt;

&lt;h2 id=&quot;subnetting&quot;&gt;Subnetting&lt;/h2&gt;

&lt;p&gt;Prefix IPv6: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2404:6800::/32&lt;/code&gt; (Google IPv6 Block Asia Pacific)&lt;/p&gt;

&lt;p&gt;We must know that IPv6 have 128-bit address, separated by colon (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;:&lt;/code&gt;) and have 8 (eight) groups, then IPv4 only have 32-bit address, separated by dots (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.&lt;/code&gt;) and only have 4 (four) groups.&lt;/p&gt;

&lt;p&gt;So, if the rest IPv6 have 128-bit address, then each group should have 16-bit.&lt;/p&gt;

&lt;p&gt;Shortest IPv6 Prefix: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2404:6800::/32&lt;/code&gt; 128-bit addresses&lt;/p&gt;

&lt;p&gt;Longest IPv6 Prefix: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2404:6800:0000:0000:0000:0000:0000:0000&lt;/code&gt; 128-bit addresses&lt;/p&gt;

&lt;p&gt;Then if I want split it into small subnets (eg. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/48&lt;/code&gt;), how? And which first prefix should be?&lt;/p&gt;

&lt;p&gt;For the example, we will split IPv6 Prefix &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2404:6800::/32&lt;/code&gt; into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/48&lt;/code&gt;, then found the 48-bit.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;2404:6800:0000:0000:0000:0000:0000:0000  -&amp;gt; 128-bit total
 16   16   16   16   16   16   16   16   -&amp;gt; 128-bit total (from 16-bit x 8 block)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Please keep in mind, IPv6 is a hexadecimal. So it will start counting from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;f&lt;/code&gt;&lt;/p&gt;

  &lt;p&gt;Then, in every member in a group(s) have 4-bit address [&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0&lt;/code&gt;,&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1&lt;/code&gt;,&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2&lt;/code&gt;,&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3&lt;/code&gt;,&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;4&lt;/code&gt;,&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;5&lt;/code&gt;,&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6&lt;/code&gt;,&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;7&lt;/code&gt;,&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8&lt;/code&gt;,&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;9&lt;/code&gt;,&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;a&lt;/code&gt;,&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;b&lt;/code&gt;,&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;c&lt;/code&gt;,&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;d&lt;/code&gt;,&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;e&lt;/code&gt;,&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;f&lt;/code&gt;]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;How we found that 48-bit address from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2404:6800::/32&lt;/code&gt; ?&lt;/p&gt;

&lt;p&gt;So we must find the 48th bit from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2404:6800::/32&lt;/code&gt;, then we need 16-bit left.&lt;/p&gt;

&lt;h4 id=&quot;diagram&quot;&gt;Diagram&lt;/h4&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  [4]
0 0 0 0 -&amp;gt; each number represent 1-bit operation(s)
| | | |
| | | +---- 0 1 2 3 etc (2^0)
| | +------ 0 2 4 6 etc (2^1)
| +-------- 0 4 8 c etc (2^2)
+---------- 0 8 0 8 etc (2^3)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2404&lt;/code&gt; on first group, have first 16-bit address.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6800&lt;/code&gt; on second group, have second 16-bit address, so total bit are 32-bit right now.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0000&lt;/code&gt; on third group, have third 16-bit address, so total bit are 48-bit right now.&lt;/p&gt;

&lt;p&gt;Voila! We’ve found the 48th bit. The 48th bit are on third group, and first IPv6 is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2404:6800:0::/48&lt;/code&gt; on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/48&lt;/code&gt; prefix.&lt;/p&gt;

&lt;p&gt;Then another case, how we found &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/33&lt;/code&gt; prefix? You can use the referrence &lt;a href=&quot;#diagram&quot;&gt;diagram&lt;/a&gt; above and let’s find out.&lt;/p&gt;

&lt;p&gt;IPv6 on /32 Subnet: 2404:6800:0000:0000:0000:0000:0000:0000&lt;/p&gt;

&lt;p&gt;IPv6 on /33 Subnet: 2404:6800:&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0&lt;/code&gt;000:0000:0000:0000:0000:0000&lt;/p&gt;

&lt;p&gt;See the marked zero &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0&lt;/code&gt; on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/33&lt;/code&gt; subnet, it’s the hint to find the subnet, and crosscheck with the &lt;a href=&quot;#diagram&quot;&gt;diagram&lt;/a&gt;. So the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/33&lt;/code&gt; prefix should be &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2404:6800:0::/33&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2404:6800:8::/33&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Hope it helps!&lt;/p&gt;
</description>
				<pubDate>Thu, 27 Oct 2016 00:00:00 +0700</pubDate>
				<link>/work/2016/10/27/subnetting-ipv6-cheatsheet.html</link>
				<guid isPermaLink="true">/work/2016/10/27/subnetting-ipv6-cheatsheet.html</guid>
			</item>
		
			<item>
				<title>Creating optimized qcow2 files</title>
				<description>&lt;p&gt;Standard and default images create using &lt;a href=&quot;https://virt-manager.org/&quot;&gt;virt-manager&lt;/a&gt; on linux, automatically full allocating specified disk size to host. To avoid un-usable disk space, you should avoid choosing default images created by virt-manager.&lt;/p&gt;

&lt;p&gt;-&amp;gt;&lt;img src=&quot;https://log.xtremenitro.org/assets/draskolnikova/2016-10-12-01.png&quot; alt=&quot;Creating VM's disk using Virt Manager&quot; /&gt;&amp;lt;-&lt;/p&gt;

&lt;p&gt;To create growing images files for VM’s, I choose &lt;a href=&quot;http://www.linux-kvm.org/page/Qcow2&quot;&gt;qcow2&lt;/a&gt;. Why growing images? To ensure the host only allocated how much diskspace to harddrive (fill-as-you-go), not how big the disk was allocated. For example :&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ sudo qemu-img create -f qcow2 phantom01.xtremenitro.org-lvm-f.qcow2 100G
Formatting 'phantom01.xtremenitro.org-lvm-f.qcow2', fmt=qcow2 size=107374182400 encryption=off cluster_size=65536 lazy_refcounts=off
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It should be create qcow2 files and have following information:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ sudo qemu-img info phantom01.xtremenitro.org-lvm-f.qcow2
image: phantom01.xtremenitro.org-lvm-f.qcow2
file format: qcow2
virtual size: 100G (107374182400 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;See at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;disk size&lt;/code&gt;, we have only 196K on first init. For sure, let’s check it.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ ls -lah phantom01.xtremenitro.org-lvm-f.qcow2
-rw-r--r--. 1 dmnQ dmnQ 194K Oct 13 03:35 phantom01.xtremenitro.org-lvm-f.qcow2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;And it will save your disk space as much as you want, and will growth as the data growth. Then after creating the disk file, you need to load it on virt-manager by choosing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Select or create custom storage&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;-&amp;gt;&lt;img src=&quot;https://log.xtremenitro.org/assets/draskolnikova/2016-10-12-02.png&quot; alt=&quot;Select or create custom storage&quot; /&gt;&amp;lt;-&lt;/p&gt;

&lt;p&gt;Done, now you have optimized qcow2 files and growth as the data growth.&lt;/p&gt;
</description>
				<pubDate>Wed, 12 Oct 2016 00:00:00 +0700</pubDate>
				<link>/work/2016/10/12/creating-optimized-qcow2-files.html</link>
				<guid isPermaLink="true">/work/2016/10/12/creating-optimized-qcow2-files.html</guid>
			</item>
		
	</channel>
</rss>
