Network Configuration and Management - SME Networks

Hello friends and friends!

General index of the series: Computer Networks for SMEs: Introduction

We have not yet dedicated an article to the subject that originates the title of this one. Nor have we read any comment asking to write about it. We took it for granted that it was known to all and perhaps it was the reason that we ignored it until today. However, we will write a succinct post about it for those who need to refresh or learn about the subject.

Network: practical definition

For practical purposesa Net - Network It consists of two or more network devices such as computers, servers, printers, mobile phones, or other network equipment, which are connected by physical cables or wireless links for the purpose of sharing and distributing information between the connected devices.

For more information visit:

Remember that the links are given with full intention and not for pleasure. 😉

Network Configuration

  • I recommend to those who use operating systems CentOS y openSUSE, be guided by the text Server Configuration With GNU / Linux, by the author Joel Barrios Dueñas. It is difficult for me to write the topics that we will deal with below for Debian, CentOS and openSUSE distributions in the same article, since the last two differ from the first, especially in names, location of configuration files, their contents, and some other aspect philosophical related to the topic.

The operating systems that we use throughout this series have graphical tools for configuring the different network devices. However, this post will focus on using the command console or terminal.

As we have seen in previous articles, in most cases we configure the network interface -or the interfaces- during the installation process to ensure that, once the base operating system has been installed, the computer has an effective connection of net.

The correct configuration of at least the first network interface -main- is vital for the subsequent work of the desktop, workstation: Server & Hosting that we are implementing.

We will not use NetworkManager

To simplify the writing of this article, focus attention on server configuration, and make it easier to read, we will assume that No. the service provided by the package is being used network-manager. Otherwise we must execute the following actions:

In Debian

buzz @ sysadmin: ~ $ sudo systemctl stop network-manager.service
buzz @ sysadmin: ~ $ sudo systemctl status network-manager.service
buzz @ sysadmin: ~ $ sudo systemctl disable network-manager.service
buzz @ sysadmin: ~ $ sudo ifconfig

If the configuration of the network cards that depended on the service network-manager are correct, then we can continue working. However, it is healthy to execute:

buzz @ sysadmin: ~ $ sudo ifdown eth0 && sudo ifup eth0

to double check that everything works fine.

On CentOS

In the book in PDF format «Server Configuration With GNU / Linux«, July 2016 Edition, chapter 48.2.2 is dedicated to the topic of service NetworkManager. I anticipate that its author Joel Barrios Dueñas does not like at all - he considers it absurd - the use of NetworkManager in Servers.

Ethernet interfaces

As a general rule, when we work with virtual machines on Qemu-KVM, the operating system identifies Ethernet Interfaces with names such as ethX, Where the X represents a numeric value. The first Ethernet interface is identified as eth0, the second as eth1, and so on.

In the case of Debian operating systems -and derivatives- running on physical machines, the above notation is also true.

If we work on physical machines with the operating systems CentOS y openSUSE, the operating system identifies them as enoX. So much similarity can happen with virtual machines -with these operating systems- on hypervisors of the VMware.

In virtual machines created from the operating system FreeBSD -which is also Free Software- are generally identified as EMX o VTNETX depending on whether they are on Qemu-KVM or on VMware respectively. If they are physical they are typically identified as EMX.

Identify Ethernet Interfaces

To identify all available network interfaces on my computer sysadmin.desdelinux.fan, we execute:

buzz @ sysadmin: ~ $ sudo ifconfig -a
eth0 Link encap: Ethernet HWaddr 70: 54: d2: 19: ad: 65 inet addr: 10.10.10.1 Bcast: 10.10.10.255 Mask: 255.255.255.0 inet6 addr: fe80 :: 7254: d2ff: fe19: ad65 / 64 Scope: Link ... lo Link encap: Local Loopback inet addr: 127.0.0.1 Mask: 255.0.0.0 inet6 addr: :: 1/128 Scope: Host ... virbr0 Link encap: Ethernet HWaddr 52: 54: 00: c8: 35 : 5e inet addr: 192.168.10.1 Bcast: 192.168.10.255 Mask: 255.255.255.0 inet6 addr: fe80 :: 5054: ff: fec8: 355e / 64 Scope: Link ... virbr0-nic Link encap: Ethernet HWaddr 52:54 : 00: c8: 35: 5e BROADCAST MULTICAST MTU: 1500 Metric: 1 ... vmnet8 Link encap: Ethernet HWaddr 00: 50: 56: c0: 00: 08 inet addr: 192.168.20.1 Bcast: 192.168.20.255 Mask: 255.255.255.0 .6 inet80 addr: fe250 :: 56: 0ff: fec8: 64/XNUMX Scope: Link ...
  • The three ellipsis in the previous outputs means that much more information is returned that we do not reflect to save space.

As I have installed on the Debian 8 operating system "Jessie" two virtual machine support programs, that is, Qemu-KVM y VMware Workstation Server 10.0.6, the command returns all existing interfaces.

  • For the record: the private software VMware Workstation Server 10.0.6 is a legal copy given by my friend and colleague El NeoZelandes, who acquired it via the Internet in his native country and was kind enough to send it to me.

Let's see what information we can get from the previous output:

  • eth0: Main network interface with IPv4 address 10.10.10.1. The IPv6 address is also displayed.
  • lo: Loopback or local with IPv4 127.0.0.1 and IPv6 -common to all these interfaces- :: 1/128.
  • virbr0: Bridge-type network interface -  Bridge with IPv4 192.168.10.1 and with the address MAC 52:54:00:c8:35:5e. This virtual interface is what we create and configure through the Virt Manager of Qemu-KVM as a network «default»Of the NAT type.
  • virbr0-nic: Network interface that creates the Qemu-KVM, of type Anonymous Bridge- Anonymous Bridge and with the same address MAC 52:54:00:c8:35:5e which virbr0. It has no assigned IP address.
  • vmnet8: Network interface type NAT configured in the VMware Virtual Network Editor.

El VMware WorkstationServer via his Virtual Network Editor, configure differently the Bridges that you create with each of the physical interfaces of the Host - Host. Does the jargon used in previous articles?.

Another application -not the only or the last one- to obtain information about network interfaces is lshw - List Hardware. etc is a tool that extracts detailed information about the configuration of the machine. If we run in a console:

buzz @ sysadmin: ~ $ aptitude search lshw
p lshw - information about hardware configuration  
p lshw-gtk - graphical information about hardware configuration

We note that it even has its graphical interface which we leave for you to test. Let's install the console mode and run next:

buzz @ sysadmin: ~ $ sudo lshw -class network
[sudo] password for buzz:
  * -network               
       description: Ethernet interface product: 82579V Gigabit Network Connection vendor: Intel Corporation physical id: 19 bus info: pci @ 0000: 00: 19.0 logical name: eth0 version: 05 serial: 70: 54: d2: 19: ad: 65 size: 100Mbit / s capacity: 1Gbit / s width: 32 bits clock: 33MHz capabilities: pm msi bus_master ...
  * -network DISABLED
       description: Ethernet interface physical id: 1 logical name: virbr0-nic serial: 52: 54: 00: c8: 35: 5e size: 10Mbit / s capabilities: ethernet physical

Let's manage the logical names of the interfaces

On some occasions, especially when we change a physical network card for any reason, we observe that the number X which identifies the interface increased by 1 and we only notice it when we run ifconfig -a, between la situation what happened after the change. It can also happen when we remove one virtual network interface for whatever reason, and then add another one again.

The above can be annoying when we have configured and linked - connective to one or more services, a certain logical interface name, be it eth0, eno1 o em0. The most inopportune thing is that it almost always happens long after - years perhaps - from the initial configuration. Then new interfaces appear with names like eth1,eth2, eno2, em1, etc., and some services stop working properly. Those who have gone through similar situations You know what I mean 😉

The logical names of the network interfaces in Debian - and some of their derivatives - can be found in the file /etc/udev/rules.d/70-persistent-net.rules. In CentOS 7 it is in the file /etc/udev/rules.d/90-eno-fix.rules, whereas in its previous versions it is the same file as in Debian.

