Network Users' Group ``wheel'' / Dai ISHIJIMA's Page / RTシリーズルータ /
イントラネットのPCから外部のPPTPサーバへ
PPTPでVPN2台のRTをPPTP接続PoPToP PPTPサーバ
IPsecでVPNRTとBSDをIPsecで接続

初版: 2008-06-12
最終更新日: 2008-06-12


PPTPでVPN

〜 イントラネットのPCから外部のPPTPサーバへ接続 〜

☆ネットワーク構成

下図のネットワークにおいて、 組織内ネットワーク(イントラネット)から、 FreeBSD NAT box (ipfw(8)+natd(8))とRTシリーズルータを経由して、 外部のPPTPサーバに接続する設定例を紹介します。 PPTP VPNでは、PPTP(1723/tcp)と GRE(Generic Routing Encapsulation)パケットを通過させる必要があります。 本ページでは、それらのパケットを通す設定例を示します。
	         +-----------+
	         |PPTP server|
	         +-----------+
                       |172.16.1.1
                       |
                    Internet
                       |
	          +---------+
	          |RT series| with packet filtering
	          +---------+
                       |172.16.2.1/28
                       |
                       |172.16.2.2/28 (fxp0)
	         +-----------+
 	         |FreeBSD box| ↑ipfw(8)+natd(8)
	         +-----------+
                       |192.168.0.1/24 (em0)
                       |
            +-----+----+-----------+ Intranet 192.168.0.0/24
                  |
                  |192.168.0.5
	     +----------+
 	     |Windows PC| PPTP client
	     +----------+
  


☆前提条件


☆何もしないでつないでみると…

特段の設定をFreeBSD boxで行わないで、 いきなりPPTPクライアント (192.168.0.5) からつなごうとすると、 次のようなログが記録されるはずです。
	ipfw: 65500 Deny P:47 192.168.0.5 172.16.1.1 in via em0
これは、GREパケットを通す設定がされていないからです。 ちなみに、「P:47」はGREパケットを意味します。 詳しくは/etc/protocolsを見てください。

なお、PPTP (1723/tcp) パケットは、

	# Allow TCP through if setup succeeded
	${fwcmd} add pass tcp from any to any established
	<中略>

	# Reject&Log all setup of incoming connections from the outside
	${fwcmd} add deny log tcp from any to any in via ${oif} setup

	# Allow setup of any other TCP connection
	${fwcmd} add pass tcp from any to any setup
の3番目のルールと1番目のルールで通過します。

もし、1723/tcpのパケットについて監視したいのであれば、とりあえず

	${fwcmd} add pass log tcp from 192.168.0.0/24 1024-65535
	to not 192.168.0.0/24 1024-65535 via ${iif} setup
みたいなルールをどこかに書いておけばいいでしょう。 すると、
	ipfw: 番号 Accept TCP 192.168.0.5 172.16.1.1:1723 in via em0
のようなログが残ります。


☆FreeBSD boxの追加設定でGREを通す

rc.firewallの適当な場所に次の設定を追加します。
	${fwcmd} add pass gre from 192.168.0.0/24 to 172.16.1.1
        ${fwcmd} add pass gre from 172.16.1.1 to 192.168.0.0/24
        ${fwcmd} add pass gre from ${oip} to 172.16.1.1
        ${fwcmd} add pass log gre from any to any
4番目のルールは失敗したときのための保険です。 実際にはないほうがいいでしょう。 また、最初に試すときは「add pass」の代わりに 「add pass log」としてもいいかもしれません。 その代わり、大量のログが出てくるかもしれないので、 うまく接続できた後は、 ログをださないように「add pass」にして「log」を外すといいでしょう。


☆RTシリーズの追加設定でGREを通す

RTシリーズルータでも、TCPパケットについては、 外→内のフィルタリングルールで
	ip filter 番号 pass * 172.16.2.0/28 established * *
内→外のルールで
	ip filter 番号 pass * * * * *
のようなものが設定されているでしょうから、 追加設定なしで1723/tcpのパケットはとおるはずです。 しかし、GREパケットについては、特段の設定がないので、
	Rejected at IN(番号) filter: proto=47 172.16.1.1 > 172.16.2.2
というログがでて、パケットが破棄されるでしょう。

そこで、適当な番号で以下のルールを設定します。

	ip filter 番号 pass 172.16.1.1 172.16.2.0/28 gre * *
もちろん、
	ip pp secure filter in … 番号 …
みたいな設定を追加するのをお忘れなく。


☆トラブルシューティングとヒント

PPTP VPNに限りませんが、 という順番でログを観察しつつ微調整…でしょうか。


☆関連リンク

  1. RTX1000とSL-Zaurus (C760) をIPsec/VPNで接続する例
  2. RTX1000とFreeBSD boxをIPsec/VPNで接続
  3. NetVolanteをPPTP VPNでつなぐ
  4. RTシリーズルータをPPTPサーバにして外部プロバイダから接続する
  5. RT/RTA/RTXシリーズルータ関連情報



ご質問などありましたらお気軽に