Part II: Apple iPads, Apple TVs, Bonjour & AirPlay Across Subnets Using Open-Source Software



Configuring The Network Interfaces

I will attempt to show how to configure the network interfaces for several different distributions of Linux, If I miss a distribution that you feel is important, please let me know and I will try to include that as well.

First we need to make sure that the iproute2, and vconfig packages are installed. These two packages will provide 802.1q (VLAN) support on our network interface.

Gentoo:

# emerge vconfig iproute2



On other distributions these packages may already be installed. If not, you will need to install them:

Red Hat / CentOS:

# yum install iproute
# yum install vconfig

Ubuntu / Debian:

# apt-get install iproute
# apt-get install vlan



Next, edit the network configuration file and set it up as follows:

Gentoo:
/etc/conf.d/net

# waa - 20130917
#   5 - Servers
#  10 - AppleTV 1 (Wired)
#  20 - AppleTV 1 (Wired)
# 100 - Students Wireless
# 101 - Adults Wireless
# -----------------------

# Define the VLANS that will be used
# ----------------------------------
vlans_eth0="5 10 20 100 101"

# Define the naming convention for the VLAN interfaces
# ----------------------------------------------------
vlan5_name="vlan5"
vlan10_name="vlan10"
vlan20_name="vlan20"
vlan100_name="vlan100"
vlan101_name="vlan101"

# Bind IP addresses to the interfaces
# -----------------------------------
#
# All VLANs are tagged, set no IPv4 address 
# on the primary ethernet interface
# -----------------------------------------
config_eth0="null"            
config_vlan5="10.5.0.4/24"
config_vlan10="10.10.0.4/24"
config_vlan20="10.20.0.4/24"
config_vlan100="10.100.0.4/24"
config_vlan101="10.101.0.4/24"

# Configure the default route using the gateway on the Servers VLAN
# -----------------------------------------------------------------
routes_vlan5="default via 10.5.0.254"

In other distributions, each VLAN interface requires a separate configuration file which makes it more difficult to demonstrate in-line. For now, these two are currently placeholders for separate documentation pages to come:

Red Hat / CentOS
Debian / Ubuntu



We need to tell the server to start our network interfaces and make sure they also start up at boot time:

Gentoo:

# cd /etc/init.d
# ln -s net.lo net.eth0
# rc-update add net.eth0 default
# rc-service net.eth0 start



On the other Linux distributions, the network interfaces are configured to start at boot by default. There is no need to manually set them up here. We should be able to just restart them:

Red Hat / CentOS:

# service network restart

Ubuntu / Debian:

# service networking restart



Verify that the interfaces are properly configured by running the ifconfig command. The output should look similar to the following:

All Distributions:

# ifconfig

