BTinternet pppd mini-HOWTO

Matt Wright

[http://www.consultmatt.co.uk] Matt Wright Consulting

            matt@consultmatt.co.uk
         

Greg Ferguson - Converted the mini-HOWTO from HTML to Docbook 3.1 (SGML).

2002-03-26
Revision History                                                             
Revision v0.29            2002-03-26           Revised by: mww               
Added a small bit of first-hand tech support about cross-frequency.          
Revision v0.28            2002-01-17           Revised by: mww               
New information about PPPoATM involving kernels and distibutions.            
Revision v0.27            2001-12-20           Revised by: mww               
Minor technical problems highlighted by Robert Smith.                        
Revision v0.26            2001-11-21           Revised by: mww               
Added a point about the Kernel HOWTO.                                        
Revision v0.25            2001-11-17           Revised by: mww               
Added a troubleshooting answer about "_mmx_memcpy". Other minor updates as   
well.                                                                        
Revision v0.24            2001-11-09           Revised by: mww               
Technical detail with the chatscript timeout (and found a spelling mistake or
two!). Thanks again to Bill Staehle.                                         
Revision v0.23            2001-11-07           Revised by: mww               
Changed the Chatscript dialing method, thanks go to TonyC from               
btinternet.linux newsgroup.                                                  
Revision v0.22            2001-11-06           Revised by: mww               
Changed a couple more little botches. Thanks again go to Bill Staehle.       
Revision v0.21            2001-11-03           Revised by: mww               
Changed discrepancies reported by Bill Staehle.                              
Revision v0.20            2001-11-01           Revised by: mww               
Added Alcatel Speedtouch Information.                                        
Revision v0.19            2001-10-31           Revised by: mww               
Initial public release.                                                      


This document describes how to setup a modem pppd link to Btinternet in the
UK.

-----------------------------------------------------------------------------
Table of Contents
1. Introduction
    1.1. Copyright and License
    1.2. Mailing Lists
    1.3. About the author
    1.4. Acknowledgements
   
   
2. Requirements
3. Surftime
    3.1. PPPd Setup
    3.2. Chatscript (Dialup)
    3.3. Authentication
    3.4. Setting your global options
    3.5. Testing your link
    3.6. Dialing scripts
   
   
4. BTi Anytime
5. BTOpenworld Home 500 (Alcatel Speedtouch USB)
    5.1. About this section
    5.2. Warning
    5.3. Distribution Specific Information
    5.4. Requirements
    5.5. Software Downloads
    5.6. Patching your kernel
    5.7. Kernel Drivers and Software
    5.8. PPPd Configuration
    5.9. Testing your link
   
   
6. Simple IP Masquerading
7. Troubleshooting
    7.1. Help! Lynx gives unable to access document
    7.2. My kernel < 2.4.2 crashes using the Alcatel driver
    7.3. PPPd crashes when it loads the PPPoATM module
    7.4. insmod speedtch.o gives: "Unresolved symbol: _mmx_memcpy"
    7.5. There are strange noises on the telephone line when I pick up the
        phone.
   
   
8. Further Reading

1. Introduction

This HOWTO exists because a mate of mine needed to easily set up an Internet
connection to BTinternet and here is a quick and concise way to get a running
PPPd to Btinternet. This HOWTO also briefly covers Howto setup basic IP
Masquerading to allow connection sharing.
-----------------------------------------------------------------------------

1.1. Copyright and License

This document is Copyright 2001 by Matt Wright. Permission is granted to
copy, distribute and/or modify this document under the terms of the GNU Free
Documentation License, Version 1.1 or any later version published by the Free
Software Foundation; with no Invariant Sections, with no Front-Cover Texts,
and with no Back-Cover Texts. A copy of the license is available at [http://
www.gnu.org/copyleft/fdl.html] http://www.gnu.org/copyleft/fdl.html

Send feedback to matt@consultmatt.co.uk.
-----------------------------------------------------------------------------

1.2. Mailing Lists

Please note: There is a mailing list available for this howto. If you wish to
join please email <majordomo@consultmatt.co.uk> with the body:

subscribe bti-howto

This will then be followed up by the mailing list bot and subsequent emails
should arrive confirming your request. The list is intended to be for
annoucing changes to this HOWTO and also to dicuss the finer points of
getting pppd to work on BTinternet.
-----------------------------------------------------------------------------

1.3. About the author

My name is Matt Wright. I'm 16 year-old student in Blackburn, Lancashire. I'm
a freelance Linux consultant. I am the proud owner of a Duron 950Mhz (all I
could easily afford) with 256MB SDRAM, Voodoo 4 Video Card, ATI All-in-Wonder
Pro Video Card. I also have a 266Mhz Cyrix that runs my USB ADSL connection,
of which if you are reading this from [http://www.consultmatt.co.uk] http://
www.consultmatt.co.uk you will be using.

You can find me at [http://www.consultmatt.co.uk] www.consultmatt.co.uk. Or
at [mailto:matt@consultmatt.co.uk] matt@consultmatt.co.uk.
-----------------------------------------------------------------------------

1.4. Acknowledgements

A major thanks of gratitude to the guys at Linuxdoc in particular Greg
Ferguson and David Merrill for help with getting this into trusty SGML. Also
to Rob Smith the guy behind me writing this :) (As he couldn't sort his own
Linux box out :P). A great vote of thanks to Bill Staehle for his input in
ironing out some major flaws. Also a thank you goes to TonyC at
btinternet.linux and the rest of that newsgroup for originally getting me on
my feet with BTi. Finally and most importantly my thanks goto my Lord and
Saviour Jesus Christ, without whom I'd be lost.
-----------------------------------------------------------------------------

2. Requirements

The following is needed to use this HOWTO:

  * A working modem, external or internal hardware modems are the easiest to
    get working, see [http://www.linuxdoc.org/HOWTO/Modem-HOWTO.html]
    Modem-HOWTO. If you have a WinModem then see [http://www.linuxdoc.org/
    HOWTO/Winmodems-and-Linux-HOWTO.html] Winmodems and Linux HOWTO
   
  * An account with Btinternet, this HOWTO covers BTi Surftime and Anytime
   
  * Some basic understanding of the Linux OS and its layout
   

-----------------------------------------------------------------------------
3. Surftime

3.1. PPPd Setup

Right, to start off you will need a working installation of PPPd, I know from
experience that Mandrake 8.0 that sometime is doesn't install pppd so check
its installed first. Once it is it usually resides in /usr/sbin/pppd check
that any users you want to access it have setuid access.

Note: Setuid allows pppd to run as-if root allowing non-superusers to run
pppd without less problems. To do this use the command chmod 4750 /usr/sbin/
pppd. Beware: Some distributions have a watchdog program that will change the
pppd permissions back to normal. I have not tested this but on RedHat derived
systems with Linuxconf installed then removing the /usr/lib/linuxconf/redhat/
perm/ppp should stop this happening.
-----------------------------------------------------------------------------

3.2. Chatscript (Dialup)

The Chatscript is a text file, usually residing in /etc/ppp that contains the
commands passed to the modem to make it dial to BTi. If you want to compare
this to DUN in Windows then this is the phone number and init commands.

Below is the chatscript used to dial BTi, I've now opted for putting the \T
metacharacter in the script. The means when we run chat, inside the pppd
command, we can use a -T parameter and supply the needed telephone number.

+---------------------------------------------------------------------------+
|  "" "ATZ"                                                                 |
|                                                                           |
|  # The next two lines should be left commented out until                  |
|  # the script works.                                                      |
|                                                                           |
|  # "OK" "ATL0"                                                            |
|  # "OK" "ATM0"                                                            |
|                                                                           |
|  SAY "Dialing modem...\n"                                                 |
|  "OK" "ATDT \T"                                                           |
|  ABORT BUSY                                                               |
|  ABORT "NO CARRIER"                                                       |
|  TIMEOUT 60                                                               |
|  CONNECT \c                                                               |
+---------------------------------------------------------------------------+

This script will dial BTi providing you put in the \T so we can added the
telephone number later. I suggest saving the chatscript as something like /
etc/ppp/chatscript Once you've saved it we can move onto setting up BTi's
CHAP authentication.
-----------------------------------------------------------------------------

3.3. Authentication

With PPP dialup's the most widely used authentication method, apparently, is
PAP (Password Authentication Protocol). However, just to be a pain in the
backside BTi use CHAP (Challenge Handshake Authentication Protocol). To be
fair CHAP is a more secure authentication method than PAP but it's still a
pain. Now PPPd does support this but not through nice easy to use Linuxconf
dialogs.

In the /etc/ppp directory should be a chap-secrets that looks roughly like
this when first installed:

+---------------------------------------------------------------------------+
|  # Secrets for authentication using CHAP                                  |
|  # client    server    secret    IP addresses                             |
+---------------------------------------------------------------------------+

We can safely ignore the IP Address column but the others me must worry
about. So fill in the gaps like this:

+---------------------------------------------------------------------------+
|  # Secrets for authentication using CHAP                                  |
|  # client    server    secret    IP addresses                             |
|  "bloggs@btinternet.com"  *   "mypasswordhere"                            |
+---------------------------------------------------------------------------+

These two extra lines will try and authenticate ANY outgoing PPP connection
that responds using CHAP using your BTi details. It goes without saying that
you replace bloggs@btinternet.com and mypasswordhere with your details. Also,
the second line is not strictly needed but I've found it helps sometimes.

Note: If you're not using BTi at this point you can usually get away with
having identical chap-secrets and pap-secrets. If you the same kind of
pattern as above it should work.

I suggest that you do a "chmod 600 /etc/ppp/*secrets". It was pointed out to
me that it stops pppd shouting about security.
-----------------------------------------------------------------------------

3.4. Setting your global options

In your /etc/ppp directory there is a file called options. If your open it
with your favourite text editor you should see:

+---------------------------------------------------------------------------+
|  lock                                                                     |
+---------------------------------------------------------------------------+

And thats it, now we need to add some more settings in here so make it look
like:

+---------------------------------------------------------------------------+
|  lock                                                                     |
|  usepeerdns                                                               |
|  defaultroute                                                             |
|  noipdefault                                                              |
|  noauth                                                                   |
|  asyncmap 0                                                               |
|  crtscts                                                                  |
|  modem                                                                    |
|  115200                                                                   |
+---------------------------------------------------------------------------+

Don't worry what they do, if you're interested look at the man page for pppd.
As a passing note if you would like PPPd to redial dropped connections then
add persist to the end of your options file.
-----------------------------------------------------------------------------

3.5. Testing your link

Now you've created your Chatscript there are only two steps left till you
should be on the Internet. First is getting a working link and second is
creating a couple of easy dialup scripts to help you.

To test your link try this command:

pppd ttyS0 connect '/usr/sbin/chat -v -TPHONE_NUM_HERE -f /etc/ppp/
chatscript' updetach debug name bloggs@btinternet.com

Now obviosuly if your testing at Daytiem rate add the Daytiem number where
instead of PHONE_NUM_HERE and similar with Surftime.

This will tell PPPd to dial the modem on ttyS0 (COM1) using the chatscript.
The updetach tells PPPd to only fork away to the commandline after the
connection is established and the debug will show all authentication commands
onscreen (providing updetach it set) while it trys to connect.

If that connected then move onto the next section and we can make a set of
scripts to allow easy dialing.
-----------------------------------------------------------------------------

3.6. Dialing scripts

Here I'll just set out a set of scripts that will let your dial BTi from a
command line easily. The following should be self-explanatory, the italic
filename is the filename to put the data into and the proceeding text the
file contents:

/etc/ppp/peers/bt-surf

+-----------------------------------------------------------------------------------+
|  ttyS0 connect '/usr/sbin/chat -v -TSURFTIME_NUMBER_HERE -f /etc/ppp/chatscript'  |
|  updetach name bloggs@btinternet.com                                              |
+-----------------------------------------------------------------------------------+

/etc/ppp/peers/bt-day

+----------------------------------------------------------------------------------+
|  ttyS0 connect '/usr/sbin/chat -v -TDAYTIME_NUMBER HERE -f /etc/ppp/chatscript'  |
|  updetach name bloggs@btinternet.com                                             |
+----------------------------------------------------------------------------------+

Change any of the filenames to suit what you called them and the username. Do
the same with this:

/usr/bin/internet

+---------------------------------------------------------------------------+
|  #!/bin/bash                                                              |
|  # a script to dial BTi                                                   |
|  case "$1" in                                                             |
|  daytime)                                                                 |
|     /usr/sbin/pppd call bt-day                                            |
|     ;;                                                                    |
|  surftime)                                                                |
|     /usr/sbin/pppd call bt-surf                                           |
|     ;;                                                                    |
|  off)                                                                     |
|     killall pppd                                                          |
|     ;;                                                                    |
|  esac                                                                     |
+---------------------------------------------------------------------------+

