Multi-Protocol PPP

Users can run IP, IPv6 and IPX on a ppp session over rs232 or emulations of that

PPP over Serial

Server End

A file like this could be the ppp peers file at the server end.

crtscts
noauth
lock
ktune
proxyarp
115200
+ipx
ipx
ipx-network 0x00000002
ipx-router-name rs232
ipx-node 1:2
ipx-routing 2
ipx-routing 4
+ipv6
ipv6 ::1,::2
192.0.2.0:192.0.2.1
ms-dns 192.0.2.0
/dev/ttyS0

User end

I have this ppp peers configuration file at the guest's end of the connection. It is configured to autodetect just about everything that pppd can run.

crtscts
noauth
lock
defaultroute
115200
#38400
+ipx
ipx
ipxcp-accept-network
ipxcp-accept-local
ipxcp-accept-remote
+ipv6
noipdefault
/dev/ttyS0
usepeerdns

PPPoE

PPP can run within ethernet. We can setup tunnels of this sort to test ppp client functions

Server end

  1. # start a pppoe server
  2. TMP=`mktemp`; printf 'noauth\n+ipv6\nipv6 ,\n' >$TMP; pppoe-server -I br40 -F -O $TMP

User end

  1. pppd plugin rp-pppoe.so br40 nodetach noauth +ipv6 ipv6 ,

IPv4

A File like this is used at the other end, substituting the IPv4 addresses as needed.

IPv6

With IPv6, only the link-local addresses are specified. Radvd is run on the host's end of the connection in the same way as it is for ethernet, and the pppd at the guest end then automatically puts the IPv6 network prefix from radvd together with the interface address from the ipv6 option in the peers file above to form the full ipv6 address.

Example: After the connection is up, firstly give the local end a real address like this: ifconfig ppp0 add 2001:db8::1/64

Then when radvd is run or sighup'd with the following file, the guest ppp end automatically gets the IPv6 2001:db8::2/64

interface ppp0
{
        IgnoreIfMissing on;
        AdvSendAdvert on;
        prefix 2001:db8::/64
        {
                AdvOnLink on;
                AdvAutonomous on;
        };
};

It's useful to do the ifconfig ppp0 add 2001:db8::1/64 and killall -HUP radvd in a suitable file in /etc/ppp/ipv6-up.d/, to the appropriate ppp connection.

It may also be needed to add a route to ppp host from elsewhere in the network if it does not already get data destined for the chosen IPv6 prefix. Something like ip -f inet6 route add 2001:db8::/64 dev eth0 may do it.

IPX

You might not be running this protocol but some games like to use it. It also is to be merged into IPv6, therefore IPv6 fields can represent IPv4 and IPX addresses as well as native IPv6.

Linux is best configured with IPX and IPX full network on all the participating IPX machines. Install debian packages ipx.

ipxripd is also needed but version 0.7 will not run unless built with a slight change to the source code on linux 2.6 like so.

--- ipxripd-0.7/ipxkern.c	2005-08-30 18:30:40.000000000 +0100
+++ ipxripd-0.7/ipxkern.c	2005-08-30 18:31:19.000000000 +0100
@@ -57,7 +57,7 @@
 	FILE *ipx_route;
 	char buf[512];
 
-	ipx_route = fopen("/proc/net/ipx_route", "r");
+	ipx_route = fopen("/proc/net/ipx/route", "r");
 
 	if (ipx_route == NULL)
 	{
@@ -115,7 +115,7 @@
 	FILE *ipx_ifc;
 	char buf[512];
 
-	ipx_ifc = fopen("/proc/net/ipx_interface", "r");
+	ipx_ifc = fopen("/proc/net/ipx/interface", "r");
 
 	if (ipx_ifc == NULL)
 	{

It could be applied and installed like as follows:

#!/bin/sh
apt-get source ipxripd
patch -p0 < patchfile
cd ipxripd-0.7/
dpkg-buildpackage -r fakeroot
cd ..
su
dpkg -i *.deb

IPX configuration

Firstly you'd eanable it on the network of the ppp host. The master of that network (i.e. dhcp/radvd server) would get the following in /etc/network/interfaces

iface eth0 ipx static
        netnum 1
        frame EtherII

The other machines would have the following appended to /etc/network/interfaces, although they could also be statically configured if you don't mind having to change them if you want to change network number too.

iface eth0 ipx dynamic
        frame EtherII

The static means that the machine will use the specified IPX network number. It does need to be different for each IPX subnet in a connected internetworking of subnets.

The dynamic means that the machine does not use IPX at all until it sees an IPX packet, and then communicates on the IPX network number seen in that packet. Some documentation refers to this as network number 0, meaning I don't have a configured network number.

Now you hopefully have an IPX enabled ethernet subnet with entries in /proc/net/ipx showing the information. ipxripd needs to be running too so that ppp will get it's routes copied into the tables.

pppd can now participate, and ipxd would broadcast routes to the ethernet when it is started. If your ppp guest is a Windows 98 machine, it may need to be told the Network Address in Advanced, which is set the same as ipx-network in the host's ppp peers file.