PPPOE(8) BSD System Manager's Manual PPPOE(8)
pppoe - PPP Over Ethernet translator
pppoe [-stv] [-i interface] [-n service] [-p system]
The pppoe program can, with the help of ppp(8), act as a server or client for running PPP Over Ethernet. The options are as follows: -i interface Specify the interface that pppoe is to use, which should be a real Ethernet interface (not a virtual device like tun(4)). If this option is not specified, pppoe will use the first Ethernet interface that is up and running. -n service Use service as the service name when negotiating with the server. By default, the client will ask for any service, and expect the server to respond with the same. -p system This argument is passed, uninterpreted, to ppp(8). It can be used to specify the configuration data to be used for PPP Over Ether- net connections. This option is only used in server mode. -s If this option is specified, pppoe will run as a server. Other- wise, pppoe runs as a client. -t Instruct pppoe to ignore PADT packets. If you observe numerous "connection reset by peer" error messages and constantly lose connection soon after establishing one, it may because of spuri- ous PADT tags being sent from the peer. Ignoring them may al- leviate the problem. -v For each use of the flag, the verbosity of pppoe increases.
Configuring the client involves setting up the configuration file for ppp(8). The following statements must be included in the file for the specified system (or ``default'' if no system is specified): set device "!/usr/sbin/pppoe" set mtu max 1446 set mru max 1446 set speed sync disable acfcomp protocomp deny acfcomp The set device line tells ppp to use pppoe program for input and output instead of using a serial port or other network connection. The mtu and mru must be set to at maximum 1492, better 1446 (see below), to leave room in the outgoing Ethernet packet for the pppoe headers. The set speed sync line tells ppp to use synchronous encoding for the packets sent between it and pppoe. According to RFC 2516, protocol compression, protocomp, is not recommended, so it is disabled, but not denied. On the other hand, address and control field compression, acfcomp, must be dis- abled and denied. Additionally, the authentication mechanism for the connection must be specified as well as any other parameters.
Given a machine with one Ethernet interface, xl0, the first thing that must be done is to bring the interface up: # ifconfig xl0 up This can be done automatically during boot with a /etc/hostname.xl0 file, see hostname.if(5) for details. Next, a /etc/ppp/ppp.conf file must be created. Below is a minimal PPPoE style configuration, see ppp(8) for more options. default: set log Phase Chat LCP IPCP CCP tun command pppoe: set device "!/usr/sbin/pppoe -i xl0" set mtu max 1446 set mru max 1446 set speed sync disable acfcomp protocomp deny acfcomp set authname "myUsername" set authkey "myPassword" The default section sets up some helpful information to log while getting started, and the pppoe section sets the required fields for a PPPoE con- nection as well as the username and password to use to authenticate to the service provider. Once the /etc/ppp/ppp.conf file is set up, it is just a matter of setting ppp(8) into action: # ppp pppoe Working in interactive mode Using interface: tun0 ppp ON deepthought> dial Ppp ON deepthought> PPp ON deepthought> PPP ON deepthought> The userland ppp(8) daemon has many options for configuration, like ad- ding default routes, network address translation, automatically using re- mote DNS servers, automatic dialing, etc. Please see ppp(8) for details. Several ppp(8) options are particularly helpful when used with pppoe. enable lqr / accept lqr Enable and accept link quality requests, which can be used to detect whether the link has gone down. enable mssfixup Allow ppp(8) to adjust the maximum segment size on outgoing SYN packets.
tun(4), hostname.if(5), ifconfig(8), ppp(8), pppoe(4) L. Mamakos, et al., RFC 2516 A Method for Transmitting PPP Over Ethernet. For an explanation how PPPoE is further encapsulated on the way to your ISP, and why 1446 is the optimum MTU for native IPv4 and native IPv6 connections, go to (changing User-Agent to foo in lynx) http://whirlpool.net.au/wiki/adsl_theory_ppp. Tunneled IPv6 connections using gif(4) tunnels have an optimum MTU of 1426, the difference is just the size of an IPv4 header for the simple encapsulation; the maximum TCP- MSS would be 1406 and 1386, respectively.
This implementation of pppoe first appeared in OpenBSD 2.8.
The pppoe program was written by Jason L. Wright <jason@thought.net> of Network Security Technologies, Inc. <http://www.netsec.net>.
This software runs completely in user mode. As such it will have much more overhead than pppoe(4), a kernel implementation. The service is not currently used by the server code. MirBSD #10-current June 16, 2016 2