Once you've done that run this command at the command prompt:

chmod a+x /usr/bin/internet

Now you've done, simply type internet daytime/surftime/off and it will
connect you to the internet.
-----------------------------------------------------------------------------

4. BTi Anytime

I'm sorry, for all you Anytime customers its really hard! NOT! Read all the
instructions for Surftime above. They all apply in most places, the only
things to watch out for is you obviously don't need any of the Surftime/
daytime distinctions. So only have one peers file (using the correct phoen
number) and one dialup option in your /usr/bin/internet file. (eg. dial and
off)
-----------------------------------------------------------------------------

5. BTOpenworld Home 500 (Alcatel Speedtouch USB)

5.1. About this section

There is rather a large amount of credit due here, to [mailto:
chris@black-sun.co.uk] Chris Jones for writing the Alcatel Speedtouch USB
ASDL Modem mini-HOWTO that is now part of the [http://www.linuxdoc.org/HOWTO/
DSL-HOWTO/] DSL HOWTO. This helped me a great deal when trying to get my
Speedtouch to work.
-----------------------------------------------------------------------------

5.2. Warning

At home I use Linux Mandrake, although the version of the kernel I had was
patched with the ATM kernel source I did end up patching a different kernel
source to get it working. Please, please inspect your kernel source to see if
you have the PPPoATM source patched against your kernel. To do this go into
you kernel source directory, usually /usr/src/linux and do a make menuconfig.
In the Network Device Support section check for:

  * Network device support->PPP over ATM
   

