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とかを入れてカーネルを再構築してみた。こちらもまた今度。