1
0
mirror of https://github.com/rtbrick/bngblaster.git synced 2024-05-06 15:54:57 +00:00
Christian Giese 40d23ec4cd #3 L2TPv2 LNS Support
+ update docs
+ add L2TP data traffic config options
+ ...
2021-02-23 22:04:48 +01:00

9.7 KiB

L2TPv2

The BNG Blaster is able to emulate L2TPv2 (RFC2661) LNS servers to be able to test the L2TPv2 LAC functionality of the BNG device under test.

Configuration

Following an example with 30 L2TP LNS servers.

{
    "interfaces": {
        "network": {
            "interface": "eth2",
            "address": "10.0.0.1",
            "gateway": "10.0.0.2",
            "address-ipv6": "fc66:1337:7331:8::10",
            "gateway-ipv6": "fc66:1337:7331:8::1"
        },
        "access": [
            {
                "interface": "eth1",
                "outer-vlan-min": 1,
                "outer-vlan-max": 4000,
                "inner-vlan-min": 7,
                "inner-vlan-max": 7,
                "authentication-protocol": "PAP"
            },
            {
                "interface": "eth1",
                "outer-vlan-min": 1,
                "outer-vlan-max": 4000,
                "inner-vlan-min": 8,
                "inner-vlan-max": 8,
                "authentication-protocol": "CHAP"
            }
        ]
    },
    "pppoe": {
        "reconnect": true,
        "discovery-timeout": 3,
        "discovery-retry": 10
    },
    "ppp": {
        "mru": 1492,
        "authentication": {
            "username": "blaster@l2tp.de",
            "password": "test",
            "timeout": 1,
            "retry": 60
        },
        "lcp": {
            "conf-request-timeout": 5,
            "conf-request-retry": 30,
            "keepalive-interval": 30,
            "keepalive-retry": 3
        },
        "ipcp": {
            "enable": true
        },
        "ip6cp": {
            "enable": true
        }
    },
    "access-line": {
        "agent-remote-id": "DEU.RTBRICK.{session}",
        "agent-circuit-id": "0.0.0.0/0.0.0.0 eth 0:{session}",
        "rate-up": 1024,
        "rate-down": 16384
    },
    "l2tp-server": [
        {
            "name": "LNS1",
            "address": "10.0.0.11",
            "secret": "test1",
            "receive-window-size": 8
        },
        {
            "name": "LNS2",
            "address": "10.0.0.12",
            "secret": "test2",
            "receive-window-size": 8
        },
        {
            "name": "LNS3",
            "address": "10.0.0.13",
            "secret": "test3",
            "receive-window-size": 8
        },
        {
            "name": "LNS4",
            "address": "10.0.0.14",
            "secret": "test4",
            "receive-window-size": 8
        },
        {
            "name": "LNS5",
            "address": "10.0.0.15",
            "secret": "test5",
            "receive-window-size": 8
        },
        {
            "name": "LNS6",
            "address": "10.0.0.16",
            "secret": "test6",
            "receive-window-size": 8
        },
        {
            "name": "LNS7",
            "address": "10.0.0.17",
            "secret": "test7",
            "receive-window-size": 8
        },
        {
            "name": "LNS8",
            "address": "10.0.0.18",
            "secret": "test8",
            "receive-window-size": 8
        },
        {
            "name": "LNS9",
            "address": "10.0.0.19",
            "secret": "test9",
            "receive-window-size": 8
        },
        {
            "name": "LNS10",
            "address": "10.0.0.20",
            "secret": "test10",
            "receive-window-size": 8
        },
        {
            "name": "LNS11",
            "address": "10.0.0.21",
            "secret": "test11",
            "receive-window-size": 8
        },
        {
            "name": "LNS12",
            "address": "10.0.0.22",
            "secret": "test12",
            "receive-window-size": 8
        },
        {
            "name": "LNS13",
            "address": "10.0.0.23",
            "secret": "test13",
            "receive-window-size": 8
        },
        {
            "name": "LNS14",
            "address": "10.0.0.24",
            "secret": "test14",
            "receive-window-size": 8
        },
        {
            "name": "LNS15",
            "address": "10.0.0.25",
            "secret": "test15",
            "receive-window-size": 8
        },
        {
            "name": "LNS16",
            "address": "10.0.0.26",
            "secret": "test16",
            "receive-window-size": 8
        },
        {
            "name": "LNS17",
            "address": "10.0.0.27",
            "secret": "test17",
            "receive-window-size": 8
        },
        {
            "name": "LNS18",
            "address": "10.0.0.28",
            "secret": "test18",
            "receive-window-size": 8
        },
        {
            "name": "LNS19",
            "address": "10.0.0.29",
            "secret": "test19",
            "receive-window-size": 8
        },
        {
            "name": "LNS20",
            "address": "10.0.0.30",
            "secret": "test20",
            "receive-window-size": 8
        },
        {
            "name": "LNS21",
            "address": "10.0.0.31",
            "secret": "test21",
            "receive-window-size": 8
        },
        {
            "name": "LNS22",
            "address": "10.0.0.32",
            "secret": "test22",
            "receive-window-size": 8
        },
        {
            "name": "LNS23",
            "address": "10.0.0.33",
            "secret": "test23",
            "receive-window-size": 8
        },
        {
            "name": "LNS24",
            "address": "10.0.0.34",
            "secret": "test24",
            "receive-window-size": 8
        },
        {
            "name": "LNS25",
            "address": "10.0.0.35",
            "secret": "test25",
            "receive-window-size": 8
        },
        {
            "name": "LNS26",
            "address": "10.0.0.36",
            "secret": "test26",
            "receive-window-size": 8
        },
        {
            "name": "LNS27",
            "address": "10.0.0.37",
            "secret": "test27",
            "receive-window-size": 8
        },
        {
            "name": "LNS28",
            "address": "10.0.0.38",
            "secret": "test28",
            "receive-window-size": 8
        },
        {
            "name": "LNS29",
            "address": "10.0.0.39",
            "secret": "test29",
            "receive-window-size": 8
        },
        {
            "name": "LNS30",
            "address": "10.0.0.40",
            "secret": "test30",
            "receive-window-size": 8
        }
    ],
    "session-traffic": {
        "autostart": true,
        "ipv4-pps": 1
    }
}