If it does exist then make sure it is present it you current kernel and you
can skim-read the "Patching you kernel" section to make sure you have the
correc toptions compiled in and then carry on.

This was just a minor warning as I orginially had a kernel patched with
PPPoATM and without realising managed to trash my kernel tree by trying to
force the patch onto it.
-----------------------------------------------------------------------------

5.3. Distribution Specific Information

I have had reports about different distros that have varying PPPoATM support
already builtin to the kernel:

  * Mandrake 8.0: The default 2.4.3 kernel already has the PPPoATM patch
    applied, I cannot remember if it compiled in but ignore steps refering
    the "Patching the Kernel" below. PS: You still need to configure the
    kernel.
   
  * Mandrake 8.1: Mandrake 8.1 supports the Speedtouch automatically, I have
    no had first hand experience but from what I can gather you simply have
    to download the Alcatel binaries and then use DrakNet to sort it out.
   
  * Debian: I have had reports that the standard Debian installtion does not
    include libpam, this must be installed for the PPPoATM plugin modules to
    work.
   

NOTE: From roughly kernel 2.4.16 the PPPoATM patch is included in Linus' main
source tree. Therefore you can miss out patching the kernel and just
configure it.
-----------------------------------------------------------------------------

5.4. Requirements

To get your Speedtouch USB working in Linux you have a fairly heavyweight
task ahead of you, but hey, if I could do it so can you! This is what you'll
need to get it working:

  * You must have the kernel source installed and know the procedure for
    installing and compiling a new kernel. If this is a problem then read the
    [http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html] Kernel HOWTO.
   
  * You must be running one of the following Kernels: 2.3.39, 2.4.0-test4,
    2.4.1-pre7, 2.4.7, 2.4.8-pre5. This is because the PPPoATM patch for the
    kernel exists patched against specific kernels, some may work with
    similar kernel versions but I cannot vouch for that
   
  * You, obviously, need a USB controller of some description with at least
    one free plug. It also must be Linux compatible, nowadays this is most
    USB controllers that are UHCI/OHCI based. If you don't have one your
    local supplier would probably have a PCI USB Controller.
   
  * A heap-load of confidence with meddling with your config. eg: kernel
    recompiling, program installation...
   

