How to set up a home network with a PPPoE DSL connection

Wrecked 'im? Nearly killed 'im!

The time, effort, and frustration doing all of this prompted me to write this. I hope that this can be of use to someone, and that it will save some suffering while teaching something in the process. The following are instructions on how to set up a home network using a Windows or Linux box as a router.

I’m by no means a computer novice. I work for a mid-sized university helping administer a network of about 300 computers, and have a lot of experience with networking. I’ve made efforts to dumb this document down, but a basic knowledge of networking and network terminology will go a long way in reading this.

It Begins...

This past summer I moved into a friend’s apartment who was subletting it to me while she studied in Germany. She had already had Pacific Bell DSL installed, back when they were giving out static IP addresses at an advertised 384/128 rate, for about fifty bucks a month. Luckily for me, she and her husband had already set up a router running Linux on an old 486 that sat in the closet. All I had to do was configure my TCP/IP settings with a static private IP address, and tada, I was connected. I never had many problems, except for many IRC networks not letting me on because ident requests were rejected, and for DCC sends not working because of the IP masquerading. The upstream speed was a little slow, and I couldn’t run any kind of server, but once you’ve drank from the cup of life and tasted the sweet nectar of high speed access, well, the world starts looking a little different, with most of your friends who still have modems being oddly dark and foreign to you, while you dream of 0s and 1s speeding by in giant fibre pipes.

When I moved out and into the apartment I live in now, I signed up for DSL. This time around, PacBell was offering ADSL with one dynamic IP address for forty dollars a month, rather than two static IPs for fifty. The catch: the service used PPPoE (Point to Point Protocol over Ethernet), so no "Instant On" connectivity like with a cable modem or on a LAN. I had more than a little bit of trouble with getting my small home network set up, so I’ll try to make it easy for anyone wanting to do the same. What follows are my experiences with setting up a home network with four computers, with one of them connected to the DSL modem, and the rest connected to it via an eight-port 10MBps hub, first on Windows 2000, and then on Linux running the 2.2.16 kernel.

Windows to the World...

First, some background. There were four computers in the apartment: my Windows 2000 Professional workstation, and three Windows 98 SE stations for my roommates. We ran CAT5 cable through the apartment to each computer and connected everything to the cheap little hub we bought. My computer was to be the NAT server, using ICS (Internet Connection Sharing) and DHCP for the other computers on the network, with a subnet of 192.168.0.x. The DSL modem is an Alcatel, provided free for signing up for one year of service.

My computer had two network cards installed, one to run to the hub and one to run to the DSL modem. I installed the Enternet 300 software provided by Pacific Bell, and enabled ICS. Nothing happened. You can imagine my dismay. Although the machines on my network were able to get an IP address from the DHCP server on my computer, they were unable to see the outside world. In short, the Enternet software, along with all other PPPoE software out there I was able to find, was completely useless and so poorly constructed that it made me wonder how Pacific Bell ever thought it was a wise solution for the customers. I’ll spare you the details, but after two days of searching online (with three very frustrated roommates wanting Internet access), I managed to find software to fix my problem.

The software is called RASPPPoE. It is available at http://user.cs.tu-berlin.de/~normanb/. It is for Windows 98/ME/2000, and was written for Windows 2000 and then ported to Windows 98. It replaces all other PPPoE software and takes less than 200KB of disk space. Download the software, and I’ll tell you how to configure it to get your home network running (assuming you have Windows 2000--I’ve not used it with Windows 98 nor have I used ICS with Windows 98, though I suppose there isn’t much difference).

My computer had a Kingston (though it appears as a Linksys LNE100TX) network card and a Netgear FA311 10/100 network card. The Netgear was connected to the DSL modem and the Kingston was connected to the hub. First, I installed the RASPPPoE software by extracting all the files to an empty folder and adding the protocol. To add the protocol, I opened Network and Dial-Up Connections and right-clicked the Local Area Network connection for the Netgear card. I clicked the Install button, then protocol, then add, then Have Disk, and pointed to the folder where I extracted the files. When the protocol is installed, I closed all the windows except the properties for the Local Area Connection window. I unchecked all the boxes except for Client for Microsoft Networks and PPPoE. Next, I opened the properties for the other Local Area Network connection and removed all but Client for Microsoft Networks and TCP/IP.

What I did next was create the actual connection. What RASPPPoE does that is different from other PPPoE software packages is that it uses Windows’ built dial-up networking to create the connection, emulating an ISDN connection, using the PPPoE protocol instead of PPP. To do this, click Start, Run, and type RASPPPOE. Make sure that the network adapter that’s connected to the DSL modem (in my case the Netgear card) is selected, and click "Create ...." Close that program, restart the computer to make sure everything has been installed correctly, then double-click the connection link on your desktop (probably named something like Connection through NETGEAR FA311 FAST ETHERNET ADAPTER). Type in the username that you were given by your ISP (or created yourself, or whatever you used before), and password. Click Dial, and you’ll be connected.

You can adjust the dial-on-demand and connection retry settings the same as any other Dial Up Networking connection for this connection.

To enable ICS so the other people on your network can connect, go to the properties for the dial up networking connection and click the Sharing tab. Check "Enable sharing for this connection" and for the local network, choose the network adapter connected to your hub (in my case the Linksys LNE100TX adapter). Restart your computer again to make sure ICS is set up properly. Check the TCP/IP settings for the adapter connected to the network to verify that it now has a static IP address of 192.168.0.1. Connect to your DSL service, and make sure the computers on your network are set to use DHCP. They should now be able to connect to the Internet, with your computer acting as the network address translation and DHCP server.

Easy-peasy, Japaneasy.

Linux Made Simple, in 1.68 MB

Though I didn’t like having my computer as the server, since I couldn’t just reboot my computer whenever I wanted without disconnecting everyone and because of the slight resource drain, I didn’t have much choice. I had the best system in the house and was the only one with A) any clue what he was doing, and B) an operating system that could handle it. I also had only one computer, though I had been trying to find a nice 486 or low-end 586 to turn into a Linux router. Finally, in March I managed to weasel a Pentium I, 200MHz system with 32 MB of RAM out of my boss. After toying with it a bit, (I had no keyboard, no mouse, no video card, no network card, no floppy drive, and no CD-ROM in it), I put the floppy drive from my computer into it and bought it a network card. I downloaded a custom PPPoE floppy drive image that runs the Linux Router Project Linux distribution and worked on getting it set up. In less than four hours, I had the system up and running as a router. This assumes you have a basic understanding of what Linux is and how to get around in it. If you’ve never touched a command line, this might not be the best idea for you, but here’s how to do it yourself:

First, download the image from http://leaf.sourceforge.net/devel/khadley/esb2.html, and download any pre-compiled drivers you need for your network cards (I suggest using google to find them). The image at the above URL contains drivers for the 3c509 and 3c905 compatible cards, and the tulip driver which supports many, many network cards. If you’re not sure what you need, use google to find out. For me, I needed the tulip driver for my Linksys LNE100TX network card, and the RealTek 8139 driver. Make sure that the version of the drivers you get are compiled for the version of the Linux kernel you have--a driver compiled for the 2.0.x kernel will not work with the 2.2.x kernel, but the 2.4.x driver may work with the 2.2.x kernel (I don’t know for certain). If you’re not sure if you have the right version, try opening the driver.o file in a text editor and searching for "kernel." Typically this will be followed by the kernel version the driver was compiled on.

Now that you have your image and drivers, extract the image to a floppy disk and copy the driver files to a different floppy disk, formatted as 1.44 MB. Boot the router off of the boot disk you just made from the image, and when asked to log in, log in as root. Type q to quit the configuration program.

When you’re at a command prompt, you have to copy the driver files from the other floppy drive to /lib/modules and then make them kernel modules. To do this, take out the boot disk (it has loaded everything it needs to load to a RAMdisk), and put in the floppy disk with the drivers. Type the following at the command line:

mount -t vfat /dev/fd0 /mnt
cp your-driver.o /lib/modules
insmod /lib/modules/your-driver.o
cd /
umount /mnt

Repeat the second and third lines for as many drivers as you have to load.

If you do not have a network card that uses the tulip driver or the 3Com drivers, it’s a good idea to delete them to free up space.

cd /
cd /lib/modules
rm 3c*
rm tulip.o
cd /

Now you want to stop any driver you deleted from being loaded at startup and to make your own drivers load at startup. To do this, you have to edit the file /etc/modules.