Receive Tunnel Information

$ sudo ./cli.py run.sock l2tp-tunnels

{
    "status": "ok",
    "code": 200,
    "l2tp-tunnels": [
        {
            "state": "Established",
            "server-name": "LNS1",
            "server-address": "10.0.0.11",
            "tunnel-id": 1,
            "peer-tunnel-id": 50011,
            "peer-name": "BNG",
            "peer-address": "10.0.0.2",
            "peer-vendor": "RtBrick, Inc.",
            "secret": "test1",
            "control-packets-rx": 102,
            "control-packets-rx-dup": 0,
            "control-packets-rx-out-of-order": 0,
            "control-packets-tx": 102,
            "control-packets-tx-retry": 0,
            "control-data-rx": 1406,
            "control-data-tx": 206
        }
    ]
}

Receive Session Information

The l2tp-sessions command returns all L2TP sessions.

$ sudo ./cli.py run.sock l2tp-sessions

{
    "status": "ok",
    "code": 200,
    "l2tp-sessions": [
        {
            "state": "Established",
            "tunnel-id": 1,
            "session-id": 1,
            "peer-tunnel-id": 50011,
            "peer-session-id": 32867,
            "peer-proxy-auth-name": "blaster@l2tp.de",
            "peer-called-number": "N/A",
            "peer-calling-number": "N/A",
            "peer-sub-address": "N/A",
            "peer-tx-bps": 48000,
            "peer-rx-bps": 1000,
            "peer-ari": "DEU.RTBRICK.1",
            "peer-aci": "0.0.0.0/0.0.0.0 eth 0:1"
        }
    ]
}

This output can be also filtered to return only sessions of a given tunnel.

sudo ./cli.py run.sock l2tp-sessions tunnel-id 1

It is also possible to display a single session.

$ sudo ./cli.py run.sock l2tp-sessions tunnel-id 1 session-id 1

RFC5515

The Agent-Circuit-Id and Agent-Remote-Id AVP defined in RFC5515 is supported and stored for each session if received. Received CSUN messages are processed correctly and via control socket it is possible to send also CSURQ requests to the LAC.

Variable Data Header

The L2TP protocol allows different data header options resulting in variable header lengths. The most common options can be tested with just four servers as shown in the example below.

{
    "l2tp-server": [
        {
            "name": "LNS1",
            "address": "10.0.0.11",
            "secret": "test1",
            "receive-window-size": 8,
            "congestion-mode": "default",
            "data-control-priority": true
        },
        {
            "name": "LNS2",
            "address": "10.0.0.12",
            "secret": "test2",
            "receive-window-size": 8,
            "congestion-mode": "default",
            "data-control-priority": true,
            "data-length": true
        },
        {
            "name": "LNS3",
            "address": "10.0.0.11",
            "secret": "test3",
            "receive-window-size": 8,
            "congestion-mode": "default",
            "data-control-priority": true,
            "data-offset": true
        },
        {
            "name": "LNS4",
            "address": "10.0.0.12",
            "secret": "test4",
            "receive-window-size": 8,
            "congestion-mode": "default",
            "data-control-priority": true,
            "data-length": true,
            "data-offset": true
        }
    ]
}