This page explains how to set up a PPPoE connection using '''pppd''' and the kernel PPPoE driver. Note that this setup does not need '''rp-pppoe'''. ( With '''rp-pppoe''' you can have only one account configuration, however, using the method described below, you can have several account configurations at the same time and use anyone of them easily. Besides the dial speed of pppd is much faster than pppoe-start. )

+

{{Article summary start}}

+

{{Article summary text|This article explains how to set up a point-to-point connections using pppd and the kernel PPPoE driver.}}

+

{{Article summary end}}

−

== Configuration ==

+

'''ppp''' (Paul's PPP Package) is an open source package which implements the [[Wikipedia:point-to-point protocol|point-to-point protocol]] (PPP) on Linux and Solaris systems. It is implemented as single '''pppd''' daemon and acts as backend for {{Pkg|xl2tpd}}, {{Pkg|pptpd}} and [[netcfg]]. [[Wikipedia:3G|3G]], [[Wikipedia:L2TP|L2TP]] and [[Wikipedia:PPPoE|PPPoE]] connections are internally based on PPP protocol and therefore can be managed by {{Pkg|ppp}}.

−

* Make sure '''pppd''' is installed and your kernel is compiled with PPPoE support

+

== Installation ==

+

[[pacman|Install]] {{Pkg|ppp}}, available in the [[official repositories]].

−

$ pacman -Q ppp

+

Make sure that your kernel is compiled with PPPoE support (present in default kernel):

If you want usepeerdns to work, you have to edit your <code>/etc/ppp/ip-up</code> and add a command that copies <code>/etc/ppp/resolv.conf</code> to <code>etc/resolv.conf</code>.

+

If you want usepeerdns to work, you have to edit your {{Ic|/etc/ppp/ip-up}} and add a command that copies {{Ic|/etc/ppp/resolv.conf}} to {{Ic|/etc/resolv.conf}}.

−

* Edit <code>/etc/ppp/pap-secrets</code>

+

Edit {{Ic|/etc/ppp/pap-secrets}}:

−

Put a line like this in <code>/etc/ppp/pap-secrets</code>

+

Put a line like this in {{Ic|/etc/ppp/pap-secrets}} or {{Ic|/etc/ppp/chap-secrets}} as required by the authentication method used by your ISP. It's OK to write these two files at the same time, pppd will automatically use the appropriate one.

−

someloginname * yourpassword

+

''someloginname'' * ''yourpassword''

You can now start the link using the command

You can now start the link using the command

−

pppd call your_provider

+

{{bc|# pppd ''call your_provider''}}

Alternatively, you can use this

Alternatively, you can use this

−

pon your_provider

+

{{bc|# pon ''your_provider''}}

−

By default the configuration in <code>/etc/ppp/peers/provider</code> is treated as the default, so if you want to make "your_provider" the default, you can create a link like this

+

To see whether your pppoe connection is started correctly, check {{Ic|/var/log/errors.log}} first and then check {{Ic|/var/log/everything.log}}. On a successful connection, you should see something like the following in the everything.log:

* The init script <code>/etc/rc.d/ppp</code> calls the default ppp provider (<code>/etc/ppp/peers/provider</code>), so make sure you have the right configuration file there, otherwhise you could create a symlink to the desired provider as explained before.

+

* Configure the {{Ic|ppp_generic}} module to load on boot. See [[Kernel Modules#Loading]] for more information.

+

* Configure to autostart on boot the service {{ic|ppp@your_provider.service}}, where ''your_provider'' is your configuration file. See [[Daemons]] for more information.

−

* Make sure ppp module is loaded

+

== Tips and tricks ==

−

If ppp support is compiled as a module, you have to load the <code>ppp_generic</code> module. In this case, add this to <code>rc.conf</code>:

+

=== Do an auto redial ===

−

MODULES=(... ppp-generic ...)

+

If {{Ic|pppd}} is running, you can force a connection reset by sending the {{Ic|SIGHUP}} signal to the process

−

* Add ppp to DAEMONS in <code>/etc/rc.conf</code>, and make sure that you also have the network daemon listed:

+

# export PPPD_PID=$(pidof pppd)

+

# kill -s HUP $PPPD_PID

−

DAEMONS=(... network ... ppp ...)

+

And you have redialed the connection.

−

* Also make sure that you have the correct interface declared in the networking section of <code>/etc/rc.conf</code>.

{{Note|If you aren't running your computer always on (running 24/7) then you can skip this step.}}

+

+

If you use a flat-rate always-on connection on a computer, some providers restart your connection after 24h. That makes sure that the IP is rotated every 24h. To compensate, you can use an dynamic DNS service in combination with {{Ic|inadyn}} (available on AUR) to compensate for the rotating IP address. But to avoid disconnects when you don't need it, you might try to restart the connection using a cron job at a time of day you know no one will be using the connection (ex. 4 AM).

+

+

As root, do the following:

+

+

Create a bash script similar to this and give it a name (ex {{Ic|pppd_redial.sh}}):

+

+

#!/bin/bash

+

+

message="Restarting the PPP connection @:" $(date)

+

pppd_id=$(pidof pppd)

+

+

kill -s HUP $pppd_id

+

echo $message

+

+

Give it execute permissions and put it on a path visible to root.

+

+

Then create a cron job using {{Ic|crontab -e}}. Check that your {{Ic|EDITOR}} env variable is set if the command fails. So add anywhere in the file,

+

+

0 4 * * * /bin/bash /root/pppd_redial.sh

+

+

Confirm that {{Ic|crond}} is up and running. If it isn't just enable it with,

+

+

systemctl enable cronie.service

+

systemctl start cronie.service

+

+

Save and exit. Your PPPoE connection will now restart every day at 4AM.

+

+

== Troubleshooting ==

+

===Default route===

If you have a preconfigured default route before the pppd is started, the default route is kept, so take a look in <code>/var/log/errors.log</code> and if you have something like:

If you have a preconfigured default route before the pppd is started, the default route is kept, so take a look in <code>/var/log/errors.log</code> and if you have something like:

Line 94:

Line 146:

#!/bin/sh

#!/bin/sh

−

/sbin/route del default

+

/usr/bin/route del default

+

+

* [[Daemon|Restart]] your pppd service.

+

+

===Masquerading seems to be working fine but some sites don't work.===

+

The MTU under pppoe is 1492 bytes. Most sites use an MTU of 1500. So your connection sends an ICMP 3:4 (fragmentation needed) packet, asking for a smaller MTU, but some sites have their firewall blocking that.

Now, for some reason, just trying to save the resulting iptables configuration with {{ic|iptables-save}} and restoring it later, does not work. It has to be executed after the other iptables configuration had been loaded. So, here is a systemd unit to solve it:

Revision as of 17:33, 18 July 2013

ppp (Paul's PPP Package) is an open source package which implements the point-to-point protocol (PPP) on Linux and Solaris systems. It is implemented as single pppd daemon and acts as backend for xl2tpd, pptpd and netcfg. 3G, L2TP and PPPoE connections are internally based on PPP protocol and therefore can be managed by ppp.

If you want usepeerdns to work, you have to edit your /etc/ppp/ip-up and add a command that copies /etc/ppp/resolv.conf to /etc/resolv.conf.

Edit /etc/ppp/pap-secrets:

Put a line like this in /etc/ppp/pap-secrets or /etc/ppp/chap-secrets as required by the authentication method used by your ISP. It's OK to write these two files at the same time, pppd will automatically use the appropriate one.

someloginname * yourpassword

You can now start the link using the command

# pppd call your_provider

Alternatively, you can use this

# pon your_provider

To see whether your pppoe connection is started correctly, check /var/log/errors.log first and then check /var/log/everything.log. On a successful connection, you should see something like the following in the everything.log:

Starting pppd with Arch

Configure to autostart on boot the service ppp@your_provider.service, where your_provider is your configuration file. See Daemons for more information.

Tips and tricks

Do an auto redial

If pppd is running, you can force a connection reset by sending the SIGHUP signal to the process

# export PPPD_PID=$(pidof pppd)
# kill -s HUP $PPPD_PID

And you have redialed the connection.

Make sure you have persist option enabled in your /etc/ppp/peers/provider tab.

ISP auto-disconnect after 24h

Note: If you aren't running your computer always on (running 24/7) then you can skip this step.

If you use a flat-rate always-on connection on a computer, some providers restart your connection after 24h. That makes sure that the IP is rotated every 24h. To compensate, you can use an dynamic DNS service in combination with inadyn (available on AUR) to compensate for the rotating IP address. But to avoid disconnects when you don't need it, you might try to restart the connection using a cron job at a time of day you know no one will be using the connection (ex. 4 AM).

As root, do the following:

Create a bash script similar to this and give it a name (ex pppd_redial.sh):

Masquerading seems to be working fine but some sites don't work.

The MTU under pppoe is 1492 bytes. Most sites use an MTU of 1500. So your connection sends an ICMP 3:4 (fragmentation needed) packet, asking for a smaller MTU, but some sites have their firewall blocking that.

Now, for some reason, just trying to save the resulting iptables configuration with iptables-save and restoring it later, does not work. It has to be executed after the other iptables configuration had been loaded. So, here is a systemd unit to solve it: