X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/a685501f6432b2cd8cd23ced906abcb2d2ce862f..refs/heads/master:/Docs/manual.html?ds=inline diff --git a/Docs/manual.html b/Docs/manual.html index 4166235..060c470 100644 --- a/Docs/manual.html +++ b/Docs/manual.html @@ -56,34 +56,21 @@ H3 { <LI><A HREF="#Filtering">Filtering</A></LI> <LI><A HREF="#Clustering">Clustering</A></LI> <LI><A HREF="#Routing">Routing</A></LI> - <LI><A HREF="#AvoidingFragmentation">Avoiding Fragmentation</A></LI> <LI><A HREF="#Performance">Performance</A></LI> </OL> <H2 ID="Overview">Overview</H2> -l2tpns is half of a complete L2TP implementation. It supports only the -LNS side of the connection.<P> +l2tpns a complete L2TP implementation. It supports the LAC, LNS, PPPOE and DHCPv6 server.<P> -L2TP (Layer 2 Tunneling Protocol) is designed to allow any layer 2 -protocol (e.g. Ethernet, PPP) to be tunneled over an IP connection. l2tpns -implements PPP over L2TP only.<P> +L2TP (Layer 2 Tunneling Protocol) is designed to allow any layer 2 protocol (e.g. Ethernet, PPP) to be tunneled over an IP connection. l2tpns implements PPP over L2TP only.<P> -There are a couple of other L2TP implementations, of which <A -HREF="http://sourceforge.net/projects/l2tpd">l2tpd</A> is probably the -most popular. l2tpd also will handle being either end of a tunnel, and -is a lot more configurable than l2tpns. However, due to the way it works, -it is nowhere near as scalable.<P> +There are a couple of other L2TP implementations, of which <A HREF="http://sourceforge.net/projects/l2tpd">l2tpd</A> is probably the most popular. l2tpd also will handle being either end of a tunnel, and is a lot more configurable than l2tpns. However, due to the way it works, it is nowhere near as scalable.<P> -l2tpns uses the TUN/TAP interface provided by the Linux kernel to receive -and send packets. Using some packet manipulation it doesn't require a -single interface per connection, as l2tpd does.<P> +l2tpns uses the TUN/TAP interface provided by the Linux kernel to receive and send packets. Using some packet manipulation it doesn't require a single interface per connection, as l2tpd does.<P> -This allows it to scale extremely well to very high loads and very high -numbers of connections.<P> +This allows it to scale extremely well to very high loads and very high numbers of connections.<P> -It also has a plugin architecture which allows custom code to be run -during processing. An example of this is in the walled garden module -included.<P> +It also has a plugin architecture which allows custom code to be run during processing. An example of this is in the walled garden module included.<P> <BR> <EM>Documentation is not my best skill. If you find any problems @@ -168,15 +155,15 @@ only ever be used for working out why it doesn't work at all. </LI> <LI><B>log_file</B> (string)<BR> -This will be where all logging and debugging information is written -to. This may be either a filename, such as <EM>/var/log/l2tpns</EM>, or -the special magic string <EM>syslog:facility</EM>, where <EM>facility</EM> -is any one of the syslog logging facilities, such as local5. +This will be where all logging and debugging information is written to. This may be either a filename, such as <EM>/var/log/l2tpns</EM>, or the special magic string <EM>syslog:facility</EM>, where <EM>facility</EM> is any one of the syslog logging facilities, such as local5. </LI> <LI><B>pid_file</B> (string)<BR> -If set, the process id will be written to the specified file. The -value must be an absolute path. +If set, the process id will be written to the specified file. The value must be an absolute path. +</LI> + +<LI><B>random_device</B>B> (string)<BR> +Path to random data source (default /dev/urandom). Use "" to use the rand() library function. </LI> <LI><B>l2tp_secret</B> (string)<BR> @@ -185,6 +172,17 @@ the same as the LAC, or authentication will fail. Only actually be used if the LAC requests authentication. </LI> +<LI><B>l2tp_mtu</B> (int)<BR> +MTU of interface for L2TP traffic (default: 1500). Used to set link MRU and adjust TCP MSS. +</LI> + +<LI><B>ppp_restart_time</B> (int)<BR> +<B>ppp_max_configure</B> (int)<BR> +<B>ppp_max_failure</B> (int)<BR> +PPP counter and timer values, as described in §4.1 of +<a href="ftp://ftp.rfc-editor.org/in-notes/rfc1661.txt">RFC1661</a>. +</LI> + <LI><B>primary_dns</B> (ip address) <LI><B>secondary_dns</B> (ip address)<BR> Whenever a PPP connection is established, DNS servers will be sent to the @@ -220,8 +218,7 @@ session is closed. </LI> <LI><B>radius_secret</B> (string)<BR> -This secret will be used in all RADIUS queries. If this is not set then -RADIUS queries will fail. +This secret will be used in all RADIUS queries. If this is not set then RADIUS queries will fail. </LI> <LI><B>radius_authtypes</B> (string)</BR> @@ -241,15 +238,39 @@ session is established. </LI> <LI><B>bind_address</B> (ip address)<BR> -When the tun interface is created, it is assigned the address -specified here. If no address is given, 1.1.1.1 is used. Packets -containing user traffic should be routed via this address if given, -otherwise the primary address of the machine. +It's the listen address of the l2tp udp protocol sent and received to LAC. This address is also assigned to the tun interface if no iftun_address is specified. Packets containing user traffic should be routed via this address if given, otherwise the primary address of the machine. +</LI> + +<LI><B>iftun_address</B> (ip address)<BR> +This parameter is used when you want a tun interface address different +from the address of "bind_address" (For use in cases of specific configuration). +If no address is given to iftun_address and bind_address, 1.1.1.1 is used. +</LI> + +<LI><B>bind_multi_address</B> (ip address)<BR> +This parameter permit to listen several addresss of the l2tp udp protocol +(and set several address to the tun interface). +<BR> +WHEN this parameter is set, It OVERWRITE the parameters "bind_address" +and "iftun_address". +<BR> +these can be interesting when you want do load-balancing in cluster mode +of the uploaded from the LAC. For example you can set a bgp.prepend(MY_AS) +for Address1 on LNS1 and a bgp.prepend(MY_AS) for Address2 on LNS2 +(see BGP AS-path prepending). +<BR> +example of use with 2 address: +<BR> +set bind_multi_address "64.14.13.41, 64.14.13.42" +</LI> + +<LI><B>tundevicename</B> (string)<BR> +Name of the tun interface (default: "tun0"). </LI> <LI><B>peer_address</B> (ip address)<BR> Address to send to clients as the default gateway. -</L1> +</LI> <LI><B>send_garp</B> (boolean)<BR> Determines whether or not to send a gratuitous ARP for the @@ -276,13 +297,13 @@ every connected use will be dumped to a file in this directory. Each file dumped begins with a header, where each line is prefixed by #. Following the header is a single line for every connected user, fields separated by a space.<BR> The fields are username, ip, qos, -uptxoctets, downrxoctets. The qos field is 1 if a standard user, and -2 if the user is throttled. +uptxoctets, downrxoctets, origin (optional). The qos field is 1 if a standard user, and +2 if the user is throttled. The origin field is dump if account_all_origin is set to true +(origin value: L=LAC data, R=Remote LNS data, P=PPPOE data). </LI> -<LI><B>setuid</B> (int)<BR> -After starting up and binding the interface, change UID to this. This -doesn't work properly. +<LI><B>account_all_origin</B> (boolean)<BR> +If set to true, all origin of the usage is dumped to the accounting file (LAC+Remote LNS+PPPOE)(default false). </LI> <LI><B>dump_speed</B> (boolean)<BR> @@ -324,10 +345,19 @@ Multicast cluster address (default: 239.192.13.13). See the section on <A HREF="#Clustering">Clustering</A> for more information. </LI> +<LI><B>cluster_port</B> (int udp port)<BR> +UDP cluster port (default: 32792). See the section on +<A HREF="#Clustering">Clustering</A> for more information. +</LI> + <LI><B>cluster_interface</B> (string)<BR> Interface for cluster packets (default: eth0). </LI> +<LI><B>cluster_mcast_ttl</B> (int)<BR> +TTL for multicast packets (default: 1). +</LI> + <LI><B>cluster_hb_interval</B> (int)<BR> Interval in tenths of a second between cluster heartbeat/pings. </LI> @@ -342,8 +372,101 @@ from the master. Determines the minumum number of up to date slaves required before the master will drop routes (default: 1). </LI> + +<LI><B>echo_timeout</B> (int)<BR> +Time between last packet sent and LCP ECHO generation +(default: 10 (seconds)). +</LI> + +<LI><B>idle_echo_timeout</B> (int)<BR> +Drop sessions who have not responded within idle_echo_timeout seconds +(default: 240 (seconds)) +</LI> + +<LI><B>ppp_keepalive</B> (int)<BR> +Change this value to no to force generation of LCP ECHO every +echo_timeout seconds, even there are activity on the link. +(default: yes) +</LI> + +<LI><B>auth_tunnel_change_addr_src</B> (boolean)<BR> +This parameter authorize to change the source IP of the tunnels l2tp. +This parameter can be used when the remotes BAS/LAC are l2tpns server +configured in cluster mode, but that the interface to remote LNS are +not clustered (the tunnel can be coming from different source IP) +(default: no). +</LI> + +<LI><B>disable_sending_hello</B> (boolean)<BR> +Disable l2tp sending HELLO message for Apple compatibility. +Some OS X implementation of l2tp no manage the L2TP "HELLO message". +(default: no). +</LI> + +</UL> + +<P><U><B>LAC configuration</B></U></P> +<UL> +<LI><B>bind_address_remotelns</B> (ip address)<BR> +Address of the interface to listen the remote LNS tunnels. +If no address is given, all interfaces are listened (Any Address). +</LI> + +<LI><B>bind_portremotelns</B> (short)<BR> +Port to bind for the Remote LNS (default: 65432). +</LI> + </UL> +<P>A static REMOTES LNS configuration can be entered by the command:</P> +<DL> <DD><B>setforward</B> <I>MASK</I> <I>IP</I> <I>PORT</I> <I>SECRET</I> </DL> + +where <I>MASK</I> specifies the mask of users who have forwarded to +remote LNS (ex: "/friendISP@company.com").</BR> +where <I>IP</I> specifies the IP of the remote LNS (ex: "66.66.66.55").</BR> +where <I>PORT</I> specifies the L2TP Port of the remote LNS +(Normally should be 1701) (ex: 1701).</BR> +where <I>SECRET</I> specifies the secret password the remote LNS (ex: mysecret).</BR> +</BR> +The static Remote LNS configuration can be used when the friend ISP not +have a proxied Radius.</BR> +If the proxied Radius is used, It will return the RADIUS attributes:</BR> + Tunnel-Type: 1 = L2TP</BR> + Tunnel-Medium-Type: 1 = IPv4</BR> + Tunnel-Password: 1 = "LESECRETL2TP"</BR> + Tunnel-Server-Endpoint: 1 = "88.xx.xx.x1"</BR> + Tunnel-Assignment-Id: 1 = "friendisp_lns1"</BR> + Tunnel-Type: 2 = L2TP</BR> + Tunnel-Medium-Type: 2 = IPv4</BR> + Tunnel-Password: 2 = "LESECRETL2TP"</BR> + Tunnel-Server-Endpoint: 2 = "88.xx.xx.x2"</BR> + Tunnel-Assignment-Id: 2 = "friendisp_lns2"</BR> + +<P><U><B>PPPOE configuration</B></U></P> + +<UL> +<LI><B>pppoe_if_to_bind</B> (string)<BR> +PPPOE server interface to bind (ex: "eth0.12"), If not specified the server PPPOE is not enabled. +For the pppoe clustering, all the interfaces PPPOE of the clusters must use the same HW address (MAC address). +</LI> + +<LI><B>pppoe_service_name</B> (string)<BR> +PPPOE service name (default: NULL). +</LI> + +<LI><B>pppoe_ac_name</B> (string)<BR> +PPPOE access concentrator name (default: "l2tpns-pppoe"). +</LI> + +<LI><B>pppoe_only_equal_svc_name</B> (boolean)<BR> +If set to yes, the PPPOE server only accepts clients with a "service-name" +different from NULL and a "service-name" equal to server "service-name" (default: no). +</LI> + +</UL> + +<P><U><B>BGP configuration</B></U></P> + <P>BGP routing configuration is entered by the command: The routing configuration section is entered by the command <DL><DD><B>router bgp</B> <I>as</I></DL> @@ -822,14 +945,14 @@ supplied structure: some way. </TD> <TD> - <UL> - <LI>t - Tunnel ID</LI> - <LI>s - Session ID</LI> - <LI>username</LI> - <LI>password</LI> - <LI>protocol (0xC023 for PAP, 0xC223 for CHAP)</LI> - <LI>continue_auth - Set to 0 to stop processing authentication modules</LI> - </UL> + <DL> + <DT>t<DD>Tunnel + <DT>s<DD>Session + <DT>username + <DT>password + <DT>protocol<DD>0xC023 for PAP, 0xC223 for CHAP + <DT>continue_auth<DD>Set to 0 to stop processing authentication modules + </DL> </TD> </TR> <TR VALIGN=TOP BGCOLOR=WHITE><TD><B>post_auth</B></TD> @@ -839,16 +962,16 @@ supplied structure: to be accepted. </TD> <TD> - <UL> - <LI>t - Tunnel ID</LI> - <LI>s - Session ID</LI> - <LI>username</LI> - <LI>auth_allowed - This is already set to true or + <DL> + <DT>t<DD>Tunnel + <DT>s<DD>Session + <DT>username + <DT>auth_allowed<DD>This is already set to true or false depending on whether authentication has been allowed so far. You can set this to 1 or 0 to force - allow or disallow authentication</LI> - <LI>protocol (0xC023 for PAP, 0xC223 for CHAP)</LI> - </UL> + allow or disallow authentication + <DT>protocol<DD>0xC023 for PAP, 0xC223 for CHAP + </DL> </TD> </TR> <TR VALIGN=TOP BGCOLOR=WHITE><TD><B>packet_rx</B></TD> @@ -857,12 +980,12 @@ supplied structure: seriously slow down the system.</FONT> </TD> <TD> - <UL> - <LI>t - Tunnel ID</LI> - <LI>s - Session ID</LI> - <LI>buf - The raw packet data</LI> - <LI>len - The length of buf</LI> - </UL> + <DL> + <DT>t<DD>Tunnel + <DT>s<DD>Session + <DT>buf<DD>The raw packet data + <DT>len<DD>The length of buf + </DL> </TD> </TR> <TR VALIGN=TOP BGCOLOR=WHITE><TD><B>packet_tx</B></TD> @@ -871,12 +994,12 @@ supplied structure: seriously slow down the system.</FONT> </TD> <TD> - <UL> - <LI>t - Tunnel ID</LI> - <LI>s - Session ID</LI> - <LI>buf - The raw packet data</LI> - <LI>len - The length of buf</LI> - </UL> + <DL> + <DT>t<DD>Tunnel + <DT>s<DD>Session + <DT>buf<DD>The raw packet data + <DT>len<DD>The length of buf + </DL> </TD> </TR> <TR VALIGN=TOP BGCOLOR=WHITE><TD><B>timer</B></TD> @@ -885,9 +1008,9 @@ supplied structure: you do is reentrant. </TD> <TD> - <UL> - <LI>time_now - The current unix timestamp</LI> - </UL> + <DL> + <DT>time_now<DD>The current unix timestamp + </DL> </TD> </TR> <TR VALIGN=TOP BGCOLOR=WHITE><TD><B>new_session</B></TD> @@ -895,10 +1018,10 @@ supplied structure: session is now ready to handle traffic. </TD> <TD> - <UL> - <LI>t - Tunnel ID</LI> - <LI>s - Session ID</LI> - </UL> + <DL> + <DT>t<DD>Tunnel + <DT>s<DD>Session + </DL> </TD> </TR> <TR VALIGN=TOP BGCOLOR=WHITE><TD><B>kill_session</B></TD> @@ -906,10 +1029,10 @@ supplied structure: This may be called multiple times for the same session. </TD> <TD> - <UL> - <LI>t - Tunnel ID</LI> - <LI>s - Session ID</LI> - </UL> + <DL> + <DT>t<DD>Tunnel + <DT>s<DD>Session + </DL> </TD> </TR> <TR VALIGN=TOP BGCOLOR=WHITE><TD><B>radius_response</B></TD> @@ -919,12 +1042,24 @@ supplied structure: modules. </TD> <TD> - <UL> - <LI>t - Tunnel ID</LI> - <LI>s - Session ID</LI> - <LI>key</LI> - <LI>value</LI> - </UL> + <DL> + <DT>t<DD>Tunnel + <DT>s<DD>Session + <DT>key + <DT>value + </DL> + </TD> + </TR> + <TR VALIGN=TOP BGCOLOR=WHITE><TD><B>radius_reset</B></TD> + <TD>This is called whenever a RADIUS CoA request is + received to reset any options to default values before + the new values are applied. + </TD> + <TD> + <DL> + <DT>t<DD>Tunnel + <DT>s<DD>Session + </DL> </TD> </TR> <TR VALIGN=TOP BGCOLOR=WHITE><TD><B>control</B></TD> @@ -933,21 +1068,13 @@ supplied structure: required. </TD> <TD> - <UL> - <LI>buf - The raw packet data</LI> - <LI>l - The raw packet data length</LI> - <LI>source_ip - Where the request came from</LI> - <LI>source_port - Where the request came from</LI> - <LI>response - Allocate a buffer and put your response in here</LI> - <LI>response_length - Length of response</LI> - <LI>send_response - true or false whether a response - should be sent. If you set this to true, you must - allocate a response buffer.</LI> - <LI>type - Type of request (see nsctl.c)</LI> - <LI>id - ID of request</LI> - <LI>data - I'm really not sure</LI> - <LI>data_length - Length of data</LI> - </UL> + <DL> + <DT>iam_master<DD>Cluster master status + <DT>argc<DD>The number of arguments + <DT>argv<DD>Arguments + <DT>response<DD>Return value: NSCTL_RES_OK or NSCTL_RES_ERR + <DT>additional<DD>Extended response text + </DL> </TD> </TR> </TABLE> @@ -1028,6 +1155,13 @@ A master, when determining that it has at least one up-to-date slave will drop all routes (raising them again if all slaves disappear) and subsequently handle only packets forwarded to it by the slaves.<P> +*Configurable with <B>cluster_master_min_adv</B><P> + +Multiple clusters can be run on the same network by just using different +multicast <B>cluster_address</B>. However, for a given host to be part +of multiple clusters without mixing the clusters, +<B>cluster_port</B> must be different for each cluster.<B> + <H2 ID="Routing">Routing</H2> If you are running a single instance, you may simply statically route the IP pools to the <B>bind_address</B> (l2tpns will send a gratuitous @@ -1039,22 +1173,6 @@ ibgp" for IBGP. If this is not supported by your IOS revision, you can use "maximum-paths" (which works for EBGP) and set <B>as_number</B> to a private value such as 64512.<P> -<H2 ID="AvoidingFragmentation">Avoiding Fragmentation</H2> - -Fragmentation of encapsulated return packets to the LAC may be avoided -for TCP sessions by adding a firewall rule to clamps the MSS on -outgoing SYN packets. - -The following is appropriate for interfaces with a typical MTU of -1500: - -<pre> -iptables -A FORWARD -i tun+ -o eth0 \ - -p tcp --tcp-flags SYN,RST SYN \ - -m tcpmss --mss 1413:1600 \ - -j TCPMSS --set-mss 1412 -</pre> - <H2 ID="Performance">Performance</H2> Performance is great.<P>