| changequote({,})dnl |
| changecom(,)dnl |
| .\" |
| .\" Copyright (c) 2001 Brian Somers <brian@Awfulhak.org> |
| .\" All rights reserved. |
| .\" |
| .\" Redistribution and use in source and binary forms, with or without |
| .\" modification, are permitted provided that the following conditions |
| .\" are met: |
| .\" 1. Redistributions of source code must retain the above copyright |
| .\" notice, this list of conditions and the following disclaimer. |
| .\" 2. Redistributions in binary form must reproduce the above copyright |
| .\" notice, this list of conditions and the following disclaimer in the |
| .\" documentation and/or other materials provided with the distribution. |
| .\" |
| .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND |
| .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |
| .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| .\" SUCH DAMAGE. |
| .\" |
| .\" $FreeBSD: src/usr.sbin/ppp/ppp.8.m4,v 1.327.2.2.4.1 2010/12/21 17:10:29 kensmith Exp $ |
| .\" |
| .Dd August 25, 2009 |
| .Dt PPP 8 |
| .Os |
| .Sh NAME |
| .Nm ppp |
| .Nd Point to Point Protocol (a.k.a. user-ppp) |
| .Sh SYNOPSIS |
| .Nm |
| .Op Fl Va mode |
| .Op Fl nat |
| .Op Fl quiet |
| .Op Fl unit Ns Ar N |
| .Op Ar system ... |
| .Sh DESCRIPTION |
| This is a user process |
| .Em PPP |
| software package. |
| Normally, |
| .Em PPP |
| is implemented as a part of the kernel (e.g., as managed by |
| .Xr pppd 8 ) |
| and it is thus somewhat hard to debug and/or modify its behaviour. |
| However, in this implementation |
| .Em PPP |
| is done as a user process with the help of the |
| tunnel device driver (tun). |
| .Pp |
| The |
| .Fl nat |
| flag does the equivalent of a |
| .Dq nat enable yes , |
| enabling |
| .Nm Ns No 's |
| network address translation features. |
| This allows |
| .Nm |
| to act as a NAT or masquerading engine for all machines on an internal |
| LAN. |
| ifdef({LOCALNAT},{},{Refer to |
| .Xr libalias 3 |
| for details on the technical side of the NAT engine. |
| })dnl |
| Refer to the |
| .Sx NETWORK ADDRESS TRANSLATION (PACKET ALIASING) |
| section of this manual page for details on how to configure NAT in |
| .Nm . |
| .Pp |
| The |
| .Fl quiet |
| flag tells |
| .Nm |
| to be silent at startup rather than displaying the mode and interface |
| to standard output. |
| .Pp |
| The |
| .Fl unit |
| flag tells |
| .Nm |
| to only attempt to open |
| .Pa /dev/tun Ns Ar N . |
| Normally, |
| .Nm |
| will start with a value of 0 for |
| .Ar N , |
| and keep trying to open a tunnel device by incrementing the value of |
| .Ar N |
| by one each time until it succeeds. |
| If it fails three times in a row |
| because the device file is missing, it gives up. |
| .Pp |
| The following |
| .Va mode Ns No s |
| are understood by |
| .Nm : |
| .Bl -tag -width XXX -offset XXX |
| .It Fl auto |
| .Nm |
| opens the tun interface, configures it then goes into the background. |
| The link is not brought up until outgoing data is detected on the tun |
| interface at which point |
| .Nm |
| attempts to bring up the link. |
| Packets received (including the first one) while |
| .Nm |
| is trying to bring the link up will remain queued for a default of |
| 2 minutes. |
| See the |
| .Dq set choked |
| command below. |
| .Pp |
| In |
| .Fl auto |
| mode, at least one |
| .Dq system |
| must be given on the command line (see below) and a |
| .Dq set ifaddr |
| must be done in the system profile that specifies a peer IP address to |
| use when configuring the interface. |
| Something like |
| .Dq 10.0.0.1/0 |
| is usually appropriate. |
| See the |
| .Dq pmdemand |
| system in |
| .Pa /usr/share/examples/ppp/ppp.conf.sample |
| for an example. |
| .It Fl background |
| Here, |
| .Nm |
| attempts to establish a connection with the peer immediately. |
| If it succeeds, |
| .Nm |
| goes into the background and the parent process returns an exit code |
| of 0. |
| If it fails, |
| .Nm |
| exits with a non-zero result. |
| .It Fl foreground |
| In foreground mode, |
| .Nm |
| attempts to establish a connection with the peer immediately, but never |
| becomes a daemon. |
| The link is created in background mode. |
| This is useful if you wish to control |
| .Nm Ns No 's |
| invocation from another process. |
| .It Fl direct |
| This is used for communicating over an already established connection, |
| usually when receiving incoming connections accepted by |
| .Xr getty 8 . |
| .Nm |
| ignores the |
| .Dq set device |
| line and uses descriptor 0 as the link. |
| .Nm |
| will also ignore any configured chat scripts unless the |
| .Dq force-scripts |
| option has been enabled. |
| .Pp |
| If callback is configured, |
| .Nm |
| will use the |
| .Dq set device |
| information when dialing back. |
| .Pp |
| When run in |
| .Fl direct |
| mode, |
| .Nm |
| will behave slightly differently if descriptor 0 was created by |
| .Xr pipe 2 . |
| As pipes are not bi-directional, ppp will redirect all writes to descriptor |
| 1 (standard output), leaving only reads acting on descriptor 0. |
| No special action is taken if descriptor 0 was created by |
| .Xr socketpair 2 . |
| .It Fl dedicated |
| This option is designed for machines connected with a dedicated |
| wire. |
| .Nm |
| will always keep the device open and will ignore any configured |
| chat scripts unless the |
| .Dq force-scripts |
| option has been enabled. |
| .It Fl ddial |
| This mode is equivalent to |
| .Fl auto |
| mode except that |
| .Nm |
| will bring the link back up any time it is dropped for any reason. |
| .It Fl interactive |
| This is a no-op, and gives the same behaviour as if none of the above |
| modes have been specified. |
| .Nm |
| loads any sections specified on the command line then provides an |
| interactive prompt. |
| .El |
| .Pp |
| One or more configuration entries or systems |
| (as specified in |
| .Pa /etc/ppp/ppp.conf ) |
| may also be specified on the command line. |
| .Nm |
| will read the |
| .Dq default |
| system from |
| .Pa /etc/ppp/ppp.conf |
| at startup, followed by each of the systems specified on the command line. |
| .Sh Major Features |
| .Bl -diag |
| .It Provides an interactive user interface. |
| Using its command mode, the user can |
| easily enter commands to establish the connection with the remote end, check |
| the status of connection and close the connection. |
| All functions can also be optionally password protected for security. |
| .It Supports both manual and automatic dialing. |
| Interactive mode has a |
| .Dq term |
| command which enables you to talk to the device directly. |
| When you are connected to the remote peer and it starts to talk |
| .Em PPP , |
| .Nm |
| detects it and switches to packet mode automatically. |
| Once you have |
| determined the proper sequence for connecting with the remote host, you |
| can write a chat script to {define} the necessary dialing and login |
| procedure for later convenience. |
| .It Supports on-demand dialup capability. |
| By using |
| .Fl auto |
| mode, |
| .Nm |
| will act as a daemon and wait for a packet to be sent over the |
| .Em PPP |
| link. |
| When this happens, the daemon automatically dials and establishes the |
| connection. |
| In almost the same manner |
| .Fl ddial |
| mode (direct-dial mode) also automatically dials and establishes the |
| connection. |
| However, it differs in that it will dial the remote site |
| any time it detects the link is down, even if there are no packets to be |
| sent. |
| This mode is useful for full-time connections where we worry less |
| about line charges and more about being connected full time. |
| A third |
| .Fl dedicated |
| mode is also available. |
| This mode is targeted at a dedicated link between two machines. |
| .Nm |
| will never voluntarily quit from dedicated mode - you must send it the |
| .Dq quit all |
| command via its diagnostic socket. |
| A |
| .Dv SIGHUP |
| will force an LCP renegotiation, and a |
| .Dv SIGTERM |
| will force it to exit. |
| .It Supports client callback. |
| .Nm |
| can use either the standard LCP callback protocol or the Microsoft |
| CallBack Control Protocol (ftp://ftp.microsoft.com/developr/rfc/cbcp.txt). |
| .It Supports NAT or packet aliasing. |
| Packet aliasing (a.k.a.\& IP masquerading) allows computers on a |
| private, unregistered network to access the Internet. |
| The |
| .Em PPP |
| host acts as a masquerading gateway. |
| IP addresses as well as TCP and |
| UDP port numbers are NAT'd for outgoing packets and de-NAT'd for |
| returning packets. |
| .It Supports background PPP connections. |
| In background mode, if |
| .Nm |
| successfully establishes the connection, it will become a daemon. |
| Otherwise, it will exit with an error. |
| This allows the setup of |
| scripts that wish to execute certain commands only if the connection |
| is successfully established. |
| .It Supports server-side PPP connections. |
| In direct mode, |
| .Nm |
| acts as server which accepts incoming |
| .Em PPP |
| connections on stdin/stdout. |
| .It "Supports PAP and CHAP (rfc 1994, 2433 and 2759) authentication. |
| With PAP or CHAP, it is possible to skip the Unix style |
| .Xr login 1 |
| procedure, and use the |
| .Em PPP |
| protocol for authentication instead. |
| If the peer requests Microsoft CHAP authentication and |
| .Nm |
| is compiled with DES support, an appropriate MD4/DES response will be |
| made. |
| .It Supports RADIUS (rfc 2138 & 2548) authentication. |
| An extension to PAP and CHAP, |
| .Em \&R Ns No emote |
| .Em \&A Ns No ccess |
| .Em \&D Ns No ial |
| .Em \&I Ns No n |
| .Em \&U Ns No ser |
| .Em \&S Ns No ervice |
| allows authentication information to be stored in a central or |
| distributed database along with various per-user framed connection |
| characteristics. |
| ifdef({LOCALRAD},{},{If |
| .Xr libradius 3 |
| is available at compile time, |
| .Nm |
| will use it to make |
| .Em RADIUS |
| requests when configured to do so. |
| })dnl |
| .It Supports Proxy Arp. |
| .Nm |
| can be configured to make one or more proxy arp entries on behalf of |
| the peer. |
| This allows routing from the peer to the LAN without |
| configuring each machine on that LAN. |
| .It Supports packet filtering. |
| User can {define} four kinds of filters: the |
| .Em in |
| filter for incoming packets, the |
| .Em out |
| filter for outgoing packets, the |
| .Em dial |
| filter to {define} a dialing trigger packet and the |
| .Em alive |
| filter for keeping a connection alive with the trigger packet. |
| .It Tunnel driver supports bpf. |
| The user can use |
| .Xr tcpdump 1 |
| to check the packet flow over the |
| .Em PPP |
| link. |
| .It Supports PPP over TCP and PPP over UDP. |
| If a device name is specified as |
| .Em host Ns No : Ns Em port Ns |
| .Xo |
| .Op / Ns tcp|udp , |
| .Xc |
| .Nm |
| will open a TCP or UDP connection for transporting data rather than using a |
| conventional serial device. |
| UDP connections force |
| .Nm |
| into synchronous mode. |
| .It Supports PPP over ISDN. |
| If |
| .Nm |
| is given a raw B-channel i4b device to open as a link, it is able to talk |
| to the |
| .Xr isdnd 8 |
| daemon to establish an ISDN connection. |
| .It Supports PPP over Ethernet (rfc 2516). |
| If |
| .Nm |
| is given a device specification of the format |
| .No PPPoE: Ns Ar iface Ns Xo |
| .Op \&: Ns Ar provider Ns |
| .Xc |
| and if |
| .Xr netgraph 4 |
| is available, |
| .Nm |
| will attempt talk |
| .Em PPP |
| over Ethernet to |
| .Ar provider |
| using the |
| .Ar iface |
| network interface. |
| .Pp |
| On systems that do not support |
| .Xr netgraph 4 , |
| an external program such as |
| .Xr pppoed 8 |
| may be used. |
| .It "Supports IETF draft Predictor-1 (rfc 1978) and DEFLATE (rfc 1979) compression." |
| .Nm |
| supports not only VJ-compression but also Predictor-1 and DEFLATE compression. |
| Normally, a modem has built-in compression (e.g., v42.bis) and the system |
| may receive higher data rates from it as a result of such compression. |
| While this is generally a good thing in most other situations, this |
| higher speed data imposes a penalty on the system by increasing the |
| number of serial interrupts the system has to process in talking to the |
| modem and also increases latency. |
| Unlike VJ-compression, Predictor-1 and DEFLATE compression pre-compresses |
| .Em all |
| network traffic flowing through the link, thus reducing overheads to a |
| minimum. |
| .It Supports Microsoft's IPCP extensions (rfc 1877). |
| Name Server Addresses and NetBIOS Name Server Addresses can be negotiated |
| with clients using the Microsoft |
| .Em PPP |
| stack (i.e., Win95, WinNT) |
| .It Supports Multi-link PPP (rfc 1990) |
| It is possible to configure |
| .Nm |
| to open more than one physical connection to the peer, combining the |
| bandwidth of all links for better throughput. |
| .It Supports MPPE (draft-ietf-pppext-mppe) |
| MPPE is Microsoft Point to Point Encryption scheme. |
| It is possible to configure |
| .Nm |
| to participate in Microsoft's Windows VPN. |
| For now, |
| .Nm |
| can only get encryption keys from CHAP 81 authentication. |
| .Nm |
| must be compiled with DES for MPPE to operate. |
| .It Supports IPV6CP (rfc 2023). |
| An IPv6 connection can be made in addition to or instead of the normal |
| IPv4 connection. |
| .El |
| .Sh PERMISSIONS |
| .Nm |
| is installed as user |
| .Dv root |
| and group |
| .Dv network , |
| with permissions |
| .Dv 04554 . |
| By default, |
| .Nm |
| will not run if the invoking user id is not zero. |
| This may be overridden by using the |
| .Dq allow users |
| command in |
| .Pa /etc/ppp/ppp.conf . |
| When running as a normal user, |
| .Nm |
| switches to user id 0 in order to alter the system routing table, set up |
| system lock files and read the ppp configuration files. |
| All external commands (executed via the "shell" or "!bg" commands) are executed |
| as the user id that invoked |
| .Nm . |
| Refer to the |
| .Sq ID0 |
| logging facility if you are interested in what exactly is done as user id |
| zero. |
| .Sh GETTING STARTED |
| When you first run |
| .Nm |
| you may need to deal with some initial configuration details. |
| .Bl -bullet |
| .It |
| Make sure that your system has a group named |
| .Dq network |
| in the |
| .Pa /etc/group |
| file and that the group contains the names of all users expected to use |
| .Nm . |
| Refer to the |
| .Xr group 5 |
| manual page for details. |
| Each of these users must also be given access using the |
| .Dq allow users |
| command in |
| .Pa /etc/ppp/ppp.conf . |
| .It |
| Create a log file. |
| .Nm |
| uses |
| .Xr syslog 3 |
| to log information. |
| A common log file name is |
| .Pa /var/log/ppp.log . |
| To make output go to this file, put the following lines in the |
| .Pa /etc/syslog.conf |
| file: |
| .Bd -literal -offset indent |
| !ppp |
| *.*<TAB>/var/log/ppp.log |
| .Ed |
| .Pp |
| It is possible to have more than one |
| .Em PPP |
| log file by creating a link to the |
| .Nm |
| executable: |
| .Pp |
| .Dl # cd /usr/sbin |
| .Dl # ln ppp ppp0 |
| .Pp |
| and using |
| .Bd -literal -offset indent |
| !ppp0 |
| *.*<TAB>/var/log/ppp0.log |
| .Ed |
| .Pp |
| in |
| .Pa /etc/syslog.conf . |
| Do not forget to send a |
| .Dv HUP |
| signal to |
| .Xr syslogd 8 |
| after altering |
| .Pa /etc/syslog.conf . |
| .It |
| Although not strictly relevant to |
| .Nm Ns No 's |
| operation, you should configure your resolver so that it works correctly. |
| This can be done by configuring a local DNS |
| (using |
| .Xr named 8 ) |
| or by adding the correct |
| .Sq nameserver |
| lines to the file |
| .Pa /etc/resolv.conf . |
| Refer to the |
| .Xr resolv.conf 5 |
| manual page for details. |
| .Pp |
| Alternatively, if the peer supports it, |
| .Nm |
| can be configured to ask the peer for the nameserver address(es) and to |
| update |
| .Pa /etc/resolv.conf |
| automatically. |
| Refer to the |
| .Dq enable dns |
| and |
| .Dq resolv |
| commands below for details. |
| .El |
| .Sh MANUAL DIALING |
| In the following examples, we assume that your machine name is |
| .Dv awfulhak . |
| when you invoke |
| .Nm |
| (see |
| .Sx PERMISSIONS |
| above) with no arguments, you are presented with a prompt: |
| .Bd -literal -offset indent |
| ppp ON awfulhak> |
| .Ed |
| .Pp |
| The |
| .Sq ON |
| part of your prompt should always be in upper case. |
| If it is in lower case, it means that you must supply a password using the |
| .Dq passwd |
| command. |
| This only ever happens if you connect to a running version of |
| .Nm |
| and have not authenticated yourself using the correct password. |
| .Pp |
| You can start by specifying the device name and speed: |
| .Bd -literal -offset indent |
| ppp ON awfulhak> set device /dev/cuad0 |
| ppp ON awfulhak> set speed 38400 |
| .Ed |
| .Pp |
| Normally, hardware flow control (CTS/RTS) is used. |
| However, under |
| certain circumstances (as may happen when you are connected directly |
| to certain PPP-capable terminal servers), this may result in |
| .Nm |
| hanging as soon as it tries to write data to your communications link |
| as it is waiting for the CTS (clear to send) signal - which will never |
| come. |
| Thus, if you have a direct line and cannot seem to make a |
| connection, try turning CTS/RTS off with |
| .Dq set ctsrts off . |
| If you need to do this, check the |
| .Dq set accmap |
| description below too - you will probably need to |
| .Dq set accmap 000a0000 . |
| .Pp |
| Usually, parity is set to |
| .Dq none , |
| and this is |
| .Nm Ns No 's |
| default. |
| Parity is a rather archaic error checking mechanism that is no |
| longer used because modern modems do their own error checking, and most |
| link-layer protocols (that is what |
| .Nm |
| is) use much more reliable checking mechanisms. |
| Parity has a relatively |
| huge overhead (a 12.5% increase in traffic) and as a result, it is always |
| disabled |
| (set to |
| .Dq none ) |
| when |
| .Dv PPP |
| is opened. |
| However, some ISPs (Internet Service Providers) may use |
| specific parity settings at connection time (before |
| .Dv PPP |
| is opened). |
| Notably, Compuserve insist on even parity when logging in: |
| .Bd -literal -offset indent |
| ppp ON awfulhak> set parity even |
| .Ed |
| .Pp |
| You can now see what your current device settings look like: |
| .Bd -literal -offset indent |
| ppp ON awfulhak> show physical |
| Name: deflink |
| State: closed |
| Device: N/A |
| Link Type: interactive |
| Connect Count: 0 |
| Queued Packets: 0 |
| Phone Number: N/A |
| |
| Defaults: |
| Device List: /dev/cuad0 |
| Characteristics: 38400bps, cs8, even parity, CTS/RTS on |
| |
| Connect time: 0 secs |
| 0 octets in, 0 octets out |
| Overall 0 bytes/sec |
| ppp ON awfulhak> |
| .Ed |
| .Pp |
| The term command can now be used to talk directly to the device: |
| .Bd -literal -offset indent |
| ppp ON awfulhak> term |
| at |
| OK |
| atdt123456 |
| CONNECT |
| login: myispusername |
| Password: myisppassword |
| Protocol: ppp |
| .Ed |
| .Pp |
| When the peer starts to talk in |
| .Em PPP , |
| .Nm |
| detects this automatically and returns to command mode. |
| .Bd -literal -offset indent |
| ppp ON awfulhak> # No link has been established |
| Ppp ON awfulhak> # We've connected & finished LCP |
| PPp ON awfulhak> # We've authenticated |
| PPP ON awfulhak> # We've agreed IP numbers |
| .Ed |
| .Pp |
| If it does not, it is probable that the peer is waiting for your end to |
| start negotiating. |
| To force |
| .Nm |
| to start sending |
| .Em PPP |
| configuration packets to the peer, use the |
| .Dq ~p |
| command to drop out of terminal mode and enter packet mode. |
| .Pp |
| If you never even receive a login prompt, it is quite likely that the |
| peer wants to use PAP or CHAP authentication instead of using Unix-style |
| login/password authentication. |
| To set things up properly, drop back to |
| the prompt and set your authentication name and key, then reconnect: |
| .Bd -literal -offset indent |
| ~. |
| ppp ON awfulhak> set authname myispusername |
| ppp ON awfulhak> set authkey myisppassword |
| ppp ON awfulhak> term |
| at |
| OK |
| atdt123456 |
| CONNECT |
| .Ed |
| .Pp |
| You may need to tell ppp to initiate negotiations with the peer here too: |
| .Bd -literal -offset indent |
| ~p |
| ppp ON awfulhak> # No link has been established |
| Ppp ON awfulhak> # We've connected & finished LCP |
| PPp ON awfulhak> # We've authenticated |
| PPP ON awfulhak> # We've agreed IP numbers |
| .Ed |
| .Pp |
| You are now connected! |
| Note that |
| .Sq PPP |
| in the prompt has changed to capital letters to indicate that you have |
| a peer connection. |
| If only some of the three Ps go uppercase, wait until |
| either everything is uppercase or lowercase. |
| If they revert to lowercase, it means that |
| .Nm |
| could not successfully negotiate with the peer. |
| A good first step for troubleshooting at this point would be to |
| .Bd -literal -offset indent |
| ppp ON awfulhak> set log local phase lcp ipcp |
| .Ed |
| .Pp |
| and try again. |
| Refer to the |
| .Dq set log |
| command description below for further details. |
| If things fail at this point, |
| it is quite important that you turn logging on and try again. |
| It is also |
| important that you note any prompt changes and report them to anyone trying |
| to help you. |
| .Pp |
| When the link is established, the show command can be used to see how |
| things are going: |
| .Bd -literal -offset indent |
| PPP ON awfulhak> show physical |
| * Modem related information is shown here * |
| PPP ON awfulhak> show ccp |
| * CCP (compression) related information is shown here * |
| PPP ON awfulhak> show lcp |
| * LCP (line control) related information is shown here * |
| PPP ON awfulhak> show ipcp |
| * IPCP (IP) related information is shown here * |
| PPP ON awfulhak> show ipv6cp |
| * IPV6CP (IPv6) related information is shown here * |
| PPP ON awfulhak> show link |
| * Link (high level) related information is shown here * |
| PPP ON awfulhak> show bundle |
| * Logical (high level) connection related information is shown here * |
| .Ed |
| .Pp |
| At this point, your machine has a host route to the peer. |
| This means |
| that you can only make a connection with the host on the other side |
| of the link. |
| If you want to add a default route entry (telling your |
| machine to send all packets without another routing entry to the other |
| side of the |
| .Em PPP |
| link), enter the following command: |
| .Bd -literal -offset indent |
| PPP ON awfulhak> add default HISADDR |
| .Ed |
| .Pp |
| The string |
| .Sq HISADDR |
| represents the IP address of the connected peer. |
| If the |
| .Dq add |
| command fails due to an existing route, you can overwrite the existing |
| route using: |
| .Bd -literal -offset indent |
| PPP ON awfulhak> add! default HISADDR |
| .Ed |
| .Pp |
| This command can also be executed before actually making the connection. |
| If a new IP address is negotiated at connection time, |
| .Nm |
| will update your default route accordingly. |
| .Pp |
| You can now use your network applications (ping, telnet, ftp, etc.) |
| in other windows or terminals on your machine. |
| If you wish to reuse the current terminal, you can put |
| .Nm |
| into the background using your standard shell suspend and background |
| commands (usually |
| .Dq ^Z |
| followed by |
| .Dq bg ) . |
| .Pp |
| Refer to the |
| .Sx PPP COMMAND LIST |
| section for details on all available commands. |
| .Sh AUTOMATIC DIALING |
| To use automatic dialing, you must prepare some Dial and Login chat scripts. |
| See the example definitions in |
| .Pa /usr/share/examples/ppp/ppp.conf.sample |
| (the format of |
| .Pa /etc/ppp/ppp.conf |
| is pretty simple). |
| Each line contains one comment, inclusion, label or command: |
| .Bl -bullet |
| .It |
| A line starting with a |
| .Pq Dq # |
| character is treated as a comment line. |
| Leading whitespace are ignored when identifying comment lines. |
| .It |
| An inclusion is a line beginning with the word |
| .Sq {!include} . |
| It must have one argument - the file to {include}. |
| You may wish to |
| .Dq {!include} ~/.ppp.conf |
| for compatibility with older versions of |
| .Nm . |
| .It |
| A label name starts in the first column and is followed by |
| a colon |
| .Pq Dq \&: . |
| .It |
| A command line must contain a space or tab in the first column. |
| .It |
| A string starting with the |
| .Dq $ |
| character is substituted with the value of the environment variable by |
| the same name. |
| Likewise, a string starting with the |
| .Dq ~ |
| character is substituted with the full path to the home directory of |
| the user account by the same name, and the |
| .Dq ~ |
| character by itself is substituted with the full path to the home directory |
| of the current user. |
| If you want to include a literal |
| .Dq $ |
| or |
| .Dq ~ |
| character in a command or argument, enclose them in double quotes, e.g., |
| .Bd -literal -offset indent |
| set password "pa$ss~word" |
| .Ed |
| .El |
| .Pp |
| The |
| .Pa /etc/ppp/ppp.conf |
| file should consist of at least a |
| .Dq default |
| section. |
| This section is always executed. |
| It should also contain |
| one or more sections, named according to their purpose, for example, |
| .Dq MyISP |
| would represent your ISP, and |
| .Dq ppp-in |
| would represent an incoming |
| .Nm |
| configuration. |
| You can now specify the destination label name when you invoke |
| .Nm . |
| Commands associated with the |
| .Dq default |
| label are executed, followed by those associated with the destination |
| label provided. |
| When |
| .Nm |
| is started with no arguments, the |
| .Dq default |
| section is still executed. |
| The load command can be used to manually load a section from the |
| .Pa /etc/ppp/ppp.conf |
| file: |
| .Bd -literal -offset indent |
| ppp ON awfulhak> load MyISP |
| .Ed |
| .Pp |
| Note, no action is taken by |
| .Nm |
| after a section is loaded, whether it is the result of passing a label on |
| the command line or using the |
| .Dq load |
| command. |
| Only the commands specified for that label in the configuration |
| file are executed. |
| However, when invoking |
| .Nm |
| with the |
| .Fl background , |
| .Fl ddial , |
| or |
| .Fl dedicated |
| switches, the link mode tells |
| .Nm |
| to establish a connection. |
| Refer to the |
| .Dq set mode |
| command below for further details. |
| .Pp |
| Once the connection is made, the |
| .Sq ppp |
| portion of the prompt will change to |
| .Sq PPP : |
| .Bd -literal -offset indent |
| # ppp MyISP |
| \&... |
| ppp ON awfulhak> dial |
| Ppp ON awfulhak> |
| PPp ON awfulhak> |
| PPP ON awfulhak> |
| .Ed |
| .Pp |
| The Ppp prompt indicates that |
| .Nm |
| has entered the authentication phase. |
| The PPp prompt indicates that |
| .Nm |
| has entered the network phase. |
| The PPP prompt indicates that |
| .Nm |
| has successfully negotiated a network layer protocol and is in |
| a usable state. |
| .Pp |
| If the |
| .Pa /etc/ppp/ppp.linkup |
| file is available, its contents are executed |
| when the |
| .Em PPP |
| connection is established. |
| See the provided |
| .Dq pmdemand |
| example in |
| .Pa /usr/share/examples/ppp/ppp.conf.sample |
| which runs a script in the background after the connection is established |
| (refer to the |
| .Dq shell |
| and |
| .Dq bg |
| commands below for a description of possible substitution strings). |
| Similarly, when a connection is closed, the contents of the |
| .Pa /etc/ppp/ppp.linkdown |
| file are executed. |
| Both of these files have the same format as |
| .Pa /etc/ppp/ppp.conf . |
| .Pp |
| In previous versions of |
| .Nm , |
| it was necessary to re-add routes such as the default route in the |
| .Pa ppp.linkup |
| file. |
| .Nm |
| supports |
| .Sq sticky routes , |
| where all routes that contain the |
| .Dv HISADDR , |
| .Dv MYADDR , |
| .Dv HISADDR6 |
| or |
| .Dv MYADDR6 |
| literals will automatically be updated when the values of these variables |
| change. |
| .Sh BACKGROUND DIALING |
| If you want to establish a connection using |
| .Nm |
| non-interactively (such as from a |
| .Xr crontab 5 |
| entry or an |
| .Xr at 1 |
| job) you should use the |
| .Fl background |
| option. |
| When |
| .Fl background |
| is specified, |
| .Nm |
| attempts to establish the connection immediately. |
| If multiple phone |
| numbers are specified, each phone number will be tried once. |
| If the attempt fails, |
| .Nm |
| exits immediately with a non-zero exit code. |
| If it succeeds, then |
| .Nm |
| becomes a daemon, and returns an exit status of zero to its caller. |
| The daemon exits automatically if the connection is dropped by the |
| remote system, or it receives a |
| .Dv TERM |
| signal. |
| .Sh DIAL ON DEMAND |
| Demand dialing is enabled with the |
| .Fl auto |
| or |
| .Fl ddial |
| options. |
| You must also specify the destination label in |
| .Pa /etc/ppp/ppp.conf |
| to use. |
| It must contain the |
| .Dq set ifaddr |
| command to {define} the remote peers IP address. |
| (refer to |
| .Pa /usr/share/examples/ppp/ppp.conf.sample ) |
| .Bd -literal -offset indent |
| # ppp -auto pmdemand |
| .Ed |
| .Pp |
| When |
| .Fl auto |
| or |
| .Fl ddial |
| is specified, |
| .Nm |
| runs as a daemon but you can still configure or examine its |
| configuration by using the |
| .Dq set server |
| command in |
| .Pa /etc/ppp/ppp.conf , |
| (for example, |
| .Dq Li "set server +3000 mypasswd" ) |
| and connecting to the diagnostic port as follows: |
| .Bd -literal -offset indent |
| # pppctl 3000 (assuming tun0) |
| Password: |
| PPP ON awfulhak> show who |
| tcp (127.0.0.1:1028) * |
| .Ed |
| .Pp |
| The |
| .Dq show who |
| command lists users that are currently connected to |
| .Nm |
| itself. |
| If the diagnostic socket is closed or changed to a different |
| socket, all connections are immediately dropped. |
| .Pp |
| In |
| .Fl auto |
| mode, when an outgoing packet is detected, |
| .Nm |
| will perform the dialing action (chat script) and try to connect |
| with the peer. |
| In |
| .Fl ddial |
| mode, the dialing action is performed any time the line is found |
| to be down. |
| If the connect fails, the default behaviour is to wait 30 seconds |
| and then attempt to connect when another outgoing packet is detected. |
| This behaviour can be changed using the |
| .Dq set redial |
| command: |
| .Pp |
| .No set redial Ar secs Ns Xo |
| .Oo + Ns Ar inc Ns |
| .Op - Ns Ar max Ns |
| .Oc Ns Op . Ns Ar next |
| .Op Ar attempts |
| .Xc |
| .Pp |
| .Bl -tag -width attempts -compact |
| .It Ar secs |
| is the number of seconds to wait before attempting |
| to connect again. |
| If the argument is the literal string |
| .Sq Li random , |
| the delay period is a random value between 1 and 30 seconds inclusive. |
| .It Ar inc |
| is the number of seconds that |
| .Ar secs |
| should be incremented each time a new dial attempt is made. |
| The timeout reverts to |
| .Ar secs |
| only after a successful connection is established. |
| The default value for |
| .Ar inc |
| is zero. |
| .It Ar max |
| is the maximum number of times |
| .Nm |
| should increment |
| .Ar secs . |
| The default value for |
| .Ar max |
| is 10. |
| .It Ar next |
| is the number of seconds to wait before attempting |
| to dial the next number in a list of numbers (see the |
| .Dq set phone |
| command). |
| The default is 3 seconds. |
| Again, if the argument is the literal string |
| .Sq Li random , |
| the delay period is a random value between 1 and 30 seconds. |
| .It Ar attempts |
| is the maximum number of times to try to connect for each outgoing packet |
| that triggers a dial. |
| The previous value is unchanged if this parameter is omitted. |
| If a value of zero is specified for |
| .Ar attempts , |
| .Nm |
| will keep trying until a connection is made. |
| .El |
| .Pp |
| So, for example: |
| .Bd -literal -offset indent |
| set redial 10.3 4 |
| .Ed |
| .Pp |
| will attempt to connect 4 times for each outgoing packet that causes |
| a dial attempt with a 3 second delay between each number and a 10 second |
| delay after all numbers have been tried. |
| If multiple phone numbers |
| are specified, the total number of attempts is still 4 (it does not |
| attempt each number 4 times). |
| .Pp |
| Alternatively, |
| .Pp |
| .Bd -literal -offset indent |
| set redial 10+10-5.3 20 |
| .Ed |
| .Pp |
| tells |
| .Nm |
| to attempt to connect 20 times. |
| After the first attempt, |
| .Nm |
| pauses for 10 seconds. |
| After the next attempt it pauses for 20 seconds |
| and so on until after the sixth attempt it pauses for 1 minute. |
| The next 14 pauses will also have a duration of one minute. |
| If |
| .Nm |
| connects, disconnects and fails to connect again, the timeout starts again |
| at 10 seconds. |
| .Pp |
| Modifying the dial delay is very useful when running |
| .Nm |
| in |
| .Fl auto |
| mode on both ends of the link. |
| If each end has the same timeout, |
| both ends wind up calling each other at the same time if the link |
| drops and both ends have packets queued. |
| At some locations, the serial link may not be reliable, and carrier |
| may be lost at inappropriate times. |
| It is possible to have |
| .Nm |
| redial should carrier be unexpectedly lost during a session. |
| .Bd -literal -offset indent |
| set reconnect timeout ntries |
| .Ed |
| .Pp |
| This command tells |
| .Nm |
| to re-establish the connection |
| .Ar ntries |
| times on loss of carrier with a pause of |
| .Ar timeout |
| seconds before each try. |
| For example, |
| .Bd -literal -offset indent |
| set reconnect 3 5 |
| .Ed |
| .Pp |
| tells |
| .Nm |
| that on an unexpected loss of carrier, it should wait |
| .Ar 3 |
| seconds before attempting to reconnect. |
| This may happen up to |
| .Ar 5 |
| times before |
| .Nm |
| gives up. |
| The default value of ntries is zero (no reconnect). |
| Care should be taken with this option. |
| If the local timeout is slightly |
| longer than the remote timeout, the reconnect feature will always be |
| triggered (up to the given number of times) after the remote side |
| times out and hangs up. |
| NOTE: In this context, losing too many LQRs constitutes a loss of |
| carrier and will trigger a reconnect. |
| If the |
| .Fl background |
| flag is specified, all phone numbers are dialed at most once until |
| a connection is made. |
| The next number redial period specified with the |
| .Dq set redial |
| command is honoured, as is the reconnect tries value. |
| If your redial |
| value is less than the number of phone numbers specified, not all |
| the specified numbers will be tried. |
| To terminate the program, type |
| .Bd -literal -offset indent |
| PPP ON awfulhak> close |
| ppp ON awfulhak> quit all |
| .Ed |
| .Pp |
| A simple |
| .Dq quit |
| command will terminate the |
| .Xr pppctl 8 |
| or |
| .Xr telnet 1 |
| connection but not the |
| .Nm |
| program itself. |
| You must use |
| .Dq quit all |
| to terminate |
| .Nm |
| as well. |
| .Sh RECEIVING INCOMING PPP CONNECTIONS (Method 1) |
| To handle an incoming |
| .Em PPP |
| connection request, follow these steps: |
| .Bl -enum |
| .It |
| Make sure the modem and (optionally) |
| .Pa /etc/rc.serial |
| is configured correctly. |
| .Bl -bullet -compact |
| .It |
| Use Hardware Handshake (CTS/RTS) for flow control. |
| .It |
| Modem should be set to NO echo back (ATE0) and NO results string (ATQ1). |
| .El |
| .Pp |
| .It |
| Edit |
| .Pa /etc/ttys |
| to enable a |
| .Xr getty 8 |
| on the port where the modem is attached. |
| For example: |
| .Pp |
| .Dl ttyd1 Qo /usr/libexec/getty std.38400 Qc dialup on secure |
| .Pp |
| Do not forget to send a |
| .Dv HUP |
| signal to the |
| .Xr init 8 |
| process to start the |
| .Xr getty 8 : |
| .Pp |
| .Dl # kill -HUP 1 |
| .Pp |
| It is usually also necessary to train your modem to the same DTR speed |
| as the getty: |
| .Bd -literal -offset indent |
| # ppp |
| ppp ON awfulhak> set device /dev/cuad1 |
| ppp ON awfulhak> set speed 38400 |
| ppp ON awfulhak> term |
| deflink: Entering terminal mode on /dev/cuad1 |
| Type `~?' for help |
| at |
| OK |
| at |
| OK |
| atz |
| OK |
| at |
| OK |
| ~. |
| ppp ON awfulhak> quit |
| .Ed |
| .It |
| Create a |
| .Pa /usr/local/bin/ppplogin |
| file with the following contents: |
| .Bd -literal -offset indent |
| #! /bin/sh |
| exec /usr/sbin/ppp -direct incoming |
| .Ed |
| .Pp |
| Direct mode |
| .Pq Fl direct |
| lets |
| .Nm |
| work with stdin and stdout. |
| You can also use |
| .Xr pppctl 8 |
| to connect to a configured diagnostic port, in the same manner as with |
| client-side |
| .Nm . |
| .Pp |
| Here, the |
| .Ar incoming |
| section must be set up in |
| .Pa /etc/ppp/ppp.conf . |
| .Pp |
| Make sure that the |
| .Ar incoming |
| section contains the |
| .Dq allow users |
| command as appropriate. |
| .It |
| Prepare an account for the incoming user. |
| .Bd -literal |
| ppp:xxxx:66:66:PPP Login User:/home/ppp:/usr/local/bin/ppplogin |
| .Ed |
| .Pp |
| Refer to the manual entries for |
| .Xr adduser 8 |
| and |
| .Xr vipw 8 |
| for details. |
| .It |
| Support for IPCP Domain Name Server and NetBIOS Name Server negotiation |
| can be enabled using the |
| .Dq accept dns |
| and |
| .Dq set nbns |
| commands. |
| Refer to their descriptions below. |
| .El |
| .Sh RECEIVING INCOMING PPP CONNECTIONS (Method 2) |
| This method differs in that we use |
| .Nm |
| to authenticate the connection rather than |
| .Xr login 1 : |
| .Bl -enum |
| .It |
| Configure your default section in |
| .Pa /etc/gettytab |
| with automatic ppp recognition by specifying the |
| .Dq pp |
| capability: |
| .Bd -literal |
| default:\\ |
| :pp=/usr/local/bin/ppplogin:\\ |
| ..... |
| .Ed |
| .It |
| Configure your serial device(s), enable a |
| .Xr getty 8 |
| and create |
| .Pa /usr/local/bin/ppplogin |
| as in the first three steps for method 1 above. |
| .It |
| Add either |
| .Dq enable chap |
| or |
| .Dq enable pap |
| (or both) |
| to |
| .Pa /etc/ppp/ppp.conf |
| under the |
| .Sq incoming |
| label (or whatever label |
| .Pa ppplogin |
| uses). |
| .It |
| Create an entry in |
| .Pa /etc/ppp/ppp.secret |
| for each incoming user: |
| .Bd -literal |
| Pfred<TAB>xxxx |
| Pgeorge<TAB>yyyy |
| .Ed |
| .El |
| .Pp |
| Now, as soon as |
| .Xr getty 8 |
| detects a ppp connection (by recognising the HDLC frame headers), it runs |
| .Dq /usr/local/bin/ppplogin . |
| .Pp |
| It is |
| .Em VITAL |
| that either PAP or CHAP are enabled as above. |
| If they are not, you are |
| allowing anybody to establish a ppp session with your machine |
| .Em without |
| a password, opening yourself up to all sorts of potential attacks. |
| .Sh AUTHENTICATING INCOMING CONNECTIONS |
| Normally, the receiver of a connection requires that the peer |
| authenticates itself. |
| This may be done using |
| .Xr login 1 , |
| but alternatively, you can use PAP or CHAP. |
| CHAP is the more secure of the two, but some clients may not support it. |
| Once you decide which you wish to use, add the command |
| .Sq enable chap |
| or |
| .Sq enable pap |
| to the relevant section of |
| .Pa ppp.conf . |
| .Pp |
| You must then configure the |
| .Pa /etc/ppp/ppp.secret |
| file. |
| This file contains one line per possible client, each line |
| containing up to five fields: |
| .Pp |
| .Ar name Ar key Oo |
| .Ar hisaddr Op Ar label Op Ar callback-number |
| .Oc |
| .Pp |
| The |
| .Ar name |
| and |
| .Ar key |
| specify the client username and password. |
| If |
| .Ar key |
| is |
| .Dq \&* |
| and PAP is being used, |
| .Nm |
| will look up the password database |
| .Pq Xr passwd 5 |
| when authenticating. |
| If the client does not offer a suitable response based on any |
| .Ar name Ns No / Ns Ar key |
| combination in |
| .Pa ppp.secret , |
| authentication fails. |
| .Pp |
| If authentication is successful, |
| .Ar hisaddr |
| (if specified) |
| is used when negotiating IP numbers. |
| See the |
| .Dq set ifaddr |
| command for details. |
| .Pp |
| If authentication is successful and |
| .Ar label |
| is specified, the current system label is changed to match the given |
| .Ar label . |
| This will change the subsequent parsing of the |
| .Pa ppp.linkup |
| and |
| .Pa ppp.linkdown |
| files. |
| .Pp |
| If authentication is successful and |
| .Ar callback-number |
| is specified and |
| .Dq set callback |
| has been used in |
| .Pa ppp.conf , |
| the client will be called back on the given number. |
| If CBCP is being used, |
| .Ar callback-number |
| may also contain a list of numbers or a |
| .Dq \&* , |
| as if passed to the |
| .Dq set cbcp |
| command. |
| The value will be used in |
| .Nm Ns No 's |
| subsequent CBCP phase. |
| .Sh PPP OVER TCP and UDP (a.k.a Tunnelling) |
| Instead of running |
| .Nm |
| over a serial link, it is possible to |
| use a TCP connection instead by specifying the host, port and protocol as the |
| device: |
| .Pp |
| .Dl set device ui-gate:6669/tcp |
| .Pp |
| Instead of opening a serial device, |
| .Nm |
| will open a TCP connection to the given machine on the given |
| socket. |
| It should be noted however that |
| .Nm |
| does not use the telnet protocol and will be unable to negotiate |
| with a telnet server. |
| You should set up a port for receiving this |
| .Em PPP |
| connection on the receiving machine (ui-gate). |
| This is done by first updating |
| .Pa /etc/services |
| to name the service: |
| .Pp |
| .Dl ppp-in 6669/tcp # Incoming PPP connections over TCP |
| .Pp |
| and updating |
| .Pa /etc/inetd.conf |
| to tell |
| .Xr inetd 8 |
| how to deal with incoming connections on that port: |
| .Pp |
| .Dl ppp-in stream tcp nowait root /usr/sbin/ppp ppp -direct ppp-in |
| .Pp |
| Do not forget to send a |
| .Dv HUP |
| signal to |
| .Xr inetd 8 |
| after you have updated |
| .Pa /etc/inetd.conf . |
| Here, we use a label named |
| .Dq ppp-in . |
| The entry in |
| .Pa /etc/ppp/ppp.conf |
| on ui-gate (the receiver) should contain the following: |
| .Bd -literal -offset indent |
| ppp-in: |
| set timeout 0 |
| set ifaddr 10.0.4.1 10.0.4.2 |
| .Ed |
| .Pp |
| and the entry in |
| .Pa /etc/ppp/ppp.linkup |
| should contain: |
| .Bd -literal -offset indent |
| ppp-in: |
| add 10.0.1.0/24 HISADDR |
| .Ed |
| .Pp |
| It is necessary to put the |
| .Dq add |
| command in |
| .Pa ppp.linkup |
| to ensure that the route is only added after |
| .Nm |
| has negotiated and assigned addresses to its interface. |
| .Pp |
| You may also want to enable PAP or CHAP for security. |
| To enable PAP, add the following line: |
| .Bd -literal -offset indent |
| enable PAP |
| .Ed |
| .Pp |
| You will also need to create the following entry in |
| .Pa /etc/ppp/ppp.secret : |
| .Bd -literal -offset indent |
| MyAuthName MyAuthPasswd |
| .Ed |
| .Pp |
| If |
| .Ar MyAuthPasswd |
| is a |
| .Dq * , |
| the password is looked up in the |
| .Xr passwd 5 |
| database. |
| .Pp |
| The entry in |
| .Pa /etc/ppp/ppp.conf |
| on awfulhak (the initiator) should contain the following: |
| .Bd -literal -offset indent |
| ui-gate: |
| set escape 0xff |
| set device ui-gate:ppp-in/tcp |
| set dial |
| set timeout 30 |
| set log Phase Chat Connect hdlc LCP IPCP IPV6CP CCP tun |
| set ifaddr 10.0.4.2 10.0.4.1 |
| .Ed |
| .Pp |
| with the route setup in |
| .Pa /etc/ppp/ppp.linkup : |
| .Bd -literal -offset indent |
| ui-gate: |
| add 10.0.2.0/24 HISADDR |
| .Ed |
| .Pp |
| Again, if you are enabling PAP, you will also need this in the |
| .Pa /etc/ppp/ppp.conf |
| profile: |
| .Bd -literal -offset indent |
| set authname MyAuthName |
| set authkey MyAuthKey |
| .Ed |
| .Pp |
| We are assigning the address of 10.0.4.1 to ui-gate, and the address |
| 10.0.4.2 to awfulhak. |
| To open the connection, just type |
| .Pp |
| .Dl awfulhak # ppp -background ui-gate |
| .Pp |
| The result will be an additional "route" on awfulhak to the |
| 10.0.2.0/24 network via the TCP connection, and an additional |
| "route" on ui-gate to the 10.0.1.0/24 network. |
| The networks are effectively bridged - the underlying TCP |
| connection may be across a public network (such as the |
| Internet), and the |
| .Em PPP |
| traffic is conceptually encapsulated |
| (although not packet by packet) inside the TCP stream between |
| the two gateways. |
| .Pp |
| The major disadvantage of this mechanism is that there are two |
| "guaranteed delivery" mechanisms in place - the underlying TCP |
| stream and whatever protocol is used over the |
| .Em PPP |
| link - probably TCP again. |
| If packets are lost, both levels will |
| get in each others way trying to negotiate sending of the missing |
| packet. |
| .Pp |
| To avoid this overhead, it is also possible to do all this using |
| UDP instead of TCP as the transport by simply changing the protocol |
| from "tcp" to "udp". |
| When using UDP as a transport, |
| .Nm |
| will operate in synchronous mode. |
| This is another gain as the incoming |
| data does not have to be rearranged into packets. |
| .Pp |
| Care should be taken when adding a default route through a tunneled |
| setup like this. |
| It is quite common for the default route |
| (added in |
| .Pa /etc/ppp/ppp.linkup ) |
| to end up routing the link's TCP connection through the tunnel, |
| effectively garrotting the connection. |
| To avoid this, make sure you add a static route for the benefit of |
| the link: |
| .Bd -literal -offset indent |
| ui-gate: |
| set escape 0xff |
| set device ui-gate:ppp-in/tcp |
| add ui-gate x.x.x.x |
| ..... |
| .Ed |
| .Pp |
| where |
| .Dq x.x.x.x |
| is the IP number that your route to |
| .Dq ui-gate |
| would normally use. |
| .Pp |
| When routing your connection accross a public network such as the Internet, |
| it is preferable to encrypt the data. |
| This can be done with the help of the MPPE protocol, although currently this |
| means that you will not be able to also compress the traffic as MPPE is |
| implemented as a compression layer (thank Microsoft for this). |
| To enable MPPE encryption, add the following lines to |
| .Pa /etc/ppp/ppp.conf |
| on the server: |
| .Bd -literal -offset indent |
| enable MSCHAPv2 |
| disable deflate pred1 |
| deny deflate pred1 |
| .Ed |
| .Pp |
| ensuring that you have put the requisite entry in |
| .Pa /etc/ppp/ppp.secret |
| (MSCHAPv2 is challenge based, so |
| .Xr passwd 5 |
| cannot be used) |
| .Pp |
| MSCHAPv2 and MPPE are accepted by default, so the client end should work |
| without any additional changes (although ensure you have |
| .Dq set authname |
| and |
| .Dq set authkey |
| in your profile). |
| .Sh NETWORK ADDRESS TRANSLATION (PACKET ALIASING) |
| The |
| .Fl nat |
| command line option enables network address translation (a.k.a.\& packet |
| aliasing). |
| This allows the |
| .Nm |
| host to act as a masquerading gateway for other computers over |
| a local area network. |
| Outgoing IP packets are NAT'd so that they appear to come from the |
| .Nm |
| host, and incoming packets are de-NAT'd so that they are routed |
| to the correct machine on the local area network. |
| NAT allows computers on private, unregistered subnets to have Internet |
| access, although they are invisible from the outside world. |
| In general, correct |
| .Nm |
| operation should first be verified with network address translation disabled. |
| Then, the |
| .Fl nat |
| option should be switched on, and network applications (web browser, |
| .Xr telnet 1 , |
| .Xr ftp 1 , |
| .Xr ping 8 , |
| .Xr traceroute 8 ) |
| should be checked on the |
| .Nm |
| host. |
| Finally, the same or similar applications should be checked on other |
| computers in the LAN. |
| If network applications work correctly on the |
| .Nm |
| host, but not on other machines in the LAN, then the masquerading |
| software is working properly, but the host is either not forwarding |
| or possibly receiving IP packets. |
| Check that IP forwarding is enabled in |
| .Pa /etc/rc.conf |
| and that other machines have designated the |
| .Nm |
| host as the gateway for the LAN. |
| .Sh PACKET FILTERING |
| This implementation supports packet filtering. |
| There are four kinds of |
| filters: the |
| .Em in |
| filter, the |
| .Em out |
| filter, the |
| .Em dial |
| filter and the |
| .Em alive |
| filter. |
| Here are the basics: |
| .Bl -bullet |
| .It |
| A filter definition has the following syntax: |
| .Pp |
| set filter |
| .Ar name |
| .Ar rule-no |
| .Ar action |
| .Op !\& |
| .Oo |
| .Op host |
| .Ar src_addr Ns Op / Ns Ar width |
| .Op Ar dst_addr Ns Op / Ns Ar width |
| .Oc |
| .Ar [ proto Op src Ar cmp port |
| .Op dst Ar cmp port |
| .Op estab |
| .Op syn |
| .Op finrst |
| .Op timeout Ar secs ] |
| .Bl -enum |
| .It |
| .Ar Name |
| should be one of |
| .Sq in , |
| .Sq out , |
| .Sq dial |
| or |
| .Sq alive . |
| .It |
| .Ar Rule-no |
| is a numeric value between |
| .Sq 0 |
| and |
| .Sq 39 |
| specifying the rule number. |
| Rules are specified in numeric order according to |
| .Ar rule-no , |
| but only if rule |
| .Sq 0 |
| is defined. |
| .It |
| .Ar Action |
| may be specified as |
| .Sq permit |
| or |
| .Sq deny , |
| in which case, if a given packet matches the rule, the associated action |
| is taken immediately. |
| .Ar Action |
| can also be specified as |
| .Sq clear |
| to clear the action associated with that particular rule, or as a new |
| rule number greater than the current rule. |
| In this case, if a given |
| packet matches the current rule, the packet will next be matched against |
| the new rule number (rather than the next rule number). |
| .Pp |
| The |
| .Ar action |
| may optionally be followed with an exclamation mark |
| .Pq Dq !\& , |
| telling |
| .Nm |
| to reverse the sense of the following match. |
| .It |
| .Op Ar src_addr Ns Op / Ns Ar width |
| and |
| .Op Ar dst_addr Ns Op / Ns Ar width |
| are the source and destination IP number specifications. |
| If |
| .Op / Ns Ar width |
| is specified, it gives the number of relevant netmask bits, |
| allowing the specification of an address range. |
| .Pp |
| Either |
| .Ar src_addr |
| or |
| .Ar dst_addr |
| may be given the values |
| .Dv MYADDR , |
| .Dv HISADDR , |
| .Dv MYADDR6 |
| or |
| .Dv HISADDR6 |
| (refer to the description of the |
| .Dq bg |
| command for a description of these values). |
| When these values are used, |
| the filters will be updated any time the values change. |
| This is similar to the behaviour of the |
| .Dq add |
| command below. |
| .It |
| .Ar Proto |
| may be any protocol from |
| .Xr protocols 5 . |
| .It |
| .Ar Cmp |
| is one of |
| .Sq \< , |
| .Sq \&eq |
| or |
| .Sq \> , |
| meaning less-than, equal and greater-than respectively. |
| .Ar Port |
| can be specified as a numeric port or by service name from |
| .Pa /etc/services . |
| .It |
| The |
| .Sq estab , |
| .Sq syn , |
| and |
| .Sq finrst |
| flags are only allowed when |
| .Ar proto |
| is set to |
| .Sq tcp , |
| and represent the TH_ACK, TH_SYN and TH_FIN or TH_RST TCP flags respectively. |
| .It |
| The timeout value adjusts the current idle timeout to at least |
| .Ar secs |
| seconds. |
| If a timeout is given in the alive filter as well as in the in/out |
| filter, the in/out value is used. |
| If no timeout is given, the default timeout (set using |
| .Ic set timeout |
| and defaulting to 180 seconds) is used. |
| .El |
| .Pp |
| .It |
| Each filter can hold up to 40 rules, starting from rule 0. |
| The entire rule set is not effective until rule 0 is defined, |
| i.e., the default is to allow everything through. |
| .It |
| If no rule in a defined set of rules matches a packet, that packet will |
| be discarded (blocked). |
| If there are no rules in a given filter, the packet will be permitted. |
| .It |
| It is possible to filter based on the payload of UDP frames where those |
| frames contain a |
| .Em PROTO_IP |
| .Em PPP |
| frame header. |
| See the |
| .Ar filter-decapsulation |
| option below for further details. |
| .It |
| Use |
| .Dq set filter Ar name No -1 |
| to flush all rules. |
| .El |
| .Pp |
| See |
| .Pa /usr/share/examples/ppp/ppp.conf.sample . |
| .Sh SETTING THE IDLE TIMER |
| To check/set the idle timer, use the |
| .Dq show bundle |
| and |
| .Dq set timeout |
| commands: |
| .Bd -literal -offset indent |
| ppp ON awfulhak> set timeout 600 |
| .Ed |
| .Pp |
| The timeout period is measured in seconds, the default value for which |
| is 180 seconds |
| (or 3 min). |
| To disable the idle timer function, use the command |
| .Bd -literal -offset indent |
| ppp ON awfulhak> set timeout 0 |
| .Ed |
| .Pp |
| In |
| .Fl ddial |
| and |
| .Fl dedicated |
| modes, the idle timeout is ignored. |
| In |
| .Fl auto |
| mode, when the idle timeout causes the |
| .Em PPP |
| session to be |
| closed, the |
| .Nm |
| program itself remains running. |
| Another trigger packet will cause it to attempt to re-establish the link. |
| .Sh PREDICTOR-1 and DEFLATE COMPRESSION |
| .Nm |
| supports both Predictor type 1 and deflate compression. |
| By default, |
| .Nm |
| will attempt to use (or be willing to accept) both compression protocols |
| when the peer agrees |
| (or requests them). |
| The deflate protocol is preferred by |
| .Nm . |
| Refer to the |
| .Dq disable |
| and |
| .Dq deny |
| commands if you wish to disable this functionality. |
| .Pp |
| It is possible to use a different compression algorithm in each direction |
| by using only one of |
| .Dq disable deflate |
| and |
| .Dq deny deflate |
| (assuming that the peer supports both algorithms). |
| .Pp |
| By default, when negotiating DEFLATE, |
| .Nm |
| will use a window size of 15. |
| Refer to the |
| .Dq set deflate |
| command if you wish to change this behaviour. |
| .Pp |
| A special algorithm called DEFLATE24 is also available, and is disabled |
| and denied by default. |
| This is exactly the same as DEFLATE except that |
| it uses CCP ID 24 to negotiate. |
| This allows |
| .Nm |
| to successfully negotiate DEFLATE with |
| .Nm pppd |
| version 2.3.*. |
| .Sh CONTROLLING IP ADDRESS |
| For IPv4, |
| .Nm |
| uses IPCP to negotiate IP addresses. |
| Each side of the connection |
| specifies the IP address that it is willing to use, and if the requested |
| IP address is acceptable then |
| .Nm |
| returns an ACK to the requester. |
| Otherwise, |
| .Nm |
| returns NAK to suggest that the peer use a different IP address. |
| When |
| both sides of the connection agree to accept the received request (and |
| send an ACK), IPCP is set to the open state and a network level connection |
| is established. |
| To control this IPCP behaviour, this implementation has the |
| .Dq set ifaddr |
| command for defining the local and remote IP address: |
| .Bd -ragged -offset indent |
| .No set ifaddr Oo Ar src_addr Ns |
| .Op / Ns Ar \&nn |
| .Oo Ar dst_addr Ns Op / Ns Ar \&nn |
| .Oo Ar netmask |
| .Op Ar trigger_addr |
| .Oc |
| .Oc |
| .Oc |
| .Ed |
| .Pp |
| where, |
| .Sq src_addr |
| is the IP address that the local side is willing to use, |
| .Sq dst_addr |
| is the IP address which the remote side should use and |
| .Sq netmask |
| is the netmask that should be used. |
| .Sq Src_addr |
| defaults to the current |
| .Xr hostname 1 , |
| .Sq dst_addr |
| defaults to 0.0.0.0, and |
| .Sq netmask |
| defaults to whatever mask is appropriate for |
| .Sq src_addr . |
| It is only possible to make |
| .Sq netmask |
| smaller than the default. |
| The usual value is 255.255.255.255, as |
| most kernels ignore the netmask of a POINTOPOINT interface. |
| .Pp |
| Some incorrect |
| .Em PPP |
| implementations require that the peer negotiates a specific IP |
| address instead of |
| .Sq src_addr . |
| If this is the case, |
| .Sq trigger_addr |
| may be used to specify this IP number. |
| This will not affect the |
| routing table unless the other side agrees with this proposed number. |
| .Bd -literal -offset indent |
| set ifaddr 192.244.177.38 192.244.177.2 255.255.255.255 0.0.0.0 |
| .Ed |
| .Pp |
| The above specification means: |
| .Pp |
| .Bl -bullet -compact |
| .It |
| I will first suggest that my IP address should be 0.0.0.0, but I |
| will only accept an address of 192.244.177.38. |
| .It |
| I strongly insist that the peer uses 192.244.177.2 as his own |
| address and will not permit the use of any IP address but 192.244.177.2. |
| When the peer requests another IP address, I will always suggest that |
| it uses 192.244.177.2. |
| .It |
| The routing table entry will have a netmask of 0xffffffff. |
| .El |
| .Pp |
| This is all fine when each side has a pre-determined IP address, however |
| it is often the case that one side is acting as a server which controls |
| all IP addresses and the other side should go along with it. |
| In order to allow more flexible behaviour, the |
| .Dq set ifaddr |
| command allows the user to specify IP addresses more loosely: |
| .Pp |
| .Dl set ifaddr 192.244.177.38/24 192.244.177.2/20 |
| .Pp |
| A number followed by a slash |
| .Pq Dq / |
| represents the number of bits significant in the IP address. |
| The above example means: |
| .Pp |
| .Bl -bullet -compact |
| .It |
| I would like to use 192.244.177.38 as my address if it is possible, but I will |
| also accept any IP address between 192.244.177.0 and 192.244.177.255. |
| .It |
| I would like to make him use 192.244.177.2 as his own address, but I will also |
| permit him to use any IP address between 192.244.176.0 and |
| 192.244.191.255. |
| .It |
| As you may have already noticed, 192.244.177.2 is equivalent to saying |
| 192.244.177.2/32. |
| .It |
| As an exception, 0 is equivalent to 0.0.0.0/0, meaning that I have no |
| preferred IP address and will obey the remote peers selection. |
| When using zero, no routing table entries will be made until a connection |
| is established. |
| .It |
| 192.244.177.2/0 means that I will accept/permit any IP address but I will |
| suggest that 192.244.177.2 be used first. |
| .El |
| .Pp |
| When negotiating IPv6 addresses, no control is given to the user. |
| IPV6CP negotiation is fully automatic. |
| .Sh CONNECTING WITH YOUR INTERNET SERVICE PROVIDER |
| The following steps should be taken when connecting to your ISP: |
| .Bl -enum |
| .It |
| Describe your providers phone number(s) in the dial script using the |
| .Dq set phone |
| command. |
| This command allows you to set multiple phone numbers for |
| dialing and redialing separated by either a pipe |
| .Pq Dq \&| |
| or a colon |
| .Pq Dq \&: : |
| .Bd -ragged -offset indent |
| .No set phone Ar telno Ns Xo |
| .Oo \&| Ns Ar backupnumber |
| .Oc Ns ... Ns Oo : Ns Ar nextnumber |
| .Oc Ns ... |
| .Xc |
| .Ed |
| .Pp |
| Numbers after the first in a pipe-separated list are only used if the |
| previous number was used in a failed dial or login script. |
| Numbers |
| separated by a colon are used sequentially, irrespective of what happened |
| as a result of using the previous number. |
| For example: |
| .Bd -literal -offset indent |
| set phone "1234567|2345678:3456789|4567890" |
| .Ed |
| .Pp |
| Here, the 1234567 number is attempted. |
| If the dial or login script fails, |
| the 2345678 number is used next time, but *only* if the dial or login script |
| fails. |
| On the dial after this, the 3456789 number is used. |
| The 4567890 |
| number is only used if the dial or login script using the 3456789 fails. |
| If the login script of the 2345678 number fails, the next number is still the |
| 3456789 number. |
| As many pipes and colons can be used as are necessary |
| (although a given site would usually prefer to use either the pipe or the |
| colon, but not both). |
| The next number redial timeout is used between all numbers. |
| When the end of the list is reached, the normal redial period is |
| used before starting at the beginning again. |
| The selected phone number is substituted for the \\\\T string in the |
| .Dq set dial |
| command (see below). |
| .It |
| Set up your redial requirements using |
| .Dq set redial . |
| For example, if you have a bad telephone line or your provider is |
| usually engaged (not so common these days), you may want to specify |
| the following: |
| .Bd -literal -offset indent |
| set redial 10 4 |
| .Ed |
| .Pp |
| This says that up to 4 phone calls should be attempted with a pause of 10 |
| seconds before dialing the first number again. |
| .It |
| Describe your login procedure using the |
| .Dq set dial |
| and |
| .Dq set login |
| commands. |
| The |
| .Dq set dial |
| command is used to talk to your modem and establish a link with your |
| ISP, for example: |
| .Bd -literal -offset indent |
| set dial "ABORT BUSY ABORT NO\\\\sCARRIER TIMEOUT 4 \\"\\" \e |
| ATZ OK-ATZ-OK ATDT\\\\T TIMEOUT 60 CONNECT" |
| .Ed |
| .Pp |
| This modem "chat" string means: |
| .Bl -bullet |
| .It |
| Abort if the string "BUSY" or "NO CARRIER" are received. |
| .It |
| Set the timeout to 4 seconds. |
| .It |
| Expect nothing. |
| .It |
| Send ATZ. |
| .It |
| Expect OK. |
| If that is not received within the 4 second timeout, send ATZ |
| and expect OK. |
| .It |
| Send ATDTxxxxxxx where xxxxxxx is the next number in the phone list from |
| above. |
| .It |
| Set the timeout to 60. |
| .It |
| Wait for the CONNECT string. |
| .El |
| .Pp |
| Once the connection is established, the login script is executed. |
| This script is written in the same style as the dial script, but care should |
| be taken to avoid having your password logged: |
| .Bd -literal -offset indent |
| set authkey MySecret |
| set login "TIMEOUT 15 login:-\\\\r-login: awfulhak \e |
| word: \\\\P ocol: PPP HELLO" |
| .Ed |
| .Pp |
| This login "chat" string means: |
| .Bl -bullet |
| .It |
| Set the timeout to 15 seconds. |
| .It |
| Expect "login:". |
| If it is not received, send a carriage return and expect |
| "login:" again. |
| .It |
| Send "awfulhak" |
| .It |
| Expect "word:" (the tail end of a "Password:" prompt). |
| .It |
| Send whatever our current |
| .Ar authkey |
| value is set to. |
| .It |
| Expect "ocol:" (the tail end of a "Protocol:" prompt). |
| .It |
| Send "PPP". |
| .It |
| Expect "HELLO". |
| .El |
| .Pp |
| The |
| .Dq set authkey |
| command is logged specially. |
| When |
| .Ar command |
| or |
| .Ar chat |
| logging is enabled, the actual password is not logged; |
| .Sq ******** |
| is logged instead. |
| .Pp |
| Login scripts vary greatly between ISPs. |
| If you are setting one up for the first time, |
| .Em ENABLE CHAT LOGGING |
| so that you can see if your script is behaving as you expect. |
| .It |
| Use |
| .Dq set device |
| and |
| .Dq set speed |
| to specify your serial line and speed, for example: |
| .Bd -literal -offset indent |
| set device /dev/cuad0 |
| set speed 115200 |
| .Ed |
| .Pp |
| Cuad0 is the first serial port on |
| .Fx . |
| If you are running |
| .Nm |
| on |
| .Ox , |
| cua00 is the first. |
| A speed of 115200 should be specified |
| if you have a modem capable of bit rates of 28800 or more. |
| In general, the serial speed should be about four times the modem speed. |
| .It |
| Use the |
| .Dq set ifaddr |
| command to {define} the IP address. |
| .Bl -bullet |
| .It |
| If you know what IP address your provider uses, then use it as the remote |
| address (dst_addr), otherwise choose something like 10.0.0.2/0 (see below). |
| .It |
| If your provider has assigned a particular IP address to you, then use |
| it as your address (src_addr). |
| .It |
| If your provider assigns your address dynamically, choose a suitably |
| unobtrusive and unspecific IP number as your address. |
| 10.0.0.1/0 would be appropriate. |
| The bit after the / specifies how many bits of the |
| address you consider to be important, so if you wanted to insist on |
| something in the class C network 1.2.3.0, you could specify 1.2.3.1/24. |
| .It |
| If you find that your ISP accepts the first IP number that you suggest, |
| specify third and forth arguments of |
| .Dq 0.0.0.0 . |
| This will force your ISP to assign a number. |
| (The third argument will |
| be ignored as it is less restrictive than the default mask for your |
| .Sq src_addr ) . |
| .El |
| .Pp |
| An example for a connection where you do not know your IP number or your |
| ISPs IP number would be: |
| .Bd -literal -offset indent |
| set ifaddr 10.0.0.1/0 10.0.0.2/0 0.0.0.0 0.0.0.0 |
| .Ed |
| .Pp |
| .It |
| In most cases, your ISP will also be your default router. |
| If this is the case, add the line |
| .Bd -literal -offset indent |
| add default HISADDR |
| .Ed |
| .Pp |
| to |
| .Pa /etc/ppp/ppp.conf |
| (or to |
| .Pa /etc/ppp/ppp.linkup |
| for setups that do not use |
| .Fl auto |
| mode). |
| .Pp |
| This tells |
| .Nm |
| to add a default route to whatever the peer address is |
| (10.0.0.2 in this example). |
| This route is |
| .Sq sticky , |
| meaning that should the value of |
| .Dv HISADDR |
| change, the route will be updated accordingly. |
| .It |
| If your provider requests that you use PAP/CHAP authentication methods, add |
| the next lines to your |
| .Pa /etc/ppp/ppp.conf |
| file: |
| .Bd -literal -offset indent |
| set authname MyName |
| set authkey MyPassword |
| .Ed |
| .Pp |
| Both are accepted by default, so |
| .Nm |
| will provide whatever your ISP requires. |
| .Pp |
| It should be noted that a login script is rarely (if ever) required |
| when PAP or CHAP are in use. |
| .It |
| Ask your ISP to authenticate your nameserver address(es) with the line |
| .Bd -literal -offset indent |
| enable dns |
| .Ed |
| .Pp |
| Do |
| .Em NOT |
| do this if you are running a local DNS unless you also either use |
| .Dq resolv readonly |
| or have |
| .Dq resolv restore |
| in |
| .Pa /etc/ppp/ppp.linkdown , |
| as |
| .Nm |
| will simply circumvent its use by entering some nameserver lines in |
| .Pa /etc/resolv.conf . |
| .El |
| .Pp |
| Please refer to |
| .Pa /usr/share/examples/ppp/ppp.conf.sample |
| and |
| .Pa /usr/share/examples/ppp/ppp.linkup.sample |
| for some real examples. |
| The pmdemand label should be appropriate for most ISPs. |
| .Sh LOGGING FACILITY |
| .Nm |
| is able to generate the following log info either via |
| .Xr syslog 3 |
| or directly to the screen: |
| .Pp |
| .Bl -tag -width XXXXXXXXX -offset XXX -compact |
| .It Li All |
| Enable all logging facilities. |
| This generates a lot of log. |
| The most common use of 'all' is as a basis, where you remove some facilities |
| after enabling 'all' ('debug' and 'timer' are usually best disabled.) |
| .It Li Async |
| Dump async level packet in hex. |
| .It Li CBCP |
| Generate CBCP (CallBack Control Protocol) logs. |
| .It Li CCP |
| Generate a CCP packet trace. |
| .It Li Chat |
| Generate |
| .Sq dial , |
| .Sq login , |
| .Sq logout |
| and |
| .Sq hangup |
| chat script trace logs. |
| .It Li Command |
| Log commands executed either from the command line or any of the configuration |
| files. |
| .It Li Connect |
| Log Chat lines containing the string "CONNECT". |
| .It Li Debug |
| Log debug information. |
| .It Li DNS |
| Log DNS QUERY packets. |
| .It Li Filter |
| Log packets permitted by the dial filter and denied by any filter. |
| .It Li HDLC |
| Dump HDLC packet in hex. |
| .It Li ID0 |
| Log all function calls specifically made as user id 0. |
| .It Li IPCP |
| Generate an IPCP packet trace. |
| .It Li LCP |
| Generate an LCP packet trace. |
| .It Li LQM |
| Generate LQR reports. |
| .It Li Phase |
| Phase transition log output. |
| .It Li Physical |
| Dump physical level packet in hex. |
| .It Li Radius |
| Dump RADIUS information. |
| RADIUS information resulting from the link coming up or down is logged at |
| .Dq Phase |
| level unless |
| .Dq Radius |
| logging is enabled. |
| This log level is most useful for monitoring RADIUS alive information. |
| .It Li Sync |
| Dump sync level packet in hex. |
| .It Li TCP/IP |
| Dump all TCP/IP packets. |
| .It Li Timer |
| Log timer manipulation. |
| .It Li TUN |
| Include the tun device on each log line. |
| .It Li Warning |
| Output to the terminal device. |
| If there is currently no terminal, |
| output is sent to the log file using syslogs |
| .Dv LOG_WARNING . |
| .It Li Error |
| Output to both the terminal device |
| and the log file using syslogs |
| .Dv LOG_ERROR . |
| .It Li Alert |
| Output to the log file using |
| .Dv LOG_ALERT . |
| .El |
| .Pp |
| The |
| .Dq set log |
| command allows you to set the logging output level. |
| Multiple levels can be specified on a single command line. |
| The default is equivalent to |
| .Dq set log Phase . |
| .Pp |
| It is also possible to log directly to the screen. |
| The syntax is the same except that the word |
| .Dq local |
| should immediately follow |
| .Dq set log . |
| The default is |
| .Dq set log local |
| (i.e., only the un-maskable warning, error and alert output). |
| .Pp |
| If The first argument to |
| .Dq set log Op local |
| begins with a |
| .Sq + |
| or a |
| .Sq - |
| character, the current log levels are |
| not cleared, for example: |
| .Bd -literal -offset indent |
| PPP ON awfulhak> set log phase |
| PPP ON awfulhak> show log |
| Log: Phase Warning Error Alert |
| Local: Warning Error Alert |
| PPP ON awfulhak> set log +tcp/ip -warning |
| PPP ON awfulhak> set log local +command |
| PPP ON awfulhak> show log |
| Log: Phase TCP/IP Warning Error Alert |
| Local: Command Warning Error Alert |
| .Ed |
| .Pp |
| Log messages of level Warning, Error and Alert are not controllable |
| using |
| .Dq set log Op local . |
| .Pp |
| The |
| .Ar Warning |
| level is special in that it will not be logged if it can be displayed |
| locally. |
| .Sh SIGNAL HANDLING |
| .Nm |
| deals with the following signals: |
| .Bl -tag -width "USR2" |
| .It INT |
| Receipt of this signal causes the termination of the current connection |
| (if any). |
| This will cause |
| .Nm |
| to exit unless it is in |
| .Fl auto |
| or |
| .Fl ddial |
| mode. |
| .It HUP, TERM & QUIT |
| These signals tell |
| .Nm |
| to exit. |
| .It USR1 |
| This signal, tells |
| .Nm |
| to re-open any existing server socket, dropping all existing diagnostic |
| connections. |
| Sockets that could not previously be opened will be retried. |
| .It USR2 |
| This signal, tells |
| .Nm |
| to close any existing server socket, dropping all existing diagnostic |
| connections. |
| .Dv SIGUSR1 |
| can still be used to re-open the socket. |
| .El |
| .Sh MULTI-LINK PPP |
| If you wish to use more than one physical link to connect to a |
| .Em PPP |
| peer, that peer must also understand the |
| .Em MULTI-LINK PPP |
| protocol. |
| Refer to RFC 1990 for specification details. |
| .Pp |
| The peer is identified using a combination of his |
| .Dq endpoint discriminator |
| and his |
| .Dq authentication id . |
| Either or both of these may be specified. |
| It is recommended that |
| at least one is specified, otherwise there is no way of ensuring that |
| all links are actually connected to the same peer program, and some |
| confusing lock-ups may result. |
| Locally, these identification variables are specified using the |
| .Dq set enddisc |
| and |
| .Dq set authname |
| commands. |
| The |
| .Sq authname |
| (and |
| .Sq authkey ) |
| must be agreed in advance with the peer. |
| .Pp |
| Multi-link capabilities are enabled using the |
| .Dq set mrru |
| command (set maximum reconstructed receive unit). |
| Once multi-link is enabled, |
| .Nm |
| will attempt to negotiate a multi-link connection with the peer. |
| .Pp |
| By default, only one |
| .Sq link |
| is available |
| (called |
| .Sq deflink ) . |
| To create more links, the |
| .Dq clone |
| command is used. |
| This command will clone existing links, where all |
| characteristics are the same except: |
| .Bl -enum |
| .It |
| The new link has its own name as specified on the |
| .Dq clone |
| command line. |
| .It |
| The new link is an |
| .Sq interactive |
| link. |
| Its mode may subsequently be changed using the |
| .Dq set mode |
| command. |
| .It |
| The new link is in a |
| .Sq closed |
| state. |
| .El |
| .Pp |
| A summary of all available links can be seen using the |
| .Dq show links |
| command. |
| .Pp |
| Once a new link has been created, command usage varies. |
| All link specific commands must be prefixed with the |
| .Dq link Ar name |
| command, specifying on which link the command is to be applied. |
| When only a single link is available, |
| .Nm |
| is smart enough not to require the |
| .Dq link Ar name |
| prefix. |
| .Pp |
| Some commands can still be used without specifying a link - resulting |
| in an operation at the |
| .Sq bundle |
| level. |
| For example, once two or more links are available, the command |
| .Dq show ccp |
| will show CCP configuration and statistics at the multi-link level, and |
| .Dq link deflink show ccp |
| will show the same information at the |
| .Dq deflink |
| link level. |
| .Pp |
| Armed with this information, the following configuration might be used: |
| .Pp |
| .Bd -literal -offset indent |
| mp: |
| set timeout 0 |
| set log phase chat |
| set device /dev/cuad0 /dev/cuad1 /dev/cuad2 |
| set phone "123456789" |
| set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \\"\\" ATZ \e |
| OK-AT-OK \\\\dATDT\\\\T TIMEOUT 45 CONNECT" |
| set login |
| set ifaddr 10.0.0.1/0 10.0.0.2/0 0.0.0.0 0.0.0.0 |
| set authname ppp |
| set authkey ppppassword |
| |
| set mrru 1500 |
| clone 1,2,3 # Create 3 new links - duplicates of the default |
| link deflink remove # Delete the default link (called ``deflink'') |
| .Ed |
| .Pp |
| Note how all cloning is done at the end of the configuration. |
| Usually, the link will be configured first, then cloned. |
| If you wish all links |
| to be up all the time, you can add the following line to the end of your |
| configuration. |
| .Pp |
| .Bd -literal -offset indent |
| link 1,2,3 set mode ddial |
| .Ed |
| .Pp |
| If you want the links to dial on demand, this command could be used: |
| .Pp |
| .Bd -literal -offset indent |
| link * set mode auto |
| .Ed |
| .Pp |
| Links may be tied to specific names by removing the |
| .Dq set device |
| line above, and specifying the following after the |
| .Dq clone |
| command: |
| .Pp |
| .Bd -literal -offset indent |
| link 1 set device /dev/cuad0 |
| link 2 set device /dev/cuad1 |
| link 3 set device /dev/cuad2 |
| .Ed |
| .Pp |
| Use the |
| .Dq help |
| command to see which commands require context (using the |
| .Dq link |
| command), which have optional |
| context and which should not have any context. |
| .Pp |
| When |
| .Nm |
| has negotiated |
| .Em MULTI-LINK |
| mode with the peer, it creates a local domain socket in the |
| .Pa /var/run |
| directory. |
| This socket is used to pass link information (including |
| the actual link file descriptor) between different |
| .Nm |
| invocations. |
| This facilitates |
| .Nm Ns No 's |
| ability to be run from a |
| .Xr getty 8 |
| or directly from |
| .Pa /etc/gettydefs |
| (using the |
| .Sq pp= |
| capability), without needing to have initial control of the serial |
| line. |
| Once |
| .Nm |
| negotiates multi-link mode, it will pass its open link to any |
| already running process. |
| If there is no already running process, |
| .Nm |
| will act as the master, creating the socket and listening for new |
| connections. |
| .Sh PPP COMMAND LIST |
| This section lists the available commands and their effect. |
| They are usable either from an interactive |
| .Nm |
| session, from a configuration file or from a |
| .Xr pppctl 8 |
| or |
| .Xr telnet 1 |
| session. |
| .Bl -tag -width 2n |
| .It accept|deny|enable|disable Ar option.... |
| These directives tell |
| .Nm |
| how to negotiate the initial connection with the peer. |
| Each |
| .Dq option |
| has a default of either accept or deny and enable or disable. |
| .Dq Accept |
| means that the option will be ACK'd if the peer asks for it. |
| .Dq Deny |
| means that the option will be NAK'd if the peer asks for it. |
| .Dq Enable |
| means that the option will be requested by us. |
| .Dq Disable |
| means that the option will not be requested by us. |
| .Pp |
| .Dq Option |
| may be one of the following: |
| .Bl -tag -width 2n |
| .It acfcomp |
| Default: Enabled and Accepted. |
| ACFComp stands for Address and Control Field Compression. |
| Non LCP packets will usually have an address |
| field of 0xff (the All-Stations address) and a control field of |
| 0x03 (the Unnumbered Information command). |
| If this option is |
| negotiated, these two bytes are simply not sent, thus minimising |
| traffic. |
| .Pp |
| See |
| .Pa rfc1662 |
| for details. |
| .It chap Ns Op \&05 |
| Default: Disabled and Accepted. |
| CHAP stands for Challenge Handshake Authentication Protocol. |
| Only one of CHAP and PAP (below) may be negotiated. |
| With CHAP, the authenticator sends a "challenge" message to its peer. |
| The peer uses a one-way hash function to encrypt the |
| challenge and sends the result back. |
| The authenticator does the same, and compares the results. |
| The advantage of this mechanism is that no |
| passwords are sent across the connection. |
| A challenge is made when the connection is first made. |
| Subsequent challenges may occur. |
| If you want to have your peer authenticate itself, you must |
| .Dq enable chap . |
| in |
| .Pa /etc/ppp/ppp.conf , |
| and have an entry in |
| .Pa /etc/ppp/ppp.secret |
| for the peer. |
| .Pp |
| When using CHAP as the client, you need only specify |
| .Dq AuthName |
| and |
| .Dq AuthKey |
| in |
| .Pa /etc/ppp/ppp.conf . |
| CHAP is accepted by default. |
| Some |
| .Em PPP |
| implementations use "MS-CHAP" rather than MD5 when encrypting the |
| challenge. |
| MS-CHAP is a combination of MD4 and DES. |
| If |
| .Nm |
| was built on a machine with DES libraries available, it will respond |
| to MS-CHAP authentication requests, but will never request them. |
| .It deflate |
| Default: Enabled and Accepted. |
| This option decides if deflate |
| compression will be used by the Compression Control Protocol (CCP). |
| This is the same algorithm as used by the |
| .Xr gzip 1 |
| program. |
| Note: There is a problem negotiating |
| .Ar deflate |
| capabilities with |
| .Xr pppd 8 |
| - a |
| .Em PPP |
| implementation available under many operating systems. |
| .Nm pppd |
| (version 2.3.1) incorrectly attempts to negotiate |
| .Ar deflate |
| compression using type |
| .Em 24 |
| as the CCP configuration type rather than type |
| .Em 26 |
| as specified in |
| .Pa rfc1979 . |
| Type |
| .Ar 24 |
| is actually specified as |
| .Dq PPP Magna-link Variable Resource Compression |
| in |
| .Pa rfc1975 ! |
| .Nm |
| is capable of negotiating with |
| .Nm pppd , |
| but only if |
| .Dq deflate24 |
| is |
| .Ar enable Ns No d |
| and |
| .Ar accept Ns No ed . |
| .It deflate24 |
| Default: Disabled and Denied. |
| This is a variance of the |
| .Ar deflate |
| option, allowing negotiation with the |
| .Xr pppd 8 |
| program. |
| Refer to the |
| .Ar deflate |
| section above for details. |
| It is disabled by default as it violates |
| .Pa rfc1975 . |
| .It dns |
| Default: Disabled and Denied. |
| This option allows DNS negotiation. |
| .Pp |
| If |
| .Dq enable Ns No d, |
| .Nm |
| will request that the peer confirms the entries in |
| .Pa /etc/resolv.conf . |
| If the peer NAKs our request (suggesting new IP numbers), |
| .Pa /etc/resolv.conf |
| is updated and another request is sent to confirm the new entries. |
| .Pp |
| If |
| .Dq accept Ns No ed, |
| .Nm |
| will answer any DNS queries requested by the peer rather than rejecting |
| them. |
| The answer is taken from |
| .Pa /etc/resolv.conf |
| unless the |
| .Dq set dns |
| command is used as an override. |
| .It enddisc |
| Default: Enabled and Accepted. |
| This option allows control over whether we |
| negotiate an endpoint discriminator. |
| We only send our discriminator if |
| .Dq set enddisc |
| is used and |
| .Ar enddisc |
| is enabled. |
| We reject the peers discriminator if |
| .Ar enddisc |
| is denied. |
| .It LANMan|chap80lm |
| Default: Disabled and Accepted. |
| The use of this authentication protocol |
| is discouraged as it partially violates the authentication protocol by |
| implementing two different mechanisms (LANMan & NT) under the guise of |
| a single CHAP type (0x80). |
| .Dq LANMan |
| uses a simple DES encryption mechanism and is the least secure of the |
| CHAP alternatives (although is still more secure than PAP). |
| .Pp |
| Refer to the |
| .Dq MSChap |
| description below for more details. |
| .It lqr |
| Default: Disabled and Accepted. |
| This option decides if Link Quality Requests will be sent or accepted. |
| LQR is a protocol that allows |
| .Nm |
| to determine that the link is down without relying on the modems |
| carrier detect. |
| When LQR is enabled, |
| .Nm |
| sends the |
| .Em QUALPROTO |
| option (see |
| .Dq set lqrperiod |
| below) as part of the LCP request. |
| If the peer agrees, both sides will |
| exchange LQR packets at the agreed frequency, allowing detailed link |
| quality monitoring by enabling LQM logging. |
| If the peer does not agree, and if the |
| .Dq echo |
| option is enabled, |
| .Nm |
| will send |
| .Em LCP ECHO |
| requests instead. |
| These packets pass no information of interest, but they |
| .Em MUST |
| be replied to by the peer. |
| .Pp |
| Whether using |
| .Em LQR |
| or |
| .Em LCP ECHO , |
| .Nm |
| will abruptly drop the connection if 5 unacknowledged packets have been |
| sent rather than sending a 6th. |
| A message is logged at the |
| .Em PHASE |
| level, and any appropriate |
| .Dq reconnect |
| values are honoured as if the peer were responsible for dropping the |
| connection. |
| .Pp |
| Refer to the |
| .Dq enable echo |
| command description for differences in behaviour prior to |
| .Nm |
| version 3.4.2. |
| .It mppe |
| Default: Enabled and Accepted. |
| This is Microsoft Point to Point Encryption scheme. |
| MPPE key size can be |
| 40-, 56- and 128-bits. |
| Refer to |
| .Dq set mppe |
| command. |
| .It MSChapV2|chap81 |
| Default: Disabled and Accepted. |
| It is very similar to standard CHAP (type 0x05) |
| except that it issues challenges of a fixed 16 bytes in length and uses a |
| combination of MD4, SHA-1 and DES to encrypt the challenge rather than using the |
| standard MD5 mechanism. |
| .It MSChap|chap80nt |
| Default: Disabled and Accepted. |
| The use of this authentication protocol |
| is discouraged as it partially violates the authentication protocol by |
| implementing two different mechanisms (LANMan & NT) under the guise of |
| a single CHAP type (0x80). |
| It is very similar to standard CHAP (type 0x05) |
| except that it issues challenges of a fixed 8 bytes in length and uses a |
| combination of MD4 and DES to encrypt the challenge rather than using the |
| standard MD5 mechanism. |
| CHAP type 0x80 for LANMan is also supported - see |
| .Dq enable LANMan |
| for details. |
| .Pp |
| Because both |
| .Dq LANMan |
| and |
| .Dq NT |
| use CHAP type 0x80, when acting as authenticator with both |
| .Dq enable Ns No d , |
| .Nm |
| will rechallenge the peer up to three times if it responds using the wrong |
| one of the two protocols. |
| This gives the peer a chance to attempt using both protocols. |
| .Pp |
| Conversely, when |
| .Nm |
| acts as the authenticatee with both protocols |
| .Dq accept Ns No ed , |
| the protocols are used alternately in response to challenges. |
| .Pp |
| Note: If only LANMan is enabled, |
| .Xr pppd 8 |
| (version 2.3.5) misbehaves when acting as authenticatee. |
| It provides both |
| the NT and the LANMan answers, but also suggests that only the NT answer |
| should be used. |
| .It pap |
| Default: Disabled and Accepted. |
| PAP stands for Password Authentication Protocol. |
| Only one of PAP and CHAP (above) may be negotiated. |
| With PAP, the ID and Password are sent repeatedly to the peer until |
| authentication is acknowledged or the connection is terminated. |
| This is a rather poor security mechanism. |
| It is only performed when the connection is first established. |
| If you want to have your peer authenticate itself, you must |
| .Dq enable pap . |
| in |
| .Pa /etc/ppp/ppp.conf , |
| and have an entry in |
| .Pa /etc/ppp/ppp.secret |
| for the peer (although see the |
| .Dq passwdauth |
| and |
| .Dq set radius |
| options below). |
| .Pp |
| When using PAP as the client, you need only specify |
| .Dq AuthName |
| and |
| .Dq AuthKey |
| in |
| .Pa /etc/ppp/ppp.conf . |
| PAP is accepted by default. |
| .It pred1 |
| Default: Enabled and Accepted. |
| This option decides if Predictor 1 |
| compression will be used by the Compression Control Protocol (CCP). |
| .It protocomp |
| Default: Enabled and Accepted. |
| This option is used to negotiate |
| PFC (Protocol Field Compression), a mechanism where the protocol |
| field number is reduced to one octet rather than two. |
| .It shortseq |
| Default: Enabled and Accepted. |
| This option determines if |
| .Nm |
| will request and accept requests for short |
| (12 bit) |
| sequence numbers when negotiating multi-link mode. |
| This is only applicable if our MRRU is set (thus enabling multi-link). |
| .It vjcomp |
| Default: Enabled and Accepted. |
| This option determines if Van Jacobson header compression will be used. |
| .El |
| .Pp |
| The following options are not actually negotiated with the peer. |
| Therefore, accepting or denying them makes no sense. |
| .Bl -tag -width 2n |
| .It echo |
| Default: Disabled. |
| When this option is enabled, |
| .Nm |
| will send |
| .Em LCP ECHO |
| requests to the peer at the frequency defined by |
| .Dq echoperiod . |
| Note, |
| .Em LQR |
| requests will supersede |
| .Em LCP ECHO |
| requests if enabled and negotiated. |
| See |
| .Dq set lqrperiod |
| below for details. |
| .Pp |
| Prior to |
| .Nm |
| version 3.4.2, |
| .Dq echo |
| was considered enabled if lqr was enabled and negotiated, otherwise it was |
| considered disabled. |
| For the same behaviour, it is now necessary to |
| .Dq enable lqr echo |
| rather than just |
| .Dq enable lqr . |
| .It filter-decapsulation |
| Default: Disabled. |
| When this option is enabled, |
| .Nm |
| will examine UDP frames to see if they actually contain a |
| .Em PPP |
| frame as their payload. |
| If this is the case, all filters will operate on the payload rather |
| than the actual packet. |
| .Pp |
| This is useful if you want to send PPPoUDP traffic over a |
| .Em PPP |
| link, but want that link to do smart things with the real data rather than |
| the UDP wrapper. |
| .Pp |
| The UDP frame payload must not be compressed in any way, otherwise |
| .Nm |
| will not be able to interpret it. |
| It is therefore recommended that you |
| .Ic disable vj pred1 deflate |
| and |
| .Ic deny vj pred1 deflate |
| in the configuration for the |
| .Nm |
| invocation with the udp link. |
| .It force-scripts |
| Default: Disabled. |
| Forces execution of the configured chat scripts in |
| .Dv direct |
| and |
| .Dv dedicated |
| modes. |
| .It idcheck |
| Default: Enabled. |
| When |
| .Nm |
| exchanges low-level LCP, CCP and IPCP configuration traffic, the |
| .Em Identifier |
| field of any replies is expected to be the same as that of the request. |
| By default, |
| .Nm |
| drops any reply packets that do not contain the expected identifier |
| field, reporting the fact at the respective log level. |
| If |
| .Ar idcheck |
| is disabled, |
| .Nm |
| will ignore the identifier field. |
| .It iface-alias |
| Default: Enabled if |
| .Fl nat |
| is specified. |
| This option simply tells |
| .Nm |
| to add new interface addresses to the interface rather than replacing them. |
| The option can only be enabled if network address translation is enabled |
| .Pq Dq nat enable yes . |
| .Pp |
| With this option enabled, |
| .Nm |
| will pass traffic for old interface addresses through the NAT |
| ifdef({LOCALNAT},{engine,},{engine |
| (see |
| .Xr libalias 3 ) ,}) |
| resulting in the ability (in |
| .Fl auto |
| mode) to properly connect the process that caused the PPP link to |
| come up in the first place. |
| .Pp |
| Disabling NAT with |
| .Dq nat enable no |
| will also disable |
| .Sq iface-alias . |
| .It ipcp |
| Default: Enabled. |
| This option allows |
| .Nm |
| to attempt to negotiate IP control protocol capabilities and if |
| successful to exchange IP datagrams with the peer. |
| .It ipv6cp |
| Default: Enabled. |
| This option allows |
| .Nm |
| to attempt to negotiate IPv6 control protocol capabilities and if |
| successful to exchange IPv6 datagrams with the peer. |
| .It keep-session |
| Default: Disabled. |
| When |
| .Nm |
| runs as a Multi-link server, a different |
| .Nm |
| instance initially receives each connection. |
| After determining that |
| the link belongs to an already existing bundle (controlled by another |
| .Nm |
| invocation), |
| .Nm |
| will transfer the link to that process. |
| .Pp |
| If the link is a tty device or if this option is enabled, |
| .Nm |
| will not exit, but will change its process name to |
| .Dq session owner |
| and wait for the controlling |
| .Nm |
| to finish with the link and deliver a signal back to the idle process. |
| This prevents the confusion that results from |
| .Nm Ns No 's |
| parent considering the link resource available again. |
| .Pp |
| For tty devices that have entries in |
| .Pa /etc/ttys , |
| this is necessary to prevent another |
| .Xr getty 8 |
| from being started, and for program links such as |
| .Xr sshd 8 , |
| it prevents |
| .Xr sshd 8 |
| from exiting due to the death of its child. |
| As |
| .Nm |
| cannot determine its parents requirements (except for the tty case), this |
| option must be enabled manually depending on the circumstances. |
| .It loopback |
| Default: Enabled. |
| When |
| .Ar loopback |
| is enabled, |
| .Nm |
| will automatically loop back packets being sent |
| out with a destination address equal to that of the |
| .Em PPP |
| interface. |
| If disabled, |
| .Nm |
| will send the packet, probably resulting in an ICMP redirect from |
| the other end. |
| It is convenient to have this option enabled when |
| the interface is also the default route as it avoids the necessity |
| of a loopback route. |
| .It NAS-IP-Address |
| Default: Enabled. |
| This option controls whether |
| .Nm |
| sends the |
| .Dq NAS-IP-Address |
| attribute to the RADIUS server when RADIUS is in use |
| .Pq see Dq set radius . |
| .Pp |
| Note, at least one of |
| .Dq NAS-IP-Address |
| and |
| .Dq NAS-Identifier |
| must be enabled. |
| .Pp |
| Versions of |
| .Nm |
| prior to version 3.4.1 did not send the |
| .Dq NAS-IP-Address |
| attribute as it was reported to break the Radiator RADIUS server. |
| As the latest rfc (2865) no longer hints that only one of |
| .Dq NAS-IP-Address |
| and |
| .Dq NAS-Identifier |
| should be sent (as rfc 2138 did), |
| .Nm |
| now sends both and leaves it up to the administrator that chooses to use |
| bad RADIUS implementations to |
| .Dq disable NAS-IP-Address . |
| .It NAS-Identifier |
| Default: Enabled. |
| This option controls whether |
| .Nm |
| sends the |
| .Dq NAS-Identifier |
| attribute to the RADIUS server when RADIUS is in use |
| .Pq see Dq set radius . |
| .Pp |
| Note, at least one of |
| .Dq NAS-IP-Address |
| and |
| .Dq NAS-Identifier |
| must be enabled. |
| .It passwdauth |
| Default: Disabled. |
| Enabling this option will tell the PAP authentication |
| code to use the password database (see |
| .Xr passwd 5 ) |
| to authenticate the caller if they cannot be found in the |
| .Pa /etc/ppp/ppp.secret |
| file. |
| .Pa /etc/ppp/ppp.secret |
| is always checked first. |
| If you wish to use passwords from |
| .Xr passwd 5 , |
| but also to specify an IP number or label for a given client, use |
| .Dq \&* |
| as the client password in |
| .Pa /etc/ppp/ppp.secret . |
| .It proxy |
| Default: Disabled. |
| Enabling this option will tell |
| .Nm |
| to proxy ARP for the peer. |
| This means that |
| .Nm |
| will make an entry in the ARP table using |
| .Dv HISADDR |
| and the |
| .Dv MAC |
| address of the local network in which |
| .Dv HISADDR |
| appears. |
| This allows other machines connecteed to the LAN to talk to |
| the peer as if the peer itself was connected to the LAN. |
| The proxy entry cannot be made unless |
| .Dv HISADDR |
| is an address from a LAN. |
| .It proxyall |
| Default: Disabled. |
| Enabling this will tell |
| .Nm |
| to add proxy arp entries for every IP address in all class C or |
| smaller subnets routed via the tun interface. |
| .Pp |
| Proxy arp entries are only made for sticky routes that are added |
| using the |
| .Dq add |
| command. |
| No proxy arp entries are made for the interface address itself |
| (as created by the |
| .Dq set ifaddr |
| command). |
| .It sroutes |
| Default: Enabled. |
| When the |
| .Dq add |
| command is used with the |
| .Dv HISADDR , |
| .Dv MYADDR , |
| .Dv HISADDR6 |
| or |
| .Dv MYADDR6 |
| values, entries are stored in the |
| .Sq sticky route |
| list. |
| Each time these variables change, this list is re-applied to the routing table. |
| .Pp |
| Disabling this option will prevent the re-application of sticky routes, |
| although the |
| .Sq stick route |
| list will still be maintained. |
| .It Op tcp Ns Xo |
| .No mssfixup |
| .Xc |
| Default: Enabled. |
| This option tells |
| .Nm |
| to adjust TCP SYN packets so that the maximum receive segment |
| size is not greater than the amount allowed by the interface MTU. |
| .It throughput |
| Default: Enabled. |
| This option tells |
| .Nm |
| to gather throughput statistics. |
| Input and output is sampled over |
| a rolling 5 second window, and current, best and total figures are retained. |
| This data is output when the relevant |
| .Em PPP |
| layer shuts down, and is also available using the |
| .Dq show |
| command. |
| Throughput statistics are available at the |
| .Dq IPCP |
| and |
| .Dq physical |
| levels. |
| .It utmp |
| Default: Enabled. |
| Normally, when a user is authenticated using PAP or CHAP, and when |
| .Nm |
| is running in |
| .Fl direct |
| mode, an entry is made in the utmp and wtmp files for that user. |
| Disabling this option will tell |
| .Nm |
| not to make any utmp or wtmp entries. |
| This is usually only necessary if |
| you require the user to both login and authenticate themselves. |
| .El |
| .Pp |
| .It add Ns Xo |
| .Op !\& |
| .Ar dest Ns Op / Ns Ar nn |
| .Op Ar mask |
| .Op Ar gateway |
| .Xc |
| .Ar Dest |
| is the destination IP address. |
| The netmask is specified either as a number of bits with |
| .Ar /nn |
| or as an IP number using |
| .Ar mask . |
| .Ar 0 0 |
| or simply |
| .Ar 0 |
| with no mask refers to the default route. |
| It is also possible to use the literal name |
| .Sq default |
| instead of |
| .Ar 0 . |
| .Ar Gateway |
| is the next hop gateway to get to the given |
| .Ar dest |
| machine/network. |
| Refer to the |
| .Xr route 8 |
| command for further details. |
| .Pp |
| It is possible to use the symbolic names |
| .Sq MYADDR , |
| .Sq HISADDR , |
| .Sq MYADDR6 |
| or |
| .Sq HISADDR6 |
| as the destination, and |
| .Sq HISADDR |
| or |
| .Sq HISADDR6 |
| as the |
| .Ar gateway . |
| .Sq MYADDR |
| is replaced with the interface IP address, |
| .Sq HISADDR |
| is replaced with the interface IP destination (peer) address, |
| .Sq MYADDR6 |
| is replaced with the interface IPv6 address, and |
| .Sq HISADDR6 |
| is replaced with the interface IPv6 destination address, |
| .Pp |
| If the |
| .Ar add!\& |
| command is used |
| (note the trailing |
| .Dq !\& ) , |
| then if the route already exists, it will be updated as with the |
| .Sq route change |
| command (see |
| .Xr route 8 |
| for further details). |
| .Pp |
| Routes that contain the |
| .Dq HISADDR , |
| .Dq MYADDR , |
| .Dq HISADDR6 , |
| .Dq MYADDR6 , |
| .Dq DNS0 , |
| or |
| .Dq DNS1 |
| constants are considered |
| .Sq sticky . |
| They are stored in a list (use |
| .Dq show ncp |
| to see the list), and each time the value of one of these variables |
| changes, the appropriate routing table entries are updated. |
| This facility may be disabled using |
| .Dq disable sroutes . |
| .It allow Ar command Op Ar args |
| This command controls access to |
| .Nm |
| and its configuration files. |
| It is possible to allow user-level access, |
| depending on the configuration file label and on the mode that |
| .Nm |
| is being run in. |
| For example, you may wish to configure |
| .Nm |
| so that only user |
| .Sq fred |
| may access label |
| .Sq fredlabel |
| in |
| .Fl background |
| mode. |
| .Pp |
| User id 0 is immune to these commands. |
| .Bl -tag -width 2n |
| .It allow user Ns Xo |
| .Op s |
| .Ar logname Ns No ... |
| .Xc |
| By default, only user id 0 is allowed access to |
| .Nm . |
| If this command is used, all of the listed users are allowed access to |
| the section in which the |
| .Dq allow users |
| command is found. |
| The |
| .Sq default |
| section is always checked first (even though it is only ever automatically |
| loaded at startup). |
| .Dq allow users |
| commands are cumulative in a given section, but users allowed in any given |
| section override users allowed in the default section, so it is possible to |
| allow users access to everything except a given label by specifying default |
| users in the |
| .Sq default |
| section, and then specifying a new user list for that label. |
| .Pp |
| If user |
| .Sq * |
| is specified, access is allowed to all users. |
| .It allow mode Ns Xo |
| .Op s |
| .Ar mode Ns No ... |
| .Xc |
| By default, access using any |
| .Nm |
| mode is possible. |
| If this command is used, it restricts the access |
| .Ar modes |
| allowed to load the label under which this command is specified. |
| Again, as with the |
| .Dq allow users |
| command, each |
| .Dq allow modes |
| command overrides any previous settings, and the |
| .Sq default |
| section is always checked first. |
| .Pp |
| Possible modes are: |
| .Sq interactive , |
| .Sq auto , |
| .Sq direct , |
| .Sq dedicated , |
| .Sq ddial , |
| .Sq background |
| and |
| .Sq * . |
| .Pp |
| When running in multi-link mode, a section can be loaded if it allows |
| .Em any |
| of the currently existing line modes. |
| .El |
| .Pp |
| .It nat Ar command Op Ar args |
| This command allows the control of the network address translation (also |
| known as masquerading or IP aliasing) facilities that are built into |
| .Nm . |
| NAT is done on the external interface only, and is unlikely to make sense |
| if used with the |
| .Fl direct |
| flag. |
| .Pp |
| If nat is enabled on your system (it may be omitted at compile time), |
| the following commands are possible: |
| .Bl -tag -width 2n |
| .It nat enable yes|no |
| This command either switches network address translation on or turns it off. |
| The |
| .Fl nat |
| command line flag is synonymous with |
| .Dq nat enable yes . |
| .It nat addr Op Ar addr_local addr_alias |
| This command allows data for |
| .Ar addr_alias |
| to be redirected to |
| .Ar addr_local . |
| It is useful if you own a small number of real IP numbers that |
| you wish to map to specific machines behind your gateway. |
| .It nat deny_incoming yes|no |
| If set to yes, this command will refuse all incoming packets where an |
| aliasing link does not already exist. |
| ifdef({LOCALNAT},{},{Refer to the |
| .Sx CONCEPTUAL BACKGROUND |
| section of |
| .Xr libalias 3 |
| for a description of what an |
| .Dq aliasing link |
| is. |
| })dnl |
| .Pp |
| It should be noted under what circumstances an aliasing link is |
| ifdef({LOCALNAT},{created.},{created by |
| .Xr libalias 3 .}) |
| It may be necessary to further protect your network from outside |
| connections using the |
| .Dq set filter |
| or |
| .Dq nat target |
| commands. |
| .It nat help|? |
| This command gives a summary of available nat commands. |
| .It nat log yes|no |
| This option causes various NAT statistics and information to |
| be logged to the file |
| .Pa /var/log/alias.log . |
| .It nat port Ar proto Ar targetIP Ns Xo |
| .No : Ns Ar targetPort Ns |
| .Oo |
| .No - Ns Ar targetPort |
| .Oc Ar aliasPort Ns |
| .Oo |
| .No - Ns Ar aliasPort |
| .Oc Oo Ar remoteIP : Ns |
| .Ar remotePort Ns |
| .Oo |
| .No - Ns Ar remotePort |
| .Oc Ns |
| .Oc |
| .Xc |
| This command causes incoming |
| .Ar proto |
| connections to |
| .Ar aliasPort |
| to be redirected to |
| .Ar targetPort |
| on |
| .Ar targetIP . |
| .Ar proto |
| is either |
| .Dq tcp |
| or |
| .Dq udp . |
| .Pp |
| A range of port numbers may be specified as shown above. |
| The ranges must be of the same size. |
| .Pp |
| If |
| .Ar remoteIP |
| is specified, only data coming from that IP number is redirected. |
| .Ar remotePort |
| must either be |
| .Dq 0 |
| (indicating any source port) |
| or a range of ports the same size as the other ranges. |
| .Pp |
| This option is useful if you wish to run things like Internet phone on |
| machines behind your gateway, but is limited in that connections to only |
| one interior machine per source machine and target port are possible. |
| .It nat proto Ar proto localIP Oo |
| .Ar publicIP Op Ar remoteIP |
| .Oc |
| This command tells |
| .Nm |
| to redirect packets of protocol type |
| .Ar proto |
| (see |
| .Xr protocols 5 ) |
| to the internal address |
| .Ar localIP . |
| .Pp |
| If |
| .Ar publicIP |
| is specified, only packets destined for that address are matched, |
| otherwise the default alias address is used. |
| .Pp |
| If |
| .Ar remoteIP |
| is specified, only packets matching that source address are matched, |
| .Pp |
| This command is useful for redirecting tunnel endpoints to an internal machine, |
| for example: |
| .Pp |
| .Dl nat proto ipencap 10.0.0.1 |
| .It "nat proxy cmd" Ar arg Ns No ... |
| This command tells |
| .Nm |
| to proxy certain connections, redirecting them to a given server. |
| ifdef({LOCALNAT},{},{Refer to the description of |
| .Fn PacketAliasProxyRule |
| in |
| .Xr libalias 3 |
| for details of the available commands. |
| })dnl |
| .It nat punch_fw Op Ar base count |
| This command tells |
| .Nm |
| to punch holes in the firewall for FTP or IRC DCC connections. |
| This is done dynamically by installing termporary firewall rules which |
| allow a particular connection (and only that connection) to go through |
| the firewall. |
| The rules are removed once the corresponding connection terminates. |
| .Pp |
| A maximum of |
| .Ar count |
| rules starting from rule number |
| .Ar base |
| will be used for punching firewall holes. |
| The range will be cleared when the |
| .Dq nat punch_fw |
| command is run. |
| .Pp |
| If no arguments are given, firewall punching is disabled. |
| .It nat skinny_port Op Ar port |
| This command tells |
| .Nm |
| which TCP port is used by the Skinny Station protocol. |
| Skinny is used by |
| Cisco IP phones to communicate with Cisco Call Managers to setup voice |
| over IP calls. |
| The typical port used by Skinny is 2000. |
| .Pp |
| If no argument is given, skinny aliasing is disabled. |
| .It nat same_ports yes|no |
| When enabled, this command will tell the network address translation engine to |
| attempt to avoid changing the port number on outgoing packets. |
| This is useful |
| if you want to support protocols such as RPC and LPD which require |
| connections to come from a well known port. |
| .It nat target Op Ar address |
| Set the given target address or clear it if no address is given. |
| The target address is used |
| ifdef({LOCALNAT},{},{by libalias })dnl |
| to specify how to NAT incoming packets by default. |
| If a target address is not set or if |
| .Dq default |
| is given, packets are not altered and are allowed to route to the internal |
| network. |
| .Pp |
| The target address may be set to |
| .Dq MYADDR , |
| in which case |
| ifdef({LOCALNAT},{all packets will be redirected}, |
| {libalias will redirect all packets}) |
| to the interface address. |
| .It nat use_sockets yes|no |
| When enabled, this option tells the network address translation engine to |
| create a socket so that it can guarantee a correct incoming ftp data or |
| IRC connection. |
| .It nat unregistered_only yes|no |
| Only alter outgoing packets with an unregistered source address. |
| According to RFC 1918, unregistered source addresses |
| are 10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16. |
| .El |
| .Pp |
| These commands are also discussed in the file |
| .Pa README.nat |
| which comes with the source distribution. |
| .Pp |
| .It Op !\& Ns Xo |
| .No bg Ar command |
| .Xc |
| The given |
| .Ar command |
| is executed in the background with the following words replaced: |
| .Bl -tag -width COMPILATIONDATE |
| .It Li AUTHNAME |
| This is replaced with the local |
| .Ar authname |
| value. |
| See the |
| .Dq set authname |
| command below. |
| .It Li COMPILATIONDATE |
| In previous software revisions, this was replaced with the date on which |
| .Nm |
| was compiled. |
| This is no longer supported as it breaks the ability to recompile the same |
| code to produce an exact duplicate of a previous compilation. |
| .It Li DNS0 & DNS1 |
| These are replaced with the primary and secondary nameserver IP numbers. |
| If nameservers are negotiated by IPCP, the values of these macros will change. |
| .It Li ENDDISC |
| This is replaced with the local endpoint discriminator value. |
| See the |
| .Dq set enddisc |
| command below. |
| .It Li HISADDR |
| This is replaced with the peers IP number. |
| .It Li HISADDR6 |
| This is replaced with the peers IPv6 number. |
| .It Li INTERFACE |
| This is replaced with the name of the interface that is in use. |
| .It Li IPOCTETSIN |
| This is replaced with the number of IP bytes received since the connection |
| was established. |
| .It Li IPOCTETSOUT |
| This is replaced with the number of IP bytes sent since the connection |
| was established. |
| .It Li IPPACKETSIN |
| This is replaced with the number of IP packets received since the connection |
| was established. |
| .It Li IPPACKETSOUT |
| This is replaced with the number of IP packets sent since the connection |
| was established. |
| .It Li IPV6OCTETSIN |
| This is replaced with the number of IPv6 bytes received since the connection |
| was established. |
| .It Li IPV6OCTETSOUT |
| This is replaced with the number of IPv6 bytes sent since the connection |
| was established. |
| .It Li IPV6PACKETSIN |
| This is replaced with the number of IPv6 packets received since the connection |
| was established. |
| .It Li IPV6PACKETSOUT |
| This is replaced with the number of IPv6 packets sent since the connection |
| was established. |
| .It Li LABEL |
| This is replaced with the last label name used. |
| A label may be specified on the |
| .Nm |
| command line, via the |
| .Dq load |
| or |
| .Dq dial |
| commands and in the |
| .Pa ppp.secret |
| file. |
| .It Li MYADDR |
| This is replaced with the IP number assigned to the local interface. |
| .It Li MYADDR6 |
| This is replaced with the IPv6 number assigned to the local interface. |
| .It Li OCTETSIN |
| This is replaced with the number of bytes received since the connection |
| was established. |
| .It Li OCTETSOUT |
| This is replaced with the number of bytes sent since the connection |
| was established. |
| .It Li PACKETSIN |
| This is replaced with the number of packets received since the connection |
| was established. |
| .It Li PACKETSOUT |
| This is replaced with the number of packets sent since the connection |
| was established. |
| .It Li PEER_ENDDISC |
| This is replaced with the value of the peers endpoint discriminator. |
| .It Li PROCESSID |
| This is replaced with the current process id. |
| .It Li SOCKNAME |
| This is replaced with the name of the diagnostic socket. |
| .It Li UPTIME |
| This is replaced with the bundle uptime in HH:MM:SS format. |
| .It Li USER |
| This is replaced with the username that has been authenticated with PAP or |
| CHAP. |
| Normally, this variable is assigned only in -direct mode. |
| This value is available irrespective of whether utmp logging is enabled. |
| .It Li VERSION |
| This is replaced with the current version number of |
| .Nm . |
| .El |
| .Pp |
| These substitutions are also done by the |
| .Dq set proctitle , |
| .Dq ident |
| and |
| .Dq log |
| commands. |
| .Pp |
| If you wish to pause |
| .Nm |
| while the command executes, use the |
| .Dq shell |
| command instead. |
| .It clear physical|ipcp|ipv6 Op current|overall|peak... |
| Clear the specified throughput values at either the |
| .Dq physical , |
| .Dq ipcp |
| or |
| .Dq ipv6cp |
| level. |
| If |
| .Dq physical |
| is specified, context must be given (see the |
| .Dq link |
| command below). |
| If no second argument is given, all values are cleared. |
| .It clone Ar name Ns Xo |
| .Op \&, Ns Ar name Ns |
| .No ... |
| .Xc |
| Clone the specified link, creating one or more new links according to the |
| .Ar name |
| argument(s). |
| This command must be used from the |
| .Dq link |
| command below unless you have only got a single link (in which case that |
| link becomes the default). |
| Links may be removed using the |
| .Dq remove |
| command below. |
| .Pp |
| The default link name is |
| .Dq deflink . |
| .It close Op lcp|ccp Ns Op !\& |
| If no arguments are given, the relevant protocol layers will be brought |
| down and the link will be closed. |
| If |
| .Dq lcp |
| is specified, the LCP layer is brought down, but |
| .Nm |
| will not bring the link offline. |
| It is subsequently possible to use |
| .Dq term |
| (see below) |
| to talk to the peer machine if, for example, something like |
| .Dq slirp |
| is being used. |
| If |
| .Dq ccp |
| is specified, only the relevant compression layer is closed. |
| If the |
| .Dq !\& |
| is used, the compression layer will remain in the closed state, otherwise |
| it will re-enter the STOPPED state, waiting for the peer to initiate |
| further CCP negotiation. |
| In any event, this command does not disconnect the user from |
| .Nm |
| or exit |
| .Nm . |
| See the |
| .Dq quit |
| command below. |
| .It delete Ns Xo |
| .Op !\& |
| .Ar dest |
| .Xc |
| This command deletes the route with the given |
| .Ar dest |
| IP address. |
| If |
| .Ar dest |
| is specified as |
| .Sq ALL , |
| all non-direct entries in the routing table for the current interface, |
| and all |
| .Sq sticky route |
| entries are deleted. |
| If |
| .Ar dest |
| is specified as |
| .Sq default , |
| the default route is deleted. |
| .Pp |
| If the |
| .Ar delete!\& |
| command is used |
| (note the trailing |
| .Dq !\& ) , |
| .Nm |
| will not complain if the route does not already exist. |
| .It dial|call Op Ar label Ns Xo |
| .No ... |
| .Xc |
| This command is the equivalent of |
| .Dq load label |
| followed by |
| .Dq open , |
| and is provided for backwards compatibility. |
| .It down Op Ar lcp|ccp |
| Bring the relevant layer down ungracefully, as if the underlying layer |
| had become unavailable. |
| It is not considered polite to use this command on |
| a Finite State Machine that is in the OPEN state. |
| If no arguments are |
| supplied, the entire link is closed (or if no context is given, all links |
| are terminated). |
| If |
| .Sq lcp |
| is specified, the |
| .Em LCP |
| layer is terminated but the device is not brought offline and the link |
| is not closed. |
| If |
| .Sq ccp |
| is specified, only the relevant compression layer(s) are terminated. |
| .It help|? Op Ar command |
| Show a list of available commands. |
| If |
| .Ar command |
| is specified, show the usage string for that command. |
| .It ident Op Ar text Ns No ... |
| Identify the link to the peer using |
| .Ar text . |
| If |
| .Ar text |
| is empty, link identification is disabled. |
| It is possible to use any of the words described for the |
| .Ic bg |
| command above. |
| Refer to the |
| .Ic sendident |
| command for details of when |
| .Nm |
| identifies itself to the peer. |
| .It iface Ar command Op args |
| This command is used to control the interface used by |
| .Nm . |
| .Ar Command |
| may be one of the following: |
| .Bl -tag -width 2n |
| .It iface add Ns Xo |
| .Op !\& |
| .Ar addr Ns Op / Ns Ar bits |
| .Op Ar peer |
| .Xc |
| .It iface add Ns Xo |
| .Op !\& |
| .Ar addr |
| .Ar mask |
| .Ar peer |
| .Xc |
| Add the given |
| .Ar addr mask peer |
| combination to the interface. |
| Instead of specifying |
| .Ar mask , |
| .Ar /bits |
| can be used |
| (with no space between it and |
| .Ar addr ) . |
| If the given address already exists, the command fails unless the |
| .Dq !\& |
| is used - in which case the previous interface address entry is overwritten |
| with the new one, allowing a change of netmask or peer address. |
| .Pp |
| If only |
| .Ar addr |
| is specified, |
| .Ar bits |
| defaults to |
| .Dq 32 |
| and |
| .Ar peer |
| defaults to |
| .Dq 255.255.255.255 . |
| This address (the broadcast address) is the only duplicate peer address that |
| .Nm |
| allows. |
| .It iface clear Op INET | INET6 |
| If this command is used while |
| .Nm |
| is in the OPENED state or while in |
| .Fl auto |
| mode, all addresses except for the NCP negotiated address are deleted |
| from the interface. |
| If |
| .Nm |
| is not in the OPENED state and is not in |
| .Fl auto |
| mode, all interface addresses are deleted. |
| .Pp |
| If the INET or INET6 arguments are used, only addresses for that address |
| family are cleared. |
| .Pp |
| .It iface delete Ns Xo |
| .Op !\& Ns |
| .No |rm Ns Op !\& |
| .Ar addr |
| .Xc |
| This command deletes the given |
| .Ar addr |
| from the interface. |
| If the |
| .Dq !\& |
| is used, no error is given if the address is not currently assigned to |
| the interface (and no deletion takes place). |
| .It iface show |
| Shows the current state and current addresses for the interface. |
| It is much the same as running |
| .Dq ifconfig INTERFACE . |
| .It iface help Op Ar sub-command |
| This command, when invoked without |
| .Ar sub-command , |
| will show a list of possible |
| .Dq iface |
| sub-commands and a brief synopsis for each. |
| When invoked with |
| .Ar sub-command , |
| only the synopsis for the given sub-command is shown. |
| .El |
| .It Op data Ns Xo |
| .No link |
| .Ar name Ns Op , Ns Ar name Ns |
| .No ... Ar command Op Ar args |
| .Xc |
| This command may prefix any other command if the user wishes to |
| specify which link the command should affect. |
| This is only applicable after multiple links have been created in Multi-link |
| mode using the |
| .Dq clone |
| command. |
| .Pp |
| .Ar Name |
| specifies the name of an existing link. |
| If |
| .Ar name |
| is a comma separated list, |
| .Ar command |
| is executed on each link. |
| If |
| .Ar name |
| is |
| .Dq * , |
| .Ar command |
| is executed on all links. |
| .It load Op Ar label Ns Xo |
| .No ... |
| .Xc |
| Load the given |
| .Ar label Ns No (s) |
| from the |
| .Pa ppp.conf |
| file. |
| If |
| .Ar label |
| is not given, the |
| .Ar default |
| label is used. |
| .Pp |
| Unless the |
| .Ar label |
| section uses the |
| .Dq set mode , |
| .Dq open |
| or |
| .Dq dial |
| commands, |
| .Nm |
| will not attempt to make an immediate connection. |
| .It log Ar word Ns No ... |
| Send the given word(s) to the log file with the prefix |
| .Dq LOG: . |
| Word substitutions are done as explained under the |
| .Dq !bg |
| command above. |
| .It open Op lcp|ccp|ipcp |
| This is the opposite of the |
| .Dq close |
| command. |
| All closed links are immediately brought up apart from second and subsequent |
| .Ar demand-dial |
| links - these will come up based on the |
| .Dq set autoload |
| command that has been used. |
| .Pp |
| If the |
| .Dq lcp |
| argument is used while the LCP layer is already open, LCP will be |
| renegotiated. |
| This allows various LCP options to be changed, after which |
| .Dq open lcp |
| can be used to put them into effect. |
| After renegotiating LCP, |
| any agreed authentication will also take place. |
| .Pp |
| If the |
| .Dq ccp |
| argument is used, the relevant compression layer is opened. |
| Again, if it is already open, it will be renegotiated. |
| .Pp |
| If the |
| .Dq ipcp |
| argument is used, the link will be brought up as normal, but if |
| IPCP is already open, it will be renegotiated and the network |
| interface will be reconfigured. |
| .Pp |
| It is probably not good practice to re-open the PPP state machines |
| like this as it is possible that the peer will not behave correctly. |
| It |
| .Em is |
| however useful as a way of forcing the CCP or VJ dictionaries to be reset. |
| .It passwd Ar pass |
| Specify the password required for access to the full |
| .Nm |
| command set. |
| This password is required when connecting to the diagnostic port (see the |
| .Dq set server |
| command). |
| .Ar Pass |
| is specified on the |
| .Dq set server |
| command line. |
| The value of |
| .Ar pass |
| is not logged when |
| .Ar command |
| logging is active, instead, the literal string |
| .Sq ******** |
| is logged. |
| .It quit|bye Op all |
| If |
| .Dq quit |
| is executed from the controlling connection or from a command file, |
| ppp will exit after closing all connections. |
| Otherwise, if the user |
| is connected to a diagnostic socket, the connection is simply dropped. |
| .Pp |
| If the |
| .Ar all |
| argument is given, |
| .Nm |
| will exit despite the source of the command after closing all existing |
| connections. |
| .It remove|rm |
| This command removes the given link. |
| It is only really useful in multi-link mode. |
| A link must be in the |
| .Dv CLOSED |
| state before it is removed. |
| .It rename|mv Ar name |
| This command renames the given link to |
| .Ar name . |
| It will fail if |
| .Ar name |
| is already used by another link. |
| .Pp |
| The default link name is |
| .Sq deflink . |
| Renaming it to |
| .Sq modem , |
| .Sq cuad0 |
| or |
| .Sq USR |
| may make the log file more readable. |
| .It resolv Ar command |
| This command controls |
| .Nm Ns No 's |
| manipulation of the |
| .Xr resolv.conf 5 |
| file. |
| When |
| .Nm |
| starts up, it loads the contents of this file into memory and retains this |
| image for future use. |
| .Ar command |
| is one of the following: |
| .Bl -tag -width readonly |
| .It Em readonly |
| Treat |
| .Pa /etc/resolv.conf |
| as read only. |
| If |
| .Dq dns |
| is enabled, |
| .Nm |
| will still attempt to negotiate nameservers with the peer, making the results |
| available via the |
| .Dv DNS0 |
| and |
| .Dv DNS1 |
| macros. |
| This is the opposite of the |
| .Dq resolv writable |
| command. |
| .It Em reload |
| Reload |
| .Pa /etc/resolv.conf |
| into memory. |
| This may be necessary if for example a DHCP client overwrote |
| .Pa /etc/resolv.conf . |
| .It Em restore |
| Replace |
| .Pa /etc/resolv.conf |
| with the version originally read at startup or with the last |
| .Dq resolv reload |
| command. |
| This is sometimes a useful command to put in the |
| .Pa /etc/ppp/ppp.linkdown |
| file. |
| .It Em rewrite |
| Rewrite the |
| .Pa /etc/resolv.conf |
| file. |
| This command will work even if the |
| .Dq resolv readonly |
| command has been used. |
| It may be useful as a command in the |
| .Pa /etc/ppp/ppp.linkup |
| file if you wish to defer updating |
| .Pa /etc/resolv.conf |
| until after other commands have finished. |
| .It Em writable |
| Allow |
| .Nm |
| to update |
| .Pa /etc/resolv.conf |
| if |
| .Dq dns |
| is enabled and |
| .Nm |
| successfully negotiates a DNS. |
| This is the opposite of the |
| .Dq resolv readonly |
| command. |
| .El |
| .It save |
| This option is not (yet) implemented. |
| .It sendident |
| This command tells |
| .Nm |
| to identify itself to the peer. |
| The link must be in LCP state or higher. |
| If no identity has been set (via the |
| .Ic ident |
| command), |
| .Ic sendident |
| will fail. |
| .Pp |
| When an identity has been set, |
| .Nm |
| will automatically identify itself when it sends or receives a configure |
| reject, when negotiation fails or when LCP reaches the opened state. |
| .Pp |
| Received identification packets are logged to the LCP log (see |
| .Ic set log |
| for details) and are never responded to. |
| .It set Ns Xo |
| .Op up |
| .Ar var value |
| .Xc |
| This option allows the setting of any of the following variables: |
| .Bl -tag -width 2n |
| .It set accmap Ar hex-value |
| ACCMap stands for Asynchronous Control Character Map. |
| This is always |
| negotiated with the peer, and defaults to a value of 00000000 in hex. |
| This protocol is required to defeat hardware that depends on passing |
| certain characters from end to end (such as XON/XOFF etc). |
| .Pp |
| For the XON/XOFF scenario, use |
| .Dq set accmap 000a0000 . |
| .It set Op auth Ns Xo |
| .No key Ar value |
| .Xc |
| This sets the authentication key (or password) used in client mode |
| PAP or CHAP negotiation to the given value. |
| It also specifies the |
| password to be used in the dial or login scripts in place of the |
| .Sq \eP |
| sequence, preventing the actual password from being logged. |
| If |
| .Ar command |
| or |
| .Ar chat |
| logging is in effect, |
| .Ar value |
| is logged as |
| .Sq ******** |
| for security reasons. |
| .Pp |
| If the first character of |
| .Ar value |
| is an exclamation mark |
| .Pq Dq !\& , |
| .Nm |
| treats the remainder of the string as a program that must be executed |
| to determine the |
| .Dq authname |
| and |
| .Dq authkey |
| values. |
| .Pp |
| If the |
| .Dq !\& |
| is doubled up |
| (to |
| .Dq !! ) , |
| it is treated as a single literal |
| .Dq !\& , |
| otherwise, ignoring the |
| .Dq !\& , |
| .Ar value |
| is parsed as a program to execute in the same was as the |
| .Dq !bg |
| command above, substituting special names in the same manner. |
| Once executed, |
| .Nm |
| will feed the program three lines of input, each terminated by a newline |
| character: |
| .Bl -bullet |
| .It |
| The host name as sent in the CHAP challenge. |
| .It |
| The challenge string as sent in the CHAP challenge. |
| .It |
| The locally defined |
| .Dq authname . |
| .El |
| .Pp |
| Two lines of output are expected: |
| .Bl -bullet |
| .It |
| The |
| .Dq authname |
| to be sent with the CHAP response. |
| .It |
| The |
| .Dq authkey , |
| which is encrypted with the challenge and request id, the answer being sent |
| in the CHAP response packet. |
| .El |
| .Pp |
| When configuring |
| .Nm |
| in this manner, it is expected that the host challenge is a series of ASCII |
| digits or characters. |
| An encryption device or Secure ID card is usually |
| required to calculate the secret appropriate for the given challenge. |
| .It set authname Ar id |
| This sets the authentication id used in client mode PAP or CHAP negotiation. |
| .Pp |
| If used in |
| .Fl direct |
| mode with CHAP enabled, |
| .Ar id |
| is used in the initial authentication challenge and should normally be set to |
| the local machine name. |
| .It set autoload Xo |
| .Ar min-percent max-percent period |
| .Xc |
| These settings apply only in multi-link mode and default to zero, zero and |
| five respectively. |
| When more than one |
| .Ar demand-dial |
| (also known as |
| .Fl auto ) |
| mode link is available, only the first link is made active when |
| .Nm |
| first reads data from the tun device. |
| The next |
| .Ar demand-dial |
| link will be opened only when the current bundle throughput is at least |
| .Ar max-percent |
| percent of the total bundle bandwidth for |
| .Ar period |
| seconds. |
| When the current bundle throughput decreases to |
| .Ar min-percent |
| percent or less of the total bundle bandwidth for |
| .Ar period |
| seconds, a |
| .Ar demand-dial |
| link will be brought down as long as it is not the last active link. |
| .Pp |
| Bundle throughput is measured as the maximum of inbound and outbound |
| traffic. |
| .Pp |
| The default values cause |
| .Ar demand-dial |
| links to simply come up one at a time. |
| .Pp |
| Certain devices cannot determine their physical bandwidth, so it |
| is sometimes necessary to use the |
| .Dq set bandwidth |
| command (described below) to make |
| .Dq set autoload |
| work correctly. |
| .It set bandwidth Ar value |
| This command sets the connection bandwidth in bits per second. |
| .Ar value |
| must be greater than zero. |
| It is currently only used by the |
| .Dq set autoload |
| command above. |
| .It set callback Ar option Ns No ... |
| If no arguments are given, callback is disabled, otherwise, |
| .Nm |
| will request (or in |
| .Fl direct |
| mode, will accept) one of the given |
| .Ar option Ns No s . |
| In client mode, if an |
| .Ar option |
| is NAK'd |
| .Nm |
| will request a different |
| .Ar option , |
| until no options remain at which point |
| .Nm |
| will terminate negotiations (unless |
| .Dq none |
| is one of the specified |
| .Ar option ) . |
| In server mode, |
| .Nm |
| will accept any of the given protocols - but the client |
| .Em must |
| request one of them. |
| If you wish callback to be optional, you must {include} |
| .Ar none |
| as an option. |
| .Pp |
| The |
| .Ar option Ns No s |
| are as follows (in this order of preference): |
| .Pp |
| .Bl -tag -width Ds |
| .It auth |
| The callee is expected to decide the callback number based on |
| authentication. |
| If |
| .Nm |
| is the callee, the number should be specified as the fifth field of |
| the peers entry in |
| .Pa /etc/ppp/ppp.secret . |
| .It cbcp |
| Microsoft's callback control protocol is used. |
| See |
| .Dq set cbcp |
| below. |
| .Pp |
| If you wish to negotiate |
| .Ar cbcp |
| in client mode but also wish to allow the server to request no callback at |
| CBCP negotiation time, you must specify both |
| .Ar cbcp |
| and |
| .Ar none |
| as callback options. |
| .It E.164 *| Ns Xo |
| .Ar number Ns Op , Ns Ar number Ns |
| .No ... |
| .Xc |
| The caller specifies the |
| .Ar number . |
| If |
| .Nm |
| is the callee, |
| .Ar number |
| should be either a comma separated list of allowable numbers or a |
| .Dq \&* , |
| meaning any number is permitted. |
| If |
| .Nm |
| is the caller, only a single number should be specified. |
| .Pp |
| Note, this option is very unsafe when used with a |
| .Dq \&* |
| as a malicious caller can tell |
| .Nm |
| to call any (possibly international) number without first authenticating |
| themselves. |
| .It none |
| If the peer does not wish to do callback at all, |
| .Nm |
| will accept the fact and continue without callback rather than terminating |
| the connection. |
| This is required (in addition to one or more other callback |
| options) if you wish callback to be optional. |
| .El |
| .Pp |
| .It set cbcp Oo |
| .No *| Ns Ar number Ns Oo |
| .No , Ns Ar number Ns ...\& Oc |
| .Op Ar delay Op Ar retry |
| .Oc |
| If no arguments are given, CBCP (Microsoft's CallBack Control Protocol) |
| is disabled - ie, configuring CBCP in the |
| .Dq set callback |
| command will result in |
| .Nm |
| requesting no callback in the CBCP phase. |
| Otherwise, |
| .Nm |
| attempts to use the given phone |
| .Ar number Ns No (s). |
| .Pp |
| In server mode |
| .Pq Fl direct , |
| .Nm |
| will insist that the client uses one of these numbers, unless |
| .Dq \&* |
| is used in which case the client is expected to specify the number. |
| .Pp |
| In client mode, |
| .Nm |
| will attempt to use one of the given numbers (whichever it finds to |
| be agreeable with the peer), or if |
| .Dq \&* |
| is specified, |
| .Nm |
| will expect the peer to specify the number. |
| .It set cd Oo |
| .No off| Ns Ar seconds Ns Op !\& |
| .Oc |
| Normally, |
| .Nm |
| checks for the existence of carrier depending on the type of device |
| that has been opened: |
| .Bl -tag -width XXX -offset XXX |
| .It Terminal Devices |
| Carrier is checked one second after the login script is complete. |
| If it is not set, |
| .Nm |
| assumes that this is because the device does not support carrier (which |
| is true for most |
| .Dq laplink |
| NULL-modem cables), logs the fact and stops checking |
| for carrier. |
| .Pp |
| As ptys do not support the TIOCMGET ioctl, the tty device will switch all |
| carrier detection off when it detects that the device is a pty. |
| .It ISDN (i4b) Devices |
| Carrier is checked once per second for 6 seconds. |
| If it is not set after |
| the sixth second, the connection attempt is considered to have failed and |
| the device is closed. |
| Carrier is always required for i4b devices. |
| .It PPPoE (netgraph) Devices |
| Carrier is checked once per second for 5 seconds. |
| If it is not set after |
| the fifth second, the connection attempt is considered to have failed and |
| the device is closed. |
| Carrier is always required for PPPoE devices. |
| .El |
| .Pp |
| All other device types do not support carrier. |
| Setting a carrier value will |
| result in a warning when the device is opened. |
| .Pp |
| Some modems take more than one second after connecting to assert the carrier |
| signal. |
| If this delay is not increased, this will result in |
| .Nm Ns No 's |
| inability to detect when the link is dropped, as |
| .Nm |
| assumes that the device is not asserting carrier. |
| .Pp |
| The |
| .Dq set cd |
| command overrides the default carrier behaviour. |
| .Ar seconds |
| specifies the maximum number of seconds that |
| .Nm |
| should wait after the dial script has finished before deciding if |
| carrier is available or not. |
| .Pp |
| If |
| .Dq off |
| is specified, |
| .Nm |
| will not check for carrier on the device, otherwise |
| .Nm |
| will not proceed to the login script until either carrier is detected |
| or until |
| .Ar seconds |
| has elapsed, at which point |
| .Nm |
| assumes that the device will not set carrier. |
| .Pp |
| If no arguments are given, carrier settings will go back to their default |
| values. |
| .Pp |
| If |
| .Ar seconds |
| is followed immediately by an exclamation mark |
| .Pq Dq !\& , |
| .Nm |
| will |
| .Em require |
| carrier. |
| If carrier is not detected after |
| .Ar seconds |
| seconds, the link will be disconnected. |
| .It set choked Op Ar timeout |
| This sets the number of seconds that |
| .Nm |
| will keep a choked output queue before dropping all pending output packets. |
| If |
| .Ar timeout |
| is less than or equal to zero or if |
| .Ar timeout |
| is not specified, it is set to the default value of |
| .Em 120 seconds . |
| .Pp |
| A choked output queue occurs when |
| .Nm |
| has read a certain number of packets from the local network for transmission, |
| but cannot send the data due to link failure (the peer is busy etc.). |
| .Nm |
| will not read packets indefinitely. |
| Instead, it reads up to |
| .Em 30 |
| packets (or |
| .Em 30 No + |
| .Em nlinks No * |
| .Em 2 |
| packets in multi-link mode), then stops reading the network interface |
| until either |
| .Ar timeout |
| seconds have passed or at least one packet has been sent. |
| .Pp |
| If |
| .Ar timeout |
| seconds pass, all pending output packets are dropped. |
| .It set ctsrts|crtscts on|off |
| This sets hardware flow control. |
| Hardware flow control is |
| .Ar on |
| by default. |
| .It set deflate Ar out-winsize Op Ar in-winsize |
| This sets the DEFLATE algorithms default outgoing and incoming window |
| sizes. |
| Both |
| .Ar out-winsize |
| and |
| .Ar in-winsize |
| must be values between |
| .Em 8 |
| and |
| .Em 15 . |
| If |
| .Ar in-winsize |
| is specified, |
| .Nm |
| will insist that this window size is used and will not accept any other |
| values from the peer. |
| .It set dns Op Ar primary Op Ar secondary |
| This command specifies DNS overrides for the |
| .Dq accept dns |
| command. |
| Refer to the |
| .Dq accept |
| command description above for details. |
| This command does not affect the IP numbers requested using |
| .Dq enable dns . |
| .It set device|line Xo |
| .Ar value Ns No ... |
| .Xc |
| This sets the device(s) to which |
| .Nm |
| will talk to the given |
| .Dq value . |
| .Pp |
| All ISDN and serial device names are expected to begin with |
| .Pa /dev/ . |
| ISDN devices are usually called |
| .Pa i4brbchX |
| and serial devices are usually called |
| .Pa cuaXX . |
| .Pp |
| If |
| .Dq value |
| does not begin with |
| .Pa /dev/ , |
| it must either begin with an exclamation mark |
| .Pq Dq !\& , |
| be of the format |
| .No PPPoE: Ns Ar iface Ns Xo |
| .Op \&: Ns Ar provider Ns |
| .Xc |
| (on |
| .Xr netgraph 4 |
| enabled systems), or be of the format |
| .Sm off |
| .Ar host : port Op /tcp|udp . |
| .Sm on |
| .Pp |
| If it begins with an exclamation mark, the rest of the device name is |
| treated as a program name, and that program is executed when the device |
| is opened. |
| Standard input, output and error are fed back to |
| .Nm |
| and are read and written as if they were a regular device. |
| .Pp |
| If a |
| .No PPPoE: Ns Ar iface Ns Xo |
| .Op \&: Ns Ar provider Ns |
| .Xc |
| specification is given, |
| .Nm |
| will attempt to create a |
| .Em PPP |
| over Ethernet connection using the given |
| .Ar iface |
| interface by using |
| .Xr netgraph 4 . |
| If |
| .Xr netgraph 4 |
| is not available, |
| .Nm |
| will attempt to load it using |
| .Xr kldload 2 . |
| If this fails, an external program must be used such as the |
| .Xr pppoed 8 |
| program available under |
| .Ox . |
| The given |
| .Ar provider |
| is passed as the service name in the PPPoE Discovery Initiation (PADI) |
| packet. |
| If no provider is given, an empty value will be used. |
| .Pp |
| When a PPPoE connection is established, |
| .Nm |
| will place the name of the Access Concentrator in the environment variable |
| .Ev ACNAME . |
| .Pp |
| Refer to |
| .Xr netgraph 4 |
| and |
| .Xr ng_pppoe 4 |
| for further details. |
| .Pp |
| If a |
| .Ar host Ns No : Ns Ar port Ns Oo |
| .No /tcp|udp |
| .Oc |
| specification is given, |
| .Nm |
| will attempt to connect to the given |
| .Ar host |
| on the given |
| .Ar port . |
| If a |
| .Dq /tcp |
| or |
| .Dq /udp |
| suffix is not provided, the default is |
| .Dq /tcp . |
| Refer to the section on |
| .Em PPP OVER TCP and UDP |
| above for further details. |
| .Pp |
| If multiple |
| .Dq values |
| are specified, |
| .Nm |
| will attempt to open each one in turn until it succeeds or runs out of |
| devices. |
| .It set dial Ar chat-script |
| This specifies the chat script that will be used to dial the other |
| side. |
| See also the |
| .Dq set login |
| command below. |
| Refer to |
| .Xr chat 8 |
| and to the example configuration files for details of the chat script |
| format. |
| It is possible to specify some special |
| .Sq values |
| in your chat script as follows: |
| .Bl -tag -width 2n |
| .It Li \ec |
| When used as the last character in a |
| .Sq send |
| string, this indicates that a newline should not be appended. |
| .It Li \ed |
| When the chat script encounters this sequence, it delays two seconds. |
| .It Li \ep |
| When the chat script encounters this sequence, it delays for one quarter of |
| a second. |
| .It Li \en |
| This is replaced with a newline character. |
| .It Li \er |
| This is replaced with a carriage return character. |
| .It Li \es |
| This is replaced with a space character. |
| .It Li \et |
| This is replaced with a tab character. |
| .It Li \eT |
| This is replaced by the current phone number (see |
| .Dq set phone |
| below). |
| .It Li \eP |
| This is replaced by the current |
| .Ar authkey |
| value (see |
| .Dq set authkey |
| above). |
| .It Li \eU |
| This is replaced by the current |
| .Ar authname |
| value (see |
| .Dq set authname |
| above). |
| .El |
| .Pp |
| Note that two parsers will examine these escape sequences, so in order to |
| have the |
| .Sq chat parser |
| see the escape character, it is necessary to escape it from the |
| .Sq command parser . |
| This means that in practice you should use two escapes, for example: |
| .Bd -literal -offset indent |
| set dial "... ATDT\\\\T CONNECT" |
| .Ed |
| .Pp |
| It is also possible to execute external commands from the chat script. |
| To do this, the first character of the expect or send string is an |
| exclamation mark |
| .Pq Dq !\& . |
| If a literal exclamation mark is required, double it up to |
| .Dq !!\& |
| and it will be treated as a single literal |
| .Dq !\& . |
| When the command is executed, standard input and standard output are |
| directed to the open device (see the |
| .Dq set device |
| command), and standard error is read by |
| .Nm |
| and substituted as the expect or send string. |
| If |
| .Nm |
| is running in interactive mode, file descriptor 3 is attached to |
| .Pa /dev/tty . |
| .Pp |
| For example (wrapped for readability): |
| .Bd -literal -offset indent |
| set login "TIMEOUT 5 \\"\\" \\"\\" login:--login: ppp \e |
| word: ppp \\"!sh \\\\-c \\\\\\"echo \\\\-n label: >&2\\\\\\"\\" \e |
| \\"!/bin/echo in\\" HELLO" |
| .Ed |
| .Pp |
| would result in the following chat sequence (output using the |
| .Sq set log local chat |
| command before dialing): |
| .Bd -literal -offset indent |
| Dial attempt 1 of 1 |
| dial OK! |
| Chat: Expecting: |
| Chat: Sending: |
| Chat: Expecting: login:--login: |
| Chat: Wait for (5): login: |
| Chat: Sending: ppp |
| Chat: Expecting: word: |
| Chat: Wait for (5): word: |
| Chat: Sending: ppp |
| Chat: Expecting: !sh \\-c "echo \\-n label: >&2" |
| Chat: Exec: sh -c "echo -n label: >&2" |
| Chat: Wait for (5): !sh \\-c "echo \\-n label: >&2" --> label: |
| Chat: Exec: /bin/echo in |
| Chat: Sending: |
| Chat: Expecting: HELLO |
| Chat: Wait for (5): HELLO |
| login OK! |
| .Ed |
| .Pp |
| Note (again) the use of the escape character, allowing many levels of |
| nesting. |
| Here, there are four parsers at work. |
| The first parses the original line, reading it as three arguments. |
| The second parses the third argument, reading it as 11 arguments. |
| At this point, it is |
| important that the |
| .Dq \&- |
| signs are escaped, otherwise this parser will see them as constituting |
| an expect-send-expect sequence. |
| When the |
| .Dq !\& |
| character is seen, the execution parser reads the first command as three |
| arguments, and then |
| .Xr sh 1 |
| itself expands the argument after the |
| .Fl c . |
| As we wish to send the output back to the modem, in the first example |
| we redirect our output to file descriptor 2 (stderr) so that |
| .Nm |
| itself sends and logs it, and in the second example, we just output to stdout, |
| which is attached directly to the modem. |
| .Pp |
| This, of course means that it is possible to execute an entirely external |
| .Dq chat |
| command rather than using the internal one. |
| See |
| .Xr chat 8 |
| for a good alternative. |
| .Pp |
| The external command that is executed is subjected to the same special |
| word expansions as the |
| .Dq !bg |
| command. |
| .It set enddisc Op label|IP|MAC|magic|psn value |
| This command sets our local endpoint discriminator. |
| If set prior to LCP negotiation, and if no |
| .Dq disable enddisc |
| command has been used, |
| .Nm |
| will send the information to the peer using the LCP endpoint discriminator |
| option. |
| The following discriminators may be set: |
| .Bl -tag -width indent |
| .It Li label |
| The current label is used. |
| .It Li IP |
| Our local IP number is used. |
| As LCP is negotiated prior to IPCP, it is |
| possible that the IPCP layer will subsequently change this value. |
| If |
| it does, the endpoint discriminator stays at the old value unless manually |
| reset. |
| .It Li MAC |
| This is similar to the |
| .Ar IP |
| option above, except that the MAC address associated with the local IP |
| number is used. |
| If the local IP number is not resident on any Ethernet |
| interface, the command will fail. |
| .Pp |
| As the local IP number defaults to whatever the machine host name is, |
| .Dq set enddisc mac |
| is usually done prior to any |
| .Dq set ifaddr |
| commands. |
| .It Li magic |
| A 20 digit random number is used. |
| Care should be taken when using magic numbers as restarting |
| .Nm |
| or creating a link using a different |
| .Nm |
| invocation will also use a different magic number and will therefore not |
| be recognised by the peer as belonging to the same bundle. |
| This makes it unsuitable for |
| .Fl direct |
| connections. |
| .It Li psn Ar value |
| The given |
| .Ar value |
| is used. |
| .Ar Value |
| should be set to an absolute public switched network number with the |
| country code first. |
| .El |
| .Pp |
| If no arguments are given, the endpoint discriminator is reset. |
| .It set escape Ar value... |
| This option is similar to the |
| .Dq set accmap |
| option above. |
| It allows the user to specify a set of characters that will be |
| .Sq escaped |
| as they travel across the link. |
| .It set filter dial|alive|in|out Ar rule-no Xo |
| .No permit|deny|clear| Ns Ar rule-no |
| .Op !\& |
| .Oo Op host |
| .Ar src_addr Ns Op / Ns Ar width |
| .Op Ar dst_addr Ns Op / Ns Ar width |
| .Oc [ Ns Ar proto |
| .Op src lt|eq|gt Ar port |
| .Op dst lt|eq|gt Ar port |
| .Op estab |
| .Op syn |
| .Op finrst |
| .Op timeout Ar secs ] |
| .Xc |
| .Nm |
| supports four filter sets. |
| The |
| .Em alive |
| filter specifies packets that keep the connection alive - resetting the |
| idle timer. |
| The |
| .Em dial |
| filter specifies packets that cause |
| .Nm |
| to dial when in |
| .Fl auto |
| mode. |
| The |
| .Em in |
| filter specifies packets that are allowed to travel |
| into the machine and the |
| .Em out |
| filter specifies packets that are allowed out of the machine. |
| .Pp |
| Filtering is done prior to any IP alterations that might be done by the |
| NAT engine on outgoing packets and after any IP alterations that might |
| be done by the NAT engine on incoming packets. |
| By default all empty filter sets allow all packets to pass. |
| Rules are processed in order according to |
| .Ar rule-no |
| (unless skipped by specifying a rule number as the |
| .Ar action ) . |
| Up to 40 rules may be given for each set. |
| If a packet does not match |
| any of the rules in a given set, it is discarded. |
| In the case of |
| .Em in |
| and |
| .Em out |
| filters, this means that the packet is dropped. |
| In the case of |
| .Em alive |
| filters it means that the packet will not reset the idle timer (even if |
| the |
| .Ar in Ns No / Ns Ar out |
| filter has a |
| .Dq timeout |
| value) and in the case of |
| .Em dial |
| filters it means that the packet will not trigger a dial. |
| A packet failing to trigger a dial will be dropped rather than queued. |
| Refer to the |
| section on |
| .Sx PACKET FILTERING |
| above for further details. |
| .It set hangup Ar chat-script |
| This specifies the chat script that will be used to reset the device |
| before it is closed. |
| It should not normally be necessary, but can |
| be used for devices that fail to reset themselves properly on close. |
| .It set help|? Op Ar command |
| This command gives a summary of available set commands, or if |
| .Ar command |
| is specified, the command usage is shown. |
| .It set ifaddr Oo Ar myaddr Ns |
| .Op / Ns Ar \&nn |
| .Oo Ar hisaddr Ns Op / Ns Ar \&nn |
| .Oo Ar netmask |
| .Op Ar triggeraddr |
| .Oc Oc |
| .Oc |
| This command specifies the IP addresses that will be used during |
| IPCP negotiation. |
| Addresses are specified using the format |
| .Pp |
| .Dl a.b.c.d/nn |
| .Pp |
| Where |
| .Dq a.b.c.d |
| is the preferred IP, but |
| .Ar nn |
| specifies how many bits of the address we will insist on. |
| If |
| .No / Ns Ar nn |
| is omitted, it defaults to |
| .Dq /32 |
| unless the IP address is 0.0.0.0 in which case it defaults to |
| .Dq /0 . |
| .Pp |
| If you wish to assign a dynamic IP number to the peer, |
| .Ar hisaddr |
| may also be specified as a range of IP numbers in the format |
| .Bd -ragged -offset indent |
| .Ar \&IP Ns Oo \&- Ns Ar \&IP Ns Xo |
| .Oc Ns Oo , Ns Ar \&IP Ns |
| .Op \&- Ns Ar \&IP Ns |
| .Oc Ns ... |
| .Xc |
| .Ed |
| .Pp |
| for example: |
| .Pp |
| .Dl set ifaddr 10.0.0.1 10.0.1.2-10.0.1.10,10.0.1.20 |
| .Pp |
| will only negotiate |
| .Dq 10.0.0.1 |
| as the local IP number, but may assign any of the given 10 IP |
| numbers to the peer. |
| If the peer requests one of these numbers, |
| and that number is not already in use, |
| .Nm |
| will grant the peers request. |
| This is useful if the peer wants |
| to re-establish a link using the same IP number as was previously |
| allocated (thus maintaining any existing tcp or udp connections). |
| .Pp |
| If the peer requests an IP number that is either outside |
| of this range or is already in use, |
| .Nm |
| will suggest a random unused IP number from the range. |
| .Pp |
| If |
| .Ar triggeraddr |
| is specified, it is used in place of |
| .Ar myaddr |
| in the initial IPCP negotiation. |
| However, only an address in the |
| .Ar myaddr |
| range will be accepted. |
| This is useful when negotiating with some |
| .Dv PPP |
| implementations that will not assign an IP number unless their peer |
| requests |
| .Dq 0.0.0.0 . |
| .Pp |
| It should be noted that in |
| .Fl auto |
| mode, |
| .Nm |
| will configure the interface immediately upon reading the |
| .Dq set ifaddr |
| line in the config file. |
| In any other mode, these values are just |
| used for IPCP negotiations, and the interface is not configured |
| until the IPCP layer is up. |
| .Pp |
| Note that the |
| .Ar HISADDR |
| argument may be overridden by the third field in the |
| .Pa ppp.secret |
| file once the client has authenticated itself |
| (if PAP or CHAP are |
| .Dq enabled ) . |
| Refer to the |
| .Sx AUTHENTICATING INCOMING CONNECTIONS |
| section for details. |
| .Pp |
| In all cases, if the interface is already configured, |
| .Nm |
| will try to maintain the interface IP numbers so that any existing |
| bound sockets will remain valid. |
| .It set ifqueue Ar packets |
| Set the maximum number of packets that |
| .Nm |
| will read from the tunnel interface while data cannot be sent to any of |
| the available links. |
| This queue limit is necessary to flow control outgoing data as the tunnel |
| interface is likely to be far faster than the combined links available to |
| .Nm . |
| .Pp |
| If |
| .Ar packets |
| is set to a value less than the number of links, |
| .Nm |
| will read up to that value regardless. |
| This prevents any possible latency problems. |
| .Pp |
| The default value for |
| .Ar packets |
| is |
| .Dq 30 . |
| .It set ccpretry|ccpretries Oo Ar timeout |
| .Op Ar reqtries Op Ar trmtries |
| .Oc |
| .It set chapretry|chapretries Oo Ar timeout |
| .Op Ar reqtries |
| .Oc |
| .It set ipcpretry|ipcpretries Oo Ar timeout |
| .Op Ar reqtries Op Ar trmtries |
| .Oc |
| .It set ipv6cpretry|ipv6cpretries Oo Ar timeout |
| .Op Ar reqtries Op Ar trmtries |
| .Oc |
| .It set lcpretry|lcpretries Oo Ar timeout |
| .Op Ar reqtries Op Ar trmtries |
| .Oc |
| .It set papretry|papretries Oo Ar timeout |
| .Op Ar reqtries |
| .Oc |
| These commands set the number of seconds that |
| .Nm |
| will wait before resending Finite State Machine (FSM) Request packets. |
| The default |
| .Ar timeout |
| for all FSMs is 3 seconds (which should suffice in most cases). |
| .Pp |
| If |
| .Ar reqtries |
| is specified, it tells |
| .Nm |
| how many configuration request attempts it should make while receiving |
| no reply from the peer before giving up. |
| The default is 5 attempts for |
| CCP, LCP and IPCP and 3 attempts for PAP and CHAP. |
| .Pp |
| If |
| .Ar trmtries |
| is specified, it tells |
| .Nm |
| how many terminate requests should be sent before giving up waiting for the |
| peers response. |
| The default is 3 attempts. |
| Authentication protocols are |
| not terminated and it is therefore invalid to specify |
| .Ar trmtries |
| for PAP or CHAP. |
| .Pp |
| In order to avoid negotiations with the peer that will never converge, |
| .Nm |
| will only send at most 3 times the configured number of |
| .Ar reqtries |
| in any given negotiation session before giving up and closing that layer. |
| .It set log Xo |
| .Op local |
| .Op +|- Ns |
| .Ar value Ns No ... |
| .Xc |
| This command allows the adjustment of the current log level. |
| Refer to the Logging Facility section for further details. |
| .It set login Ar chat-script |
| This |
| .Ar chat-script |
| compliments the dial-script. |
| If both are specified, the login |
| script will be executed after the dial script. |
| Escape sequences available in the dial script are also available here. |
| .It set logout Ar chat-script |
| This specifies the chat script that will be used to logout |
| before the hangup script is called. |
| It should not normally be necessary. |
| .It set lqrperiod|echoperiod Ar frequency |
| This command sets the |
| .Ar frequency |
| in seconds at which |
| .Em LQR |
| or |
| .Em LCP ECHO |
| packets are sent. |
| The default is 30 seconds. |
| You must also use the |
| .Dq enable lqr |
| and/or |
| .Dq enable echo |
| commands if you wish to send |
| .Em LQR |
| or |
| .Em LCP ECHO |
| requests to the peer. |
| .It set mode Ar interactive|auto|ddial|background |
| This command allows you to change the |
| .Sq mode |
| of the specified link. |
| This is normally only useful in multi-link mode, |
| but may also be used in uni-link mode. |
| .Pp |
| It is not possible to change a link that is |
| .Sq direct |
| or |
| .Sq dedicated . |
| .Pp |
| Note: If you issue the command |
| .Dq set mode auto , |
| and have network address translation enabled, it may be useful to |
| .Dq enable iface-alias |
| afterwards. |
| This will allow |
| .Nm |
| to do the necessary address translations to enable the process that |
| triggers the connection to connect once the link is up despite the |
| peer assigning us a new (dynamic) IP address. |
| .It set mppe Op 40|56|128|* Op stateless|stateful|* |
| This option selects the encryption parameters used when negotiation |
| MPPE. |
| MPPE can be disabled entirely with the |
| .Dq disable mppe |
| command. |
| If no arguments are given, |
| .Nm |
| will attempt to negotiate a stateful link with a 128 bit key, but |
| will agree to whatever the peer requests (including no encryption |
| at all). |
| .Pp |
| If any arguments are given, |
| .Nm |
| will |
| .Em insist |
| on using MPPE and will close the link if it is rejected by the peer (Note; |
| this behaviour can be overridden by a configured RADIUS server). |
| .Pp |
| The first argument specifies the number of bits that |
| .Nm |
| should insist on during negotiations and the second specifies whether |
| .Nm |
| should insist on stateful or stateless mode. |
| In stateless mode, the |
| encryption dictionary is re-initialised with every packet according to |
| an encryption key that is changed with every packet. |
| In stateful mode, |
| the encryption dictionary is re-initialised every 256 packets or after |
| the loss of any data and the key is changed every 256 packets. |
| Stateless mode is less efficient but is better for unreliable transport |
| layers. |
| .It set mrru Op Ar value |
| Setting this option enables Multi-link PPP negotiations, also known as |
| Multi-link Protocol or MP. |
| There is no default MRRU (Maximum Reconstructed Receive Unit) value. |
| If no argument is given, multi-link mode is disabled. |
| .It set mru Xo |
| .Op max Ns Op imum |
| .Op Ar value |
| .Xc |
| The default MRU (Maximum Receive Unit) is 1500. |
| If it is increased, the other side *may* increase its MTU. |
| In theory there is no point in decreasing the MRU to below the default as the |
| .Em PPP |
| protocol says implementations *must* be able to accept packets of at |
| least 1500 octets. |
| .Pp |
| If the |
| .Dq maximum |
| keyword is used, |
| .Nm |
| will refuse to negotiate a higher value. |
| The maximum MRU can be set to 2048 at most. |
| Setting a maximum of less than 1500 violates the |
| .Em PPP |
| rfc, but may sometimes be necessary. |
| For example, |
| .Em PPPoE |
| imposes a maximum of 1492 due to hardware limitations. |
| .Pp |
| If no argument is given, 1500 is assumed. |
| A value must be given when |
| .Dq maximum |
| is specified. |
| .It set mtu Xo |
| .Op max Ns Op imum |
| .Op Ar value |
| .Xc |
| The default MTU is 1500. |
| At negotiation time, |
| .Nm |
| will accept whatever MRU the peer requests (assuming it is |
| not less than 296 bytes or greater than the assigned maximum). |
| If the MTU is set, |
| .Nm |
| will not accept MRU values less than |
| .Ar value . |
| When negotiations are complete, the MTU is used when writing to the |
| interface, even if the peer requested a higher value MRU. |
| This can be useful for |
| limiting your packet size (giving better bandwidth sharing at the expense |
| of more header data). |
| .Pp |
| If the |
| .Dq maximum |
| keyword is used, |
| .Nm |
| will refuse to negotiate a higher value. |
| The maximum MTU can be set to 2048 at most. |
| Note, it is necessary to use the |
| .Dq maximum |
| keyword to limit the MTU when using PPPoE. |
| .Pp |
| If no |
| .Ar value |
| is given, 1500, or whatever the peer asks for is used. |
| A value must be given when |
| .Dq maximum |
| is specified. |
| .It set nbns Op Ar x.x.x.x Op Ar y.y.y.y |
| This option allows the setting of the Microsoft NetBIOS name server |
| values to be returned at the peers request. |
| If no values are given, |
| .Nm |
| will reject any such requests. |
| .It set openmode active|passive Op Ar delay |
| By default, |
| .Ar openmode |
| is always |
| .Ar active |
| with a one second |
| .Ar delay . |
| That is, |
| .Nm |
| will always initiate LCP/IPCP/CCP negotiation one second after the line |
| comes up. |
| If you want to wait for the peer to initiate negotiations, you |
| can use the value |
| .Ar passive . |
| If you want to initiate negotiations immediately or after more than one |
| second, the appropriate |
| .Ar delay |
| may be specified here in seconds. |
| .It set parity odd|even|none|mark |
| This allows the line parity to be set. |
| The default value is |
| .Ar none . |
| .It set phone Ar telno Ns Xo |
| .Oo \&| Ns Ar backupnumber |
| .Oc Ns ... Ns Oo : Ns Ar nextnumber |
| .Oc Ns ... |
| .Xc |
| This allows the specification of the phone number to be used in |
| place of the \\\\T string in the dial and login chat scripts. |
| Multiple phone numbers may be given separated either by a pipe |
| .Pq Dq \&| |
| or a colon |
| .Pq Dq \&: . |
| .Pp |
| Numbers after the pipe are only dialed if the dial or login |
| script for the previous number failed. |
| .Pp |
| Numbers after the colon are tried sequentially, irrespective of |
| the reason the line was dropped. |
| .Pp |
| If multiple numbers are given, |
| .Nm |
| will dial them according to these rules until a connection is made, retrying |
| the maximum number of times specified by |
| .Dq set redial |
| below. |
| In |
| .Fl background |
| mode, each number is attempted at most once. |
| .It set pppoe Op standard|3Com |
| This option configures the underlying |
| .Xr ng_pppoe 4 |
| node to either standard RFC2516 PPPoE or proprietary 3Com mode. |
| If not set the system default will be used. |
| .It set Op proc Ns Xo |
| .No title Op Ar value |
| .Xc |
| The current process title as displayed by |
| .Xr ps 1 |
| is changed according to |
| .Ar value . |
| If |
| .Ar value |
| is not specified, the original process title is restored. |
| All the |
| word replacements done by the shell commands (see the |
| .Dq bg |
| command above) are done here too. |
| .Pp |
| Note, if USER is required in the process title, the |
| .Dq set proctitle |
| command must appear in |
| .Pa ppp.linkup , |
| as it is not known when the commands in |
| .Pa ppp.conf |
| are executed. |
| .It set radius Op Ar config-file |
| This command enables RADIUS support (if it is compiled in). |
| .Ar config-file |
| refers to the radius client configuration file as described in |
| .Xr radius.conf 5 . |
| If PAP, CHAP, MSCHAP or MSCHAPv2 are |
| .Dq enable Ns No d , |
| .Nm |
| behaves as a |
| .Em \&N Ns No etwork |
| .Em \&A Ns No ccess |
| .Em \&S Ns No erver |
| and uses the configured RADIUS server to authenticate rather than |
| authenticating from the |
| .Pa ppp.secret |
| file or from the passwd database. |
| .Pp |
| If none of PAP, CHAP, MSCHAP or MSCHAPv2 are enabled, |
| .Dq set radius |
| will do nothing. |
| .Pp |
| .Nm |
| uses the following attributes from the RADIUS reply: |
| .Bl -tag -width XXX -offset XXX |
| .It RAD_FRAMED_IP_ADDRESS |
| The peer IP address is set to the given value. |
| .It RAD_FRAMED_IP_NETMASK |
| The tun interface netmask is set to the given value. |
| .It RAD_FRAMED_MTU |
| If the given MTU is less than the peers MRU as agreed during LCP |
| negotiation, *and* it is less that any configured MTU (see the |
| .Dq set mru |
| command), the tun interface MTU is set to the given value. |
| .It RAD_FRAMED_COMPRESSION |
| If the received compression type is |
| .Dq 1 , |
| .Nm |
| will request VJ compression during IPCP negotiations despite any |
| .Dq disable vj |
| configuration command. |
| .It RAD_FILTER_ID |
| If this attribute is supplied, |
| .Nm |
| will attempt to use it as an additional label to load from the |
| .Pa ppp.linkup |
| and |
| .Pa ppp.linkdown |
| files. |
| The load will be attempted before (and in addition to) the normal |
| label search. |
| If the label does not exist, no action is taken and |
| .Nm |
| proceeds to the normal load using the current label. |
| .It RAD_FRAMED_ROUTE |
| The received string is expected to be in the format |
| .Ar dest Ns Op / Ns Ar bits |
| .Ar gw |
| .Op Ar metrics . |
| Any specified metrics are ignored. |
| .Dv MYADDR |
| and |
| .Dv HISADDR |
| are understood as valid values for |
| .Ar dest |
| and |
| .Ar gw , |
| .Dq default |
| can be used for |
| .Ar dest |
| to sepcify the default route, and |
| .Dq 0.0.0.0 |
| is understood to be the same as |
| .Dq default |
| for |
| .Ar dest |
| and |
| .Dv HISADDR |
| for |
| .Ar gw . |
| .Pp |
| For example, a returned value of |
| .Dq 1.2.3.4/24 0.0.0.0 1 2 -1 3 400 |
| would result in a routing table entry to the 1.2.3.0/24 network via |
| .Dv HISADDR |
| and a returned value of |
| .Dq 0.0.0.0 0.0.0.0 |
| or |
| .Dq default HISADDR |
| would result in a default route to |
| .Dv HISADDR . |
| .Pp |
| All RADIUS routes are applied after any sticky routes are applied, making |
| RADIUS routes override configured routes. |
| This also applies for RADIUS routes that do not {include} the |
| .Dv MYADDR |
| or |
| .Dv HISADDR |
| keywords. |
| .Pp |
| .It RAD_FRAMED_IPV6_PREFIX |
| If this attribute is supplied, the value is substituted for IPV6PREFIX |
| in a command. |
| You may pass it to an upper layer protocol such as DHCPv6 for delegating an |
| IPv6 prefix to a peer. |
| .It RAD_FRAMED_IPV6_ROUTE |
| The received string is expected to be in the format |
| .Ar dest Ns Op / Ns Ar bits |
| .Ar gw |
| .Op Ar metrics . |
| Any specified metrics are ignored. |
| .Dv MYADDR6 |
| and |
| .Dv HISADDR6 |
| are understood as valid values for |
| .Ar dest |
| and |
| .Ar gw , |
| .Dq default |
| can be used for |
| .Ar dest |
| to sepcify the default route, and |
| .Dq :: |
| is understood to be the same as |
| .Dq default |
| for |
| .Ar dest |
| and |
| .Dv HISADDR6 |
| for |
| .Ar gw . |
| .Pp |
| For example, a returned value of |
| .Dq 3ffe:505:abcd::/48 :: |
| would result in a routing table entry to the 3ffe:505:abcd::/48 network via |
| .Dv HISADDR6 |
| and a returned value of |
| .Dq :: :: |
| or |
| .Dq default HISADDR6 |
| would result in a default route to |
| .Dv HISADDR6 . |
| .Pp |
| All RADIUS IPv6 routes are applied after any sticky routes are |
| applied, making RADIUS IPv6 routes override configured routes. |
| This |
| also applies for RADIUS IPv6 routes that do not {include} the |
| .Dv MYADDR6 |
| or |
| .Dv HISADDR6 |
| keywords. |
| .Pp |
| .It RAD_SESSION_TIMEOUT |
| If supplied, the client connection is closed after the given number of |
| seconds. |
| .It RAD_REPLY_MESSAGE |
| If supplied, this message is passed back to the peer as the authentication |
| SUCCESS text. |
| .It RAD_MICROSOFT_MS_CHAP_ERROR |
| If this |
| .Dv RAD_VENDOR_MICROSOFT |
| vendor specific attribute is supplied, it is passed back to the peer as the |
| authentication FAILURE text. |
| .It RAD_MICROSOFT_MS_CHAP2_SUCCESS |
| If this |
| .Dv RAD_VENDOR_MICROSOFT |
| vendor specific attribute is supplied and if MS-CHAPv2 authentication is |
| being used, it is passed back to the peer as the authentication SUCCESS text. |
| .It RAD_MICROSOFT_MS_MPPE_ENCRYPTION_POLICY |
| If this |
| .Dv RAD_VENDOR_MICROSOFT |
| vendor specific attribute is supplied and has a value of 2 (Required), |
| .Nm |
| will insist that MPPE encryption is used (even if no |
| .Dq set mppe |
| configuration command has been given with arguments). |
| If it is supplied with a value of 1 (Allowed), encryption is made optional |
| (despite any |
| .Dq set mppe |
| configuration commands with arguments). |
| .It RAD_MICROSOFT_MS_MPPE_ENCRYPTION_TYPES |
| If this |
| .Dv RAD_VENDOR_MICROSOFT |
| vendor specific attribute is supplied, bits 1 and 2 are examined. |
| If either or both are set, 40 bit and/or 128 bit (respectively) encryption |
| options are set, overriding any given first argument to the |
| .Dq set mppe |
| command. |
| Note, it is not currently possible for the RADIUS server to specify 56 bit |
| encryption. |
| .It RAD_MICROSOFT_MS_MPPE_RECV_KEY |
| If this |
| .Dv RAD_VENDOR_MICROSOFT |
| vendor specific attribute is supplied, it is value is used as the master |
| key for decryption of incoming data. |
| When clients are authenticated using |
| MSCHAPv2, the RADIUS server MUST provide this attribute if inbound MPPE is |
| to function. |
| .It RAD_MICROSOFT_MS_MPPE_SEND_KEY |
| If this |
| .Dv RAD_VENDOR_MICROSOFT |
| vendor specific attribute is supplied, it is value is used as the master |
| key for encryption of outgoing data. |
| When clients are authenticated using |
| MSCHAPv2, the RADIUS server MUST provide this attribute if outbound MPPE is |
| to function. |
| .El |
| .Pp |
| Values received from the RADIUS server may be viewed using |
| .Dq show bundle . |
| .It set rad_alive Ar timeout |
| When RADIUS is configured, setting |
| .Dq rad_alive |
| to a non-zero |
| .Ar timeout |
| value will tell |
| .Nm |
| to sent RADIUS accounting information to the RADIUS server every |
| .Ar timeout |
| seconds. |
| .It set rad_port_id Ar option |
| When RADIUS is configured, setting the |
| .Dq rad_port_id |
| value allows to specify what should be sent to the RADIUS server as |
| NAS-Port-Id. |
| The |
| .Ar option Ns No s |
| are as follows: |
| .Pp |
| .Bl -tag -width Ds |
| .It pid |
| PID of the corresponding tunnel. |
| .It tunnum |
| .Xr tun 4 |
| interface number. |
| .It ifnum |
| index of the interface as returned by |
| .Xr if_nametoindex 3 . |
| .It default |
| keeps the default behavior. |
| .El |
| .It set reconnect Ar timeout ntries |
| Should the line drop unexpectedly (due to loss of CD or LQR |
| failure), a connection will be re-established after the given |
| .Ar timeout . |
| The line will be re-connected at most |
| .Ar ntries |
| times. |
| .Ar Ntries |
| defaults to zero. |
| A value of |
| .Ar random |
| for |
| .Ar timeout |
| will result in a variable pause, somewhere between 1 and 30 seconds. |
| .It set recvpipe Op Ar value |
| This sets the routing table RECVPIPE value. |
| The optimum value is just over twice the MTU value. |
| If |
| .Ar value |
| is unspecified or zero, the default kernel controlled value is used. |
| .It set redial Ar secs Ns Xo |
| .Oo + Ns Ar inc Ns |
| .Op - Ns Ar max Ns |
| .Oc Ns Op . Ns Ar next |
| .Op Ar attempts |
| .Xc |
| .Nm |
| can be instructed to attempt to redial |
| .Ar attempts |
| times. |
| If more than one phone number is specified (see |
| .Dq set phone |
| above), a pause of |
| .Ar next |
| is taken before dialing each number. |
| A pause of |
| .Ar secs |
| is taken before starting at the first number again. |
| A literal value of |
| .Dq Li random |
| may be used here in place of |
| .Ar secs |
| and |
| .Ar next , |
| causing a random delay of between 1 and 30 seconds. |
| .Pp |
| If |
| .Ar inc |
| is specified, its value is added onto |
| .Ar secs |
| each time |
| .Nm |
| tries a new number. |
| .Ar secs |
| will only be incremented at most |
| .Ar max |
| times. |
| .Ar max |
| defaults to 10. |
| .Pp |
| Note, the |
| .Ar secs |
| delay will be effective, even after |
| .Ar attempts |
| has been exceeded, so an immediate manual dial may appear to have |
| done nothing. |
| If an immediate dial is required, a |
| .Dq !\& |
| should immediately follow the |
| .Dq open |
| keyword. |
| See the |
| .Dq open |
| description above for further details. |
| .It set sendpipe Op Ar value |
| This sets the routing table SENDPIPE value. |
| The optimum value is just over twice the MTU value. |
| If |
| .Ar value |
| is unspecified or zero, the default kernel controlled value is used. |
| .It "set server|socket" Ar TcpPort Ns No \&| Ns Xo |
| .Ar LocalName Ns No |none|open|closed |
| .Op password Op Ar mask |
| .Xc |
| This command tells |
| .Nm |
| to listen on the given socket or |
| .Sq diagnostic port |
| for incoming command connections. |
| .Pp |
| The word |
| .Dq none |
| instructs |
| .Nm |
| to close any existing socket and clear the socket configuration. |
| The word |
| .Dq open |
| instructs |
| .Nm |
| to attempt to re-open the port. |
| The word |
| .Dq closed |
| instructs |
| .Nm |
| to close the open port. |
| .Pp |
| If you wish to specify a local domain socket, |
| .Ar LocalName |
| must be specified as an absolute file name, otherwise it is assumed |
| to be the name or number of a TCP port. |
| You may specify the octal umask to be used with a local domain socket. |
| Refer to |
| .Xr umask 2 |
| for umask details. |
| Refer to |
| .Xr services 5 |
| for details of how to translate TCP port names. |
| .Pp |
| You must also specify the password that must be entered by the client |
| (using the |
| .Dq passwd |
| variable above) when connecting to this socket. |
| If the password is |
| specified as an empty string, no password is required for connecting clients. |
| .Pp |
| When specifying a local domain socket, the first |
| .Dq %d |
| sequence found in the socket name will be replaced with the current |
| interface unit number. |
| This is useful when you wish to use the same |
| profile for more than one connection. |
| .Pp |
| In a similar manner TCP sockets may be prefixed with the |
| .Dq + |
| character, in which case the current interface unit number is added to |
| the port number. |
| .Pp |
| When using |
| .Nm |
| with a server socket, the |
| .Xr pppctl 8 |
| command is the preferred mechanism of communications. |
| Currently, |
| .Xr telnet 1 |
| can also be used, but link encryption may be implemented in the future, so |
| .Xr telnet 1 |
| should be avoided. |
| .Pp |
| Note; |
| .Dv SIGUSR1 |
| and |
| .Dv SIGUSR2 |
| interact with the diagnostic socket. |
| .It set speed Ar value |
| This sets the speed of the serial device. |
| If speed is specified as |
| .Dq sync , |
| .Nm |
| treats the device as a synchronous device. |
| .Pp |
| Certain device types will know whether they should be specified as |
| synchronous or asynchronous. |
| These devices will override incorrect |
| settings and log a warning to this effect. |
| .It set stopped Op Ar LCPseconds Op Ar CCPseconds |
| If this option is set, |
| .Nm |
| will time out after the given FSM (Finite State Machine) has been in |
| the stopped state for the given number of |
| .Dq seconds . |
| This option may be useful if the peer sends a terminate request, |
| but never actually closes the connection despite our sending a terminate |
| acknowledgement. |
| This is also useful if you wish to |
| .Dq set openmode passive |
| and time out if the peer does not send a Configure Request within the |
| given time. |
| Use |
| .Dq set log +lcp +ccp |
| to make |
| .Nm |
| log the appropriate state transitions. |
| .Pp |
| The default value is zero, where |
| .Nm |
| does not time out in the stopped state. |
| .Pp |
| This value should not be set to less than the openmode delay (see |
| .Dq set openmode |
| above). |
| .It set timeout Ar idleseconds Op Ar mintimeout |
| This command allows the setting of the idle timer. |
| Refer to the section titled |
| .Sx SETTING THE IDLE TIMER |
| for further details. |
| .Pp |
| If |
| .Ar mintimeout |
| is specified, |
| .Nm |
| will never idle out before the link has been up for at least that number |
| of seconds. |
| .It set urgent Xo |
| .Op tcp|udp|none |
| .Oo Op +|- Ns |
| .Ar port |
| .Oc No ... |
| .Xc |
| This command controls the ports that |
| .Nm |
| prioritizes when transmitting data. |
| The default priority TCP ports |
| are ports 21 (ftp control), 22 (ssh), 23 (telnet), 513 (login), 514 (shell), |
| 543 (klogin) and 544 (kshell). |
| There are no priority UDP ports by default. |
| See |
| .Xr services 5 |
| for details. |
| .Pp |
| If neither |
| .Dq tcp |
| or |
| .Dq udp |
| are specified, |
| .Dq tcp |
| is assumed. |
| .Pp |
| If no |
| .Ar port Ns No s |
| are given, the priority port lists are cleared (although if |
| .Dq tcp |
| or |
| .Dq udp |
| is specified, only that list is cleared). |
| If the first |
| .Ar port |
| argument is prefixed with a plus |
| .Pq Dq \&+ |
| or a minus |
| .Pq Dq \&- , |
| the current list is adjusted, otherwise the list is reassigned. |
| .Ar port Ns No s |
| prefixed with a plus or not prefixed at all are added to the list and |
| .Ar port Ns No s |
| prefixed with a minus are removed from the list. |
| .Pp |
| If |
| .Dq none |
| is specified, all priority port lists are disabled and even |
| .Dv IPTOS_LOWDELAY |
| packets are not prioritised. |
| .It set vj slotcomp on|off |
| This command tells |
| .Nm |
| whether it should attempt to negotiate VJ slot compression. |
| By default, slot compression is turned |
| .Ar on . |
| .It set vj slots Ar nslots |
| This command sets the initial number of slots that |
| .Nm |
| will try to negotiate with the peer when VJ compression is enabled (see the |
| .Sq enable |
| command above). |
| It defaults to a value of 16. |
| .Ar Nslots |
| must be between |
| .Ar 4 |
| and |
| .Ar 16 |
| inclusive. |
| .El |
| .Pp |
| .It shell|! Op Ar command |
| If |
| .Ar command |
| is not specified a shell is invoked according to the |
| .Dv SHELL |
| environment variable. |
| Otherwise, the given |
| .Ar command |
| is executed. |
| Word replacement is done in the same way as for the |
| .Dq !bg |
| command as described above. |
| .Pp |
| Use of the !\& character |
| requires a following space as with any of the other commands. |
| You should note that this command is executed in the foreground; |
| .Nm |
| will not continue running until this process has exited. |
| Use the |
| .Dv bg |
| command if you wish processing to happen in the background. |
| .It show Ar var |
| This command allows the user to examine the following: |
| .Bl -tag -width 2n |
| .It show bundle |
| Show the current bundle settings. |
| .It show ccp |
| Show the current CCP compression statistics. |
| .It show compress |
| Show the current VJ compression statistics. |
| .It show escape |
| Show the current escape characters. |
| .It show filter Op Ar name |
| List the current rules for the given filter. |
| If |
| .Ar name |
| is not specified, all filters are shown. |
| .It show hdlc |
| Show the current HDLC statistics. |
| .It show help|? |
| Give a summary of available show commands. |
| .It show iface |
| Show the current interface information |
| (the same as |
| .Dq iface show ) . |
| .It show ipcp |
| Show the current IPCP statistics. |
| .It show layers |
| Show the protocol layers currently in use. |
| .It show lcp |
| Show the current LCP statistics. |
| .It show Op data Ns Xo |
| .No link |
| .Xc |
| Show high level link information. |
| .It show links |
| Show a list of available logical links. |
| .It show log |
| Show the current log values. |
| .It show mem |
| Show current memory statistics. |
| .It show ncp |
| Show the current NCP statistics. |
| .It show physical |
| Show low level link information. |
| .It show mp |
| Show Multi-link information. |
| .It show proto |
| Show current protocol totals. |
| .It show route |
| Show the current routing tables. |
| .It show stopped |
| Show the current stopped timeouts. |
| .It show timer |
| Show the active alarm timers. |
| .It show version |
| Show the current version number of |
| .Nm . |
| .El |
| .Pp |
| .It term |
| Go into terminal mode. |
| Characters typed at the keyboard are sent to the device. |
| Characters read from the device are displayed on the screen. |
| When a remote |
| .Em PPP |
| peer is detected, |
| .Nm |
| automatically enables Packet Mode and goes back into command mode. |
| .El |
| .Sh MORE DETAILS |
| .Bl -bullet |
| .It |
| Read the example configuration files. |
| They are a good source of information. |
| .It |
| Use |
| .Dq help , |
| .Dq nat \&? , |
| .Dq enable \&? , |
| .Dq set ?\& |
| and |
| .Dq show ?\& |
| to get online information about what is available. |
| .It |
| The following URLs contain useful information: |
| .Bl -bullet -compact |
| .It |
| http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/faq/ppp.html |
| .It |
| http://www.FreeBSD.org/doc/handbook/userppp.html |
| .El |
| .Pp |
| .El |
| .Sh FILES |
| .Nm |
| refers to four files: |
| .Pa ppp.conf , |
| .Pa ppp.linkup , |
| .Pa ppp.linkdown |
| and |
| .Pa ppp.secret . |
| These files are placed in the |
| .Pa /etc/ppp |
| directory. |
| .Bl -tag -width 2n |
| .It Pa /etc/ppp/ppp.conf |
| System default configuration file. |
| .It Pa /etc/ppp/ppp.secret |
| An authorisation file for each system. |
| .It Pa /etc/ppp/ppp.linkup |
| A file to check when |
| .Nm |
| establishes a network level connection. |
| .It Pa /etc/ppp/ppp.linkdown |
| A file to check when |
| .Nm |
| closes a network level connection. |
| .It Pa /var/log/ppp.log |
| Logging and debugging information file. |
| Note, this name is specified in |
| .Pa /etc/syslog.conf . |
| See |
| .Xr syslog.conf 5 |
| for further details. |
| .It Pa /var/spool/lock/LCK..* |
| tty port locking file. |
| Refer to |
| .Xr uucplock 3 |
| for further details. |
| .It Pa /var/run/tunN.pid |
| The process id (pid) of the |
| .Nm |
| program connected to the tunN device, where |
| .Sq N |
| is the number of the device. |
| .It Pa /var/run/ttyXX.if |
| The tun interface used by this port. |
| Again, this file is only created in |
| .Fl background , |
| .Fl auto |
| and |
| .Fl ddial |
| modes. |
| .It Pa /etc/services |
| Get port number if port number is using service name. |
| .It Pa /var/run/ppp-authname-class-value |
| In multi-link mode, local domain sockets are created using the peer |
| authentication name |
| .Pq Sq authname , |
| the peer endpoint discriminator class |
| .Pq Sq class |
| and the peer endpoint discriminator value |
| .Pq Sq value . |
| As the endpoint discriminator value may be a binary value, it is turned |
| to HEX to determine the actual file name. |
| .Pp |
| This socket is used to pass links between different instances of |
| .Nm . |
| .El |
| .Sh SEE ALSO |
| .Xr at 1 , |
| .Xr ftp 1 , |
| .Xr gzip 1 , |
| .Xr hostname 1 , |
| .Xr login 1 , |
| .Xr tcpdump 1 , |
| .Xr telnet 1 , |
| .Xr kldload 2 , |
| .Xr pipe 2 , |
| .Xr socketpair 2 , |
| ifdef({LOCALNAT},{},{.Xr libalias 3 , |
| })dnl |
| ifdef({LOCALRAD},{},{.Xr libradius 3 , |
| })dnl |
| .Xr syslog 3 , |
| .Xr uucplock 3 , |
| .Xr netgraph 4 , |
| .Xr ng_pppoe 4 , |
| .Xr crontab 5 , |
| .Xr group 5 , |
| .Xr passwd 5 , |
| .Xr protocols 5 , |
| .Xr radius.conf 5 , |
| .Xr resolv.conf 5 , |
| .Xr syslog.conf 5 , |
| .Xr adduser 8 , |
| .Xr chat 8 , |
| .Xr getty 8 , |
| .Xr inetd 8 , |
| .Xr init 8 , |
| .Xr isdnd 8 , |
| .Xr named 8 , |
| .Xr ping 8 , |
| .Xr pppctl 8 , |
| .Xr pppd 8 , |
| .Xr pppoed 8 , |
| .Xr route 8 , |
| .Xr sshd 8 , |
| .Xr syslogd 8 , |
| .Xr traceroute 8 , |
| .Xr vipw 8 |
| .Sh HISTORY |
| This program was originally written by |
| .An Toshiharu OHNO Aq tony-o@iij.ad.jp , |
| and was submitted to |
| .Fx 2.0.5 |
| by |
| .An Atsushi Murai Aq amurai@spec.co.jp . |
| .Pp |
| It was substantially modified during 1997 by |
| .An Brian Somers Aq brian@Awfulhak.org , |
| and was ported to |
| .Ox |
| in November that year |
| (just after the 2.2 release). |
| .Pp |
| Most of the code was rewritten by |
| .An Brian Somers |
| in early 1998 when multi-link ppp support was added. |