2010年9月8日水曜日

L2TPv3 on Linux 2.6.35

Linux kernel 2.6.35 でマージされた、L2TPv3 Psuedo-wire emulation を使ってみる。
といっても、とりあえず Documentation/networking/l2tp.txt のサンプルをそのまま使ってみただけだけど。

まず、L2TPv3 をサポートするように、iproute2 にパッチをあてます。


このパッチをあててコンパイルするには、dev-libs/libnl が必要なのであらかじめいれておく。

$ sudo emerge dev-libs/libnl
 $ cd /path/to/iproute2/source
 $ patch -p1 < RFC-1-2-iproute2-Add-libnl-support..patch
 $ patch -p1 < RFC-2-2-iproute2-Add-support-for-static-L2TPv3-tunnels..patch
 $ make
次に、モジュールをロードします。
$ sudo modprobe l2tp_eth
 $ sudo modprobe l2tp_netlink
menuconfig で有効化するのは以下の物。
[*] Networking support  --->
      Networking options  --->
       <M> Layer Two Tunneling Protocol (L2TP)  --->
           --- Layer Two Tunneling Protocol (L2TP)
           [*]   L2TPv3 support (EXPERIMENTAL)
           <M>    L2TP IP encapsulation for L2TPv3
           <M>    L2TP ethernet pseudowire support for L2TPv3    



今回の構成はこんなものとする。

まず、Site A から。

$ sudo ./ip/ip l2tp add tunnel tunnel_id 1 peer_tunnel_id 1 udp_sport 5000 \
  udp_dport 5000 encap udp local 192.168.1.1 remote 192.168.1.2
$ sudo ./ip/ip l2tp add session tunnel_id 1 session_id 1 peer_session_id 1
$ sudo ifconfig -a
$ sudo ./ip/ip addr add 10.5.1.2/32 peer 10.5.1.1/32 dev l2tpeth0
$ sudo ifconfig l2tpeth0 up

次に、Site B
$ sudo ./ip/ip l2tp add tunnel tunnel_id 1 peer_tunnel_id 1 udp_sport 5000 \
  udp_dport 5000 encap udp local 192.168.1.2 remote 192.168.1.1
$ sudo ./ip/ip l2tp add session tunnel_id 1 session_id 1 peer_session_id 1
$ sudo ifconfig -a
$ sudo ./ip/ip addr add 10.5.1.1/32 peer 10.5.1.2/32 dev l2tpeth0
$ sudo ifconfig l2tpeth0 up