PPTPDのマスカレード(PPTP OVER OPENVPN)が出来ない ; ;

通常のVPN

OPENVPN SERVER
↓↑
(OPENVPN)
↓↑
OPENVPN CLIENT

iPhoneからOPENVPN SERVERの外からOPENVPN CLIENTと同じネットワーク内のクライアントとしてOPENVPN CLIENTに接続したい場合、iPhoneではOPENVPN使えずPPTPを使いOPENVPN回線の上にPPTPを乗せる必要が出てきます。残念ながらOPENVPNからすべてをPPTPに切れ換えができないという現状。というわけで

iPhone
↓↑
(PPTP)
↓↑
OPENVPN SERVER (1723portとGREのマスカレード)
↓↑
(PPTP OVER OPENVPN)
↓↑
PPTP SERVER & OPENVPN CLIENT ←iPhoneはこのPPTPDにアクセスし同一ネットワークに

と策略。

OPENVPN SERVERではiPhoneから接続要求を受けるPPTP, 1723portとGREをマスカレードしてOPENVPNの回線を介してOPEN CLIENTとPPTPで接続するという流れ。

OPENVPN SERVERでiptablesで単純に1723portとGREのマスカレードをすればいいと思っていたわけだがこれがうまく行かない。GREプロトコルのパケットがうまくマスカレードしない。

OPENVPN SERVERでiptables

iptables -F
iptables -t nat -F
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 1723 -j DNAT --to-destination 192.168.x.x:1723
iptables -t nat -A POSTROUTING -p tcp -s 0.0.0.0/0 -d 192.168.x.x  --dport 1723 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p 47 -j DNAT --to-destination 192.168.x.x
iptables -t nat -A POSTROUTING -p 47 -s 0.0.0.0/0 -d 192.168.x.x -j MASQUERADE

eth0 = OPENVPN SERVER(グローバル)
192.168.x.x = OPENVPN CLIENT

1723ポートは通るのですがGRE(proto 47)のマスカレード出来ない。

/var/log/syslog

Sep 30 11:29:24 server pptpd[19659]: GRE: read(fd=7,buffer=805a540,len=8196) from PTY failed: status = -1 error = Input/output error, usually caused by unexpected termination of pppd, check option syntax and pppd logs
Sep 30 11:29:24 server pptpd[19659]: CTRL: PTY read or GRE write failed (pty,gre)=(7,8)
Sep 30 11:29:24 server pptpd[19659]: CTRL: Reaping child PPP[19685]
Sep 30 11:29:24 server pptpd[19659]: CTRL: Client 192.168.xx.xx control connection finished

としてGREプロトコルの読み書きが出来ないとエラーを吐いてPPTPと接続ができない。
モジュールの読み込みのエラーかなとモジュールを見てみるが

nf_nat_pptp, nf_conntrack_pptp, 
nf_conntrack_proto_gre, nf_nat_proto_gre,
nf_nat,nf_conntrack

が読み込まれており念のために各モジュールに対してmodprobe,depmod -aしてみるが状況は変わらず。

iptablesGRE(proto 47)をマスカレードする方法があるのかなー。うむ。