eth0: flags=4163  mtu 1500
        ether 00:50:56:bd:00:03  txqueuelen 1000  (Ethernet)   <--- Notice there is no IPv4
        RX packets 11084383  bytes 1932472483 (1.7 GiB)             address bound to this interface
        RX errors 0  dropped 19368  overruns 0  frame 0
        TX packets 9535939  bytes 4788165488 (4.4 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 0  (Local Loopback)
        RX packets 333  bytes 151661 (148.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 333  bytes 151661 (148.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vlan5: flags=4163  mtu 1500
        inet 10.5.0.4  netmask 255.255.255.0  broadcast 10.5.0.255
        ether 00:50:56:bd:00:03  txqueuelen 0  (Ethernet)
        RX packets 1473436  bytes 401316807 (382.7 MiB)
        RX errors 0  dropped 19226  overruns 0  frame 0
        TX packets 2692643  bytes 1371192454 (1.2 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vlan10: flags=4163  mtu 1500
        inet 10.10.0.4  netmask 255.255.255.0  broadcast 10.10.0.255
        ether 00:50:56:bd:00:03  txqueuelen 0  (Ethernet)
        RX packets 36993  bytes 3485440 (3.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2009044  bytes 891429875 (850.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vlan20: flags=4163  mtu 1500
        inet 10.20.0.4  netmask 255.255.255.0  broadcast 10.20.0.255
        ether 00:50:56:bd:00:03  txqueuelen 0  (Ethernet)
        RX packets 722403  bytes 109542756 (104.4 MiB)
        RX errors 0  dropped 29  overruns 0  frame 0
        TX packets 1966289  bytes 880751727 (839.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vlan100: flags=4163  mtu 1500
        inet 10.100.0.4  netmask 255.255.255.0  broadcast 10.100.0.255
        ether 00:50:56:bd:00:03  txqueuelen 0  (Ethernet)
        RX packets 183165  bytes 12743965 (12.1 MiB)
        RX errors 0  dropped 6  overruns 0  frame 0
        TX packets 66  bytes 4605 (4.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vlan101: flags=4163  mtu 1500
        inet 10.101.0.4  netmask 255.255.255.0  broadcast 10.101.0.255
        ether 00:50:56:bd:00:03  txqueuelen 0  (Ethernet)
        RX packets 4964095  bytes 757037361 (721.9 MiB)
        RX errors 0  dropped 595  overruns 0  frame 0
        TX packets 1048591  bytes 561754230 (535.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0



Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

CentOS 6

I wanted to show my thanks for this post by giving you my steps in setting up centos 6. Feel free to add/delete/modify whatever you want.

Comparison to Gentoo: Initial installation of the OS is MUCH easier. Setting up the vlans involves 3 files per vlan. So I suppose it's a tossup as far as time. My vlan11 is servers, 10 is workstations, 50 is wifi. For now I'm just joining workstations to wifi

Get the centos installer (I used current which is 6.5)
https://www.centos.org/
##make a vm with dvd1 mounted at startup
##choose minimal install (this is different than using the minimal iso as that doesn't even have cron
##reboot and login as root
##Ensure that the module is loaded by entering the following command:
lsmod | grep 8021q
#If the module is not loaded, load it with the following command:
modprobe 8021q
vi /etc/sysconfig/network-scripts/ifcfg-eth0
##press i for insert mode. esc to exit insert mode.
##make it like this
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
#NM_CONTROLLED=yes
BOOTPROTO=none
HWADDR=yourMacGoesHere
:x to save and exit
vi /etc/sysconfig/network-scripts/ifcfg-vlan11
VLAN=yes
VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD
DEVICE=vlan11
PHYSDEV=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
USERCTL=no

##repeat for vlan10, vlan50
##then you have to add a route and rule or cenos tries to send traffic from one vlan out the wrong vlan
##this is what I followed:
##http://commandline.ninja/2013/01/14/centos-policy-routing-why-yes-it-can-be-done/
vi /etc/iproute2/rt_tables
#add the following lines
11 vlan11
50 vlan50
10 vlan10

#then add /etc/sysconfig/network-scripts/route-vlan11 with:
default table vlan11 via 10.99.11.1
#then add /etc/sysconfig/network-scripts/rule-vlan11 with:
from 10.99.11.173 table vlan11
#repeat for other vlans
#so with 1 network adapter and 3 vlans I have 10 files. lame
#maybe someone can figure out a cleaner way to do this, but my way works!

##continue on to my normal centos setup notes:
#Allow root ssh so you can get out of the stupid vmconsole
vi /etc/ssh/sshd_config
#uncomment the
PermitRootLogin yes

#iptables and SElinux are on. You may need to turn these off.
service iptables stop
#DISABLE SELINUX THE BITCH
vi /etc/sysconfig/selinux

//more good stuff before moving on to app installation///
//get the epel repo up
cd ~
wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noa...
rpm -ivh epel-release-6-8.noarch.rpm
#get git for scripts, zip and unzip are handy too
sudo yum install git zip unzip

/////////VMWARE Tools install////////////////
su root
yum install gcc kernel-devel perl make openssh-clients wget
//Mount the VMWare Tools ISO in the gui
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
cp /mnt/cdrom/VMwareTools*.gz /tmp
cd /tmp
tar -C /tmp -zxvf VMwareTools*.gz
cd vmware-tools-distrib
./vmware-install.pl
//accept the defaults
//then run the config thing
umount /mnt/cdrom

/////////avahi install///////
#basically I followed your simple steps, only thing was I got a dbus error when starting until I figured out I had to start the messagebus service:

yum install avahi
/etc/avahi/avahi-daemon.conf
allow-interfaces=vlan10,vlan20,vlan100,vlan101
enable-reflector=yes

service messagebus start
service avahi-daemon start
chkconfig --add messagebus
chkconfig --add avahi-daemon

Thanks for the feedback

I approved your post because you obviously put some thought into it and I am sure it will help a CentOS user from the future. :)

I would argue though, that leaving "PermitRootLogins = yes" is a no-no, and would recommend that you instead create a user while logged in via the VMware console, and then ssh in as that user. I would also recommend allowing ssh logins via public key only.

Also, I rarely actually have to install Gentoo these days. I keep a "Gentoo64bitTemplate" (mostly) up to date on each of our clients' VMware systems, so deploying a new Gentoo Linux server is a couple clicks, and then a name-changing script away.

And one helpful hint: To su to root and inherit all of root's environment just do:

$ su -

Or if you feel that must enter an account name:

$ su - root

also works.

Cheers!

--
Bill

Post new comment

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <b> <i> <u> <strong> <cite> <code> <pre> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Q
x
j
K
*
E
Enter the code without spaces and pay attention to upper/lower case.