In DebianIf you want to change the logical name of a particular network interface, find the line corresponding to its address MAC and modify the value NAME = ethX by whatever logical name value you need. For the changes to be successful, you must restart your computer.

For CentOS 7, see the work «Server Configuration With GNU / Linux»By Joel Barrios Dueñas, in which a detailed method is provided.

  • Important: In any case, Caution! With the service NetworkManager in case you're handling connections.

Modify the parameters of the network interfaces

In Debian, if we want to modify the parameters of a network card permanently, we must edit the file / etc / network / interfaces as discussed below.

To know in detail -and more- all the options that you can use consult man interfaces. We also recommend reading the existing documentation in the folder:

buzz @ sysadmin: ~ $ ls -l / usr / share / doc / ifupdown /
total 44 drwxr-xr-x 2 root root 4096 Aug 7 2016 contrib
drwxr-xr-x 2 root root 4096 Aug 7 2016 examples
-rw-r - r-- 1 root root 976 Jun 21 2012 copyright -rw-r - r-- 1 root root 18243 13 Mar 2015 1 changelog.gz -rw-r - r-- 297 root root 21 Jun 2012 1 NEWS.Debian.gz -rw-r - r-- 454 root root 29 Nov 2014 1 README -rw-r - r-- 946 root root 21 Jun 2012 XNUMX ALL

Program ethtool

Through the program ethtool We can consult, list and modify the parameters of a network card such as connection speed, automatic negotiation, sum check out of load - checksum offload, etc. It is available in the repositories of almost all distributions.

buzz @ sysadmin: ~ $ sudo aptitude install ethtool
[sudo] password for buzz:

buzz @ sysadmin: ~ $ sudo ethtool eth0
Settings for eth0: Supported ports: [TP] Supported link modes: 10baseT / Half 10baseT / Full 100baseT / Half 100baseT / Full 1000baseT / Full Supported pause frame use: No Supports auto-negotiation: Yes Advertised link modes: 10baseT / Half 10baseT / Full 100baseT / Half 100baseT / Full 1000baseT / Full Advertised pause frame use: No Advertised auto-negotiation: Yes Speed: 100Mb / s Duplex: Full Port: Twisted Pair PHYAD: 1 Transceiver: internal Auto-negotiation: on MDI-X: on (auto) Supports Wake-on: pumbg Wake-on: g Current message level: 0x00000007 (7) drv probe link Link detected: yes

The changes that we make through this tool are temporary and will be lost in the next restart of the computer. If we need permanent modifications made through ethtool, we must add in the file / etc / network / interfaces a directive «pre up"Or" before lifting the interface "as follows:

self eth1
inet dhcp iface eth1
pre-up / sbin / ethtool -s eth1 speed 1000 duplex full

Thus the network card eth1 which obtains its IP address from a DHCP server, is permanently modified to operate at a speed of 1000 Mb / s in mode Full duplex.

  • The above method is also valid for cards with static IPs.

Ip address

We will see below how to configure the IP address of the equipment, as well as the gateway - Gateway by default, necessary for communication with the rest of the local network and directly with Internet through su Gateway.

  • When we write "directly»We refer to the cases of SME networks in which Internet access is allowed without the use of a server proxy, which it's Not recommended, although there is a powerful Firewall on the computer itself that works as Gateway. When your turn comes we will touch on the subject proxy.

Temporary addressing

Using standard commands of any Linux distribution such as ip, ifconfig and route, we can temporarily configure a network interface as we will see below.

To assign an IP address and its subnet mask and then check the operation, let's execute:

buzz @ sysadmin: ~ $ sudo ifconfig eth0 172.16.10.2 netmask 255.255.0.0
buzz @ sysadmin: ~ $ sudo ifconfig
eth0 Link encap: Ethernet HWaddr 70: 54: d2: 19: ad: 65 inet addr: 172.16.10.2 Bcast: 172.16.255.255 Mask: 255.255.0.0 inet6 addr: fe80 :: 7254: d2ff: fe19: ad65 / 64 Scope: Link UP BROADCAST RUNNING MULTICAST MTU: 1500 Metric: 1 RX packets: 0 errors: 0 dropped: 0 overruns: 0 frame: 0 TX packets: 659 errors: 0 dropped: 0 overruns: 0 carrier: 0 collisions: 0 txqueuelen: 1000 RX bytes: 0 (0.0 B) TX bytes: 115601 (112.8 KiB) Interrupt: 20 Memory: fe600000-fe620000

We just temporarily assigned the card eth0 static IP address 172.16.10.2 with subnet mask 255.255.0.0 belonging to a Class «B» Private Internet Network.

  • Note that we have modified the configuration of the eth0 network interface of the sysadmin computer itself.desdelinux.fan which previously had the IP 10.10.10.1/255.255.255.0 belonging to a Class "A" Private Internet Network, although it can only host 254 computers according to its subnet mask.

To configure the Gateway by default and then check the operation let's execute:

buzz @ sysadmin: ~ $ sudo route add default gw 172.16.10.1 eth0

buzz @ sysadmin: ~ $ sudo route -n
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.16.10.1 0.0.0.0 UG 0 0 0 eth0 0.0.0.0 172.16.10.1 0.0.0.0 UG 1024 0 0 eth0 172.16.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8 192.168.20.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0

We just temporarily assigned the Gateway 172.16.10.1 to interface eth0 172.16.10.2, while the other interfaces keep their previous values.

To remove ALL the network card settings, let's run:

buzz @ sysadmin: ~ $ sudo ip addr flush eth0

buzz @ sysadmin: ~ $ sudo ifconfig
eth0 Link encap: Ethernet HWaddr 70: 54: d2: 19: ad: 65 UP BROADCAST RUNNING MULTICAST MTU: 1500 Metric: 1 RX packets: 0 errors: 0 dropped: 0 overruns: 0 frame: 0 TX packets: 718 errors: 0 dropped: 0 overruns: 0 carrier: 0 collisions: 0 txqueuelen: 1000 RX bytes: 0 (0.0 B) TX bytes: 125388 (122.4 KiB) Interrupt: 20 Memory: fe600000-fe620000

buzz @ sysadmin: ~ $ sudo route -n
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8 192.168.20.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
  • Let's take a good look, as we remove ALL the previous network settings even the one declared in the / etc / network / interfaces file!.

To return the world to how it was before we can restart the computer. If we don't want to stop working, let's run:

buzz @ sysadmin: ~ $ sudo ifconfig eth0 10.10.10.1 netmask 255.255.255.0

buzz @ sysadmin: ~ $ sudo ifconfig eth0
eth0 Link encap: Ethernet HWaddr 70: 54: d2: 19: ad: 65 inet addr: 10.10.10.1 Bcast: 10.10.10.255 Mask: 255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU: 1500 Metric: 1 RX packets: 0 errors: 0 dropped: 0 overruns: 0 frame: 0 TX packets: 729 errors: 0 dropped: 0 overruns: 0 carrier: 0 collisions: 0 txqueuelen: 1000 RX bytes: 0 (0.0 B) TX bytes: 129009 (125.9 KiB) Interrupt: 20 Memory: fe600000-fe620000

buzz @ sysadmin: ~ $ sudo route -n
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8 192.168.20.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0

and so we return to the original configuration.

Temporary addressing using the ip command

On many occasions we move with a Laptop - Laptop to another SME Network that requested our services or help and we do not want to modify the general configuration of its network interface. To achieve this we can use the command ip.

The command ip installs with package iproute, or the iproute2 depending on the distribution and version. In Debian 6 "Squeeze" -in our very personal opinion- the command man pages ip they were much more explicit than for example, Wheezy and Jessie. ip if it continues to be used to display, or manipulate routing - routing, devices, routing policies and tunnels.

You can check the man pages for the installed version using Man IP.

I have only used it to assign another IP address corresponding to another company's SME LAN subnet. Example, let's assign the IP address 192.168.1.250 in addition to the one you already have and which is the 10.10.10.1 to my computer's network card:

