PPP
PPP (Point-to-Point Protocol) is commonly used in establishing a direct connection between two networking nodes. It can provide connection authentication, transmission encryption, and compression.
Installation
USE flags for net-dialup/ppp Point-to-Point Protocol (PPP)
activefilter
|
Enables active filter support |
atm
|
Enables ATM (Asynchronous Transfer Mode) protocol support |
dhcp
|
Installs PPP DHCP client plugin for IP address allocation by a DHCP server (see http://www.netservers.co.uk/gpl/) |
eap-tls
|
Enables support for Extensible Authentication Protocol and Transport Level Security (see http://www.nikhef.nl/~janjust/ppp/index.html) |
gtk
|
Installs GTK+ password prompting program that can be used by passprompt.so PPP plugin for reading the password from a X11 input terminal |
ipv6
|
Enables support for IP version 6 |
libressl
|
Use dev-libs/libressl instead of dev-libs/openssl when applicable (see also the ssl useflag) |
pam
|
Add support for PAM (Pluggable Authentication Modules)DANGEROUS to arbitrarily flip |
radius
|
Enables RADIUS support |
Portage has a USE flag ppp
for enabling support for PPP for other packages.
/etc/portage/make.conf
USE="... ppp ..."
After setting global USE flags update your system to the changes take effect:
root #
emerge --ask --changed-use --deep @world
Or emerge net-dialup/ppp package manually:
root #
emerge --ask net-dialup/ppp
Kernel
Following kernel options need to be enabled, to support PPPoE, which is used in most cases.
Using PPP compression is not suggested.
Device Drivers ---> [*] Network device support ---> <*> PPP (point-to-point protocol) support < > PPP BSD-Compress compression (NEW) < > PPP Deflate compression (NEW) [ ] PPP filtering (NEW) < > PPP MPPE compression (encryption) (EXPERIMENTAL) (NEW) [ ] PPP multilink support (EXPERIMENTAL) (NEW) <*> PPP over Ethernet (EXPERIMENTAL) < > PPP support for async serial ports (NEW) < > PPP support for sync tty ports (NEW)
Option | Driver | Description |
---|---|---|
PPP BSD-Compress compression | ppp_bsdcomp | (Not recommended) Support for data compression. "PPP Deflate compression" is preferable. |
PPP filtering | - | Support for packet filtering. |
PPP MPPE compression (encryption) | ppp_mppe | Driver for Microsoft Point-to-Point Encryption. |
PPP multilink support | - | Support for PPP multilink to combine serveral lines. |
PPP over Ethernet | pppoe | Driver for PPPoE. |
PPP support for sync tty ports | ppp_sync_tty | Support for synchronous devices. |
Finally you need to rebuild linux, install and boot new kernel with PPP support.
Configuration
Provided eth0 following lines should be added for PPPoE connection:
/etc/conf.d/net
Add:... config_ppp0="ppp" link_ppp0="eth0" (Specify your ethernet interface) plugins_ppp0="pppoe" username_ppp0='user' password_ppp0='password' pppd_ppp0=" noauth defaultroute usepeerdns mtu 9120 (Get the correct MTU (Jumbo frame) value from your eth0 Gigabit Ethernet card interface) holdoff 3 child-timeout 60 lcp-echo-interval 15 lcp-echo-failure 3 noaccomp noccp nobsdcomp nodeflate nopcomp novj novjccomp" ... rc_net_ppp0_need="net.eth0"
Create an init script for the PPP device by symlinking to net.lo:
root #
ln -s /etc/init.d/net.lo /etc/init.d/net.ppp0
root #
/etc/init.d/net.ppp0 start
Example setup with systemd and automatic connection
First, create the configuration file:
/etc/ppp/peers/provider
<syntaxhighlight lang="cfg">plugin pppoe.so # network interface enp41s0 # login name name "you_login_to_ISP" usepeerdns persist # Uncomment this to enable dial on demand #demand #idle 180 defaultroute defaultroute-metric 1023 hide-password noauth #linkname eth0 ifname eth0</syntaxhighlight>
enp41s0 is the network interface card to use. It can be found with ip link command.
When using ppp of version less than 2.4.9, the first line should be (rp- prefix):
plugin rp-pppoe.so
Next, create the password secrets file:
/etc/ppp/chap-secrets
<syntaxhighlight lang="cfg"># Secrets for authentication using CHAP # client server secret IP addresses your_login_to_ISP * your_secret_password</syntaxhighlight>
For this to work at system startup, add the following unit in /etc/systemd/system/pppoe.service:
/etc/systemd/system/pppoe.service
<syntaxhighlight lang="ini">[Unit] Description=PPPoE connection BindsTo=sys-subsystem-net-devices-enp41s0.device After=sys-subsystem-net-devices-enp41s0.device [Service] Type=forking PIDFile=/var/run/eth0.pid #RemainAfterExit=true ExecStart=/usr/sbin/pon ExecStop=/usr/sbin/poff provider [Install] WantedBy=multi-user.target</syntaxhighlight>
sys-subsystem-net-devices-enp41s0.device is the network device via which pppoe will connect on. To find out the exact name you can use the following bash command
root #
systemctl list-units | grep device | grep net
Optionally, create a service unit to handle wake up after sleep:
/etc/systemd/system/pppoe-after-wakeup.service
<syntaxhighlight lang="ini">[Install] WantedBy=sleep.target [Unit] After=systemd-suspend.service systemd-hybrid-sleep.service systemd-hibernate.service [Service] Type=simple ExecStart=/bin/systemctl restart pppoe</syntaxhighlight>
Finally, test it with:
root #
systemctl start pppoe
root #
systemctl start pppoe-after-wakeup
If it works as expected, enable them on a permanent basis:
root #
systemctl enable pppoe
root #
systemctl enable pppoe-after-wakeup