-----------------------------------------------------------------------------
5.5. Software Downloads

To get the Speedtouch working under Linux you will need some software and
kernel patches found below:

  * The kernel patch for your kernel. They can be found at [http://
    www.kernel.org/pub/linux/kernel/people/axboe/PPPoATM/] http://
    www.kernel.org/pub/linux/kernel/people/axboe/PPPoATM/. Please note not
    all the kernels have patches.
   
  * The latest SpeedTouch driver from [http://sourceforge.net/project/
    showfiles.php?group_id=3581] http://sourceforge.net/project/
    showfiles.php?group_id=3581
   
  * The latest SARlib library from [http://sourceforge.net/project/
    showfiles.php?group_id=22221] http://sourceforge.net/project/
    showfiles.php?group_id=22221
   
  * The Alcatel speed management software. You can get it from [http://
    www.alcatel.com/consumer/dsl/dvrreg_lx.htm] http://www.alcatel.com/
    consumer/dsl/dvrreg_lx.htm. I can't distribute this because of Alcatel's
    licensing scheme so get it from them.
   
  * Some description of PPPoATM aware PPPd binary:
   
      + Red Hat 7 RPM (glibc 2.2): [http://sourceforge.net/project/
        showfiles.php?group_id=23818] http://sourceforge.net/project/
        showfiles.php?group_id=23818
       
      + Debian (.deb): [http://sourceforge.net/project/showfiles.php?group_id
        =23818] http://sourceforge.net/project/showfiles.php?group_id=23818
       
      + Tarball: [http://sourceforge.net/project/showfiles.php?group_id=
        23818] http://sourceforge.net/project/showfiles.php?group_id=23818
       
   
  * The Linux Hotplug software from [http://linux-hotplug.sourceforge.net]
    http://linux-hotplug.sourceforge.net. Get it installed as per their
    instructions. It seemed simple enough so I won't cover it here
   

-----------------------------------------------------------------------------
5.6. Patching your kernel

Once you have the PPPoATM kernel patch (this assumes you use the patch
against kernel 2.4.7) you need to make sure you have a working 2.4.7 kernel
tree, next unzip the PPPoATM patch by doing:

NOTE: From rougly kernel 2.4.16 (I haven't tested to see hwo far back it
goes) the PPPoATM patch is included in Linus' main kernel tree, therefore you
may skip the patching below and resume ready to configure the kernel.

gzip -d pppoatm-2.zip

Next we will need to test-patch the kernel using the following commands:

patch -p1 -s -E --dry-run < /point/to/pppoatm-2

If that ran without failure then patch the kernel by removing the --dry-run
as such:

patch -p1 -s -E < /point/to/pppoatm-2

That should have patched the kernel good-and-proper so we can go ahead and
configure it, make sure the following options are selected along with your
personal build options:

  * Code maturity levels->Prompt for development and/or incomplete code/
    drivers
   
  * Networking options->Asynchronous Transfer Mode (ATM)
   
  * Network device support->PPP (point-to-point protocol) support
   
  * Network device support->PPP support for async serial ports
   
  * Network device support->PPP Deflate compression
   
  * Network device support->PPP BSD-Compress compression
   
  * Network device support->PPP over ATM
   
  * USB support->Support for USB
   
  * USB support->Preliminary USB device filesystem
   
    You have to make a choice here, if your USB controller is UHCI based then
    select:
   
    USB support->UHCI (Intel, PIIX4, VIA, ...) support
   
    Alternatively choose:
   
    USB Support->OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support
   

You could select any of these as modules or compiled-in but as I followed
Chris Jones' HOWTO I compiled the all but UHCI/OHCI as compiled-in code. Save
the kernel config and compile the kernel and modules as you normally do.
-----------------------------------------------------------------------------

5.7. Kernel Drivers and Software

Now that the kernel will support using PPPoATM we can start compiling the
bits to run the modem. Well start with the Kernel mode driver; first
decompress the SARlib sources to a build directory. (Personally I build all
my non-kernel sources in ~/sources) and do a make on it. There is no need to
do a make install with this library.

Next return to your source root and decompress your Speedtouch drivers (from
Sourceforge not Alcatel!), go in there and do a make, and then a make install
.

Note: If you get an "Error 1" then check the Makefile for a line starting
SARLIB:= and check it points to the right directory, the one where you just
compiled SARlib.

Next install the Hotplug software and make sure it works. Once you've done
that decompress Alcatel's binary management software and do a make on that.
Then do a make install, the clever bit here is their installation registers
the Speedtouch kernel driver and their binary to be run when the USB device
is "hotplugged" (or coldplugged) into the system. Kiss goodbye to the hours
of trying to writing modules loading scripts that always fail.

Next install the new PPPoATM aware PPPd program, I had no luck getting it
compile from source on my machine so I used the RPM. Sorry you're on your own
there!
-----------------------------------------------------------------------------

5.8. PPPd Configuration

Warning: The action will remove all the default settings for any previous
PPPd connection. (Not that you want them now you've got shiny new ADSL ;P)

In the /etc/ppp directory there is a file called options in that file put the
following:

+---------------------------------------------------------------------------+
|  lock                                                                     |
|  defaultroute                                                             |
|  noipdefault                                                              |
|  noauth                                                                   |
|  passive                                                                  |
|  asyncmap 0                                                               |
|  name bloggs@hg5.btinternet.com                                           |
|  user bloggs@hg5.btinternet.com                                           |
|  plugin /usr/lib/pppd/plugins/pppoatm.so                                  |
|  0.38                                                                     |
+---------------------------------------------------------------------------+

Make sure of the following things:

  * That you replace both name and user variables with your username.
   
  * That you get the correct VPI/VCI ATM pair, these are in the windows
    information software, from BTi my VPI:0 and VCI:38 so I use 0.38. Make
    sure you get this right or it will not work.
   

Next in your /etc/ppp/chap-secrets put:

+---------------------------------------------------------------------------+
|  # Secrets for authentication using CHAP                                  |
|  # client    server    secret    IP addresses                             |
|  "bloggs@hg5.btinternet.com"  *   "mypasswordhere"                        |
+---------------------------------------------------------------------------+
-----------------------------------------------------------------------------

5.9. Testing your link

Next thing to do is get the link up and test it. If you've got a nice distro
like Mandrake you should find it will auto-init your USB drivers and
filesystem, if not then the following can be used:

/sbin/modprobe usb-uhci

mount none /proc/bus/usb -tusbdevfs

Next load the Speedtouch driver by doing: /sbin/modprobe speedtch. Next use
the speedmgmt program to get the modem init'ed: /usr/sbin/mgmt. After a while
of the lights flashing on the modem the main console (and/or the syslog)
should report:

+-------------------------------------------------------------------------------------+
|  Speedmgmt[2074]: Modem initialised at 576 kbit/s downstream and 288 kbit/s upstream|
+-------------------------------------------------------------------------------------+

Once the modem has been init'ed now make sure the PPPoATM module is loaded by
doing:

modprobe pppoatm

Now start the PPP link by typing pppd You should see something similar to
this:

+---------------------------------------------------------------------------+
|  Oct 28 14:01:25 ds9 pppd: PPPoATM plugin_init                            |
|  Oct 28 14:01:25 ds9 pppd: PPPoATM setdevname_pppoatm                     |
|  Oct 28 14:01:25 ds9 pppd: PPPoATM setdevname_pppoatm - SUCCESS           |
|  Oct 28 14:01:26 ds9 pppd: Using interface ppp0                           |
|  Oct 28 14:01:26 ds9 pppd: Connect: ppp0 <--> 0.38                        |
|  Oct 28 14:01:28 ds9 pppd: local IP address 255.255.255.255               |
|  Oct 28 14:01:28 ds9 pppd: remote IP address 255.255.255.255              |
|  Oct 28 14:01:28 ds9 pppd: primary DNS address 213.120.62.100             |
+---------------------------------------------------------------------------+

Once that's done you're in luck, now just configure the pppd to autodial at
startup (beyond the scope of this HOWTO, sorry!). Hopefully HotPlug will get
your device up and going before pppd needs it! :).
-----------------------------------------------------------------------------

6. Simple IP Masquerading

To allow sharing of your internet conenction you can eitehr use a proxy
server or IP Masquerading. I'll cover IP Masquerding as it's simple to set up
on the other client machines. I use a 2.4.x generation kernel and in effect I
use IPTables. If you use a 2.2.x or 2.0.x kernel then you need the IP
Masquerading HOWTO.

This part of the HOWTO assumes that your Netfilter software is modularised,
if it isnt then no big deal, either ignore the modprobe lines or recompile
your kernel.

Simple now, just run the commands:

modprobe iptable_nat

iptables -t nat -F POSTROUTING

iptables -t nat -A POSTROUTING -o ppp0 -s 10.0.0.0/16 -j MASQUERADE

echo 1 > /proc/sys/net/ipv4/ip_forward

Note: The space between 1 and > is vital. It seems not to activate the IP
Forwarding if the space is not there.

Change the ppp0 and/or the 10.0.0.0/16 for your relevant network settings and
put that file either before the case "$1" in in the internet file or
somewhere in your startup.
-----------------------------------------------------------------------------

7. Troubleshooting

7.1. Help! Lynx gives unable to access document

Problem: Lynx is unable to access document or ping gives "No route to host"
but the link is stable!

Solution: Have a look at the output of route -n you should see a refenence
specifing a gateway of either your Remote PPP IP and using the adapter/dev of
ppp0. If not here is how to fix it. In your /etc/ppp/ip-up file above exit 0
on the last line type:

+---------------------------------------------------------------------------+
|  route del default                                                        |
|  route add default gw $4 $1                                               |
+---------------------------------------------------------------------------+

Save the file and redial. The problem should be solved.
-----------------------------------------------------------------------------

7.2. My kernel < 2.4.2 crashes using the Alcatel driver

Problem: Your kernel below 2.4.2 crashes using the Alcatel driver.

Solution: You're probably using a kernel compiled with SMP support either
don't use SMP or try here: [http://sourceforge.net/project/showfiles.php?
group_id=23818] http://sourceforge.net/project/showfiles.php?group_id=23818
-----------------------------------------------------------------------------

