IPv6のトンネルに使ったmpdでL2TPのサーバを組んでみた。
あまり頭を使わず、ググッてこんな設定にしてみた。
l2tp_server:
set ippool add pool1 192.168.16.0 192.168.16.255
create bundle template B1
set iface idle 1800
set iface enable proxy-arp
set iface enable tcpmssfix
set ipcp ranges 192.168.2.1/24 ippool pool1
set ipcp dns 192.168.1.1
create link template L1 l2tp
set link action bundle B1
set link enable multilink
set link keep-alive 10 60
set link disable chap eap
set link enable chap-msv2
set link mtu 1376
set link mru 1376
set auth authname l2tp@toby
set link enable incoming
トンネルの相手側が192.168.16.0-192.167.16.255がわりあたり、サーバ側は192.168.2.1/24が割当たるようになる。
で、この状態で、kernelがパケット転送してくれないと困るので、
# sysctl net.inet.ip.forwarding=1
を実行。これは、rc.confにgateway_enable=”YES”とかいておけばboot時にやってくれるはず。
さらに、ひかり電話のルータで、192.168.16.0/24のゲートウェイを192.168.1.2(サーバのひかり電話ルータ側のアドレス)に設定してあげれば、トンネルの先からひかり電話のルータを経由して通信ができる。本当はroutedで経路を広めるほうがいいのかな。
最後に、ひかり電話のルータでUDP/1701に穴を開けて、Xperia arcからL2TPトンネルを張ってみる。
見事成功。サーバ側にはng1が出来た。
SIPでひかり電話の内線にもなれる。webで外にもつながっている。ただしwebはちょっと遅い。
ただ、spmodeのメールだけはダメ。tcpdump -i ng1 でトンネルから出てきたパケットを見てみたら、auth.spmode.ne.jpにhttpsでつなぎに行っている。spmodeってhttpsで最初につなぐらしい。
tcpdump -i ng1 して眺めていたら、たまにspmodeのAPNからもらったIPアドレスで通信している。こいつはさすがにルーティングできない。
出来れば、IPSecでトンネルを強化したいところだけど、こちらはまた今度。
ちなみに、トンネルからやってくる通信がL2TPサーバ自身がしゃべっている様に周りに見せてあげれば、ルーティングとか気にしなくていいはずで、それをやろうと思って、IPDIVERTとかIPFIREWALL_NATとかを入れてカーネルを再構築してみた。こちらもまた今度。