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
|
Enable 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
|
Add support for IP version 6 |
pam
|
Add support for PAM (Pluggable Authentication Modules)DANGEROUS to arbitrarily flip |
radius
|
Enables RADIUS support |
systemd
|
Enable use of systemd-specific libraries and features like socket activation or session tracking |
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
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
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
# Secrets for authentication using CHAP # client server secret IP addresses your_login_to_ISP * your_secret_password
For this to work at system startup, add the following unit in /etc/systemd/system/pppoe.service:
/etc/systemd/system/pppoe.service
[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
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
[Install] WantedBy=sleep.target [Unit] After=systemd-suspend.service systemd-hybrid-sleep.service systemd-hibernate.service [Service] Type=simple ExecStart=/bin/systemctl restart pppoe
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