I got CenturyLink Fiber not too long ago.  The speed is great, but the router that comes along, the C2000T, is an absolute piece of garbage. A large, fast download via wifi from a single client reduced every other device on the network to dial-up speeds.  It took a fair amount of screwing around, but I managed to get an ancient PC working as my gateway, thus removing the C2000T from the equation entirely.

For the impatient, I-already-know-what-I’m-doing-where-are-the-damn-configs, they’re here.

Note that the following solution is for your gateway only, and doesn’t include wifi.  I got an enterprise-grade WAP when my company moved offices a while back, so I was already set in that department.  I’d recommend picking up a cheap router, flashing DD-WRT onto it, and setting it up as a wireless access point.

You will need:

  • A PC to dedicate as your new router.  It doesn’t need much horsepower.  I’m using a circa 2008 Core 2 Duo.
  • The PC will need two network interfaces (gigabit, obviously)
  • A second PC to act as your client during setup.
  • A wifi access point of some kind.  See above.
  • For this job, I found a CentOS-based distro called ClearOS.  (I’m an RHCE, so having something familiar was a big plus.)  Its footprint is tiny.  After installation, updates, and a whole bunch of module installs, it’s still only taking up 1.8GB.  If I’d known, I would have installed it on a USB key.
  • An SSH client.  Putty is free and gets the job done.
  • A switch.

If you’re the sort of person doing this project, I’m willing to bet you already have all of these things lying around.

Network setup:

  • eth0 is connected to your existing network and can get an address from DHCP.
  • Your existing network is in the 192.168.1.0/24 range.
  • eth1 is unplugged.
  • Your client PC has an IP in your existing subnet.
  • You will be creating a new network, 192.168.2.0/24. This prevents routing confusion during setup and configuration. (You can always change back afterwards.)

I chose to go with ClearOS 6, even though it’s not the newest version.  My reasoning is that ClearOS is a niche product, and not all the marketplace modules will have been ported to ClearOS 7 yet. If you’re using 7, your interface names are going to be different.

Installation of ClearOS is a breeze.  If you’ve ever installed RHEL or CentOS before, this should be very familiar to you.  I’m going to assume anyone replacing their router with a Linux PC knows how to do a standard install, and I won’t detail the steps here. A word of warning: ClearOS and the nouveau driver didn’t like my Nvidia video card at all.  If you have an Nvidia-based video card, you may want to swap in something else for the duration of installation and setup.

After the installation and reboot, the server will come up with a screen telling you connect to https://192.168.1.x:81 in a browser.  (Ignore the certificate warning.)  This will lead you to the web-based installation wizard.

Select “Gateway Mode” from the first list of options.  It will ask you how you want to configure your network interfaces.  Set eth0 as external and eth1 as LAN.  You can leave the config for eth0 as-is for now, unless you want to change the hostname.

Click the Add button next to eth1.  You can leave all the defaults set, but you’ll need to set a static IP address for the NIC.  Use 192.168.2.1.

You can just click through the rest of the settings until you get to the system registration.  I was annoyed by this, but registered anyway.  (Finding a workaround seemed like more trouble that it was worth.)  Register the system, then click through to the end of the wizard.

CenturyLink’s included router communicates with their fiber equipment on VLAN 201, tagged, using PPPoE.  I’d used VLAN interfaces before, and I’d used PPPoE, but I’d never had to deal with them in combination.  Figuring this out took me a bit.

Now the real fun begins.  Plug eth1 on the ClearOS router and your client PC into your switch.  (The switch should not be connected to your existing router.) Turn off wifi and make sure you get a DHCP lease in the new subnet.  Log into https://192.168.2.1:81 and go to Network > IP Settings.

Edit the configuration for eth0 and change the connection type to PPPoE.  Set your credentials here.  If you don’t have them, you’ll need to call CenturyLink.  (Or you may be able to get them off the C2000T.)  Set the MTU to 1492.

Unfortunately, ClearOS doesn’t permit you to define a VLAN interface as a PPP host interface through the GUI, so we’re command line from here on out.

Log in to your ClearOS server as root using Putty.  (You can also physically log in to a text console by pressing CTRL+ALT+F2.)

Now we need to modify and create a few files.  cd to /etc/sysconfig/network-scripts/ and edit ifcfg-eth0 so it only contains these lines:

DEVICE=eth0
BOOTPROTO="none"
ONBOOT="no"

Next, create a file named ifcfg-eth0.201 with the following content:

DEVICE=eth0.201
BOOTPROTO=none
ONBOOT=yes
VLAN=yes

These set up eth0 to spit out packets tagged with VLAN 201, like CenturyLink’s equipment expects.

Finally, we need to change one line in ifcfg-ppp0.  Change

ETH="eth0"

to:

ETH="eth0.201"

Unplug your C2000T and throw it away. Plug eth0 directly into the jack from CenturyLink, reboot, and you’re done.

If you have problems, check /var/log/messages for pppd.

Troubleshooting

“No such device”

If you’re getting the following:

pppd[5689]: pppd 2.4.5 started by root, uid 0
pppd[5689]: Using interface ppp0
pppd[5689]: Connect: ppp0 <--> /dev/pts/0
pppoe[5690]: ioctl(SIOCGIFHWADDR): Session 0: No such device
pppd[5689]: Modem hangup
pppd[5689]: Connection terminated.
pppd[5689]: Exit.

Check to make sure that eth0.201 is defined and up. It should look similar to this:

[root@clearos log]# ifconfig eth0.201
eth0.201  Link encap:Ethernet  HWaddr 00:21:85:1C:82:E5  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7798308 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2985292 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:10039606363 (9.3 GiB)  TX bytes:936556660 (893.1 MiB)

If your output looks like the following, either eth0.201 isn’t defined, or it’s not coming up at boot time.

[root@hedonismbot log]# ifconfig eth0.201
eth0.201: error fetching interface information: Device not found

Double check the contents of /etc/sysconfig/network-scripts/ifcfg-eth0.201.