Centos can accept and easily handle VLAN trunks just as same as doing Access mode.
Let’s suppose that you have a WAN interface in access mode (so to say, it’s a plain WAN interface for Internet access), and you need to reconfigure it to accept VLAN trunks. This is usually used to incorporate some remote locations into your LAN.
Let’s put up a scenario where you will have one VLAN trunk for the Internet connection and one more comming from a remote location that you need to incorporate into your LAN network. The ISP will give you the pvid-s of the VLANs that you have to accept. Let’s say that they are using Cisco routers and say you have to accept VLAN trunk 888 for Internet access with the same parameters that eth0 used in access mode, and VLAN 346 from the remote location. The clients on the remote location uses the same IP range as the LAN in the local, so we will need to bridge that location’s trunk with the LAN interface (eth1) in the routerbox (when you have a linux routerbox like this, you will also have one more eth for the LAN side. Let’s say it’s eth1). So the plan is:
1) reconfigure eth0 from access mode to trunk mode
2) bring up and configure the VLAN trunks
3) reconfigure eth1 to bridge in the remote VLAN comming from the trunk 346
BTW, Cisco uses VLAN-xxx for designating VLAN trunks (pvids), and linux translates it into, in our case eth0.xxx
Reconfigure eth0 from access to vlan trunk mode
Let’s do all this “manually”, without some GUI help. For a start, your networking scripts can be found in /etc/sysconfig/network-scripts. Let’s see how is eth0 configured now:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 BOOTPROTO=none ONBOOT=yes TYPE=Ethernet IPADDR=191.202.121.62 NETMASK=255.255.255.252 HWADDR=00:0e:a6:8b:e4:1a IPV6INIT=no USERCTL=no
In this case, as in most scenrarios, it’s configured in access mode for Internet access. OK, so from now on, eth0’s job won’t be anymore to accept the Internet connection, but to accept the vlan trunks. So, it doesn’t need an IP address anymore (VLAN works on ethernet layer), and we need to tell it that it is accepting VLAN trunks now. Change this file as follows:
DEVICE=eth0 TYPE=Ethernet BOOTPROTO=none HWADDR=00:0e:a6:8b:e4:1a ONBOOT=yes
We set it up to work as the most ordinary Ethernet interface. Now let’s make a script that will bring up the VLAN trunk that will provide you internet access.
Setting up the VLAN trunks
The provider said that it’s VLAN 888 and that it’s IP parameters are the same as eth0 was in access mode. In this case, it’s name is not random, it has to be eth0.vlan_pvid, so:
vi /etc/sysconfig/network-scripts/ifup-eth0.888
VLAN=yes DEVICE=eth0.888 BOOTPROTO=none ONBOOT=yes IPADDR=191.202.121.62 NETMASK=255.255.255.252 IPV6INIT=no USERCTL=no
BTW, not that the IP addresses are made up and you will have to adjust them according to your case.
OK, so we told it that it will be called eth0.888 (again, you will have to adjust this according to the VLAN pvid given to you buy your ISP in your case!), given it the IP parametres (as the ISP told us that they are the same as eth0 was in WAN mode), and told the kernel that it’s a VLAN trunk.
Ok, this should be enough to reconfigure eth0 to accept VLAN trunk and to maintain Internet access. Note that if you have any entry in your firewall (iptables) with eth0 interface as WAN, you will need to correct them to eth0.888
The ISP said that the remote LAN is comming from the VLAN 346 trunk, so let’s set up that interface too:
vi /etc/sysconfig/network-scripts/ifcfg-eth0.346
VLAN=yes DEVICE=eth0.346 BOOTPROTO=none ONBOOT=yes IPV6INIT=no USERCTL=no BRIDGE=br1 TYPE=Ethernet
So, this will be the LAN from the remote location comming from the trunk 346. Notice that it belongs to a bridge br1 where we will also have to put eth1 now:
Reconfiguring eth1 to bridge in the remote VLAN comming from the trunk 346
Let’s take a look at eth1’s ifup script:
vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1 BOOTPROTO=none ONBOOT=yes TYPE=Ethernet IPADDR=192.168.1.1 NETMASK=255.255.255.0 HWADDR=f8:d1:11:00:1e:27 IPV6INIT=no USERCTL=no
We can use the brctl to put it onto a bridge but let’s stick to a “manual” solution, change it to:
DEVICE=eth1 BOOTPROTO=none ONBOOT=yes TYPE=Ethernet HWADDR=f8:d1:11:00:1e:27 IPV6INIT=no USERCTL=no BRIDGE=br1
And finally, let’s bring up the br1:
vi /etc/sysconfig/network-scripts/ifcfg-br1
DEVICE=br1 BOOTPROTO=none ONBOOT=yes TYPE=Bridge IPADDR=192.168.1.1 NETMASK=255.255.255.0 IPV6INIT=no USERCTL=no
Again, you will have to adapt the IP parameters to your own need.
A simple network restart won’t do here because the arp table also needs to be restarted, so ro a system reboot now and voila!