初版: 2008-06-12
最終更新日:
2008-06-12
	         +-----------+
	         |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
	     +----------+
  
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のようなログが残ります。
	${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」を外すといいでしょう。
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 … 番号 …みたいな設定を追加するのをお忘れなく。