7.3. PPPd crashes when it loads the PPPoATM module

Problem: When PPPd attempts to access the ATM device it crashes.

Solution: The kernel was probably compiled on a different type of processor.
I tried to get the kernel compiled quicker by compiling the kernel on my
950Mhz Duron, even with the processor type to suit the target 266Mhz Cyrix
the ATM module crashes. So dont take short cuts and compile on the target
processor.
-----------------------------------------------------------------------------

7.4. insmod speedtch.o gives: "Unresolved symbol: _mmx_memcpy"

Problem: When you have compiled the Speedtouch Kernel driver (speedtch.o)
trying to insmod/modprobe returns: "Unresolved symbol: _mmx_memcpy" or
similar.

Solution: Right, I haven't got a concrete answer here but I couldn't find it
anywhere on the internet so here goes. I found this error come up when I
recompiled my kernel once. It did it the first time but I forgot how to fix
it. A combination of things fixed it for me:

  * Configured the kernel module support to ignore kernel version checking
   
  * Recompiled SARlib (this is what ultimately fixed it) before recompiling
    speedtch.o
   
  * Recompiled speedtch.o and reinstalled. Et voila!
   

As I said I can't be sure about this one but it worked for me. 
-----------------------------------------------------------------------------

7.5. There are strange noises on the telephone line when I pick up the phone.

Problem: When you pick up the phone there are strange noises present, more
over the use of the phone line causes the internet to disconnect.

Solution: You seem to have something which I thing is called cross-frequency.
The ADSL modem works by sending data down the unused frequencies of you
copper phone line. If the hardware is set up so the ADSL and phone ranges
overlap the two can receive each other's data. Ring BTO Customer Support and
they should be able to help.
-----------------------------------------------------------------------------

8. Further Reading

For further reading on related topics see this list:

  * The [http://www.linuxdoc.org/HOWTO/PPP-HOWTO/index.html] PPP-HOWTO
   
  * The [http://www.linuxdoc.org/HOWTO/IP-Masquerade-HOWTO.html] IP
    Masquerading HOWTO
   
  * The [http://www.linuxdoc.org/HOWTO/DSL-HOWTO/index.html] DSL HOWTO
   
  * The [http://www.linuxdoc.org/HOWTO/Modem-HOWTO.html] Modem-HOWTO.
   
  * The [http://www.linuxdoc.org/HOWTO/Winmodems-and-Linux-HOWTO.html]
    Winmodems and Linux HOWTO
   

