VPN接続しようと思った

ギガビット環境化の一歩として前々から買おうかなと思っていたRTX1200なルータが手に入ったので、
ついでにIX2015で出来なかった(と思われる)、動的IPに対応できるVPNを構築を構築した。
接続の方式?はL2TP/IPSec
YAMAHAさんは様々な構築の提案を公開してくださっており、すばらしい。
http://www.rtpro.yamaha.co.jp/RT/docs/l2tp_ipsec/index.html#setting2
自分の環境で設定しないといけない箇所さえ分かれば、例に沿って設定すれば出来てしまう。


要はあらゆる外部のクライアントとRTX1200の間をトンネリングするだけ。


ただ、設定を誤ってしまい、
RTX1200と自身に振られたVPNのプライベートIPにはpingが届くのに、他の端末にpingが届かなかった。
同じサブネットマスクのIPが振られてるのになんでだろうなー。
arp -aとかやってみると、どうもRTX1200より先のIPとMACが見えてない様子。
各機器の関連図はこんな感じ。

[外部端末]=====(インターネット)=====[RTX1200]-----[内部端末...]
            ↑トンネリング                     ↑ここから先が通信できない

今回のトンネリングされている部分の通信は、何かしらのパケットであってもIPSecのESPパケットでラップされて通信されるので、ARPパケットもRTX1200までちゃんと届く。
なので、RTX1200のIPとMACアドレスは識別できる。
ただ、その先の内部端末と通信するにはRTX1200を介さないといけない。

arpパケットはあるIPを誰が持ってるか判別するためのもので、届く範囲で無差別に送る。
それで、受け取った端末が自分のIPである場合は、応答し、送信元はそのIPと応答があったパケットのMACアドレスを紐付けることができ、以降はその情報を元にやりとりする。
ただ、受け取った端末が自分のではないIPである場合は、ARPパケットを無視する。


なので、RTX1200まではパケットが届いていても、RTX1200が内部端末にまではパケットを送ってくれているわけではないため、通信が出来なかった。


...のだと思う。


これを解決するには、RTX1200が内部端末向けのARPパケットを受け取ったら、内部端末に代わって応答するようにし、
以降、受け取ったパケットを内部端末へ横流ししてあげる仕組みを導入する必要がある。
MACアドレスはRTX1200のものだけど、IPアドレスは内部端末のものを示すようにすれば、
RTX1200がパケットを受け取って、MACアドレスを書き換えて内部に送る感じで通信が出来る。
これはProxy ARPというもので実現できるとか。
RTX1200でいうと以下の設定になる。

ip lan1 proxyarp on


この設定は上記の設定集に書かれていたんだけどねry
いや、まぁいい勉強になりました。