iptables の設定
基本的には、PPTP を通すため、1723/tcp を許可することと、PPTPは GRE(プロトコル番号47番)を使用するので、GRE を送受信ともに許可してあげることが必要になります。
具体的には次の3行が必要になります。(デフォルトで、INPUT, OUPUT チェーンが DROP と想定)
/sbin/iptables -A INPUT -p tcp --dport 1723 -i eth0 -j ACCEPT /sbin/iptables -A INPUT -p 47 -i eth0 -j ACCEPT /sbin/iptables -A OUTPUT -p 47 -o eth0 -j ACCEPT
その上で、透過型プロキシとするには、N-06C からやってくる TCP 80番の通信トラフィックを Squid に回るようにしてあげなくてはなりません。これはいわゆる Destination NAT (DNAT) と呼ばれるもので、宛先の IP アドレスとポート番号を PREROUTING チェーンで改変します。
/sbin/iptables -t nat -A PREROUTING -s 172.16.2.0/24 -p tcp -m tcp --dport 80 -j DNAT --to-destination IPaddress:8080
IPaddress:8080 の IPaddressの部分はお使いの VPS の eth0 の IPアドレスになります。
POSTROUTING チェーンで全てのパケットを NAPT(IPマスカレード)することで、終わります。
/sbin/iptables -t nat -A POSTROUTING -s 172.16.2.0/24 -j MASQUERADE
pptp接続するとppp0 などのインターフェースが作られ、ppp0 から eth0 またはその反対の通信は内部的にはルーティングになるため、Incoming と Outgoing の両方のパケットが通るようにする必要があります。
/sbin/iptables -A INPUT -i ppp+ -j ACCEPT /sbin/iptables -A OUTPUT -o ppp+ -j ACCEPT
また、ppp+ から eth0 のようにインターフェース間でのルーティングを許可します。
/sbin/iptables -A FORWARD -j ACCEPT
実際にインターフェース間でルーティングを行うには、/etc/sysctl.conf の編集が必要です。
# vi /etc/sysctl.conf net.ipv4.ip_forward = 1
以上の設定を、iOS で L2TP over IPsec ソリューション で示した iptables のサンプルに追加すると、次のような iptables 変更スクリプトになります。
# vi fw.sh (以下内容) #!/bin/sh /sbin/iptables -F /sbin/iptables -X /sbin/iptables -t nat -F /sbin/iptables -P INPUT DROP /sbin/iptables -P OUTPUT DROP /sbin/iptables -P FORWARD DROP # ------------------------------------------------------------- # INPUT Chain # ------------------------------------------------------------- /sbin/iptables -A INPUT -i lo -j ACCEPT /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # ## L2TP/IPsec /sbin/iptables -A INPUT -p udp --dport 500 -i eth0 -j ACCEPT /sbin/iptables -A INPUT -p udp --dport 4500 -i eth0 -j ACCEPT /sbin/iptables -A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT # ## Allow packets via L2TP and PPTP tunnel /sbin/iptables -A INPUT -i ppp+ -j ACCEPT # ## PPTP /sbin/iptables -A INPUT -p tcp --dport 1723 -i eth0 -j ACCEPT /sbin/iptables -A INPUT -p 47 -i eth0 -j ACCEPT # ## Insert your own rule(s) here to allow access via INPUT chain: /sbin/iptables -A INPUT -p tcp --dport 22 -m state --state NEW -i eth0 -j ACCEPT /sbin/iptables -A INPUT -p tcp -s 172.16.2.0/24 --dport 8080 -m state --state NEW -i eth0 -j ACCEPT # ----------------------- # OUTPUT Chain # ----------------------- /sbin/iptables -A OUTPUT -o lo -j ACCEPT /sbin/iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # ## L2TP/IPsec /sbin/iptables -A OUTPUT -p udp --sport 500 -o eth0 -j ACCEPT /sbin/iptables -A OUTPUT -p udp --sport 4500 -o eth0 -j ACCEPT /sbin/iptables -A OUTPUT -p udp -m policy --dir out --pol ipsec -m udp --sport 1701 -j ACCEPT # ## PPTP /sbin/iptables -A OUTPUT -p 47 -o eth0 -j ACCEPT # ## ICMP request/reply /sbin/iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT /sbin/iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT # ## Allow packets via L2TP and PPTP tunnel /sbin/iptables -A OUTPUT -o ppp+ -j ACCEPT # ## Insert your own rule(s) here to allow access via INPUT chain: /sbin/iptables -A OUTPUT -p tcp --dport 21:22 -m state --state NEW -j ACCEPT -o eth0 /sbin/iptables -A OUTPUT -p tcp --dport 25 -m state --state NEW -j ACCEPT -o eth0 /sbin/iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT -o eth0 /sbin/iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT -o eth0 /sbin/iptables -A OUTPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT -o eth0 /sbin/iptables -A OUTPUT -p udp --dport 53 -o eth0 -j ACCEPT /sbin/iptables -A OUTPUT -p udp --sport 123 -o eth0 -j ACCEPT # ----------------------- # Forwarding Chain # ----------------------- /sbin/iptables -A FORWARD -j ACCEPT # ----------------------- # NAPT # ----------------------- /sbin/iptables -t nat -A PREROUTING -s 172.16.2.0/24 -p tcp -m tcp --dport 80 -j DNAT --to-destination IPaddress:8080 /sbin/iptables -t nat -A POSTROUTING -s 172.16.2.0/24 -j MASQUERADE service iptables save service iptables restart
この fw.sh をセーブし、root で
# sh ./fw.sh
として実行することで、iptables の内容が有効になります。
なお、既存の iptables 設定は全てクリアされますのでご注意ください。
前のページ 次のページ
関連するコンテンツ
- PPTP を Cent OS 5.x にインストールする ~N-06C の VPN 事情
- N-06C の VPN 事情
- VPN 接続時には広告を表示させない ~N-06C の VPN 事情
- iOS で L2TP over IPsec ソリューション
- Squid と匿名プロキシと
記事拝見させて頂きました。
現在、VPN経由の透過Proxyが実現できず悩んでいる為、アドバイスいただけると助かります。
L2TP/IPSecをSoftEtherで実現していますが、
透過Proxyが実現できず、LTEから直接Accessになってしまいます。
構成的には
AndroidWANRouter(PCWM)
となっており、WMware上のCentOsでProxyを構成しています。
WMは、あまり構成的には問題ないと思っていますが…
これをAndroidから透過したいのですが、
新米インフラなので知識が不足しております。
アドバイスいただけると助かります。
VPNは接続出来ているので、VPNが使用するポートのRouter設定は大丈夫だと思います。
iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j REDIRECT –to-port 8080
iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 443 -j REDIRECT –to-port 8080
で80と443は、ProxyにREDIRECTしているので問題ないかとおもうのですが、なぜ、Proxy経由にならず、LETで調節接続になるのでしょうか?