How to configure 802.1Q VLAN Tagging on CentOS 7

Estimated reading time: 3 min

Introduction

VLANs make it possible to separate large networks into smaller and manageable ones. The 802.1Q is a standard which is implemented by all vendors into their network equipment. Some switches have the ability to assign multiple VLANs to a single network port. With this feature, you can assign multiple VLANs to a single server. The switch can separate the packages because every Ethernet frame is tagged with the VLAN id.

Prerequisites

  • The network switch your server is connected to must be set up for a successful procedure
  • The switch should support VLAN tagging

Step 1 – Log in using SSH

You must be logged in via SSH as sudo or root user. Please view this article for instructions if you don’t know how to connect.

Step 2 – Disable NetworkManager

Within a server environment, we prefer to disable NetworkManager. These instructions won’t work if NetworkManager is enabled!

Check the status of NetworkManager.

sudo systemctl status NetworkManager

If NetworkManager is not running and you see this message Active: inactive (dead) you can proceed with step 3.

NetworkManager.service - Network Manager
  Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
  Active: inactive (dead)
    Docs: man:NetworkManager(8)

If NetworkManager is active we have to disable it.

NetworkManager.service - Network Manager
   Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled)
   Active: active (running) since Fri, 08 Mar 2013 12:50:04 +0100; 3 days ago

Disable NetworkManager.

sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager

Once the NetworkManager is disabled remove it.

sudo yum -y remove NetworkManager NetworkManager-libnm NetworkManager-team NetworkManager-tui NetworkManager-wifi

Step 3: Load kernel module

Check if kernel module 8021q is loaded.

sudo lsmod | grep 8021q

If it’s loaded you see an outcome similar to this

8021q                  33208  0
garp                   14384  1 8021q
mrp                    18542  1 8021q

If you do not get any output, it means that the module is not loaded. Load the kernel module.

sudo modprobe 8021q

To ensure that the kernel module 8021q  is loaded during boot, we have to add the module into the modules configuration file.

sudo su -c 'echo "8021q" >> /etc/modules'

Step 4 – Find the active network interface

clear && echo $(ip -o -4 route get 8.8.8.8 | sed -nr 's/.*dev ([^\ ]+).*/\1/p')

Step 5 – Configure the network interface

In our example our network interface is eth0. Our article will use eth0 but you have to use the network interface name from step 4.

Edit the network configuration of eth0.

sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0

Replace the configuration with the following 4 lines.

BOOTPROTO="none"
DEVICE="eth0"
ONBOOT="yes"
TYPE="Ethernet"

Create a new configuration file for your VLAN. In our case, it’s VLAN 3047.

sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0.3047

Add the following lines.

DEVICE=eth0.3047
BOOTPROTO=none
ONBOOT=yes
IPADDR=78.41.207.45
PREFIX=24
NETWORK=78.41.207.0
VLAN=yes

Create the second VLAN 453.

sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0.453

Add the following lines.

DEVICE=eth0.453
BOOTPROTO=none
ONBOOT=yes
IPADDR=89.207.131.20
PREFIX=24
NETWORK=89.207.131.0
VLAN=yes

Step 6 – Create network rules

Create the network rule configuration file for VLAN 3047.

sudo nano /etc/sysconfig/network-scripts/rule-eth0.3047

Add the following line.

from 78.41.207.0/24 tab 1 priority 500

Create the network rule configuration file for VLAN 453.

sudo nano /etc/sysconfig/network-scripts/rule-eth0.453

Add the following line.

from 89.207.131.0/24 tab 2 priority 501

Step 7 – Create network routes

Create the route configuration file for VLAN 3047.

sudo nano /etc/sysconfig/network-scripts/route-eth0.3047

Add the following line.

default via 78.41.207.1 dev eth0.3047 table 1

Create the route configuration file for VLAN 453.

sudo nano /etc/sysconfig/network-scripts/route-eth0.453

Add the following line.

default via 89.207.131.1 dev eth0.453 table 2

Step 8 – Configure sysctl

Enable packet forwarding on the server by creating the following file.

sudo nano /etc/sysctl.d/90-override.conf

Add the following line.

net.ipv4.ip_forward=1

Enable reverse path and arp filtering.

net.ipv4.conf.all.arp_filter=0
net.ipv4.conf.all.rp_filter=2

Apply the changes.

sudo sysctl -p /etc/sysctl.d/90-override.conf

Step 9 – Restart the server

sudo reboot

Step 10 – Check VLAN interface status

Run the following command.

cat /proc/net/vlan/config

If VLAN is not active you should see this.

VLAN Dev name     | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD

If it’s active you should see this.

VLAN Dev name     | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth0.3047  	| 3047  | eth0
eth0.453   	| 453  | eth0

Step 11 – Test IP addresses

Ping from your workstation to check if the IPs are active.

ping 78.41.207.45
ping 89.207.131.20

Step 12 – Test IP address on Server

Check if the packets are using the right VLAN to leave the server.

Perform a ping from eth0.3047 to check if it is using the right VLAN to communicate with the destination IP address.

ping -I eth0.3047 8.8.8.8

Output

PING 8.8.8.8 (8.8.8.8) from 78.41.207.45 eth0.3047: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=122 time=2.03 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=122 time=2.13 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=122 time=2.21 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=122 time=2.06 ms
^C
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3080ms
rtt min/avg/max/mdev = 2.038/2.113/2.217/0.089 ms

Perform a ping from eth0.453.

ping -I eth0.453 8.8.8.8

Output

PING 8.8.8.8 (8.8.8.8) from 89.207.131.20 eth0.453: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=123 time=2.26 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=123 time=2.37 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=123 time=2.44 ms
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2756ms
rtt min/avg/max/mdev = 2.266/2.360/2.444/0.073 ms

Conclusion

Congratulations, you have now configured a server which listens to two VLANs with two gateways. VLAN tagging is not limited to two VLANs, multiple VLANs are supported. You have to add each VLAN according to the network configuration of that VLAN.

 

Was this article helpful?
Dislike 0
Views: 66195

Reader Interactions

Comments

  1. Richard J.Powell says

    Hi,
    I follow this article, but if I skip step 6 & 7 so it success.
    I do not understand at step 6 & 7. Where can I find more information about these step to read?

  2. agismaniax says

    I have centos 7 vm guest on top of vmware esxi 6.5. I've followed these steps, but it doesn't work to ping another pc/server. Is there anything else that needs to be tweaked?

  3. shetu says

    Hi
    My parent nic is ens224 and it's ip 192.168.25.101
    At Step 7 – Create network routes
    I have to add this "default via 192.168.10.01 dev ens224.107 table 1"
    I do not know how ens224.107 come form.

Leave a Reply

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