配置基于IP的静态L2TPv3隧道

    xiaoxiao2022-07-14  161

     

    L2TP网络拓扑如下,两个系统Host-A与Host-B直连互通,网段为192.168.1.0/24:

    Host-A Host-B |-------------------| |-------------------| | | | | | 192.168.1.115 | <---------> | 192.168.1.109 | | | | | |-------------------| |-------------------|

     

    Host-A配置

    根据ip-l2tp的man文档,完整的tunnel隧道配置命令如下:

    ip l2tp add tunnel remote ADDR local ADDR tunnel_id ID peer_tunnel_id ID [ encap udp ]

    指定本示例配置封装采用IP方式,需要注意的是不同于UDP封装模式,IP封装方式在经过NAT设备时将不能工作。具体配置命令如下:

    $ ip l2tp add tunnel tunnel_id 10 peer_tunnel_id 20 encap ip local 192.168.1.115 remote 192.168.1.109

    查看配置:

    $ sudo ip l2tp show tunnel Tunnel 10, encap IP From 192.168.1.115 to 192.168.1.109 Peer tunnel 20 $

    之后,配置L2TP session,加载l2tp_ip内核模块。IP封装类型,会话session创建的完整命令如下:

    ip l2tp add session [ name NAME ] tunnel_id ID session_id ID peer_session_id ID [ cookie HEXSTR ] [ peer_cookie HEXSTR ] [ l2spec_type { none | default } ] [ seq { none | send | recv | both } ] [ offset OFFSET ] [ peer_offset OFFSET ]

    本示例忽略其中的name参数,不指定将使用默认的规则创建会话接口设备,即l2tpethN,其中N为数字。忽略cookie和peer_cookie参数,如果指定的话将在L2TP头部携带此参数,通信两端将对cookie值进行校验;否则,L2TP头部不携带cookie参数。忽略l2spec_type参数。忽略seq参数,不在L2TP头部中携带序号。offset以及peer_offset参数指定报文中数据以L2TP头部开始的偏移位置,如果使用,此两个参数要相同,具体配置命令如下:

    $ modprobe l2tp_ip $ ip l2tp add session tunnel_id 10 session_id 100 peer_session_id 200

    检查配置:

    $ sudo ip l2tp show session Session 100 in tunnel 10 Peer session 200, tunnel 20 interface name: l2tpeth0 offset 0, peer offset 0

    设置会话session接口的IP地址,以及设置为UP状态。

    $ ip addr add 10.1.1.1/24 dev l2tpeth0 $ ip link set dev l2tpeth0 up

     

    Host-B配置

    Host-B的隧道tunnel配置与Host-A的配置要对称,包括tunnel_id,以及L2TP的源和目的地址。

    $ ip l2tp add tunnel tunnel_id 20 peer_tunnel_id 10 encap ip local 192.168.1.109 remote 192.168.1.115

    查看隧道配置:

    $ sudo ip l2tp show tunnel tunnel_id 20 Tunnel 20, encap IP From 192.168.1.109 to 192.168.1.115 Peer tunnel 10 $

    配置会话session,session_id要与Host-A的配置对称。

    $ modprobe l2tp_ip $ ip l2tp add session tunnel_id 20 session_id 200 peer_session_id 100

    查看会话session的配置:

    $ sudo ip l2tp show session session_id 200 Session 200 in tunnel 20 Peer session 100, tunnel 10 interface name: l2tpeth0 offset 0, peer offset 0

    设置会话session接口的IP地址,以及设置接口为UP状态。

    $ ip addr add 10.1.1.2/24 dev l2tpeth0 $ ip link set dev l2tpeth0 up

     

    连通性测试

    在Host-B设备上使用ping测试L2TP连通性,如下命令:

    [Host-B ~]$ ping 10.1.1.1 PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data. 64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=0.160 ms 64 bytes from 10.1.1.1: icmp_seq=2 ttl=64 time=0.124 ms

    在Host-A上抓包显示如下:

     

    清除L2TP配置。清除隧道,与之关联的会话session被同时清除。

    [Host-A ~]$ sudo ip l2tp del tunnel tunnel_id 10 [Host-B ~]$ sudo ip l2tp del tunnel tunnel_id 20

     

    END

     

    最新回复(0)