cd /etc
ae modules

Scroll down to the lines that just say

3c509
tulip

For each driver that you removed, comment it out with #. For example:

#3c509
#tulip

For each driver you copied to /lib/modules, add it:

#3c509
#tulip
rtl8139

The way a driver is added here is to add the filename of the driver without the file extension. For example, if your driver was rtl8139.o, you would add rtl8139, as shown above.

Save the file by pressing CTRL-S, and quit with CTRL-C.

Run adsl-setup from the command line to configure your DSL connection. Your username is the same name you’ve always used for your DSL connection. The device connected to your DSL modem is eth0. Type eth0 even if it currently is not the device connected to it, because the only way the software will work is if it is connected to eth0. Type no for dial-on-demand, since you want the connection to be up and running constantly. Enter the IP addresses of your DNS servers, and when asked what firewall rules you want choose 0 for none. If you select anything other than 0, you won’t be able to connect to the Internet at all. Regardless, you don't need them, as this distribution of Linux already is running a firewall, so you don't need the addition firewall.

When you’re done and have saved the settings, you need to back up all the changes you’ve made to the floppy disk. The floppy disk loads itself into RAM and runs from there for speed reasons. When you make any changes to the configuration, it must be rewritten to the floppy disk so when the system is next booted, it uses those changes.

To back up to the floppy disk, type lrcfg at the command line. Choose b for backing up the disk. Since we only made changes to lib (drivers in /lib/modules), etc (modules in /etc), and pppoe (adsl-setup), we only need to back those three up. Choose the number that corresponds to lib, and follow the instructions. When asked if there is room on the disk, choose yes. Do the same for etc and pppoe. When all three packages are successfully backed up, restart the system by typing reboot at the command line. With luck, the system will connect automatically to the Internet. You can check by logging on again as root and typing ifconfig at the command line. The output should show four devices (use SHIFT-PgUp to view the screen scroll-back): lo (loopback device), eth0 (network card connected to the DSL modem, which will have UNSPECADDR for the IP address), eth1 (network card connected to the hub, which will have 192.168.1.254 for the IP address), and ppp0 (PPPoE connection to your DSL provider, which will have a routable IP address). If you’re missing ppp0, it’s because you’re not connected. There’s a chance that you mixed up your network cards and have the network card that is at eth0 connected to the hub instead of the DSL modem. Try switching the network cables and restarting.

If you’re still not correctly getting a connection to your provider, log in as root, and at the command line type adsl-start. If it connects, it will say so. After this, type adsl-status to see if the link is up and running. When you want to stop the connection, type adsl-stop. If for some reason adsl-start doesn’t connect you, try typing adsl-stop, then adsl-connect. adsl-connect connects you and shows the information it sends and receives. This is a good place to see if perhaps your username and password are being rejected. If that’s the case, run adsl-setup again, back up the floppy disk again (this time only back up pppoe), restart and try again. If it still doesn’t work, well, contact me, and I’ll see if I can help.

If ifconfig shows ppp0 has a routable IP address, try pinging a host with ping hostname, such as ping yahoo.com. If it works, then you’re connected and everything is up and running. If it doesn’t, try pinging an IP address, such as 216.115.108.243. If that works, then your DNS servers aren’t set up. Run adsl-setup again, and enter the correct DNS servers. Back up pppoe again. Restart.

Assuming that everything does work, it’s time to configure the clients on the internal network. Set the clients to use DHCP for their IP addresses, but to use their own DNS servers. Set the DNS servers to be the same as the ones you used on the router. The computers should get an IP address of 192.168.1.x. If you want to use a static IP for the internal clients, then set up the IP address manually using 192.168.1.2xx (but do not use 192.168.1.254, as that is the IP for the router). The 2xx subnet is reserved for static IP addresses, and the DHCP server won’t give out addresses in that subnet. The netmask is 255.255.255.0, and the gateway is 192.168.1.254. Set the DNS servers appropriately, again.


Life is good for me now. My computer is finally mine again, and everyone on the network is happy. If you have any questions or comments or want some free support with the above instructions, let me know. Many people don't realize it, but setting up a Linux router like I did is an extremely cheap and reliable alternative to buying an 80-300 dollar router that does the same job. I hope the above helped you.