buzz @ sysadmin: ~ $ ip addr show eth0
2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link / ether 70: 54: d2: 19: ad: 65 brd ff: ff: ff: ff: ff: ff
    inet 10.10.10.1 / 24 brd 10.10.10.255 scope global eth0
       valid_lft forever preferred_lft forever inet6 fe80 :: 7254: d2ff: fe19: ad65 / 64 scope link valid_lft forever preferred_lft forever

buzz @ sysadmin: ~ $ sudo ip addr add 192.168.1.250/24 broadcast 192.168.1.255 dev eth0

buzz @ sysadmin: ~ $ ip addr show eth0
2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link / ether 70: 54: d2: 19: ad: 65 brd ff: ff: ff: ff: ff: ff
    inet 10.10.10.1 / 24 brd 10.10.10.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.1.250 / 24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever inet6 fe80 :: 7254: d2ff: fe19: ad65 / 64 scope link valid_lft forever preferred_lft forever

Although the output of the command reflects that the change is valid forever

valid_lft forever preferred_lft forever

this does not really happen, which we can check if we disable and immediately after enable the interface in question using the commands ifdow eth0 && ifup eth0. If we don't want to restart the interface and return to eth0 to its initial state, we execute:

buzz @ sysadmin: ~ $ sudo ip addr del 192.168.1.250/24 broadcast 192.168.1.255 dev eth0
buzz @ sysadmin: ~ $ ip addr show eth0

To know the commands that the package installs iproute2 let's run:

buzz @ sysadmin: ~ $ sudo dpkg -L iproute2 | grep / bin
buzz @ sysadmin: ~ $ sudo dpkg -L iproute2 | grep / sbin

Dynamic Addressing

If we want a device to obtain a dynamic IP address, we must configure its network interface so that it obtains it via the dhclient. We just have to declare in the file / etc / network / interfaces the following lines for that interface:

self eth0
IFACE ETHO INET dhcp

If during the installation process it was decided that the network card obtain a dynamic IP, the previous step is not necessary as it must be correctly configured so that it leases an IP from the existing DHCP server in the SME Network.

If it is that we change from a Static IP to a Dynamic one, or that we add a new interface and want to acquire a dynamic IP, to enable that interface we execute

buzz @ sysadmin: ~ $ sudo ifup eth0

command that in this case instructs the program dhclient start the DHCP process. To disable the interface we execute

buzz @ sysadmin: ~ $ sudo ifdown eth0

command that starts the release process - release configuration using DHCP and shut down the network interface.

Run man dhclient for more information on the DHCP client program.

Static addressing

We have seen in many previous articles how to configure a static IP on a network interface. The main configuration file is / etc / network / interfaces. Example:

buzz @ sysadmin: ~ $ cat / etc / network / interfaces
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces (5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0
iface eth0 inet static
    address 10.10.10.1/24 netmask 255.255.255.0 network 10.10.10.0 broadcast 10.10.10.255 gateway 10.10.10.101 # dns-* options are implemented by the # resolvconf package, if installed dns-nameservers 192.168.10.5 dns-search desdelinux.fan

The network interface configuration parameters eth0 from the above file indicate:

  • ALLOW-HOTPLUG ETH0: Synonym of "auto" Y "Allow-Uuto«. Line indicating that the physical interface eth0 must get up - up automatically by various subsystems during computer startup. Typically by Ifup
  • iface eth0 inet static: line indicating that the interface - IFACE ETH0 must be configured for a network TCP / IP IPv4 statically -fixed IP- and not dynamically, as in the case of Dynamic Addressing with the line inet dhcp iface eth0
  • address 10.10.10.1: assign IPv4 10.10.10.1 to the interface
  • netmask 255.255.255.0- Subnet mask for a typical Class "C" LAN of up to 254 computers. Synonym of having declared address 10.10.10.1/24 in the previous line
  • network: subnet to which the assigned static address belongs
  • Broadcast: Broadcast or advertisement IP
  • Gateway: gateway for typically connecting to the Internet
  • dns-nameservers- DNS server IP address if the package is installed resolveconf which should not be confused with the file /etc/resolv.conf - or solve
  • DNS-Search: default search domain in DNS queries

The contents of the above file can be simplified to:

buzz @ sysadmin: ~ $ cat / etc / network / interfaces
auto lo iface lo inet loopback

allow-hotplug eth0 iface eth0 inet static address 10.10.10.1/24

buzz @ sysadmin: ~ $ ip addr show eth0
2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link / ether 70: 54: d2: 19: ad: 65 brd ff: ff: ff: ff: ff: ff inet 10.10.10.1/24 brd 10.10.10.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80 :: 7254: d2ff: fe19: ad65 / 64 scope link valid_lft forever preferred_lft forever

All other parameters will take the default values, without forgetting the values ​​that we have declared in the file / Etc / resolv.conf al DO NOT have the package installed resolveconf.

Bridge - Bridge Connections

To make a Bridge - Bridge you need to install the bridge-utils package:

buzz @ sysadmin: ~ $ sudo aptitude install bridge-utils

Bridges are widely used in Virtualization. Let's say we have an HP Proliant ML 350 Gen 8 or Gen 9 server with 4 network interfaces. We can leave one of her to communicate directly with the Host - Host that supports virtual machines. With the remaining three we can make an Anonymous Bridge -without assigning any IP address- and connect the virtual machines to that bridge so that they can access the SME LAN, these virtual machines have static or dynamic IP addresses.

This very useful tip was given to me by my friend and colleague Edward Claus. Also, in the file / usr / share / doc / ifupdown / examples / bridge we will find a script - script on how to bridge multiple network interfaces.

buzz @ host: ~ $ sudo nano / etc / network / interfaces
auto lo iface lo inet loopback allow-hotplug eth0 iface eth0 inet static address 192.168.10.27 iface eth1 inet manual iface eth2 inet manual iface eth3 inet manual # Bridge Anonymous auto br0 iface br0 inet manual bridge_ports eth1 eth2 eth3

Summary

The subject of Telecommunications is tricky and requires a lot of study and practice. Sysadmin need to know the essentials. This article is just a Minimum Point of Entry. No more.

We have not touched - and will not touch - the OSI model «Open System Interconnection»Which is the reference model for network protocols with layered architecture created in 1980 by the International Organization for Standardization«ISO«.

Descend into the theoretical aspects of OSI model, almost equivalent to descending to the Deep Web or Deep Web ... at least for me that I am not a Chippers.

Next delivery

Introduction to the Authentication Service


Leave a Comment

Your email address will not be published. Required fields are marked with *

*

*

  1. Responsible for the data: Miguel Ángel Gatón
  2. Purpose of the data: Control SPAM, comment management.
  3. Legitimation: Your consent
  4. Communication of the data: The data will not be communicated to third parties except by legal obligation.
  5. Data storage: Database hosted by Occentus Networks (EU)
  6. Rights: At any time you can limit, recover and delete your information.

  1.   Zodiac Carburus said

    The command ip I have used it like you, Fico, on many occasions and it has served as a lifeline. You only had to write about private networks reserved for business networks. Too bad an article so "handy" or manual and visited by many does not have more comments.

  2.   Zodiac Carburus said

    I detected an omission on your part, Fico. In the bridge statement it says:
    iface br0 inet manual

    As you know, with that single line when restarting the bridge does not automatically lift. Should say:

    car br0
    IFACE BRO INET MANUAL
    bridge_ports eth1 eth2 eth3

    You're welcome. 🙂

  3.   federico said

    Hello Zodiac.
    You as always reading my posts in depth.
    I will include the subject of private networks in the first article of Samba 4. And yes, I forgot to write car br0 at the beginning of the bridge configuration. Let see if the dear Luigys, site administrator, modifies the post.
    Thank you very much for your time, Zodiac.

  4.   love it said

    I love reading these kinds of tutorials on my RSS. I have read them for a long time and had fallen that they are like chapters. I said ... Thank you, I read you

  5.   federico said

    Well, continue to enjoy reading, Ado Ello. Cheers!