PC ルーターとして構築した Slackware 10.2 で VPN パススルーを実現する
SERVER
PPTP-VPN パススルー
Liinux で構築した PC ルーターを間に挟むネットワークで、その内側に構築した PPTP-VPN サーバーへ外側からアクセスしようとしてみたところ、上手く接続することができませんでした。
PPTP-VPN サーバーへ接続するためには、1723/TCP ポートと併せて GRE パケットを転送するひつようがあるのですが、どうやら GRE パケットの方が正しく転送できていないような感じです。調べてみると "ip_gre.o" というモジュールによって GRE トンネリングを行うことができるとのことでしたので、それを用いて PPTP-VPN を開通させてみることにしました。
まず、1723/TCP と GRE パケットの転送については、次のようになると思います。
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 1723 -j DNAT --to 192.168.1.5:1723
iptables -t nat -A PREROUTING -i ppp0 -p gre -j DNAT --to 192.168.1.5
これは、PPTP-VPN サーバーの IP アドレスが 192.168.1.5 で、接続要求が ppp0 インターフェイスから来るものとして設定しています。
これだけだと GRE パケットが正しく通過できないようですので、GRE トンネリングを行えるように、次のようにして "ip_gre.o" モジュールを読み込みます。
insmod ip_gre
これで、この PC ルーターを経由して、内部の PPTP-VPN サーバーへ接続できるようになりました。
"ip_gre.o" モジュールを Linux 起動時に読み込むようにするには、Slackware の場合は "/etc/rc.d/rc.modules" ファイルに次の行を追加すれば大丈夫です。
modprobe ip_gre